2012-06-26 22 views
10

此代碼沒有本地化:獲取本地化字符串值星期幾

Enum.GetNames(typeof(DayOfWeek)) 

我想返回本地化字符串列表,從上的任意一個星期幾的方法,也就是局部的,我想用內置資源這樣做。到目前爲止,我已經提出了下面的代碼,但是我覺得應該以一種不覺得像黑客的方式來支持它。

public List<String> GetLocalizedDayOfWeekValues(DayOfWeek startDay = DayOfWeek.Sunday) 
    { 
     var days = new List<String>(); 
     DateTime date = DateTime.Today; 

     while (date.DayOfWeek != startDay) 
      date.AddDays(1); 

     for (int i = 0; i < 7; i++) 
      days.Add(date.ToString("dddd")); 

     return days; 
    } 

知道一個更好的方式做到這一點,請分享。謝謝!

回答

26

我認爲你正在尋找DateTimeFormatInfo.DayNames。示例代碼:

using System; 
using System.Globalization; 

class Program 
{ 
    public static void Main() 
    { 
     var french = new CultureInfo("FR-fr"); 
     var info = french.DateTimeFormat; 
     foreach (var dayName in info.DayNames) 
     { 
      // dimanche, lundi etc 
      Console.WriteLine(dayName); 
     } 
    }  
} 
+1

Skeet Skeet!謝謝喬恩。 – JoeB

2

這些方法會給你一天名稱的列表,默認爲指定區域性的一週的第一天:

public List<String> GetLocalizedDayOfWeekValues(CultureInfo culture) 
{ 
    return GetLocalizedDayOfWeekValues(culture, culture.DateTimeFormat.FirstDayOfWeek); 
} 

public List<String> GetLocalizedDayOfWeekValues(CultureInfo culture, DayOfWeek startDay) 
{ 
    string[] dayNames = culture.DateTimeFormat.DayNames; 
    IEnumerable<string> query = dayNames 
     .Skip((int) startDay) 
     .Concat(
      dayNames.Take((int) startDay) 
     ); 

    return query.ToList(); 
} 

...比較

List<string> dayNames = GetLocalizedDayOfWeekValues(new CultureInfo("fr-fr")); 

... to ...

List<string> dayNames = GetLocalizedDayOfWeekValues(new CultureInfo("fr-ca")); 
0

I'我會把它扔進去。原來的文章似乎希望使用當前語言的日期名稱。這可能來自於文化集:

System.Threading.Threads.CurrentThread.CurrentCulture

的DateTimeFormatInfo對象爲這種文化很容易地檢索,並且可以使用GetDayName:

DateTimeFormatInfo.CurrentInfo.GetDayName(dayOfWeek) 

但是,如果您使用CurrentUICulture/CurrentCulture範例,僅獲取當日名稱,則CurrentUICulture更合適。對於居住在美國的人來說,CurrentCulture完全有可能被設置爲en-US,但CurrentUICulture被設置爲es-MX或es-US,以供某人說/讀西班牙語。該日期格式應使用文化背景:MM/DD/YYYY但對於一天的名稱應該使用的UICulture設置:Lunes,貂等

出於這個原因,我建議使用這種技術:

public String getLocalDayName(DayOfWeek dayOfweek) { 
    var culture = System.Threading.Thread.CurrentThread.CurrentUICulture; 
    var format = culture.DateTimeFormat; 
    return format.GetDayName(dayOfweek); 
}