В чем разница между 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
Отличия:
Сходство:
Оба они являются System.Globalization.CultureInfo
экземплярами.