В чем разница между свойствами CurrentCulture и CurrentUICulture для CultureInfo в .NET?
-
11-07-2019 - |
Вопрос
В .NET есть CultureInfo
класс в System.Globalization
пространство имен.Он имеет два похожих свойства, оба возвращающие значения CultureInfo
тип: CurrentCulture
и CurrentUICulture
.
В чем разница между ними?
Какой из них мне следует использовать, когда и почему?
Решение
CurrentCulture
- это .NET-представление стандартного языкового стандарта пользователя системы. Это управляет форматом числа и даты по умолчанию и т. Д.
CurrentUICulture
относится к языку пользовательского интерфейса по умолчанию - настройке, появившейся в Windows 2000. В первую очередь это касается части локализации / перевода пользовательского интерфейса вашего приложения.
Какими бы региональными параметрами не были настроены системы, они будут " Текущие " значения в вашем .NET-приложении.
Часто они оба одинаковы. Но в моей системе они были бы другими: я предпочитаю свои цифры и даты в немецком формате, поэтому CurrentCulture
будет немецким, но я также предпочитаю все свои приложения на английском языке, поэтому CurrentUICulture
будет английский.
На эту тему есть хорошая статья: Сортировка: почему мы есть как CurrentCulture, так и CurrentUICulture
Другие советы
Это простой трюк, который я использую, чтобы запомнить какой использовать:
(date, currency, double).tostring = CurrentCulture
resource.fr-CA.resx file = currentUICulture
Отличия:
CurrentCulture
предназначен для форматирования дат и валюты, в то время какCurrentUICulture
идет с языком/переводом.Он будет использоватьсяResourceManager
для поиска ресурсов по культуре.- Пространство имен
CurrentCulture
класс вSystem.Globalization
покаCurrentUICulture
происходит отSystem.Threading
. CurrentCulture
сохраняется для разных запросов в сеансе, в то время какCurrentUICulture
необходимо устанавливать при каждом запросе.
Сходство:
Они оба System.Globalization.CultureInfo
экземпляры.
Хороший способ изменить ситуацию в дополнение к приятным объяснениям, сделанным другими пользователями, и важным аспектом разработки веб-приложений является следующее:
CurrentCulture
представляет собой настройку веб-сервера.Например, если ваше веб-приложение ASP.NET размещено в Германии, значениеCutlureInfo.CurrentCulture
скорее всего, было быde-DE
.Таким образом, по умолчанию.ToString()
форматирование дляIFormattable
типы будут использовать немецкие форматы по умолчанию или те, которые были настроены в ОС сервера как значения по умолчанию.CurrentUICulture
может быть получен из пользовательского агента и может представлять культуру пользовательского интерфейса клиента, подключающегося к веб-сайту.Например, если вы загружаете этот веб-сайт из России, ваши локальные настройки настроены на использование русского языка, и ваш пользовательский агент отправляет ваши настройки языка на сервер (Opera и IE делают это автоматически, не уверен для Chrome и FireFox),CurrenUICulture
будет представлятьru-RU
.Это приведет к тому, что любые ресурсы, такие как локализованные строки, полученные через ResourceManager, или выражения локализации в файлах aspx/ascx ASP.NET, будут на русском языке (если доступны переводы).
Стоит отметить, что CurrentUICulture
поддерживает локали, не зависящие от страны, такие как en (нейтральные культуры), тогда как CurrentCulture
поддерживает ТОЛЬКО специфичные для страны локали, такие как en -GB. Установка для CurrentCulture
нейтральной культуры вызовет исключение ArgumentException
.
Я предполагаю, что это потому, что форматы, такие как даты и валюта, более тесно связаны с самой страной, но отображаемый язык часто взаимозаменяемы между странами.