Что может привести к тому, что CurrentCulture и CurrentUICulture по умолчанию будут иметь значение, отличное от видимой системной культуры? - PullRequest
2 голосов
/ 10 февраля 2012

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

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

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

1 Ответ

3 голосов
/ 11 февраля 2012

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

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

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

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

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

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

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

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

XP Regional Settings

...