Яка різниця між властивостями CurrentCulture та CurrentUICulture культуриInIn в .NET?


358

У .NET є CultureInfoклас у System.Globalizationпросторі імен. Він має дві схожі властивості, обидва повертають значення CultureInfoтипу: CurrentCultureі CurrentUICulture.

У чому різниця між ними?

Який я повинен використовувати, коли і чому?


28
Майте на увазі, що Microsoft, за своєю мудрістю, не роз'єднує культури інтерфейсу від англійської США та (англійської) англійської чи інших англійських. Немає MUI для англійської мови, що означає, що CurrentUICultureна англомовній машині завжди буде en-US, незалежно від того CurrentCulture, який можна встановити для локалізації регіональних налаштувань.
nicodemus13

11
Так. Я у Великобританії і знаходжу CurrentCulture"en-GB", але CurrentUICultureце "en-US".
Полковник Паніка

Щойно знайшов цю статтю, де це детально пояснюється
RinoTom

Відповіді:


346

CurrentCulture- це .NET-представлення локальної системи користувача за замовчуванням у системі. Це керує форматуванням числа та дати за замовчуванням тощо.

CurrentUICulture стосується мови інтерфейсу користувача за замовчуванням, налаштування, запровадженого в Windows 2000. Це стосується насамперед частини локалізації / перекладу інтерфейсу користувача у вашій програмі.

Незалежно від регіональних параметрів, на які налаштована система, будуть "Поточні" значення у вашому додатку .NET.

Часто вони обоє однакові. Але в моїй системі вони були б різними: я віддаю перевагу своїм номерам і датам у німецькому форматі, тому CurrentCultureнімецький, але я також віддаю перевагу всім моїм додаткам англійською мовою, так що CurrentUICultureце буде англійською.

Є приємна стаття на тему: Сортування все це: чому ми маємо і CurrentCulture, і CurrentUICulture


5
Насправді це може бути хорошою альтернативою для поглибленого пояснення: forums.asp.net/post/1080435.aspx
Michael12345

@ Michael12345 Дякую за підказку. Я оновив посилання. Допис, на який ви посилаєтесь, також пристойний, можливо, навіть кращий.
Томалак

5
Отож, це жахливі назви, оскільки CurrentUICulture насправді означає CurrentLanguageCulture та CurrentCulture справді означає CurrentDataCulture.
Pxtl

2
@Pxtl: Я б обрав більше для CurrentFormattingCulture, а не CurrentDataCulture . Але зауважте, що це може бути не так очевидно, як навіть ваші імена. Наприклад, я б стверджував, що формат довгої дати ( D) може містити певну "мову": en-USповертається "П'ятниця, 6 квітня 2018 року", тоді як ru-RUповертається "6 апреля 2018 р.".
АБО Mapper

107

Це простий трюк, який я використовую, щоб запам'ятати, який з них використовувати:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

Якщо довіряти коментарям nicodemus13 та полковника Паніки , то, здається, друга частина вашого фокусу не повинна працювати.
АБО Mapper

15

Хороший спосіб внести зміни в додаток до приємних пояснень, які отримують інші користувачі, і важливим аспектом у розробці веб-додатків є наступний:

  • CurrentCultureпредставляє налаштування веб-сервера. Наприклад, якщо ваш веб-додаток ASP.NET розміщується в Німеччині, значення CutlureInfo.CurrentCulture, швидше за все, буде de-DE. Таким чином, .ToString()форматування за замовчуванням для IFormattableтипів використовує стандартні німецькі форматування або ті, які були встановлені на ОС сервера як стандартні.

  • CurrentUICultureможе бути захоплено агентом користувача і може представляти культуру інтерфейсу користувача клієнта, який підключається до веб-сайту. Наприклад, якщо ви завантажте цей сайт з Росії, ваші локальні настройки налаштовані на використання російської мови, і ваш користувальницький агент відправляє регіональні настройки на сервері (Opera і IE зробити це автоматично, не впевнений , що для Chrome і FireFox), то CurrenUICultureбуде представляти ru-RU. Це призведе до того, що будь-які ресурси, такі як локалізовані рядки, отримані через ResourceManager або вирази локалізації у файлах ASP.NET aspx / ascx, будуть російською мовою (якщо є переклади).


13

Відмінності:

  1. CurrentCultureпризначений для форматування дат та валюти, поки CurrentUICultureйде мова / переклади. Він використовуватиметься ResourceManagerдля пошуку ресурсів культури.
  2. Простір імен CurrentCultureкласу є, System.Globalizationпоки CurrentUICultureпоходить System.Threading.
  3. CurrentCultureзберігається в різних запитах сеансу, тоді як CurrentUICultureпотрібно встановлювати кожен запит.

Подобання:

Вони обидва є System.Globalization.CultureInfoекземплярами.


8

Варто відзначити, що CurrentUICultureпідтримує локальні специфічні локальні типи, такі як "en" (нейтральні культури), тоді як CurrentCultureТОЛЬКІ підтримують локальні локальні мови, такі як "en-GB". Якщо встановити CurrentCultureнейтральну культуру, то це спричинитьArgumentException .

Я припускаю, що це тому, що формати, такі як дати та валюта, сильніше пов'язані з самою країною, але мова, що відображається, часто взаємозамінна між країнами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.