В .NET есть класс CultureInfo в пространстве имен System.Globalization. Он имеет два схожих свойства, которые возвращают значения типа CultureInfo: CurrentCulture и CurrentUICulture.
В чем разница между ними?
Какой из них я должен использовать, когда и почему?
да. Я нахожусь в Великобритании и обнаруживаю, что CurrentCulture - это en-GB, а CurrentUICulture - en-US.
Только что нашел эту статью, подробно объясняющую это: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICult ure





CurrentCulture - это .NET-представление пользовательской локали системы по умолчанию. Это контролирует форматирование чисел и даты по умолчанию и тому подобное.
CurrentUICulture относится к языку пользовательского интерфейса по умолчанию, настройке, введенной в Windows 2000. Это в первую очередь касается части локализации / перевода пользовательского интерфейса вашего приложения.
Какие бы региональные параметры ни были настроены в системе, они будут текущими значениями в вашем .NET-приложении.
Часто они оба одинаковы. Но в моей системе они были бы другими: я предпочитаю свои числа и даты в немецком формате, поэтому CurrentCulture будет немецким, но я также предпочитаю все мои приложения на английском, поэтому CurrentUICulture будет английским.
Есть хорошая статья по теме: Разбираемся во всем: почему у нас есть и CurrentCulture, и CurrentUICulture
На самом деле это может быть хорошей альтернативой для более подробного объяснения: форумы.asp.net/post/1080435.aspx
@ Michael12345 Спасибо за подсказку. Я обновил ссылку. Сообщение, на которое вы ссылаетесь, тоже неплохое, может быть, даже лучше.
Это ужасные имена, поскольку CurrentUICulture на самом деле означает CurrentLanguageCulture, а CurrentCulture действительно означает CurrentDataCulture.
@Pxtl: Я бы выбрал Текущее форматированиеКультура, а не CurrentDataCulture. Тем не менее, обратите внимание, что они могут быть не столь явно несвязанными, как предполагают даже ваши имена. Например, я бы сказал, что длинный формат даты (D) может содержать довольно некоторый «язык»: en-US возвращает «Пятница, 6 апреля 2018 г.», тогда как ru-RU возвращает «6 апреля 2018 г.».
Я использую простой прием, чтобы запомнить, какой из них использовать:
(date, currency, double).tostring = CurrentCulture
resource.fr-CA.resx file = currentUICulture
Если доверять комментариям никодем13 и Полковник паник, похоже, вторая часть вашего трюка не сработает.
Отличия:
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, или выражения локализации в файлах ASP.NET aspx / ascx будут на русском языке (если доступны переводы).
Стоит отметить, что CurrentUICulture поддерживает локали, не зависящие от страны, такие как «en» (нейтральные культуры), тогда как CurrentCulture поддерживает ТОЛЬКО локали для конкретной страны, такие как «en-GB». Установка CurrentCulture на нейтральную культуру приведет к выбросу ArgumentException.
Я предполагаю, что это связано с тем, что такие форматы, как даты и валюта, более тесно связаны с самой страной, но отображаемый язык часто является взаимозаменяемым между странами.
Действительно, очень хороший момент. Тем не менее, я бы поспорил, если CurrentUICulture предназначен для использования только в нейтральных культурах. Вы можете успешно назначить определенную культуру с помощью CurrentUICulture, и это будет иметь смысл, если у вас есть различия в локализации для определенных стран, работающих с одним и тем же языком.
Имейте в виду, что Microsoft, по их мнению, не разделяет культуры пользовательского интерфейса американского английского и (британского) английского или других английских языков. Для английского языка нет MUI, что означает, что
CurrentUICultureвсегда будет en-US на англоязычной машине, независимо отCurrentCulture, который можно настроить на локализацию региональных настроек.