День второй. Локализация приложений

Вступление

Если вы хотите завоевать весь мир своии программами, то имеет смысл делать локализованные версии, которые придутся по вкусу жителям той или иной страны. Конечно, можно создать несколько разных версий одной программы и предлагать их по отдельности. Но есть способ лучше. Можно создавать локализованные версии программ при помощи ресурсов, которые автоматически будут подружаться в зависимости от языка, используемого на телефоне. В первой части статьи мы рассмотрим пример создания локализованных версий приложений на примере локализации названия приложения и названия плитки. Название приложения пользователь видит в списке приложений, а плитку приложения можно увидеть, если пользователь закрепит приложение на стартовой странице при помощи команды pin to start.

Для локализации требуемых строк необходимо создать динамические библиотеки DLL, которые будут содержать строковые ресурсы для разных языков: English (United States), English (United Kingdom), French (France), Italian (Italy), German (Germany), and Spanish (Spain). Здесь перечислены языки, которые поддерживаются в настоящее время устройствами Windows Phone 7. Поэтому в дальнейшем мы будем работать именно с этими языками. Файлы DLL должны содержать только строковые ресурсы, необходимые для названий приложения и плитки.

Рисунок ниже показывает два варианта: список приложений и плитка приложения.

Создание динамической библиотеки

Рассмотрим процедуру создания DLL-библиотеки под именем AppResLib.dll. Для этого нам понадобится Visual C++. К сожалению, Express-версия не подойдет, поэтому описываемый способ не смогут использовать многие программисты. Как вариант, можно попробовать найти какой-нибудь редактор ресурсов и менять уже готовый DLL-файл. Также вы можете скачать ознакомительную версию Visual Studio (Ultimate, Professional или Premium).

Запускаем Visual Studio C++. Выбираем в меню File | New | Project. В диалоговом окне New Project в левой панели выбираем Installed Templates, разворачиваем Visual C++ и выбираем Win32.

В списке типов проектов выбираем Win32 Project.

Поле Name печатаем AppResLib и выбираем место для сохранения проекта.

Появится мастер Win32 Application Wizard, в котором слева выбираем Application Settings, далее под Application type выбираем DLL, отметив флажок Empty project под Additional options. Щелкаем Finish.

В результате наших действий будет создан новый DLL-проект.

В Solution Explorer выберите созданный проект и в меню Project щелкните Properties.

В диалоговом окне свойств в левой части раскройте Configuration Properties, затем Linker и щелкните Advanced. Выберите свойство No Entry Point и назначьте ему вариант Yes (/NOENTRY).

Данная настройка позволяет избежать ненужных связей при компиляции и необходима при создании библиотек только со строковыми ресурсами.

Сохраните и создайте файл проекта.

Создание нейтральных строковых ресурсов для приложения

Сначала мы добавим таблицу строковых ресурсов в DLL-проект, которая будет содержать нейтральное имя для приложения (используемое по умолчанию).

Во время этой операции Visual Studio неожиданно стала выдавать ошибку, ссылаясь на отсутствие компилятора ресурсов. Поиск по форумам показал, что с этой ситуацией столкнулись многие разработчики. Возможной причиной ошибки является удаление старых версий Visual Studio 2008 или младших версий Visual Studio 2010. Решил проблему очень простым способом - скопировал файлы rc.exe и rcdll.dll из C:\program files\Microsoft SDKs\Windows\v7.0A\Bin в папку c:\program files\Microsoft Visual Studio 10.0\vc\bin\.

В меню Project щелкните Add Resource. В диалоговом окне Add Resource найдите в списке Resource type пункт String Table и щелкните кнопку New.

Откроется таблица строковых ресурсов. Создайте две строки со следующими свойствами.

The language-neutral name of your application to be displayed in the application list.
IDValueCaption
AppTitle100
AppTileString200The language-neutral name of your application to be displayed in the application tile when pinned to Start.

Сохраните и постройте DLL-проект.

В Проводнике найдите файл AppResLib.dll, который вы только что создали.

Скопируйте файл AppResLib.dll в папку, которая содержит ваш проект для приложения Windows Phone. Если если вы используете стандартную структуру при создании приложения, то такой папкой будет папка, содержащая файл App.xaml

Создание локализованных строк для ресурсов

Теперь приступим к созданию локализованных строк для вашего приложения.

Отредактируйте строки ресурсов следующим образом.

The English (United States) name of your application to be displayed in the application list.
IDValueCaption
AppTitle100
AppTileString200The English (United States) name of your application to be displayed in the application tile when pinned to Start.

Сохраните и постройте DLL-проект. Найдите созданный файл AppResLib.dll на диске и переименуйте под именем AppResLib.dll.0409.mui.

Скопируйте файл AppResLib.dll.0409.mui в папку вашего приложения Windows Phone (как в предыдущем шаге).

Можно упростить задачу с копированием файлов при помощи автоматизации процесса. Скопируйте строчку "$[OutputPath]$[DLLProjectName].dll" "$[WindowsPhoneApplicationPath]\AppResLib.dll.0409.mui" в Project Properties под Configuration Properties, Build Events, Post-Build Events.

Далее вы продолжаете создавать аналогичным образом строки ресурсов для других языков. Вам необходимо только давать файлам нужные имена в соответствии с прилагаемой таблицей.

CultureИмя DLL
English (United Kingdom) (0x809) (/l 0x0809)AppResLib.dll.0809.mui
French (France) (0x40c) (/l 0x040c)AppResLib.dll.040c.mui
German (Germany) (0x407) (/l 0x0407)AppResLib.dll.0407.mui
Italian (Italy) (0x410) (/l 0x0410)AppResLib.dll.0410.mui
Spanish (Spain) (0xc0a) (/l 0x0c0a)AppResLib.dll.0c0a.mui

Не забывайте копировать создаваемые файлы в папку для вашего приложения Windows Phone.

Использование локализованных строковых ресурсов в приложении Windows Phone

Теперь мы можем приступить к использованию локализованных строк.

В Solution Explorer выберите ваш проект. В меню Project выберите Add Existing Item. В диалоговом окне выберите файлы AppResLib.dll и остальные файлы AppResLib.dll.*.mui, и щелкните кнопку Add. Выбранные файлы будут добавлены в ваш проект.

В Solution Explorer выберите добавленные вами файлы и в окне свойств Properties установите свойство Build Action в Content.

Далее в Solution Explorer раскройте папку Properties и сделайте двойной щелчок на файле WMAppManifest.xml.

Отредактируйте файл WMAppManifest.xml, чтобы использовать строковые ресурсы для названия приложения следующим образом:


<App xmlns=""
     ProductID="{00000000-0000-0000-0000-000000000000}"
     Title="@AppResLib.dll,-100"
     RuntimeType="Silverlight"
     Version="1.0.0.0"
     Genre="apps.normal"
     Author=""
     Description=" "
     Publisher=" ">

Для использования локализованных строк в плитках нужно отредактировать в том же файле следующие строки.


<PrimaryToken TokenID="WindowsPhoneApplication3Token" TaskName="_default">
  <TemplateType5>
    <BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI>
    <Count>0</Count>
    <Title>@AppResLib.dll,-200</Title>
  </TemplateType5>
</PrimaryToken>

Сохраните и скопилируйте ваше приложение Windows Phone.

Проверка

Проверим, как работает наше приложение. Запустите приложение в эмуляторе (Debug | Start debugging). Нажмите на кнопку Start, чтобы открыть стартовую страницу устройства. Далее перейдите на страницу списка приложений. Закрепите приложение на стартовой странице (создайте плитку).

Перейдите на страницу настроек (Start | список приложений | Settings). Выберите пункт region & language

Щелкните Display language и выберите любой из представленных языков. Вы автоматически вернетесь на страницу выбора региона/языка.

Щелкните Tap here, чтобы изменения вступили в силу.

Эмулятор поменяет настройки и вернется к стартовой странице устройства.

Убедитесь, что название приложения в плитке совпадает с выбранным языком на устройстве.

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

Повторите эти шаги для всех языков, чтобы убедиться, что все работает корректно.

Напоминаю, что данный способ работает только для локализации названия приложения и названия плитки. В следующий раз мы попробуем осуществить локализацию уже самой программы.

Скачать исходники к статье

Идея статьи

How to: Localize an Application Title for Windows Phone

Дополнительные материалы

Localization Best Practices for Windows Phone : http://msdn.microsoft.com/en-us/library/ff967552(v=vs.92).aspx How to: Build a Localized Application for Windows Phone : http://msdn.microsoft.com/en-us/library/ff637520(v=vs.92).aspx Code Samples for Windows Phone : http://msdn.microsoft.com/en-us/library/ff431744(v=vs.92).aspx
Реклама