2010-12-29 2 views
2

Я читаю одну книгу в WPF, который обеспечивает метод для создания приложения для локализации purposes.What он предложил и то же, что я сделал:локализации в WPF

1) редактировать файл проекта .csproj и добавить элемент en-US для создания локализованной сборки, содержащей локализованный встроенный baml в локальной сети. Когда я скомпилировал проект, он создал подпапку en-US, которая содержала локализованную встроенную базу данных en-US. Я взял ее резервную копию.

2) Я сделал то же самое для fr-FR и создал для него резервную копию.

3) Затем я поместил обе созданные подпапки в папку приложения с именами en-US и fr-FR.

Книга предполагает, что если я изменю настройку культуры на fr-FR (через региональные настройки панели управления), будет использована локализованная сборка fr-FR.
Но я обнаружил, что независимо от того, что такое культура, она использует en-US. Я знаю это, потому что я изменил культуру на fr-FR и удалил папку fr-FR, но все же приложение. запускается, и когда ан-США один удаляется, он выдает исключение.

Может ли кто-нибудь уточнить, где я/неправильно понимаю?

Вот слова из книги:
Подготовка заявления на Локализация
Следующим шагом будет включить поддержку локализации для вашего проекта. Это займет всего один переключающих вам нужно добавить следующий элемент в файл .csproj для вашего проекта в любом в первом элементе:
ан-US
Это говорит компилятору, что культура по умолчанию для приложения является американским английским (obvi ously, вы могли бы выбрать что-то еще, если это подходит). После того, как вы внесете это изменение, процесс сборки изменится. В следующий раз, когда вы скомпилируете приложение, вы получите подпапку с именем en-US. Внутри этой папки есть спутниковая сборка с тем же именем, что и ваше приложение, и расширение .resources.dll (например, LocalizableApplication.resources.dll).
Эта сборка содержит все скомпилированные ресурсы BAML для вашего приложения, которые ранее были сохранены в вашей основной сборке приложений.
Теперь, когда вы запускаете это приложение, обычная среда исполнения (CLR) автоматически ищет спутниковые сборки в правильном каталоге на основе региональных настроек компьютера и загружает правильный локализованный ресурс. Например, если вы работаете в культуре fr-FR, CLR будет искать подкаталог fr-FR и использовать найденные там спутниковые сборки.
Это означает, что если вы хотите добавить поддержку для большего количества культур в локализованное приложение, вам просто нужно добавить дополнительные подпапки и спутниковые сборки, не нарушая работу исполняемого приложения.
Когда CLR начинает зондирование для сборки спутника, он следует нескольким простым правилам :
1. Во-первых, он проверяет наличие наиболее подходящего каталога. Это означает, что он ищет спутниковую сборку, предназначенную для текущего языка и региона (например, fr-FR).
2. Если он не может найти этот каталог, он ищет спутниковую сборку, предназначенную для текущего языка (например, fr).
3. Если он не может найти этот каталог, генерируется исключение IOException.

ответ

3

Менеджер ресурсов в .NET использует флаг CurrentUICulture, чтобы решить, какую локализованную сборку загружать, а не флаг CurrentCulture.CurrentUICulture представляет собой родной язык версии Windows, в которой вы работаете, тогда как CurrentCulture представляет ваш текущий региональный параметр, заданный с помощью панели управления.

Другой способ думать о том, что существуют две независимые вещи, которые ваше приложение может спросить о вашем пользователя:

1) На каком языке он говорит? (CurrentUICulture)

2) Где он находится? (CurrentCulture)

Ответ на # 1 должен диктовать язык, который вы используете для отображения элементов пользовательского интерфейса, то есть локализованного файла ресурсов для загрузки.

Ответ на # 2 должен диктовать, как вы показываете такие вещи, как числовые строки и значения валюты. Это автоматически обрабатывается преобразованием числовой/валюты в строковые значения в их методах ToString.

Чтобы перепроверить значение этих двух свойств, вы можете сделать что-то вроде этого:

 Console.WriteLine("CurrentCulture={0}, CurrentUICulture={1}", CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture); 

Чтобы изменить CurrentCulture, вы просто изменить расположение панели управления | Регион и язык | Форматы.

Изменение CurrentUICulture, вы можете выполнить одно из следующих действий:

  • тест на не-английской версии Windows. (Например, в виртуальной машине)
  • Используйте MUI pack in Windows 7
  • Добавить переопределение код для тестирования, как правило, на основе настроек .config файл, где вы явно установить значение CultureInfo.CurrentUICulture.

Пример переопределения UICulture, основанный на настройке UICulture в app.config, показан ниже. Вы установили UICultureOverride в типичные строки культуры, например. fr-FR, de-DE и т. д.

 // using System.Threading; 
     // using System.Globalization; 
     // using System.Configuration; 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo(ConfigurationManager.AppSettings.Get("UICultureOverride")); 
+0

Отлично! Спасибо большое. –

Смежные вопросы