Python conf in Kharkiv, Nov 16 with Intel, Elastic engineering leaders. Prices go up 21.10

LocaleBro — локализация Android- и iOS-приложений без лишней работы

В рубрике DOU Проектор все желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на editors@dou.ua.

Всем привет! Меня зовут Евгений Ткаченко. Я в IT уже более 10 лет и сейчас разрабатываю в основном под систему Android. Также я программист-энтузиаст со многими идеями и их реализациями, ведь ничто не может остановить разработчика, особенно когда он хочет создавать :) Сегодня я хочу поведать вам о своем продукте LocaleBro. Это веб-платформа для локализации мобильных приложений, заточенная под разработчиков, переводчиков и менеджеров.

Что такое LocaleBro

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

В системе есть такое понятие, как проект. Грубо говоря, это приложение или несколько приложений под Android/iOS, содержащие почти одинаковые тексты. К примеру, Facebook для Android и Facebook для iOS можно добавить в один проект, так как у них тексты практически идентичны.

Далее весь процесс сводится к следующему:

  • Разработчик, не заморачиваясь с конвертацией, загружает файл фраз из кода в проект на платформу в существующем формате (xml/strings).
  • Менеджер/разработчик дает переводчику доступ к проекту.
  • Переводчик в свою очередь добавляет переводы на странице платформы, правит тексты.
  • Разработчик делает экспорт файлов фраз в нужном формате (xml/strings) к себе в код.
  • Все довольны, и можно релизить :)

Бонусом ко всему идет возможность автоматического перевода всего проекта с помощью Google Translate. В два клика можно перевести на любое количество языков, а потом потратить немного времени на вычитку и не переводить с нуля.

Просто, быстро и без лишней работы. Далее подробнее.

Предыстория

На одном проекте мы столкнулись с ужасной реальностью перевода приложения под Android и iOS на 6 языков, и эти телодвижения мне показались дикими, особенно когда за окном 2019 год.

Основная проблема была в том, что мы погрязли в бесконечном количестве файлов: переводчики хотели получить тексты с обеих платформ в одной Excel-таблице, у нас на руках были xml и strings, и надо было это как-то решать. Если выслать на перевод просто 2 файла, то возникают следующие моменты:

1. Android- и iOS-приложение на 90% состоят из одинаковых фраз и словосочетаний, и делать двойную работу по переводу никому не хотелось.

2. Иногда люди не понимают, что нельзя просто так удалять из файла что-либо, изменять ключи и т. д.
3. XML-формат не особенно удобно менять человеку, который не понимает, что такое tag и разметка.

В общем, оптимальностью тут и не пахнет. Задались поиском платформы.

Какие были альтернативы и почему создали свою

К сожалению, подходящую платформу для использования под свои нужды не нашли. Конечно же, на рынке есть очень хорошие решения локализации с большим функционалом и возможностями, но они содержали только часть необходимого нам функционала или превышали бюджет. Рассматривали все платформы, включая POEditor, Lokalise, Phrase и многое другое. Не буду рассказывать, почему не подошла каждая из них, просто опишу критерии, под которые мы искали, и как мы их решили у себя на платформе.

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

LocaleBro предоставляет каждому проекту (а не пользователю) свой лимит, и после регистрации вы можете создавать сколько угодно проектов. По умолчанию предоставляется лимит на перевод 1000 строк для каждого из них (иногда есть акции, которые увеличивают этот лимит, но базовая цифра такая). Добавив 10 проектов, пользователь получает 10 000 переводов строк, а после добавления 100 проектов — 100 000 соответственно. Немало, правда?

На практике можно добавить, например, 4 личных, которые вполне себе живут бесплатно с лимитом в 1000 строк каждый, и один рабочий, который станет платным, если не помещается в лимит.

Автоматическое сопоставление текста между платформами. Обычно разработка под Android и iOS идет параллельно. Программисты редко синхронизируются между собой: у них свой формат ключей фраз, свой темп создания UI-элементов и т. д. В итоге на выходе имеем два разных файла текстов, разного формата, с разными ключами, но почти одинаковых по контенту. В большинстве локализационных аналогов такие файлы грузятся в два отдельных проекта и перевод одного и того же делается два раза. Следовательно, тратится больше времени и денег на перевод.

В LocaleBro мы реализовали такое сопоставление при импорте текста. Работает оно следующим образом. Импортируем два таких файла:

И получаем 6 строк на перевод вместо 12, так как сам контент-то идентичный.

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

Автоматический перевод текста. Сейчас 2019 год, и уже вовсю работает распознавание объектов и лиц с фото и видео, идет анализ текстов и поведений для таргетинга. И все еще существует необходимость ручного перевода простых текстов? Некоторые платформы предоставляют автоматический перевод, но, увы, для этого нужна недешевая подписка.

Мы используем Google Translate API, и наша платформа предоставляет бесплатно 1000 символов автоматического перевода. К сожалению, эта функция платная со стороны API и за большее количество текста необходимо доплачивать.

Удобное редактирование текстов. Большинство переводчиков любят редактировать фразы в таблицах, потому что это просто, требует минимум кликов и переходов, ведь все постоянно перед глазами.

Мы вывели все фразы в одну таблицу с удобным поиском. При желании можно оставить только 2 локали на экране и просматривать оригинал и перевод с попутным его редактированием после двойного клика по тексту. Все просто до невозможности.

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

В нашем случае нет ограничений по количеству людей. Если вам надо, чтобы 5 человек работало с проектом, просто дайте им доступ. А для сохранения целостности проекта мы выделили 3 варианта ролей:

  1. Boss — может делать с проектом все: давать доступ любому человеку, добавлять локали, добавлять/удалять фразы, добавлять/удалять переводы, импорт/экспорт, переименовывать, то есть все вплоть до полного и безвозвратного удаления проекта.
  2. Developer — все то же самое, но вот только он не имеет права удалить, а также переименовать или назначать кого-то боссом.
  3. Translator — эта роль позволяет только добавлять переводы и других переводчиков. Переводчику и не надо ничего удалять, так как потом могут возникнуть проблемы с кодом у разработчика.

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

Для регистрации на LocaleBro нужен только email и пароль (или вообще регистрация в 1 клик с Facebook/Gmail). Все остальное по желанию и для того, чтобы человек видел, кому дает доступ на проект, а не только email-адрес.

Собственно, это и есть основные пункты, которые подтолкнули на создание bro-локализации.

Как все это работает

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

Естественно, проект будет пуст, и здесь требуется импортировать string-файлы из наших приложений.




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




Следующим шагом будет добавление фраз из iOS и файла Localizable.strings. Делаем те же действия, но теперь выбираем соответствующую платформу.

После импорта мы видим, что сейчас наш проект содержит ключи для обеих платформ, но обратите внимание: при этом количество строк у нас 6. LocaleBro автоматически залинковал фразы по содержанию, а не по ключам.

Таким образом, переводчику не понадобится переводить текст кнопки Cancel дважды — один раз для Android и второй для iOS, ведь в проекте теперь это одна строчка для обеих платформ. Это не только экономия времени, но и денег, ведь каждый символ на счету :)

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



Как видим, ничего сложного в этом нет. Но беда в том, что в наш век делать все вручную как-то дико, что ли. И тут нам на помощь приходит... автоперевод текста с использованием Google Translate.

Просто нажимаем кнопку Translate using Google Translate — открывается окно с информацией о текущем состоянии проекта. И по нажатии на Start Translation мы видим сообщение All Done.




А это значит, что весь проект переведен на 2 дополнительных языка практически мгновенно.

Да, Google Translate далеко не идеален, и все переводы надо просматривать носителю языка, но поверьте, это намного быстрее, чем переводить все с нуля. Ну а если надо изменить какую-то строку, просто дважды кликаем на тексте (можно также воспользоваться меню).

Теперь, когда мы исправили все тексты, мы можем сделать экспорт нашего файла для нужной локали.




Сохраняем его к себе в проект и забываем о такой головной боли, как локализация. Довольно просто, правда же?

Для любителей смотреть все в движении мы создали небольшую видеоинструкцию:

Стек, технологии

Руководствуясь правилом KISS, мы перебирали различные варианты создания, но остановились на следующем:

  • Node.js — основной двигатель системы, быстрый и легковесный. Преимущество было в скорости разработки и работы самого веб-сервера. После создания ядра приложения на основе паттерна MVC добавление микросервиса в проект занимает минимум времени и усилий. При использовании Node.js можно довольно уверенно продвигаться, создавая страницу за страницей. Уже написанные модули и библиотеки упрощают разработку многократно. Например, для подстановки значений в HTML был выбран EJS, для HTTP-сервера — Express и т. д.
  • MySQL — хранитель данных, так как SQL позволяет гибко и точно создавать запросы, доставая из базы только нужную информацию, при этом легко оперируя таблицами.
  • Bootstrap — ускоритель создания пользовательского интерфейса, потому что все уже написано до нас :) Если нужно создать html-страницу, то лучшего, пожалуй, не найти. Вам остается только скомпоновать элементы в нужную композицию тегов и классов.

Исходя из стека, в команде пригодился бы Node.js Developer, SQL Developer, верстальщик, человек, имеющий опыт локализации мобильных приложений, Project Manager, маркетолог, копирайтер. Прикинув, что по весу я могу сойти за очень маленьких двух человек, решил сделать все сам, так как порой создать лично будет быстрее и качественнее, чем найти и проконтролировать нескольких людей. К тому же немалый опыт разработки на back-end/web был, следовательно, почему нет? :)

Какой камень оказался самым тяжелым

Как и в любом деле, маркетинг рулит многим. Самый тяжелый камень — это рассказать, что есть такой сервис. Да и собрать обратную связь было намного тяжелее, чем это казалось на первый взгляд. В большинстве своем люди не любят оставлять отзывов, и тяжело понять, какую сторону необходимо улучшить. А с учетом специфики платформы подходит далеко не каждая реклама, да и таргетировать ее крайне тяжело.

Сейчас и в будущем

С момента запуска прошло меньше месяца, но уже сейчас LocaleBro посетило более 800 разработчиков и менеджеров со всего мира, было добавлено порядка 30 проектов.

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

Сегодня LocaleBro можно использовать бесплатно, и в будущем так планируется. Ведь основная идея, что платформа — это твой бро, который тебе всегда поможет. В случае если твой проект вырос и не помещается в бесплатный план, то, скорее всего, он тебе уже приносит доход, поэтому мы предоставляем 6 вариантов подписок, которые стартуют от 10 долларов в месяц, что само по себе смешная сумма для любого проекта.

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

Спасибо, что дочитали до этого места :) Всем добра!

LinkedIn

9 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

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

Спасибо! Если что, можете писать напрямую мне. Если надо будет что-то сделать удобнее или где-то недочет — сделаю)

Щось імпорт файлу .string не працює.
Показує: «Sorry Bro, you don’t have strings for this project»

хм... Бачу є помилки на імпорті, є проблема з деякими символами. Знайшов Вас на фб, додамся, запитаю ще дещо, якщо Ви не проти.

Чудова робота! Ще не користувався, тільки зареєструвався і потикав кнопочки. Вже хочеться потиснути руку, навіть просто за задоволення від перебування на ресурсі. Супер! :)

Дякую! Якщо скористаєтесь більш детально і будуть питання — буду радий допомогти!

Отличная идея! Удачи с проектом. Мы использовали Transifex — плюсы в том, что можно подключать сторонних переводчиков на любой кошелёк, но вот сам сервис дорогой.

Спасибо! Посмотрю что такое transifex

Отличная работа 👍🏻
В старые добрые времена сидели двумя мобильными командами и правили/сверяли строчки локализаций тратя при этом уйму разработка/часов 😅 но как говорится «скупой платит дважды»

Подписаться на комментарии