In der letzten Zeit bin ich häufiger über Codestellen gestoßen, die Monatsnamen, Wochentage (oder auch deren Abkürzungen) gar nicht übersetzt haben, oder dies kompliziert über einen eigenen Übersetzungsmechanismus gelöst haben. Dabei geht es doch so viel einfacher.
Den Grundstock bildet dabei die Klasse CultureInfo. Darüber kann die aktuell eingestellte Kultur des aktuellen Threads bezogen werden. Zur Verfügung stehen hier die Eigenschaften CurrentCulture und CurrentUICulture. Beim Start eines neuen Threads wird dabei die Kultur mit Hilfe der Windows API bestimmt. Beide Eigenschaften liefern wiederum ein Objekt vom Typ CultureInfo zurück.
Von Interesse sind nun einige Eigenschaften dieses Objektes. So können beispielsweise über die Eigenschaft DateTimeFormat (Typ DateTimeFormatInfo) Informationen über Datums- und Zeitwerte auf Basis der aktuellen Kultur bezogen werden:
- AbbreviatedDayNames liefert abgekürzte Namen der Tage zurück. In deutscher Sprache also beispielsweise Mo, Di, Mi, etc.
- AbbreviatedMonthNames liefert die abgekürzten Monatsnamen zurück.
- Per DayNames lassen sich die voll ausgeschriebenen Namen der Tage zurück liefern.
- MonthNames kann verwendet werden, um eine Liste der Monatsnamen in der gesetzten Sprache zu erhalten.
Ein Blick in die Eigenschaften und Methoden der Klasse DateTimeFormatInfo zeigt noch viele weitere Möglichkeiten.
Natürlich kann die zu verwendende Kultur auch manuell gesetzt und die benötigten Werte ausgelesen werden. Nachfolgendes Beispiel zeigt, wie es geht. Dabei wird die in der UI verwendeten Kultur auf französisch gestellt:
Thread.CurrentThread.CurrentUICulture =
new CultureInfo("fr-FR");
foreach (String s in
CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames)
Console.WriteLine(s);
Und hier das Resultat:
janvier
février
mars
avril
mai
juin
juillet
août
septembre
octobre
novembre
décembre
Mit diesem einfachen Wissen über die Basisfunktionalität, welche durch das .NET Framework zur Verfügung gestellt wird, lassen sich viele Umwege vermeiden.