В чем разница между свойствами 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, будут на русском языке (если доступны переводы).
Отличия:
CurrentCulture
для форматирования дат и валюты, покаCurrentUICulture
идет с языком / переводы. Будет использоватьсяResourceManager
искать ресурсы по культуре.- Пространство имен
CurrentCulture
класс вSystem.Globalization
в то время какCurrentUICulture
происходит отSystem.Threading
, CurrentCulture
сохраняется в разных запросах в сеансе, покаCurrentUICulture
должен быть установлен с каждым запросом.
Сходство:
Они оба System.Globalization.CultureInfo
экземпляров.
Стоит отметить, что CurrentUICulture
поддерживает локали, не относящиеся к конкретной стране, такие как 'en' (нейтральные культуры), тогда как CurrentCulture
ТОЛЬКО поддерживает локали, специфичные для страны, такие как en-GB. настройка CurrentCulture
к нейтральной культуре бросит ArgumentException
,
Я предполагаю, что это потому, что форматы, такие как даты и валюта, более тесно связаны с самой страной, но отображаемый язык часто взаимозаменяемы между странами.