Как Непрерывно Выпускать Продукты На 20 Языках И Не Умереть?

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



Как непрерывно выпускать продукты на 20 языках и не умереть?



Кто мы

Всем привет! Мы — Екатерина Галицкая и Дарья Егорушкина из «Лаборатории Касперского» (отдел документации и локализации).

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



Боль

Основным толчком к изменениям стали потребности развития.

Разработка перешла на частые выпуски каждые две недели.

Объем уменьшился, но переводить стали чаще, и делать это нужно было быстрее.

По сути, локализация стала узким местом разработки.

И если раньше руководители проектов даже не знали имен локализаторов — зачем вообще, ведь переводы волшебным образом появлялись сами собой, — то теперь практически все были в курсе проблем и даже знали, что такое лингвистическое тестирование :) Исходные данные.



Сроки

Цикл локализации занял 3 недели:
  • 3-5 дней – перевод;
  • 2 недели – лингвистическое тестирование.

С переводом все понятно, но зачем лингвистическое тестирование и что это вообще такое? Основная цель лингвистического тестирования — проверить перевод в контексте, то есть по-настоящему его локализовать.

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

Кроме того, лингвистическое тестирование позволяет отловить ошибки, недоперевод, текст, не включенный в строки (hardcoded text), а также снизить юридические риски (когда тексты об оплате, например, не помещаются в необходимое поле).

Лингвистическое тестирование обычно проводится с использованием скриншотов.



Объемы

Существует миф, что если приложение мобильное, то оно маленькое, и что там надо переводить? Хаха.

Немного статистики:

  • тексты в интерфейсе – в среднем 25 тысяч слов на проект;
  • 10 заявок;
  • в среднем 19 локализаций в каждом проекте;
  • обновление текстов в интерфейсе, перевод документации каждую неделю.



Почему они не могли ускориться?

Давайте разберемся, из чего состоял каждый из этапов локализации.

ЭШаг перевода (9 шагов):

  1. вручную забирать из ВКС с разных бранчей;
  2. вручную сгенерировать дельту для перевода;
  3. создавать пакеты для перевода;
  4. загрузить на FTP;
  5. написать кучу писем агентствам, фрилансерам и местным офисам;
  6. после перевода забрать с FTP, загрузить в CAT, проверить;
  7. постить в VCS — не запутаться в бранчах;
  8. запустить сборку, исправить ошибки, пересобрать сборку;
  9. запускать предварительные переводы и исправлять ошибки в случаях, когда процесс перевода приходилось начинать заново.

Проблемы этапа перевода: короче, есть ограничения старых процессов и много рутинной работы при использовании старых CAT:
  • Сбор строк из нескольких веток не поддерживается — дельта для перевода из всех веток формировалась вручную, также вручную раскладывался перевод по веткам.

    Трудно было удержаться, легко запутаться и невозможно забыть ужас.

  • Вручную поддерживать единообразие внутри проекта и между языками было невозможно.

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

    Необходимо было сначала получить первую партию перевода и только после этого приступать к дополнительному переводу.

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

Ээтап лингвистического тестирования (19 шагов):
  1. Запустите сборку и дождитесь ее.

  2. Перезапустите, если сборка не удалась из-за ошибок локализации.

  3. Настройте специальную среду, если меню отладки нет.
  4. Делайте скриншоты по плану для одного языка.

  5. Повторите для более чем 20 языков.

  6. Спросите тестировщиков, как сделать неудачные скриншоты.

  7. Создавайте пакеты - переименовывайте скриншоты.

  8. Загрузить на FTP.
  9. Поставьте задачу агентствам.

  10. Отвечайте на вопросы агентства.

  11. Примите задание.

  12. Внесите правки.

  13. Соберите билд и ждите его (иногда билды могут стоять в очереди очень долго).

  14. Пересоберите сборку в случае ошибок.

  15. Сделайте скриншоты для регресса (это скриншоты, подтверждающие внесение изменений).

  16. Создавать задачи для агентств.

  17. Загрузить на FTP.
  18. Свяжитесь с агентствами.

  19. При необходимости (например, если был предперенос) пройдите еще один раунд регрессии.

Проблемы этапа лингвистического тестирования: создание скриншотов вручную занимало львиную долю времени.

Если функция имеет примерно 40 экранов и 20 языков, то создание скриншотов вручную может занять до 70 часов.

Помимо этого, существовал еще и человеческий фактор.

Одно дело проходить эти этапы каждые три месяца.

Другое дело — повторять все это каждые две недели.

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

Нужно было найти решение, и довольно быстро.

Каковы были возможные решения? Возможно:

  • нанять больше студентов;
  • сократить объем работ по локализации (а значит, снизить качество);
  • автоматизировать рутинные задачи.

Мы остановились на последнем.



То, что я хотел

У нас не было сто лет, чтобы сесть, налить себе чашку кофе, засучить рукава и начать анализировать весь облачный рынок за год. Мы искали готовое решение, чтобы начать работать уже завтра.

Нашей целью было решить проблему.

Какие еще требования у нас были:

  • Меньше одобрений : чтобы не ждать, пока одобрят покупку, выдадут ключи и все.

  • Готовый базовый функционал л: сесть и начать делать.

    Который не нужно писать с нуля.

    Стабильный.

    Остальное можно корректировать по ходу дела.

  • Не требует огромных мощностей сервера : опять же, чтобы не увязнуть в длительных согласованиях.

  • Недорого (желательно бесплатно) начинаем вход в сервис.

  • Не нужен штатный разработчик : то есть адекватная поддержка на стороне сервера и возможность развернуть ее самостоятельно.

  • Соответствие сервиса требованиям внутренней безопасности : мы подключаемся к сервису, а не он к нам.

  • Поддерживает одновременную работу с несколькими ветками : перевод нескольких функций параллельно.

  • Параллельный запуск дополнительных переводов .

Из различных вариантов мы внимательно рассмотрели Зинг (услуга перевода от разработчиков Evernote).

С положительной стороны :

  • возможность настройки под себя;
  • бесплатный установочный пакет — нужны были только мощности сервера;
  • нет абонентской платы;
  • подключение ваших переводчиков;
  • частный доступ (может размещаться внутри компании).

Минусы : чтобы подключить переводчиков и дать им доступ, нужно было подключить как минимум два отдела.

Что резко увеличило стоимость услуги с точки зрения времени и ресурсов.



Что ты выбрал?

Поскольку мы не можем напрямую подключить CAT-систему к внутренней системе контроля версий, потребовался другой разъем.

Вы можете написать его самостоятельно или взять уже существующий.

Итак, мы протестировали комбинацию Git — Serge — Smartcat. С положительной стороны :

  • Поддержка работы с несколькими ветками.

  • Обновляйте ресурсы на лету.

  • Независимость от CAT-парсеров (написание файлов конфигурации на нашей стороне).

    PO-файлы отправляются в Smartcat.

  • Переписка с фрилансерами практически «в одном окне».

  • Идет поиск и подбор фрилансеров (прямое общение, подбор под нужды проекта – в нашем случае важна скорость и качество перевода).

  • Оплатить работу по всем языкам и проектам можно одним счетом.

  • По нашей просьбе мы повысили приоритет в разработке новых возможностей: ввели новые возможности (текстовый поиск во всех файлах проекта и т.д.), исправили некоторые проблемы.

  • Быстрая техподдержка - помощь с настройкой.

  • Фактически вход в сервис бесплатный (подписка необязательна).

  • Чеки.

Минусы :
  • Поиска текста внутри всего проекта не было (а файлов в проекте может быть более 1000).

    Но разработчики Smartcat представили эту функцию в конце прошлого года.

  • Вы не можете открыть несколько документов в одной вкладке браузера.

  • На каждом языке может быть до 200 файлов ресурсов (документов в Smartcat).

    Пользователю необходимо отредактировать переводы после проверки текста на скриншотах.

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

  • Остается проблема с уведомлениями для фрилансеров: они их отключают и не получают уведомления об обновлении документов.

    В этом случае тоже пишем в чат.



Что вы сделали и как это произошло?

Вкратце, мы изменили процесс работы с текстами интерфейса :) Что сделали:
  • Мы протестировали комбинацию Git — Serge — Smartcat.
  • Согласовали с разработчиками правила именования веток для писателей и локализаторов (это необходимо для удаления переписки с разработчиками, а также для настройки правил для локробота).

  • Перевели на новое решение три сложных проекта (каждый по 25 тысяч слов на язык — это чисто тексты в интерфейсе, 20+ локализаций).

  • Мы загрузили глоссарии в Smartcat и создали конфиги для Сержа.

  • В работе были задействованы внутренние лингвисты и агентство.

  • Мы добавили парсеры на стороне Сержа: на этапе перевода лингвист видит идентификаторы сегментов, комментарии к сегменту и ссылки на справочные скриншоты.

  • Мы запустили cron, который находит ветки по маске локализации и редактирования исходного (английского) языка.

  • Мы опробовали перевод онлайн-справки (успешно).

  • Мы провели первый набор фрилансеров, обучили нашему рабочему процессу: перевод с использованием скриншотов, комментариев и глоссария.

  • Поддерживается Monorepo: разработаны новые файлы конфигурации для Serge с учетом автоматического поиска файлов для локализации в монорепозитории.

  • Наши разработчики реализовали функцию скриншота на основе Фреймворк Каспрессо .

    Это позволило нам решить не только проблему с автоскриншотами * , но и для предоставления контекста переводчикам.

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

    Когда файл с новыми строками «залетает» в Smartcat, ссылки на скриншот попадают в поле «Комментарии к сегменту».

Как сейчас выглядит локализация (9 шагов для всего):
  1. Писатель фиксирует новые строки в Git. Строки автоматически обрабатываются и отправляются в Smartcat.
  2. Локализатор назначает переводчиков (скоро этот шаг уйдет, да, ребята из Smartcat?))))
  3. Переводчики переводят не просто так, а со скриншотами - то есть в контексте.

  4. Локализаторы проверяют перевод (составляют полный файл).

    Робот забирает перевод не построчно, а по завершении работы над всем файлом.

    Перевод автоматически возвращается обратно и отправляется в Git.

  5. Локализаторы запускают автоскриншоты.

  6. Локализаторы загружают скриншоты на FTP.
  7. Локализаторы отвечают на вопросы лингвистов.

  8. Локализаторы при необходимости вносят изменения в Smartcat. Изменения автоматически сохраняются в Git.
  9. Локализаторы закрывают пул-реквесты.

Конечно, еще есть возможности для автоматизации и улучшений.

Но уже чувствуется разница с тем, что было вначале.



Что такое Серж

Это решение с открытым исходным кодом, связующее звено между системой контроля версий (SVN, Git, Gerrit (система проверки кода на основе Git), Mercurial) и TMS, в нашем случае Smartcat. Почему нам понравилось: все облачные TMS имеют разъем из коробки.

Но такие штучные соединители подключаются к репозиторию напрямую.

Что в нашем случае невозможно.

Какие есть варианты:

  • раскрыть часть системы контроля версий;
  • клонировать папки с файлами ресурсов для общего доступа;
  • получать и обрабатывать файлы ресурсов перед отправкой в TMS, а затем экспортировать в TMS.
Раскрывать часть системы рискованно.

Создание клона возможно, но требует времени и человеческих ресурсов.

Серж просто умеет получать файлы ресурсов и обрабатывать их перед отправкой в TMS. В итоге архитектура такая: Git — Serge — TMS. Серж берет файлы из Git и обрабатывает их по определенным правилам.

Затем он конвертирует их в формат PO и отправляет в Smartcat. Серж получает переведенные файлы PO из Smartcat, конвертирует их и отправляет в Git. Для нас также большой плюс, что Серж работает в нашей компании.

Таким образом, вся «кухня» остается за каменной стеной.

Ничего секретного не выходит :) Основные функции:

  • Сопоставьте исходную цель для файла и идентификатор строки ресурса.

  • Возможность выбора файлов по маске пути или содержимому.

  • Обработка содержимого файлов ресурсов до/после синтаксического анализа.

  • Настройка парсеров.

Другие функции Serge можно найти по адресу Веб-сайт или посмотри видеоклип .



Полученные результаты

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



Результаты и цифры

Экран Сколько часов это было (2018) Сколько часов (конец 2019 года)
Соберите строки со всех ветвей.

Вручную

1 0
Получайте только новые или измененные строки за итерацию, загружайте в старый CAT-инструмент для 20 языков.

4 0,25
Создание пакетов для перевода.

Повторите для 20 языков.

0,5 0
Ставьте задачи агентствам/переводчикам.

1 язык = 1 агентство.

2 0
Загрузите пакеты перевода на FTP для каждого языка.

Повторите для 20 языков.

0,5 0
Зарегистрируйтесь, получите подтверждение от агентства/переводчика о том, что задание принято.

Повторите для 20 языков.

2-3 0
Ответьте на вопросы переводчика.

Повторите для 20 языков.

2-4 0,5
Принять перевод для каждого языка 1 0,25
Запустить сборку < 8 (fixing bugs from the old CAT tool) 0,25
Предварительный перевод (повторите все вышеперечисленное) 8 0,25
Получить скриншоты 16-32 (вручную) 8 (автоскриншот)
Загрузить на FTP 8 1
Связаться с агентством/фрилансерами 8 1
Внесение изменений в ресурсы 8 2
Отправить изменения в Git 8 0,25
Чистое время 84 14
Бонусы:
  • Сборки не крашатся: переменные и непереводимые слова размещаются в плейсхолдерах, апострофы экранируются на этапе использования парсеров.

  • Мы не забираем устройства у тестировщиков.

  • Мы не тратим время разработчиков и тестировщиков на попытки исправить сборку или придумать, как сделать тот или иной скриншот.
  • Перевод в контексте: английские скриншоты уже доступны на этапе перевода, их ЛЕГКО открыть и просмотреть.

  • Smartcat позволяет помечать непереведенные сегменты как критическую ошибку — мы нашли несколько важных строк из старого CAT.
Кроме того, комбинация Git — Serge — Smartcat позволила перенести работу UX-писателей в Smartcat. Как мы это сделали, мы расскажем в следующей статье :).

* Подробнее об автоскриншотах: наши коллеги написали автотесты и создали Kaspresso — фреймворк для автотестирования .

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

Как побочный продукт автотестов.

Теги: #автоматизация рутинных работ #локализация интерфейса #локализация продукта #локализация приложений #переводы приложений

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.