TOC

This article is currently in the process of being translated into German (~99% done).

Arbeiten mit Kultur & Regionen:

Application Culture & UICulture

Wie wir im vorhergehenden Artikel besprochen haben, ist der Umgang mit Kultur sehr wichtig, vor allem bei der Arbeit mit Daten und Zahlen. Aus diesem Grund hat Ihre Anwendung immer eine Instanz der CultureInfo-Klasse, die als "CurrentCulture" definiert ist - eine Fallback-Instanz für alle Situationen, in denen nicht spezifisch angegeben wird, welche Kultur z.B. für die Ausgabe einer Nummer verwendet werden soll. Wenn diese Eigenschaft, die in der CultureInfo-Klasse vorhanden ist, nicht geändert wird, entspricht sie der von Ihrem Betriebssystem verwendeten Kultur. Hier ist ein einfacher Weg, es zu überprüfen:

Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);

In diesem Artikel werden wir die CultureInfo-Klasse die ganze Zeit verwenden, also vergessen Sie nicht, sie in die using-Anweisung aufzunehmen, wie im oberen Teil des Beispiels gezeigt.

Das Beispiel gibt die von Ihrer Anwendung verwendete Kultur aus, z.B. "en-US" für einen Computer mit englischer Sprache in den USA. Wenn Sie in Deutschland leben und Ihr Computer die deutsche Sprache verwendet, ist das Ergebnis "de-DE". Mit anderen Worten, die beiden ersten Buchstaben geben die Sprache an, während die letzten beiden Buchstaben das Land oder die Region angeben.

Es kann jedoch sehr wohl sein, dass Sie mehr Kontrolle darüber wünschen, welche Kultur von Ihrer Anwendung verwendet wird. Zum Beispiel, wenn Ihre Anwendung die englische Sprache überall verwendet, macht es Sinn, Zahlen in einem deutschen oder schwedischen Format auszugeben, nur weil der Computer Ihres Benutzers es spezifiziert? Möglicherweise schon, aber wenn nicht, können Sie sehr einfach eine neue Standard-/Fallback-Kultur angeben, indem Sie die CurrentCulture-Eigenschaft erneut verwenden:

CultureInfo.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);

float largeNumber = 12345.67f;
Console.WriteLine("Number format (Current culture): " + largeNumber.ToString());

CultureInfo germanCulture = new CultureInfo("de-DE");
Console.WriteLine("Number format (German): " + largeNumber.ToString(germanCulture));

Wir setzen die CurrentCulture-Eigenschaft grundsätzlich außer Kraft, indem wir sie auf eine en-US-Culture setzen. Dann geben wir es zusammen mit einer großen Fließkommazahl aus. Sie werden sehen, dass das Ergebnis eine Zahl ist, die so formatiert ist, wie sie in Englisch ist. In den letzten Zeilen zeigen wir Ihnen, wie Sie natürlich die Fallback-Kultur überschreiben können, indem Sie eine andere CultureInfo-Instanz an die ToString()-Methode übergeben - in diesem Fall wird die Nummer auch in einem deutschen Format ausgegeben. Die resultierende Ausgabe dieses Beispiels sollte etwa so aussehen:

Current culture: en-US
Number format (Current culture): 12345.67
Number format (German): 12345,67

CurrentCulture gegenüber CurrentUICulture

Sie werden feststellen, dass die CultureInfo auch eine Eigenschaft namens CurrentUICulture hat. Diese Eigenschaft ist nur relevant, wenn Sie Ressourcendateien zur Lokalisierung einer Benutzeroberfläche verwenden - in diesem Fall weiß Ihre Anwendung anhand der CurrentUICulture-Eigenschaft, welche Versionen der Ressourcendateien geladen werden sollen. Für alle anderen Zwecke, einschließlich der Formatierung von Zahlen, Daten usw., sollten Sie die CurrentCulture-Eigenschaft verwenden.

CurrentCulture und Threads

Wir haben noch nicht wirklich über Threads gesprochen, aber sie sind im Grunde ein Konzept, das es Ihrer Anwendung erlaubt, an mehreren Dingen gleichzeitig zu arbeiten. Wenn eine .NET-Anwendung gestartet wird, wird ein einzelner Thread erstellt und nur dieser Thread wird verwendet, es sei denn, Sie erstellen einen neuen Thread mit einer der vielen Multi-Threading-Strategien des Frameworks. Ich erwähne es hier, weil es auch im Hinblick auf die Fallback-Kultur Ihrer Anwendung sehr wichtig ist. Tatsächlich ist CultureInfo.CurrentCulture eine Verknüpfung zur Eigenschaft Thread.CurrentThread.CurrentCulture, was bedeutet, dass die Definition der CurrentCulture nur für den aktuellen Thread gültig ist.

Vor .NET Framework Version 4.5 mussten Sie die Kultur jedes neuen Threads, den Sie erstellt haben, manuell angeben. In .NET 4.5 wurde jedoch die Eigenschaft CultureInfo.DefaultThreadCurrentCulture eingeführt. Wenn Sie diese Option setzen, wird jeder neu erstellte Thread auch diese Kultur verwenden, und sie ist genauso einfach zu verwenden wie die CurrentCulture-Eigenschaft:

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("de-DE");

Aber was ist mit dem bestehenden Thread? Wenn Sie nicht bereits eine andere Kultur für die CurrentCulture-Eigenschaft definiert haben, wird das Setzen der DefaultThreadCurrentCulture-Eigenschaft auch auf die CurrentCulture-Eigenschaft angewendet. Mit anderen Worten, es ist sinnvoll, die DefaultThreadCurrentCulture anstelle von CurrentCulture zu verwenden, wenn Sie planen, mehrere Threads in Ihrer Anwendung zu verwenden - sie kümmert sich um alle Szenarien.

Zusammenfassung

Mit den Eigenschaften CultureInfo.CurrentCulture und/oder CultureInfo.DefaultThreadCurrentCulture können Sie eine Fallback-Kultur für Ihre Anwendung definieren - sie wird immer dann verwendet, wenn eine Zahl oder ein Datum ausgegeben wird, es sei denn, Sie überschreiben dies in jeder Situation ausdrücklich.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!