Откуда CultureInfo.CurrentCulture читает культуру - PullRequest
7 голосов
/ 14 марта 2012

Я хочу знать настройку или местоположение, откуда System.Globalization.CultureInfo.CurrentCulture считывает его значение.

Я использую ноутбук с Windows 7 и изменил региональные настройки и дату и время моей системы на США.

Мой код работает, используя настройки ниже в файле web.config под

<globalization culture="en-US" />

Спасибо

Ответы [ 4 ]

8 голосов
/ 14 марта 2012

MSDN говорит

Культура является свойством выполняющегося потока.Это свойство только для чтения эквивалентно извлечению объекта CultureInfo, возвращаемого свойством Thread.CurrentCulture.Когда поток запускается, его культура первоначально определяется путем вызова функции Windows GetUserDefaultLocaleName .

Другими словами, он основан на потоке, у которого есть контекст ...в контексте ASP.NET это происходит из Locale , используемого в клиентском браузере сначала при использовании Server Variables или системных настроек для всего остального.

ПодВ этом веб-контексте вы можете получить его, используя Server.Variables метод на HTTP_ACCEPT_LANGUAGE, и вы получите что-то вроде:

en-US,en;q=0.8,pt-PT;q=0.6,pt;q=0.4

Ведьма утверждает, что в браузере клиента установлено 3 языка, где первый - en-US.

Все от System.Globalization взято из Определения системы , как показано на рисунке ниже:

enter image description here

приведенный выше код:


    System.Globalization.CultureInfo.CurrentCulture
is @ System.Globalization.CultureInfo.CurrentCulture.EnglishName

Независимо от того, какой браузер используется, определение System.Globalization всегда будет исходить из ОперацииОпределение системы

enter image description here

5 голосов
/ 16 сентября 2013

Потратив 8 часов - найдите решение Благодаря Рональду - Значения CultureInfo различаются для разных приложений.Это ошибка?

Получается, что региональные настройки сохраняются для каждого пользователя в Windows.Это то, что я должен был знать.Обновление пула приложений для запуска от моего имени привело к одинаковому результату в обоих приложениях.

Честно говоря, все еще сбивает с толку то, как Сетевая служба (учетная запись, под которой работал пул приложений) получила неправильное значение,Я даже не уверен, как бы это исправить.

Редактировать:

Если вам нужно обновить региональные настройки для зарезервированных учетных записей.У вас есть два варианта.

Control Panel > Regional Settings > Click the administrative tab and then select "Copy Settings". 

На открывшемся экране убедитесь, что вы отметили «Экран приветствия и системные учетные записи».Старые версии Windows похожи, я верю.Для брекета.Реестр: HKEY_USERS> SID ...> Панель управления> Международный.Идентификатор безопасности для сетевой службы: SID: S-1-5-20.

Убедитесь, что вы перезапустите пул приложений, чтобы настройки вступили в силу.

Я сделал # 1 -- и это помогло мне!

1 голос
/ 02 февраля 2015

В случае ASP.NET от

HKEY_USERS\S-1-5-20\Control Panel\International\

S-1-5-20 - это идентификатор безопасности сетевой службы «пользователь» (http://support.microsoft.com/kb/243330)

Для других типов приложений обратитесь к документации по функции GetUserDefaultLocaleName (https://msdn.microsoft.com/en-us/library/windows/desktop/dd318136%28v=vs.85%29.aspx)

Простой способ изменения локали S-1-5-20 в графическом интерфейсе см. В ответе sitecorebasics

1 голос
/ 14 марта 2012

Используется функция windows GetUserDefaultLocaleName.

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture.aspx

...