Как Локализовать Приложение

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

Когда ресурс ограничен, например, вы самостоятельно пилите open source pet-проект на досуге, либо вы стартап, который ищет свой Product Market Fit, тратить время на нефокусную активность - вредно.

Согласен, что переводы можно осуществлять и в коде, но тут возникает сложность с передачей и обновлением языковых файлов (если вы привлекаете кого-то на помощь). И тут на сцену выходит категория сервисов Localization Management Platform.

Что такое Localization Management Platform?

Как правило, это SaaS продукты, которые позволяют вам переводить языковые метки в их сервисе. Обычно во всех этих сервисах уже есть:

  • Удобный UI/UX;
  • Автоматический перевод меток машинным переводом;
  • Возможность заказа платного перевода прямо в облаке (когда вам нужен осмысленный перевод, а искать переводчика лень);
  • Уведомления о том, что осталось перевести;
  • Возможность приглашать к локализации разные роли: переводчик, qa, пруф-ридер;
  • и куча других плюшек.

Звучит неплохо, да?

Примеры подобных сервисов: localize, poeditor, crowdin, weglot, globallink, transifex, …

Какую платформу для переводов лучше выбрать?

Я не буду останавливаться на обзоре популярных сервисов, их можно легко найти на youtube. А остановлюсь на одном конкретном кейсе: вы инди-разработчик, который пилит в свое удовольствие какой-то open source продукт, либо же ваш продукт пока не приносит прибыли, а пользовательскую базу за счет языков расширить хочется.

У меня есть pet-проект, который я потихоньку пилю и экспериментирую там с разными технологиями и подходами. Платить за эксперименты много не хочется, поэтому я ищу сервисы, которые предоставляют свои услуги бесплатно для open source проектов, либо self-hosted версии.

Посмотрев несколько обзоров на системы локализации, я решил остановиться на crowdin.

Crowdin

Почему Crowdin?

Для начала, Crowdin предлагает бесплатный аккаунт для 1 приватного проекта до 60,000 слов. Публичных проектов можно хранить любое количество без ограничений по словам.

Для open source проекта это просто праздник какой-то. По факту, можно использовать систему переводов отдельно от исходного кода, что значительно упрощает локализацию и расширяет возможности по части добавления новых языков. Я, например, держу фронтенд в приватном репозитории, и привлечение кого-то для перевода вызывало боль. А тут можно просто добавить учетку во внешнюю систему.

Plans

Второй огромный плюс - это прямая синхронизация с репозиторием. Сервис сам открывает pull-request’ы с изменениями языковых файлов и подтягивает последние изменения из репозитория автоматически.

Pull Request

Третий плюс - crowdin поддерживает много разных форматов языковых файлов: список поддерживаемых форматов. В моем случае это обычный JSON-формат.

Как подключить Crowdin к своему проекту?

  1. Зарегистрироваться в Crowdin;
  2. Создать в нем проект;
  3. Настроить интеграцию с Github;
  4. Создать файл конфигурации

Мой файл конфигурации crowdin.yml выглядит следующим образом:

files:
  - source: /src/i18n/ru-RU/index.js
    translation: /src/i18n/%locale%/%original_file_name%

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

После завершения настройки и при добавлении нового языка, либо изменения переводов - сервис заботливо создаст нужные файлы и pull-request к основной ветке. Вам останется только отревьюить изменения и принять PR.

Краудсорсинг для переводов

Если вы создаете публичный проект - вы можете приглашать к переводу участников сообщества вашего проекта (ну или жену), чтобы работа над переводами шла быстрее и асинхронно от разработки. Сервис позволяет “аппрувить” предложенные изменения от других участников.

Публичная страница проекта может выглядеть вот так:

public page