Что может привести к тому, что CurrentCulture и CurrentUICulture по умолчанию будут использовать значение, отличное от очевидной системной культуры?

У меня есть приложение на основе WinForms, использующее платформу .NET 3.5. Приложение имеет локализованные версии некоторых ресурсов.

Когда я запускаю приложение на машине с копией Windows XP, которая изначально была установлена ​​с en-US в качестве языка и региональных параметров по умолчанию, но впоследствии была установлена ​​культура по умолчанию en-CA, и CurrentCulture, и CurrentUICulture по умолчанию используют en-US. .

Почему это может происходить? Что мне нужно изменить, чтобы приложение начало использовать текущую культуру ОС по умолчанию?


person Richard J Foster    schedule 10.02.2012    source источник
comment
Каковы настройки по умолчанию для вошедшего в систему пользователя?   -  person Oded    schedule 10.02.2012
comment
Настройки по умолчанию для вошедшего в систему пользователя (как установлено в Панели управления/Язык и региональные стандарты/Региональные параметры, Панель управления/Язык и региональные стандарты/Языки/Подробности/Язык ввода по умолчанию и Панель управления/Язык и региональные стандарты/Дополнительно/Язык для программ, не поддерживающих Unicode), все настроены на канадский английский.   -  person Richard J Foster    schedule 10.02.2012
comment
Пожалуйста, покажите нам код, который вы используете для чтения этих свойств.   -  person Serge Wautier    schedule 11.02.2012
comment
Я не знал, что мне нужно прочитать эти свойства. Согласно документации Microsoft по адресу msdn.microsoft.com/en. -us/library/441487wx(v=vs.85).aspx Если свойство CurrentUICulture не задано явно в коде приложения, оно устанавливается по умолчанию при запуске приложения.   -  person Richard J Foster    schedule 13.02.2012


Ответы (1)


Пользователь никогда не указывает свой любимый язык как таковой в настройках Windows: он устанавливает свою культуру в панели управления, например, английский (Канада), также известный как en-CA. Этот выбор отражается Thread.Culture свойство. Он используется Windows для определения того, как отображать и форматировать такие вещи, как даты (включая формат и названия дней и месяцев), валюты,...

Другой параметр — это язык, на котором была установлена ​​Windows (графический интерфейс) (скорее всего, английский (США) в вашем случае). Это отражено в Thread.CurrentUICulture. Конечно, для этого варианта гораздо меньше доступных вариантов, поскольку он отражает язык графического интерфейса (меню, кнопки, справка и т. д.). например нет такой вещи, как en-CA CurrentUICulture.

Примечание. В Vista+ и XP-MUI вы можете впоследствии установить дополнительные языки графического интерфейса и установить язык, который будет использоваться для каждой учетной записи пользователя. Это отражено в CurrentUICulture.

Распространенным заблуждением является мнение, что культура должна использоваться для определения любимого языка пользователя. Лучше полагаться на CurrentUICulture. В моем случае Windows на английском языке, и мой пользовательский параметр (культура) — fr-BE (французский — Бельгия). Никогда не думайте отображать свой пользовательский интерфейс на французском языке: я установил Windows на английском языке с определенной целью: я бы предпочел иметь родной пользовательский интерфейс на английском языке, а не переведенный на французский. Причины моего выбора спорны, но это не имеет значения. Только мое решение имеет значение.

Тем не менее, я прочитал 02.05.2012 как 5 февраля 2012 года, а не 2 мая. Вот почему fr-BE — это моя локаль/культура.

FWIW, язык для программ, не поддерживающих Unicode, указывает, какая кодовая страница по умолчанию (CP_ACP на языке Win32 NLS) должна использоваться программами, не поддерживающими Unicode. Это не повлияет на ваше приложение, так как приложения .NET используют Unicode.

Язык ввода по умолчанию определяет раскладку клавиатуры по умолчанию. Это также не настройка «Культура».

Параметр, влияющий на свойство Culture, следующий:

Региональные настройки XP

person Serge Wautier    schedule 11.02.2012
comment
Хорошо, тогда я где-то полностью что-то пропустил. В версии XP, установленной на моей виртуальной машине, я могу изменить язык (в Панели управления/Региональные и языковые настройки/...) на множество различных языковых параметров, среди которых английский (Канада) один. У меня сложилось (по-видимому, ошибочное) впечатление, что это также меняет предпочтительный язык пользователя. Ваш ответ говорит о том, что это не так. Что мне следует делать вместо этого, чтобы получить предпочитаемый язык клиента? - person Richard J Foster; 13.02.2012
comment
Я переписал свой ответ соответственно. - person Serge Wautier; 13.02.2012
comment
Отлично. Спасибо за разъяснение. (В качестве побочного продукта это предполагает, что вещи были закодированы правильно ... то, как мы пытаемся их протестировать, скажем так, сомнительно.) - person Richard J Foster; 14.02.2012