Tipps und Tricks rund um .NET und Visual Studio

Sprach- und Ländereinstellungen für ASP.NET MVC festlegen
Kommentare

Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer teilen in der Kolumne „.NETversum“ ihr Expertenwissen rund um .NET-Tools und WPF mit.

Für die Formatierung von Werten zieht ASP.NET zwei Eigenschaften heran: UICulture und Culture. Erstere wird innerhalb von Views verwendet; letztere von Methoden, wie DateTime.ToString oder DateTime.Parse. In der Regel werden diese beiden Eigenschaften auf denselben Wert gesetzt. Bei diesem kann es sich entweder um ein Sprachkürzel (z. B. de für Deutsch oder en für Englisch) oder um die Kombination aus einem Sprachkürzel und einem Länderkürzel (z. B. de-AT für österreichisches Deutsch, de-DE für Bundesdeutsch, en-UK für britisches Englisch oder en-US für jenes Englisch, das in den USA gesprochen wird) handeln. Auch die Validierung von Eingaben wird von diesen Werten beeinflusst. So werden Datumswerte bei Verwendung der Culture en-US im Format Monat/Tag/Jahr erwartet, während sie bei Verwendung von en-UK im Format Tag/Monat/Jahr vorzuliegen haben.

Der Model-Binder ist beim Parsen von Datumswerten sehr tolerant. Liegt das Datum zum Beispiel nicht im Format, das beim Einsatz der aktuellen Culture erwartet wird, vor, versucht er trotzdem – soweit es geht – einen gültigen Datumswert daraus abzuleiten. So wird zum Beispiel das ISO-Format Jahr-Monat-Tag in der Regel ebenso unterstützt, wie Datumswerte, die sich zwar an der aktuellen Culture orientieren, jedoch die falschen Trennzeichen verwenden (z. B. Monat.Tag.Jahr anstatt Monat/Tag/Jahr bei en-US).

Die standardmäßig heranzuziehenden Werte für UICulture und Culture können in der web.config unter system.web/globalization gesetzt werden:


  
  [...]

Legt der Entwickler hier jeweils den Wert auto fest, verwendet ASP.NET jenen Wert, den der jeweils aufrufende Browser über den HTTP-Kopfzeileneintrag Accept-Language als bevorzugte Sprache bzw. Sprache/Länder-Kombination an den Webserver übersendet.

Programmatisch können diese Werte über die Eigenschaften Thread.CurrentThread.CurrentCulture bzw. Thread.CurrentThread.UICurrentCulture, welche den Typ System.Globalization.CultureInfo aufweisen, gesetzt werden. Dabei ist jedoch zu beachten, dass die auf diesem Weg vorgenommenen Einstellungen nicht über Seitenaufrufe hinweg gespeichert werden und somit am Beginn jedes einzelnen Seitensaufrufs erneut zu setzen sind. Hierfür bietet es sich an, innerhalb der global.asax eine Methode Application_AcquireRequestState einzurichten. Sofern diese existiert, ruft sie ASP.NET bei jeder Anfrage auf. Listing 1 demonstriert dies.

Listing 1

protected void Application_AcquireRequestState(object sender, EventArgs args)
{
  
  var culture = new CultureInfo("de-DE");
  Thread.CurrentThread.CurrentCulture = culture;
  Thread.CurrentThread.CurrentUICulture = culture;

}

Wenn ASP.NET die Methode Application_AcquireRequestState aufruft, steht übrigens bereits der Session-State zur Verfügung. Somit können im Zuge des Logins für den aktuellen Benutzer die bevorzugten Einstellungen als Sessionvariable hinterlegt werden.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -