2012-06-26 6 views
10

Dieser Code ist nicht lokalisiert:lokalisierten Strings für DayOfWeek Erste Werte

Enum.GetNames(typeof(DayOfWeek)) 

ich eine Methode wollen, die eine Liste von lokalisierten Strings zurückgibt, auf einem beliebigen DayOfWeek beginnen, dass lokalisiert ist, und ich möchte verwenden, die eingebauten Ressourcen dazu. Bis jetzt habe ich den folgenden Code entwickelt, aber ich denke, dass dies auf eine Weise unterstützt werden sollte, die sich nicht wie ein Hack anfühlt.

Wissen von einer besseren Art, dies zu tun, bitte teilen. Vielen Dank!

Antwort

26

Ich denke, Sie suchen nach DateTimeFormatInfo.DayNames. Beispielcode:

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! Danke Jon. – JoeB

2

Diese Methoden werden Ihnen eine Liste von Tagesnamen, säumige auf den ersten Tag des angegebenen Kultur der Woche:

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(); 
} 

Vergleichen ...

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

... zu ...

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

I ' Ich werfe das ein. Der ursprüngliche Beitrag scheint die Tagnamen in der aktuellen Sprache zu haben. Diese kommen aus der Kultur Satz in:

System.Threading.Threads.CurrentThread.CurrentCulture

Die Datetime Objekt für diese Kultur ist einfach abrufen, und Sie können verwenden GetDayName:

DateTimeFormatInfo.CurrentInfo.GetDayName(dayOfWeek) 

Wenn Sie jedoch das CurrentUICulture/CurrentCulture-Paradigma verwenden, ist CurrentUICulture besser geeignet, um nur den Tagnamen zu erhalten. Es ist durchaus möglich, dass die CurrentCulture für jemanden eingestellt ist, der in den Vereinigten Staaten lebt, aber CurrentUICulture ist auf es-MX oder es-US eingestellt, wenn jemand Spanisch spricht/liest. Das Datumsformat sollte die Kultureinstellung verwenden: mm/tt/aber für Tag-Namen sollten sie die UICulture Einstellungen verwenden: Lunes, Martes usw.

Aus diesem Grunde schlage ich vor, mit dieser Technik:

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