«Трудности» перевода приложений для Windows Store
У меня было локализованное приложение для Windows Store. В нем была возможность переключить язык на английский, но даже с английским интерфейсом приложение продолжало удивлять англоязычных пользователей русскими кириллическими «иероглифами» на заставке и логотипах. А русскоязычные пользователи в свою очередь удивлялись тому, что приложение называлось не по-русски. О том, как получилось такое безобразие и как сделать хорошо эта статья.Всех, кому интересна разработка универсальных приложений Windows, приглашаю под кат! Практически все WP8/WinRT/WinJs разработчики (даже те, кто никогда не переводили свои приложения на другие языки) знают, что для локализации приложения необходимо создать папку Strings в которой создаются подпапки с наименованиями эквивалентными кодам языка. Далее в этих подпапках создаются файлы ресурсов resources.resjson для html5 приложений или resources.resw для xaml приложений.
Строки локализованного текста вносятся в словари ресурсов парами ключ/строка и извлекаются после с помощью подобного кода. Пример на C#:
Windows.ApplicationModel.Resources.ResourceLoader resload; resload = new Windows.ApplicationModel.Resources.ResourceLoader (); txtWaitProcess.Text = resload.GetString («keyWaitProcess»); // здесь txtWaitProcess это имя элемента XAML TextBlock, а keyWaitProcess это ключ, по которому текст извлекается из файла ресурсов соответствующего текущему языку приложения. На JavaScript это выглядит немного короче: document.getElementById ('txtWaitProcess').innerText = WinJS.Resources.getString ('keyWaitProcess').value; В придачу к этому есть возможность декларативно задать содержимое для элемента XAML. В данном примере задается текст кнопки: В файл ресурсов можно внести строку с указанием Uid, атрибута через точку и указать значение этого атрибута. В данном примере это мы можем задать содержимое текста кнопки указав в качестве ключа файла ресурсов btnCancel.ContentВ HTML5 приложениях в коде HTML текст содержимого задается так: Можно задать также и значение какого-либо атрибута, например атрибута title:
Установить текущий язык приложения можно принудительно с помощью: // C# Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = «ru»; // После установки языка соответственно гайдлайнам необходимо предупредить пользователя о том, что необходимо перезапустить приложение // JavaScript Windows.Globalization.ApplicationLanguages.primaryLanguageOverride = «ru»; // После чего можно принудительно запустить обновление для перевода интерфейса и всего текста приложения: WinJS.Resources.processAll (); Как видно из примера приложение на WinJS не требует перезапуска. Но для C# разработчиков есть небольшое утешение в виде возможности приложения «отловить» переключение текущего языка в системе и автоматически обновить контекст. Для этого: // добавим при запуске приложения прослушивание события MapChanged protected override void OnLaunched (LaunchActivatedEventArgs args) { ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += Event_MapChanged; } // и далее в случае, если язык ОС был изменен, то сбросим контекст приложения void Event_MapChanged (IObservableMap
Напоследок, для парней и девчат, желающих автоматизировать процесс перевода, хочу привести ссылку на официальный набор многоязычных инструментов для автоматической генерации файлов ресурсов с переводом. Для локализации приложения в данном случае нам достаточно будет создать в папке Strings только одну подпапку с языком по умолчанию и файлом ресурсов.Скачать набор многоязычных инструментов можно по ссылке: Набор средств для многоязычных приложенийПосле установки приложения вам необходимо будет активировать набор инструментов. Открыв проект зайдите в меню «Сервис» и нажмите «Включить набор многоязычных инструментов». После этого в меню «Проект» у вас появится пункт «Добавить языки переводов…». Автоматически созданная папка MultilingualResources будет содержать в себе xlf файлы переводов. После построения проекта эти файлы будут заполнены значениями из файла ресурсов языка по умолчанию.Двойным кликом на файле xlf можно будет открыть его в редакторе, включающем в себя автоматический переводчик.Этот редактор не требует наличия установленной на компьютере Visual Studio, так что вы вполне можете переслать профессиональному переводчику свои файлы xlf и ссылку на многоязычный набор инструментов.Файл имя_вашего_проекта.qps-ploc.xlf — это файл псевдоязыка, предназначенного для тестовых задач. С помощью этого файла можно выявить сдвиги в разметке вашего кода. Перед публикацией проекта этот файл необходимо удалить.