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

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

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

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

5 ответов

Решение

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

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

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

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

На эту тему есть хорошая статья: " Разбираться": почему у нас есть как CurrentCulture, так и CurrentUICulture.

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

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

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

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

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

Отличия:

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

Сходство:

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

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

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

Другие вопросы по тегам