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

StackOverflow https://stackoverflow.com/questions/329033

  •  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

Отличия:

  1. CurrentCulture предназначен для форматирования дат и валюты, в то время как CurrentUICulture идет с языком/переводом.Он будет использоваться ResourceManager для поиска ресурсов по культуре.
  2. Пространство имен CurrentCulture класс в System.Globalization пока CurrentUICulture происходит от System.Threading.
  3. 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 .

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top