Was ist der Unterschied zwischen den Eigenschaften CurrentCulture und CurrentUICulture von CultureInfo in .NET?

358

In .NET befindet sich die CultureInfoKlasse im System.GlobalizationNamespace. Es hat zwei ähnliche Eigenschaften, die beide Werte vom CultureInfoTyp zurückgeben: CurrentCultureund CurrentUICulture.

Was ist der Unterschied zwischen ihnen?

Welches sollte ich wann und warum verwenden?

splattne
quelle
28
Denken Sie daran, dass Microsoft nach ihrer Weisheit die UI-Kulturen von US-Englisch und (britischem) Englisch oder anderen Engländern nicht voneinander trennt. Es gibt keine MUI für Englisch, was bedeutet, dass die MUI CurrentUICultureauf einem englischsprachigen Computer immer en-US ist, unabhängig davon CurrentCulture, welche zur Lokalisierung der regionalen Einstellungen eingestellt werden kann.
nicodemus13
11
Ja. Ich bin in Großbritannien und finde CurrentCulture"en-GB", aber CurrentUICulture"en-US".
Colonel Panic
Ich habe

Antworten:

346

CurrentCultureist die .NET-Darstellung des Standardbenutzergebietsschemas des Systems. Dies steuert die Standardformatierung von Nummer und Datum und dergleichen.

CurrentUICulture bezieht sich auf die Standardsprache der Benutzeroberfläche, eine Einstellung, die in Windows 2000 eingeführt wurde. Dies betrifft hauptsächlich den Teil zur Lokalisierung / Übersetzung der Benutzeroberfläche Ihrer App.

Unabhängig davon, für welche regionalen Optionen das System konfiguriert ist, werden die "aktuellen" Werte in Ihrer .NET-App angezeigt.

Oft sind beide gleich. Aber auf meinem System wären sie anders: Ich bevorzuge meine Zahlen und Daten im deutschen Format, also CurrentCulturewäre das Deutsch, aber ich bevorzuge auch alle meine Bewerbungen auf Englisch, also CurrentUICulturewäre das Englisch.

Es gibt einen schönen Artikel zum Thema: Alles sortieren: Warum wir sowohl CurrentCulture als auch CurrentUICulture haben

Tomalak
quelle
5
Eigentlich könnte dies eine gute Alternative für eine ausführliche Erklärung sein: forums.asp.net/post/1080435.aspx
Michael12345
@ Michael12345 Danke für den Hinweis. Ich habe den Link aktualisiert. Der Beitrag, auf den Sie verlinken, ist ebenfalls anständig, vielleicht sogar noch besser.
Tomalak
5
Das sind also schreckliche Namen, da CurrentUICulture wirklich CurrentLanguageCulture bedeutet und CurrentCulture wirklich CurrentDataCulture bedeutet.
Pxtl
2
@Pxtl: Ich würde mich für CurrentFormattingCulture anstatt für CurrentDataCulture entscheiden . Beachten Sie jedoch, dass diese möglicherweise nicht so offensichtlich unzusammenhängend sind, wie es selbst Ihre Namen vermuten lassen. Zum Beispiel würde ich argumentieren, dass das Long Date Format ( D) ziemlich viel "Sprache" enthalten kann: Gibt en-US"Freitag, 6. April 2018" zurück, während ru-RU"6 April 2018" zurückgegeben wird.
ODER Mapper
107

Dies ist ein einfacher Trick, mit dem ich mich daran erinnere, welchen ich verwenden soll:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture
Foxontherock
quelle
Wenn man den Kommentaren von nicodemus13 und Colonel Panic vertrauen will, sollte der zweite Teil Ihres Tricks anscheinend nicht funktionieren.
ODER Mapper
15

Ein guter Weg, um zusätzlich zu den netten Erklärungen der Mitbenutzer einen Unterschied zu machen, und ein wichtiger Aspekt bei der Entwicklung von Webanwendungen ist der folgende:

  • CurrentCulturerepräsentiert das Setup des Webservers. Wenn Ihre ASP.NET-Webanwendung beispielsweise in Deutschland gehostet wird, ist der Wert von CutlureInfo.CurrentCulturehöchstwahrscheinlich de-DE. Daher würde die Standardformatierung .ToString()für IFormattableTypen die deutschen Standardformatierungen verwenden oder diejenigen, die auf dem Server-Betriebssystem als Standard eingerichtet wurden.

  • CurrentUICulturekann vom Benutzeragenten erfasst werden und kann die Benutzeroberflächenkultur des Clients darstellen, der eine Verbindung zur Website herstellt. Zum Beispiel, wenn Sie diese Website aus Russland laden, den lokalen Einstellungen festgelegt sind russische Sprache zu verwenden, und Ihr User - Agent sendet Ihre locale - Einstellungen an den Server (Opera und IE tun dies, automatisch nicht sicher für Chrome und Firefox), das CurrenUICulturewürde darstellen ru-RU. Dies führt dazu, dass Ressourcen wie lokalisierte Zeichenfolgen, die über ResourceManager abgerufen werden, oder Lokalisierungsausdrücke in ASP.NET-Aspx / ASCX-Dateien auf Russisch sind (sofern Übersetzungen verfügbar sind).

Ivaylo Slavov
quelle
13

Unterschiede:

  1. CurrentCulturedient zur Formatierung von Datumsangaben und Währungen im Zusammenhang CurrentUICulturemit Sprache / Übersetzungen. Es wird verwendet ResourceManager, um Ressourcen nach Kultur zu suchen.
  2. Der Namespace der CurrentCultureKlasse ist in System.Globalizationwhile CurrentUICulturekommt von System.Threading.
  3. CurrentCulturewird über verschiedene Anforderungen in der Sitzung hinweg CurrentUICulturebeibehalten und muss bei jeder Anforderung festgelegt werden.

Ähnlichkeit:

Sie sind beide System.Globalization.CultureInfoInstanzen.

Matas Vaitkevicius
quelle
8

Es ist erwähnenswert, dass das CurrentUICulturenicht länderspezifische Gebietsschemas wie 'en' (neutrale Kulturen) CurrentCultureunterstützt, während NUR länderspezifische Gebietsschemas wie 'en-GB' unterstützt werden. Die Einstellung CurrentCulturezu einer neutralen Kultur wird eine ArgumentException.

Ich gehe davon aus, dass dies daran liegt, dass Formate wie Datum und Währung stärker mit dem Land selbst verknüpft sind, die angezeigte Sprache jedoch häufig zwischen den Ländern austauschbar ist.

Sebris87
quelle