«Труднощі» перекладу додатків для 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. В даному прикладі задається текст кнопки:
<Button x:Name="btnCancel" x:Uid="btnCancel" Click="do_cancel" FontFamily="Segoe UI" FontSize="20"></Button>

У файл ресурсів можна внести рядок із зазначенням Uid, атрибута через точку і вказати значення цього атрибута. У цьому прикладі ми можемо задати вміст тексту кнопки вказавши в якості ключа файлу ресурсів btnCancel.Content
В HTML5 додатках в коді HTML текст вмісту задається так:
<span data-win-res="{textContent: 'keyvisitsite'}"></span>

Можна задати також і значення якогось атрибута, наприклад атрибута title:
<p style="" data-win-res="{attributes:{'title':'keytext7'}}">   </p>

Встановити поточний мову додатка можна примусово з допомогою:
// 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<string, string> sender, IMapChangedEventArgs<string> @event)
{
ResourceManager.Current.DefaultContext.Reset();
}

Це був опис всіх відомих способів перекладу тексту. Однак, багато хто забуває про те, що можна перекласти також логотипи, заставку і інші зображення.
Зробити це дуже просто. Досить створити підпапки з префіксами кодів мов усередині папок Assets (в C# додатках) або images (JavaScript додатках).
На наступному скріншоті ви можете побачити, що у мене локалізовані і стандартні логотипи програми і картинка заставки — splashscreen.


Відкривши маніфест програми (файл Package.appxmanifest) ми зможемо локалізувати та коротке ім'я програми, ім'я, під яким додаток буде відображено в store (коротке ім'я пакета). Для цього використовуємо префікс ms-resource: і після нього вкажемо ім'я ключа в наших ресурсних файлах.


Наостанок, для хлопців і дівчат, що бажають автоматизувати процес перекладу, хочу навести посилання на офіційний набір багатомовних інструментів для автоматичної генерації файлів ресурсів з перекладом. Для локалізації програми в даному випадку нам достатньо буде створити в папці Strings тільки одну папку з мовою за замовчуванням і файлом ресурсів.
Завантажити набір багатомовних інструментів можна за посиланням:
Набір засобів для багатомовних додатків
Після установки програми вам необхідно буде активувати набір інструментів. Відкривши проект зайдіть в меню «Сервіс» і виберіть «Включити набір багатомовних інструментів». Після цього в меню «Проект» у вас з'явиться пункт «Додати мови перекладу...». Автоматично створена папка MultilingualResources буде містити в собі xlf файли. Після побудови проекту ці файли будуть заповнені значеннями з файлу ресурсів мови за замовчуванням.
Подвійним кліком на файлі xlf можна буде відкрити його в редакторі, що включає в себе автоматичний перекладач.

Цей редактор не вимагає наявності встановленої на комп'ютері Visual Studio, так що ви цілком можете переслати професійному перекладачеві свої файли xlf і посилання на багатомовний набір інструментів.
Файл имя_вашего_проекта.qps-ploc.xlf — це файл псевдоязыка, призначеного для тестових завдань. За допомогою цього файлу можна виявити зрушення в розмітці вашого коду. Перед публікацією проекту цей файл необхідно видалити.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.