В чем разница между свойствами CurrentCulture и CurrentUICulture для CultureInfo в .NET? - PullRequest
338 голосов
/ 30 ноября 2008

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

В чем разница между ними?

Какой я должен использовать, когда и почему?

Ответы [ 5 ]

332 голосов
/ 30 ноября 2008

CurrentCulture - это .NET-представление языка пользователя системы по умолчанию. Это управляет форматом числа и даты по умолчанию и т. Д.

CurrentUICulture относится к языку пользовательского интерфейса по умолчанию - настройке, введенной в Windows 2000. В первую очередь это касается части локализации / перевода пользовательского интерфейса вашего приложения.

Какими бы региональными параметрами не были настроены системы, это будут "Текущие" значения в вашем приложении .NET.

Часто они оба одинаковы. Но в моей системе они были бы другими: я предпочитаю свои цифры и даты в немецком формате, поэтому CurrentCulture будет немецким, но я также предпочитаю все свои приложения на английском языке, поэтому CurrentUICulture будет английским.

Есть хорошая статья на эту тему: Сортировка всего: почему у нас есть и CurrentCulture, и CurrentUICulture

105 голосов
/ 02 сентября 2010

Это простой трюк, который я использую, чтобы запомнить какой использовать:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture
12 голосов
/ 26 ноября 2015

Хороший способ внести изменения в дополнение к приятным объяснениям, сделанным другими пользователями, и важный аспект в разработке веб-приложений заключается в следующем:

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

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

11 голосов
/ 26 ноября 2015

Отличия:

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

Сходство:

Они оба System.Globalization.CultureInfo экземпляров.

7 голосов
/ 12 мая 2016

Стоит отметить, что CurrentUICulture поддерживает локали, не относящиеся к конкретной стране, такие как 'en' (Нейтральные культуры), тогда как CurrentCulture поддерживает ТОЛЬКО специфичные для страны локали, такие как 'en-GB'. Установка CurrentCulture на нейтральную культуру вызовет ArgumentException.

Я предполагаю, что это потому, что форматы, такие как даты и валюта, более тесно связаны с самой страной, но отображаемый язык часто взаимозаменяемы между странами.

...