Jaka jest różnica między właściwościami CurrentCulture i CurrentUICulture CultureInfo w .NET?


358

W .NET jest CultureInfoklasa w System.Globalizationprzestrzeni nazw. Ma dwie podobne właściwości, obie zwracające wartości CultureInfotypu: CurrentCulturei CurrentUICulture.

Jaka jest różnica między nimi?

Którego powinienem użyć, kiedy i dlaczego?


28
Należy pamiętać, że Microsoft, zgodnie z ich mądrością, nie rozdziela kultur interfejsu użytkownika w języku angielskim amerykańskim i (brytyjskim) angielskim lub innym angielskim. Nie ma MUI dla języka angielskiego, co oznacza, że CurrentUICulturezawsze będzie en-US na maszynie w języku angielskim, niezależnie od tego CurrentCulture, które można ustawić, aby zlokalizować Ustawienia regionalne.
nicodemus13

11
Tak. Jestem w Wielkiej Brytanii i znajduję CurrentCulture„en-GB”, ale CurrentUICulture„en-US”.
Pułkownik Panic

Właśnie znalazłem ten artykuł wyjaśniający to szczegółowo: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
RinoTom

Odpowiedzi:


346

CurrentCultureto .NET reprezentacja domyślnych ustawień regionalnych użytkownika w systemie. Kontroluje domyślne formatowanie liczb i dat i tym podobne.

CurrentUICulture odnosi się do domyślnego języka interfejsu użytkownika, ustawienia wprowadzonego w systemie Windows 2000. Dotyczy to przede wszystkim części aplikacji / lokalizacji interfejsu użytkownika.

Bez względu na opcje regionalne, jakie ma skonfigurowany system, będą to „bieżące” wartości w aplikacji .NET.

Często oba są takie same. Ale w moim systemie byłyby inne: wolę moje liczby i daty w formacie niemieckim, więc CurrentCulturebyłby niemiecki, ale wolę też wszystkie moje aplikacje w języku angielskim, więc CurrentUICulturebyłby to angielski.

Jest ładny artykuł na ten temat: Sortowanie wszystkiego Na zewnątrz: Dlaczego mamy zarówno CurrentCulture, jak i CurrentUICulture


5
Właściwie może to być dobra alternatywa dla szczegółowych wyjaśnień: forums.asp.net/post/1080435.aspx
Michael12345,

@ Michael12345 Dzięki za podpowiedź. Zaktualizowałem link. Wpis, do którego prowadzi link, jest również przyzwoity, a może nawet lepszy.
Tomalak,

5
Są to zatem okropne nazwy, ponieważ CurrentUICulture naprawdę oznacza CurrentLanguageCulture, a CurrentCulture naprawdę oznacza CurrentDataCulture.
Pxtl

2
@Pxtl: Wolę CurrentFormattingCulture niż CurrentDataCulture . Pamiętaj jednak, że mogą one nie być tak wyraźnie rozłączne, jak sugerują nawet twoje imiona. Na przykład, argumentowałbym, że format długiej daty ( D) może zawierać całkiem sporo „języka”: en-USzwraca „piątek, 6 kwietnia 2018 r.”, Podczas gdy ru-RUzwraca „6 sierpnia 2018 r.”.
LUB Mapper


15

Dobrym sposobem na zrobienie różnicy oprócz miłych wyjaśnień innych użytkowników i ważnym aspektem w tworzeniu aplikacji internetowych jest:

  • CurrentCulturereprezentuje konfigurację serwera WWW. Na przykład, jeśli twoja aplikacja internetowa ASP.NET jest hostowana w Niemczech, CutlureInfo.CurrentCulturenajprawdopodobniej byłaby to wartość de-DE. Dlatego domyślne .ToString()formatowanie IFormattabletypów używałoby domyślnych formatów niemieckich lub tych, które zostały skonfigurowane w systemie operacyjnym serwera jako domyślne.

  • CurrentUICulturemoże zostać przechwycony z klienta użytkownika i może reprezentować kulturę interfejsu użytkownika klienta łączącego się z witryną. Na przykład, jeśli załadować tę stronę z Rosji, Twoje ustawienia lokalne są skonfigurowane do korzystania z języka rosyjskiego, a aplikacja kliencka wysyła swoje ustawienia regionalne do serwera (Opera i IE to zrobić automatycznie, nie wiem dla Chrome i Firefox), przy czym CurrenUICulturebędzie reprezentować ru-RU. Spowoduje to, że wszelkie zasoby, takie jak zlokalizowane ciągi pobrane za pomocą ResourceManager lub wyrażenia lokalizacji w plikach aspx / ascx ASP.NET będą w języku rosyjskim (jeśli dostępne są tłumaczenia).


13

Różnice:

  1. CurrentCulturesłuży do formatowania dat i walut podczas korzystania CurrentUICulturez języka / tłumaczeń. Zostanie wykorzystany ResourceManagerdo wyszukiwania zasobów według kultury.
  2. Przestrzeń nazw CurrentCultureklasy jest w System.Globalizationchwili, gdy CurrentUICulturepochodzi System.Threading.
  3. CurrentCulturejest utrwalany dla różnych żądań w sesji, ale CurrentUICulturemusi być ustawiony dla każdego żądania.

Podobieństwo:

Oba są System.Globalization.CultureInfoinstancjami.


8

Warto zauważyć, że CurrentUICultureobsługuje lokalizacje inne niż krajowe, takie jak „en” (kultury neutralne), podczas gdy CurrentCultureTYLKO obsługuje lokalizacje specyficzne dla kraju, takie jak „en-GB”. Ustawienie CurrentCultureneutralnej kultury rzuci ArgumentException.

Zakładam, że dzieje się tak, ponieważ formaty takie jak daty i waluty są silniej powiązane z samym krajem, ale wyświetlany język jest często wymienny między krajami.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.