2008-11-30 10 views
304

In .NET gibt es die CultureInfo Klasse im System.Globalization Namensraum. Es hat zwei ähnliche Eigenschaften, die beide die Werte CultureInfo zurückgeben: CurrentCulture und CurrentUICulture.Was ist der Unterschied zwischen CurrentCulture und CurrentUICulture-Eigenschaften von CultureInfo in .NET?

Was ist der Unterschied zwischen ihnen?

Welchen sollte ich wann und warum verwenden?

+25

Bedenken Sie, dass Microsoft in ihrer Weisheit die UI-Kulturen von US-Englisch und (britischem) Englisch oder anderen Englisch nicht trennt. Es gibt kein MUI für Englisch, was bedeutet, dass die 'CurrentUICulture' immer auf einem englischsprachigen Computer in US-amerikanischem Englisch ist, unabhängig von der 'CurrentCulture', die so eingestellt werden kann, dass die Ländereinstellungen lokalisiert werden. – nicodemus13

+9

Ja. Ich bin in Großbritannien und finde "CurrentCulture" ist "en-GB", aber "CurrentUICulture" ist "en-US". –

Antwort

297

CurrentCulture ist die .NET-Darstellung des Standardbenutzergebietsschemas des Systems. Dies steuert die Standardanzahl und Datumsformatierung und dergleichen.

CurrentUICulture bezieht sich auf die Standardsprache der Benutzeroberfläche, eine in Windows 2000 eingeführte Einstellung. Dies bezieht sich hauptsächlich auf den UI-Lokalisierungs-/Übersetzungsteil Ihrer App.

Welche regionalen Optionen das System auch haben soll, sind die "aktuellen" Werte in Ihrer .NET App.

Oft sind sie beide gleich. Aber auf meinem System würden sie anders sein: Ich bevorzuge meine Zahlen und Daten im deutschen Format, so dass die CurrentCulture wäre Deutsch, aber ich bevorzuge auch alle meine Anwendungen in Englisch, so dass die CurrentUICulture wäre Englisch.

Es gibt einen schönen Artikel zum Thema: Sorting it all Out: Why we have both CurrentCulture and CurrentUICulture

+4

Eigentlich könnte dies eine gute Alternative für eingehende Erklärung sein: http://forums.asp.net/post/1080435.aspx – Michael12345

+0

@ Michael12345 Danke für den Hinweis. Ich habe den Link aktualisiert. Der Beitrag, den du verlinkt, ist auch anständig, vielleicht sogar besser. – Tomalak

+2

Das sind schreckliche Namen, denn CurrentUICulture bedeutet CurrentLanguageCulture und CurrentCulture bedeutet CurrentDataCulture. – Pxtl

97

Dies ist ein einfacher Trick, den ich zu verwenden, die man sich erinnern verwenden:

(date, currency, double).tostring = CurrentCulture 

resource.fr-CA.resx file = currentUICulture 
2

Unterschiede:

  1. CurrentCulture ist für die Formatierung von Daten und Währung, während CurrentUICulture mit Sprache/Übersetzungen geht. Es wird von ResourceManager verwendet, um Ressourcen nach Kultur zu suchen.
  2. Namensraum von CurrentCulture Klasse ist in System.Globalization, während CurrentUICulture von System.Threading kommt.
  3. CurrentCulture wird über verschiedene Anforderungen in der Sitzung beibehalten, während CurrentUICulture mit jeder Anforderung festgelegt werden muss.

Figur:

Sie sind beide System.Globalization.CultureInfo Instanzen.

8

Eine gute Möglichkeit, einen Unterschied zusätzlich zu den schönen Erklärungen getan von anderen Anwendern, und ein wichtiger Aspekt in der Entwicklung von Webanwendungen zu machen, ist die folgende:

  • CurrentCulture stellt den Aufbau des Web-Servers. Wenn Ihre ASP.NET-Webanwendung beispielsweise in Deutschland gehostet wird, ist der Wert CutlureInfo.CurrentCulture höchstwahrscheinlich de-DE. Die Standardformatierung .ToString() für IFormattable-Typen würde also die deutschen Standardformatierungen verwenden oder die, die auf dem Server-Betriebssystem als Standardeinstellungen eingerichtet wurden.

  • CurrentUICulture kann aus dem User-Agent erfasst werden, und kann die Benutzerschnittstelle Kultur des Client eine Verbindung zu der Website darzustellen. Wenn Sie beispielsweise diese Website aus Russland laden, werden Ihre lokalen Einstellungen auf Russisch festgelegt, und Ihr Benutzeragent sendet Ihre Ländereinstellungen an den Server (Opera und IE tun dies automatisch, nicht sicher für Chrome und FireFox), CurrenUICulture würde ru-RU darstellen. 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 erscheinen (sofern Übersetzungen verfügbar sind).

3

Es ist erwähnenswert, dass die CurrentUICulture nicht-länderspezifische Orte wie ‚en‘ unterstützt (Neutral Kulturen), während CurrentCulture unterstützt nur länderspezifische Orte wie ‚en-GB‘. Wird CurrentCulture auf eine neutrale Kultur gesetzt, wird ArgumentException geworfen.

Ich nehme an, dass dies daran liegt, dass Formate wie Daten und Währung stärker mit dem Land selbst verknüpft sind, aber die angezeigte Sprache ist oft zwischen den Ländern austauschbar.