localization

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

  • Facebook
  • Twitter
  • VKontakte
  • LinkedIn
  • Email
  • RSS

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

Чем ближе 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.

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

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

  • http://theshpufa.blogspot.com/ TheShpufa

    А почему не назвать хорошее агенство или конкретных людей, для кого это обидно? Так выходит, что автор придержал самую полезную инфу, а мог бы уберечь кого-то (меня например) от наступания на грабли.

  • Alexandr Shapoval

    Саша, еще можно вспомнить о динамических переводах (тот же L2Localization поддерживает это из коробки) для чатов, а дополнительные параметры заменить на рич-текст (типа как ты упоминал теги , etc) — просто если ваша локализация поддерживает это, то можно не волноваться о дополнительных полях.

    Вместо версионности локализацией чаще бывает проще зашивать прямо в игру 95% табличек с локализацией, оставляя изменяемыми только те что реально изменяются — тексты пушей, акции, магазин. Эти 5% можно (без версионности) подгружать каждый раз при входе в игру с сервера при наличии интернета. Хотя, конечно, это не отменяет того, что наличие версионности — крутая и полезная штука.

    Еще по моему опыту технического обеспечения локализации следует упомянуть полезность локализировать картинки, звуки (но о звуках ты упомянул) и даже поведение тех или иных UI элементов.

    Еще из технически важного (я попробую передать суть без погружения в техподробности): на этапе выбора шрифтов уже хорошо бы знать про возможные языки. Потому как если выбран красивый кастомный шрифт для английского, где художники ручками дорисовали красотульки у глифов (спрайтовый шрифт), то локализировать этим шрифтом выйдет только языки основанные на латинице. Очень грубо говоря, придется дорисовывать много дополнительных символов для других языков (а это значительная нагрузка на «текстурную память») или использовать fallback-шрифт.

    И по поводу таски в спринте, которая уже поздно. Хорошие техлиды и программисты закладывают фундамент для локализации с самого первого текста в игре.

  • Alconost Inc.

    Добавлю по поводу «где заказать». Мы в Alconost, являясь агентством по локализации, тоже работаем только с переводчиками-носителями языка, которые проживают в той стране, на язык которой переводят. Таким образом достигается идеальное качество локализации и это не стоит в итоге всех денег мира)

    Если игра то и дело обновляется, а текста в ней больше, чем пару строчек, есть смысл рассмотреть облачную платформу для перевода, это куда удобней, быстрей и надежней табличек. Конкретно из платформ, по нашему многолетнему опыту, лучшей себя показала Crowdin. С ней также можно работать в связке с агентством по локализации по такой схеме: https://alconost.com/services/crowdin-alconost

  • Alexander Shtachenko

    Привет, как бы статья больше о том, как пилить локализацию, и призвана исключительно расказать об особенностя и тонкостях этой задачи. Она ни сколько не рекламная. А за рекоменадциями, пожалуйста обращайтесь в личку. Мне не жалко.

  • Alexander Shtachenko

    Привет, Саша. Спасибо за твой комментарий.
    Совет про выбор самого большого текста по ГТ — супер дельный, беру на вооружение. По поводу картинок, да, их тоже надо — я написал это как АРТ, там же где и про звук упомянул.

  • Alexander Shtachenko

    Платформа позволяет на лету менять тексты в игре?

  • Alconost Inc.

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

  • Alexander Shtachenko

    Круто, до встречи на DevGAMM 😉