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

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

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

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

Имейте в виду, что Microsoft, по их мнению, не разделяет культуры пользовательского интерфейса американского английского и (британского) английского или других английских языков. Для английского языка нет MUI, что означает, что CurrentUICulture всегда будет en-US на англоязычной машине, независимо от CurrentCulture, который можно настроить на локализацию региональных настроек.

nicodemus13 22.02.2012 15:44

да. Я нахожусь в Великобритании и обнаруживаю, что CurrentCulture - это en-GB, а CurrentUICulture - en-US.

Colonel Panic 08.11.2012 18:37

Только что нашел эту статью, подробно объясняющую это: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICult‌ ure

RinoTom 08.04.2019 08:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
371
3
77 444
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

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

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

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

Есть хорошая статья по теме: Разбираемся во всем: почему у нас есть и CurrentCulture, и CurrentUICulture

На самом деле это может быть хорошей альтернативой для более подробного объяснения: форумы.asp.net/post/1080435.aspx

Michael12345 12.12.2013 06:03

@ Michael12345 Спасибо за подсказку. Я обновил ссылку. Сообщение, на которое вы ссылаетесь, тоже неплохое, может быть, даже лучше.

Tomalak 12.12.2013 11:44

Это ужасные имена, поскольку CurrentUICulture на самом деле означает CurrentLanguageCulture, а CurrentCulture действительно означает CurrentDataCulture.

Pxtl 22.06.2016 17:43

@Pxtl: Я бы выбрал Текущее форматированиеКультура, а не CurrentDataCulture. Тем не менее, обратите внимание, что они могут быть не столь явно несвязанными, как предполагают даже ваши имена. Например, я бы сказал, что длинный формат даты (D) может содержать довольно некоторый «язык»: en-US возвращает «Пятница, 6 апреля 2018 г.», тогда как ru-RU возвращает «6 апреля 2018 г.».

O. R. Mapper 06.04.2018 12:46

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

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

Если доверять комментариям никодем13 и Полковник паник, похоже, вторая часть вашего трюка не сработает.

O. R. Mapper 06.04.2018 12:48

Отличия:

  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, или выражения локализации в файлах ASP.NET aspx / ascx будут на русском языке (если доступны переводы).

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

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

Действительно, очень хороший момент. Тем не менее, я бы поспорил, если CurrentUICulture предназначен для использования только в нейтральных культурах. Вы можете успешно назначить определенную культуру с помощью CurrentUICulture, и это будет иметь смысл, если у вас есть различия в локализации для определенных стран, работающих с одним и тем же языком.

Ivaylo Slavov 12.09.2020 11:22

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