В чем разница между CurrentCulture и CurrentUICulture свойствами CultureInfo в .NET?

В .NET существует класс CultureInfo в пространстве имен System.Globalization. Он имеет два одинаковых свойства, возвращающих значения типа CultureInfo: CurrentCulture и CurrentUICulture.

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

Отличия:

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

Сходство:

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