Я работал с настройками глобализации в прошлом, но не в среде .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 ), которая предоставляет именно такую ловушку, чтобы заметить изменение.