Давайте запилим локализацию

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

Чем ближе Global Launch, тем острее стоит вопрос локализации. И в предпоследнюю неделю задача по локализации проскочит из бэклога в спринт. И знаете, из моего опыта — это поздно. Практика показала, что готовая локализация с альфы значительно упрощает работу с UI, текстами в игре, текстами в пушах и прочих неочевидных местах игры, таких как, например, хинты в туториале.

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

Бизнес ценность:

Влияет на Вовлечение в целом и во время широкого масштабирования (выхода на мир, высокой маркетинговой активности с разными таргетами траффика).

Влияет на долгосрочное удержание, при активной работе с внешними пушами.

А что такое «локализация»?

Коротко, для тех, кто только пришел, и не понимает о чем речь. Локализацией мы называем функционал, который позволяет определить язык игрока, и сразу же все тексты (иногда даже арт и звук) на лету переключить на нужный язык. Языков много, и нужно эргономично с ними работать. Если на пальцах объяснить, как оно работает, то получится примерно следующее:

  1. считываем с девайса игрока локаль
  2. считываем из файлика (csv или google таблицы) нужный язык
  3. по ключам вставляем текст в игру

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

Вместе с Романом (SunGear Games) мы провели небольшие исследования, и собрали экспертизу по расширенному функционалу локализации. Теперь эта экспертиза доступна всем читателям.

На что обратить внимание

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

Топ языки латинской группы — Английский и Испанский. Нужно учесть, что французы и немцы, очень ревностно относятся к играм не на родном языке, и ценят локализацию, хоть и хорошо владеют английским. Отдельно стоит отметить, что азиатская локализация требует отдельного, культурного подхода. Арабская локализация не сложная, главное учтите шрифтовые особенности. Обязательно сделайте возможность писать справа налево. Ну и русский — он у нас есть по умолчанию.

Лайфхак

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

Базовый функционал

Определитесь с вашим тех.лидом в чем будете хранить тексты. На сегодня активно используются 2 варианта, примерно 50 на 50:

  1. csv файл — хранится на вашем cdn, легко обновляется и правится на компе специалиста
  2. google таблица — парсится клиентом, легко обновляется, можно регулировать доступ

Таблица содержит поля:

  • ID
  • #key — ключ, который указан в приложении в текст-боксе и по которому подбирается нужный текст
  • собственно текст на языке 1
  • текст на языке 2
  • Доп. параметры — о них дальше!

У таблиц должна быть версионность. Хорошая практика управлять версией таблиц с сервера — т.е. вы с админки указываете клиенту, с какой версией таблицы работать. Так вам не нужно будет переподавать билд, если вы внесли какие-то изменения.

А изменения — это частая вещь: будь то правки, или вы решили под День Независимости США изменить текст пушей для Английской версии.

Роман также использует маркер  версии переводов для ключей:
Когда шла работа по локализации «Магии Крови» на 14 языков, очень сложно было следить какой из лок-китов актуален. Версии перевода решают эту проблему.

Языки

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

Управление доступности языка для использования/отображения может быть реализована как с сервера, так и в файле локализации. Некоторые языки могут быть закрыты для той или иной группы игроков, по разным причинам (например в нем нашли ошибку).

Ключи

Формат ключей может иметь любое значение. Но практика показывает, что хорошо указывать имя окошка, место и/или месседж. Например: shop.button.cancel

Роман Ильин дополнительно разделяет ключи на два типа:

Static и default. Обычные доступны по тех.имени. Для статик генерится код, и можно обращаться к ним, как к методу. Для временных ключей мы заводим один статик LL.not_localized(text). Очень просто потом в коде искать и заменять нелокализованные тексты. Проще, чем строку “Настройки”.

Текст локализации

Текст, на самом деле, не просто текст, типа «Options». Он содержит дополнительные параметры/теги, позволяющие ему гибко работать с приложением.

За советом, я обратился к моему другу и эксперту в работе с мобильными играми — Андрею Щербаню, который собрал опыт локализации 4х крупных компаний воедино:

В тексте могут использоваться теги форматирования фрагментов текста (bold, italic, цвет, выравнивание, размер). Как доп. параметры: возможность подгона размера шрифта (autosize) под размеры текстового поля, перенос слов, разрешены ли несколько линий (multiline).

Тексты зачастую содержать переменную информацию. Вам нужно иметь синтаксис на эти случаи:

подстановка динамических значений типа: «You win %n1% coins for %n2% period»

Также не стоит забывать про множественные формы (монета, монеты, монет).

Совет: Старайтесь избегать параметров вида %n1%, и заменять на осмысленные текстовыми типа {player_level}, так переводчику проще понять о чем речь и что означает параметр.

Не забывайте форматировать числа и даты, с учетом культурных особенностей (резделитель разрядов: точка, запятая ; значек валюты — до или после цифры).

Всегда использовать шрифты, в которых есть все требуемые глифы (начертания символов), актуально для Западной Европы и Азии.

Расширения для функционала локализации

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

  • Ограничение на кол-во символов (если 0 то нет ограничения) для конкретного ключа.
  • Возможность в тексте для пушей использовать эмодзи с поддержкой кодов разных сервисов (сейчас я шлю через devtodev).
  • Варианты форматирования под различные экраны/разрешения. Под разные разрешения обрыв строки может стоять в разных местах.  Вы можете в тег <br> вставить условие, при котором тег работает:  <br 4×3> и <br  16×9> — и строка разорвется в другом месте.

Дополнительно

  1. Обсудите с вашим инженером, хочет ли он хранить все тексты в одном файле, или ему для каждого языка нужен отдельный файл. Я встречал оба варианта.
  2. Сделайте тестовый билд, с чит-кнопокой смены локалей на лету. QA вам спасибо скажет!

Готовые решения

Стоит обратить внимание на самый юзабельный тул — L2Localization (для юньки). Хорошие отзывы коллег, которые не пилили свой функционал. Если у вас есть отзывы — оставляйте их в комментариях, пригодится для потомков.

Где заказать переводы

Я практикую индивидуальную работу с копирайтерами — носитялями языка, которые проживают в нужной проекту геолокации. Это, пожалуй, самое дорогое решение.

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

Есть и эконом вариант. Заказать перевод на Fiverr.

Еще почитать про локализацию можно тут

Если я что-то не упомянул, напишите в комментариях, что еще вы используете для локализации своей игры.