В .NET есть CultureInfo
класс в System.Globalization
пространстве имен. У него есть два похожих свойства, оба возвращающие значения CultureInfo
типа: CurrentCulture
и CurrentUICulture
.
В чем разница между ними?
Какой я должен использовать, когда и почему?
.net
globalization
cultureinfo
splattne
источник
источник
CurrentUICulture
всегда будет en-US, независимо от тогоCurrentCulture
, какой параметр можно настроить для локализации региональных настроек.CurrentCulture
«en-GB», ноCurrentUICulture
«en-US».Ответы:
CurrentCulture
является .NET-представлением локали пользователя системы по умолчанию. Это контролирует число по умолчанию, форматирование даты и тому подобное.CurrentUICulture
относится к языку пользовательского интерфейса по умолчанию - настройке, введенной в Windows 2000. Это в первую очередь относится к части локализации / перевода пользовательского интерфейса вашего приложения.Независимо от региональных параметров, в которых настроена система, это будут «текущие» значения в вашем .NET-приложении.
Часто они оба одинаковы. Но в моей системе они были бы другими: я предпочитаю свои цифры и даты в немецком формате, поэтому
CurrentCulture
будет немецкий, но я также предпочитаю все свои заявки на английском языке, поэтомуCurrentUICulture
будет английский.Есть хорошая статья на эту тему: Сортировка всего: почему у нас есть как CurrentCulture, так и CurrentUICulture.
источник
D
) может содержать довольно много «языка»:en-US
возвращает «пятница, 6 апреля 2018 года», аru-RU
«6 апреля 2018 г.».Это простой трюк, который я использую, чтобы запомнить, какой использовать:
источник
Хороший способ внести изменения в дополнение к приятным объяснениям, сделанным другими пользователями, и важный аспект в разработке веб-приложений заключается в следующем:
CurrentCulture
представляет настройку веб-сервера. Например, если ваше веб-приложение ASP.NET размещено в Германии, значениеCutlureInfo.CurrentCulture
, скорее всего, будетde-DE
. Таким образом, стандартное.ToString()
форматирование дляIFormattable
типов будет использовать немецкое форматирование по умолчанию или те, которые были установлены в ОС сервера по умолчанию.CurrentUICulture
может быть получен от пользовательского агента и может представлять культуру пользовательского интерфейса клиента, подключающегося к веб-сайту. Например, если вы загрузите этот сайт из России, ваши локальные настройки настроены на использование русского языка, и ваш пользовательский агент отправляет региональные настройки на сервере (Opera и IE сделать это автоматически, не уверен , что для Chrome и FireFox), тоCurrenUICulture
будет представлятьru-RU
. Это приведет к тому, что любые ресурсы, такие как локализованные строки, полученные с помощью ResourceManager, или выражения локализации в ASP.NET-файлах aspx / ascx будут на русском языке (если доступны переводы).источник
Отличия:
CurrentCulture
для форматирования дат и валюты, в то время какCurrentUICulture
идет с языком / переводами. Он будет использоватьсяResourceManager
для поиска ресурсов по культуре.CurrentCulture
класса находится вSystem.Globalization
то время какCurrentUICulture
приходитSystem.Threading
.CurrentCulture
сохраняется в разных запросах в сеансе, ноCurrentUICulture
должен быть установлен для каждого запроса.Сходство:
Они оба являются
System.Globalization.CultureInfo
примерами.источник
Стоит отметить, что он
CurrentUICulture
поддерживает не специфичные для страны локали, такие как en (нейтральные культуры), тогда какCurrentCulture
ТОЛЬКО поддерживает специфичные для страны локали, такие как en-GB. НастройкаCurrentCulture
на нейтральную культуру броситArgumentException
.Я предполагаю, что это потому, что форматы, такие как даты и валюта, более тесно связаны с самой страной, но отображаемый язык часто взаимозаменяемы между странами.
источник