Как соблюдать / наследовать языковые настройки пользователя в приложении WinForm? - PullRequest
2 голосов
/ 12 мая 2010

Я работал с настройками глобализации в прошлом, но не в среде .NET, которая является темой этого вопроса. То, что я вижу, наверняка связано со знаниями, которые мне еще предстоит выучить, поэтому я был бы признателен за разъяснения следующего:


Настройка: Моя настройка языка по умолчанию - английский (специально для нас). Я добавил второй язык (датский) в свою систему разработки (WinXP), а затем открыл языковую панель, чтобы я мог выбрать любой по желанию.


Я выбрал «Датский» на языковой панели, затем открыл «Блокнот» и обнаружил, что язык переведен на английский на языковой панели. Я понимаю, что языковая настройка для приложения , поэтому казалось, что в Блокноте по умолчанию установлено значение «Английский». (Я обнаружил, что это странно, поскольку Windows и, следовательно, Блокнот используются во всем мире.) Закрытие Блокнота вернул настройку на языковой панели на датский. Затем я запустил свое открытое пользовательское приложение WinForm, которое, как я знаю, не устанавливает язык, и оно также вернулось с английского на датский при открытии, а затем обратно на датский после завершения!

Вопрос № 1A: Как получить приложение WinForm при запуске для наследования текущей настройки языковой панели? Мой эксперимент, кажется, показывает, что каждое приложение запускается с системным значением по умолчанию и требует, чтобы пользователь вручную изменил его, когда приложение запущено - это может показаться большим неудобством для любого, кто хочет работать с более чем одним языком!

Вопрос № 1B: Если на самом деле необходимо установить язык вручную в многоязычном сценарии, как я могу изменить системный язык по умолчанию (например, на датский), чтобы я мог протестировать свое приложение? запустить на другом языке?


Я добавил отображение текущего языка в своем приложении для этого следующего эксперимента. В частности, я установил обработчик MouseEnter на метке, которая установила для всплывающей подсказки значение CultureInfo.CurrentCulture.Name, поэтому каждый раз, когда я наводил указатель мыши, я думал, что должен увидеть текущую настройку языка. Поскольку установка языка до запуска моего приложения не работала, я запустил его, а затем установил язык на датский. Я обнаружил, что некоторые вещи (например, набор текста в TextBox) действительно соответствуют этой датской настройке. Но наведение метки на инструментальной этикетке все еще показывало нас!

Вопрос № 2A: Почему CultureInfo.CurrentCulture.Name не отражает изменения из моей языковой панели, в то время как другие части моего приложения, кажется, распознают это изменение? (Попытка CultureInfo.CurrentUICulture.Name дала тот же результат.)

Вопрос № 2B: Есть ли событие, которое срабатывает при изменении языковой панели, чтобы я мог распознать в своем приложении, когда изменяется языковая настройка?


2010.05.13 Обновление

Короткая, но приятная информация, предоставленная Эриком из Microsoft (см. Его ответ ниже), напрямую касалась только одного из моих четырех вопросов (# 2A), но она дала только тот импульс, который мне был нужен, чтобы углубиться и выяснить остальное. В интересах других, кого это может смущать, вот что я обнаружил:

Ответ # 1A: Приложение наследует настройку языка ввода по умолчанию, не языка, который вы указываете на языковой панели. После запуска приложения изменения языковой панели будут немедленно замечены вашим приложением.

Ответ # 1B: Установка языка ввода по умолчанию выполняется с помощью панели управления «Язык и региональные стандарты» >> Вкладка «Языки» >> Подробно >> Вкладка «Настройки» >> Язык ввода по умолчанию.

Ответ № 2A: Отвеченный Эриком, текущая культура отличается от текущего языка ввода, который отражен на языковой панели; На ввод текста в текстовом поле влияет только текущий язык ввода.

Ответ # 2B: Нет предопределенного события ни для языка ввода, ни для уведомления об изменении текущей культуры. Здесь важно отметить, что изменения языка ввода автоматически распознаются, а изменения текущей культуры - нет. Вы должны перезапустить приложение, чтобы изменения в культуре вступили в силу - если вы не можете заметить это изменение и действовать самостоятельно. С этой целью я нашел статью MSDN ( Многоликий в классе CultureInfo ), которая предоставляет именно такую ​​ловушку, чтобы заметить изменение.

1 Ответ

1 голос
/ 12 мая 2010

В игре три отдельных языковых настройки. Языковая панель управляет языком ввода ( InputLanguage ), который отличается от языка для отображения пользовательского интерфейса (CurrentUICulture), который отличается от языка для сортировки / форматирования / анализа (CurrentCulture).

Это правда, что это сбивает с толку.

...