В этой статье мы расскажем, как мы переводили локализацию мобильных проектов на Смарткэт , какие боли у нас были изначально и как мы с ними справились.
Кто мы
Всем привет! Мы — Екатерина Галицкая и Дарья Егорушкина из «Лаборатории Касперского» (отдел документации и локализации).Немного конкретнее: команда, в которой мы работаем, отвечает за написание и локализацию интерфейса и справочных текстов для мобильных приложений.
Боль
Основным толчком к изменениям стали потребности развития.Разработка перешла на частые выпуски каждые две недели.
Объем уменьшился, но переводить стали чаще, и делать это нужно было быстрее.
По сути, локализация стала узким местом разработки.
И если раньше руководители проектов даже не знали имен локализаторов — зачем вообще, ведь переводы волшебным образом появлялись сами собой, — то теперь практически все были в курсе проблем и даже знали, что такое лингвистическое тестирование :) Исходные данные.
Сроки
Цикл локализации занял 3 недели:- 3-5 дней – перевод;
- 2 недели – лингвистическое тестирование.
Переводчики знали нашу терминологию, но все равно переводили просто текст, не видя, кнопка это или заголовок, или какой текст находится рядом с ней.
Кроме того, лингвистическое тестирование позволяет отловить ошибки, недоперевод, текст, не включенный в строки (hardcoded text), а также снизить юридические риски (когда тексты об оплате, например, не помещаются в необходимое поле).
Лингвистическое тестирование обычно проводится с использованием скриншотов.
Объемы
Существует миф, что если приложение мобильное, то оно маленькое, и что там надо переводить? Хаха.Немного статистики:
- тексты в интерфейсе – в среднем 25 тысяч слов на проект;
- 10 заявок;
- в среднем 19 локализаций в каждом проекте;
- обновление текстов в интерфейсе, перевод документации каждую неделю.
Почему они не могли ускориться?
Давайте разберемся, из чего состоял каждый из этапов локализации.ЭШаг перевода (9 шагов):
- вручную забирать из ВКС с разных бранчей;
- вручную сгенерировать дельту для перевода;
- создавать пакеты для перевода;
- загрузить на FTP;
- написать кучу писем агентствам, фрилансерам и местным офисам;
- после перевода забрать с FTP, загрузить в CAT, проверить;
- постить в VCS — не запутаться в бранчах;
- запустить сборку, исправить ошибки, пересобрать сборку;
- запускать предварительные переводы и исправлять ошибки в случаях, когда процесс перевода приходилось начинать заново.
- Сбор строк из нескольких веток не поддерживается — дельта для перевода из всех веток формировалась вручную, также вручную раскладывался перевод по веткам.
Трудно было удержаться, легко запутаться и невозможно забыть ужас.
- Вручную поддерживать единообразие внутри проекта и между языками было невозможно.
- Вы не можете параллельно запускать предварительный перевод — обновляйте исходные ресурсы в процессе перевода.
Необходимо было сначала получить первую партию перевода и только после этого приступать к дополнительному переводу.
- Участились случаи падения сборок из-за ошибок в переменных, апострофах и других ошибках локализации.
- Запустите сборку и дождитесь ее.
- Перезапустите, если сборка не удалась из-за ошибок локализации.
- Настройте специальную среду, если меню отладки нет.
- Делайте скриншоты по плану для одного языка.
- Повторите для более чем 20 языков.
- Спросите тестировщиков, как сделать неудачные скриншоты.
- Создавайте пакеты - переименовывайте скриншоты.
- Загрузить на FTP.
- Поставьте задачу агентствам.
- Отвечайте на вопросы агентства.
- Примите задание.
- Внесите правки.
- Соберите билд и ждите его (иногда билды могут стоять в очереди очень долго).
- Пересоберите сборку в случае ошибок.
- Сделайте скриншоты для регресса (это скриншоты, подтверждающие внесение изменений).
- Создавать задачи для агентств.
- Загрузить на FTP.
- Свяжитесь с агентствами.
- При необходимости (например, если был предперенос) пройдите еще один раунд регрессии.
Если функция имеет примерно 40 экранов и 20 языков, то создание скриншотов вручную может занять до 70 часов.
Помимо этого, существовал еще и человеческий фактор.
Одно дело проходить эти этапы каждые три месяца.
Другое дело — повторять все это каждые две недели.
С каждой новой итерацией локализаторы погружались в болото рутины — отправить-получить-снять-повторить.
Нужно было найти решение, и довольно быстро.
Каковы были возможные решения? Возможно:
- нанять больше студентов;
- сократить объем работ по локализации (а значит, снизить качество);
- автоматизировать рутинные задачи.
То, что я хотел
У нас не было сто лет, чтобы сесть, налить себе чашку кофе, засучить рукава и начать анализировать весь облачный рынок за год. Мы искали готовое решение, чтобы начать работать уже завтра.Нашей целью было решить проблему.
Какие еще требования у нас были:
- Меньше одобрений : чтобы не ждать, пока одобрят покупку, выдадут ключи и все.
- Готовый базовый функционал л: сесть и начать делать.
Который не нужно писать с нуля.
Стабильный.
Остальное можно корректировать по ходу дела.
- Не требует огромных мощностей сервера : опять же, чтобы не увязнуть в длительных согласованиях.
- Недорого (желательно бесплатно) начинаем вход в сервис.
- Не нужен штатный разработчик : то есть адекватная поддержка на стороне сервера и возможность развернуть ее самостоятельно.
- Соответствие сервиса требованиям внутренней безопасности : мы подключаемся к сервису, а не он к нам.
- Поддерживает одновременную работу с несколькими ветками : перевод нескольких функций параллельно.
- Параллельный запуск дополнительных переводов .
С положительной стороны :
- возможность настройки под себя;
- бесплатный установочный пакет — нужны были только мощности сервера;
- нет абонентской платы;
- подключение ваших переводчиков;
- частный доступ (может размещаться внутри компании).
Что резко увеличило стоимость услуги с точки зрения времени и ресурсов.
Что ты выбрал?
Поскольку мы не можем напрямую подключить CAT-систему к внутренней системе контроля версий, потребовался другой разъем.Вы можете написать его самостоятельно или взять уже существующий.
Итак, мы протестировали комбинацию Git — Serge — Smartcat. С положительной стороны :
- Поддержка работы с несколькими ветками.
- Обновляйте ресурсы на лету.
- Независимость от CAT-парсеров (написание файлов конфигурации на нашей стороне).
PO-файлы отправляются в Smartcat.
- Переписка с фрилансерами практически «в одном окне».
- Идет поиск и подбор фрилансеров (прямое общение, подбор под нужды проекта – в нашем случае важна скорость и качество перевода).
- Оплатить работу по всем языкам и проектам можно одним счетом.
- По нашей просьбе мы повысили приоритет в разработке новых возможностей: ввели новые возможности (текстовый поиск во всех файлах проекта и т.д.), исправили некоторые проблемы.
- Быстрая техподдержка - помощь с настройкой.
- Фактически вход в сервис бесплатный (подписка необязательна).
- Чеки.
- Поиска текста внутри всего проекта не было (а файлов в проекте может быть более 1000).
Но разработчики Smartcat представили эту функцию в конце прошлого года.
- Вы не можете открыть несколько документов в одной вкладке браузера.
- На каждом языке может быть до 200 файлов ресурсов (документов в Smartcat).
Пользователю необходимо отредактировать переводы после проверки текста на скриншотах.
Пользователь не знает, в каком документе находится этот сегмент. Поэтому пользователю необходимо открыть все 200 документов и выполнить поиск этой строки.
- Остается проблема с уведомлениями для фрилансеров: они их отключают и не получают уведомления об обновлении документов.
В этом случае тоже пишем в чат.
Что вы сделали и как это произошло?
Вкратце, мы изменили процесс работы с текстами интерфейса :) Что сделали:- Мы протестировали комбинацию Git — Serge — Smartcat.
- Согласовали с разработчиками правила именования веток для писателей и локализаторов (это необходимо для удаления переписки с разработчиками, а также для настройки правил для локробота).
- Перевели на новое решение три сложных проекта (каждый по 25 тысяч слов на язык — это чисто тексты в интерфейсе, 20+ локализаций).
- Мы загрузили глоссарии в Smartcat и создали конфиги для Сержа.
- В работе были задействованы внутренние лингвисты и агентство.
- Мы добавили парсеры на стороне Сержа: на этапе перевода лингвист видит идентификаторы сегментов, комментарии к сегменту и ссылки на справочные скриншоты.
- Мы запустили cron, который находит ветки по маске локализации и редактирования исходного (английского) языка.
- Мы опробовали перевод онлайн-справки (успешно).
- Мы провели первый набор фрилансеров, обучили нашему рабочему процессу: перевод с использованием скриншотов, комментариев и глоссария.
- Поддерживается Monorepo: разработаны новые файлы конфигурации для Serge с учетом автоматического поиска файлов для локализации в монорепозитории.
- Наши разработчики реализовали функцию скриншота на основе Фреймворк Каспрессо .
Это позволило нам решить не только проблему с автоскриншотами * , но и для предоставления контекста переводчикам.
Итак, для каждой новой строки в файле добавляется ссылка на скриншот, чтобы понять, где и как используется эта новая строка.
Когда файл с новыми строками «залетает» в Smartcat, ссылки на скриншот попадают в поле «Комментарии к сегменту».
- Писатель фиксирует новые строки в Git. Строки автоматически обрабатываются и отправляются в Smartcat.
- Локализатор назначает переводчиков (скоро этот шаг уйдет, да, ребята из Smartcat?))))
- Переводчики переводят не просто так, а со скриншотами - то есть в контексте.
- Локализаторы проверяют перевод (составляют полный файл).
Робот забирает перевод не построчно, а по завершении работы над всем файлом.
Перевод автоматически возвращается обратно и отправляется в Git.
- Локализаторы запускают автоскриншоты.
- Локализаторы загружают скриншоты на FTP.
- Локализаторы отвечают на вопросы лингвистов.
- Локализаторы при необходимости вносят изменения в Smartcat. Изменения автоматически сохраняются в Git.
- Локализаторы закрывают пул-реквесты.
Но уже чувствуется разница с тем, что было вначале.
Что такое Серж
Это решение с открытым исходным кодом, связующее звено между системой контроля версий (SVN, Git, Gerrit (система проверки кода на основе Git), Mercurial) и TMS, в нашем случае Smartcat. Почему нам понравилось: все облачные TMS имеют разъем из коробки.Но такие штучные соединители подключаются к репозиторию напрямую.
Что в нашем случае невозможно.
Какие есть варианты:
- раскрыть часть системы контроля версий;
- клонировать папки с файлами ресурсов для общего доступа;
- получать и обрабатывать файлы ресурсов перед отправкой в TMS, а затем экспортировать в TMS.
Создание клона возможно, но требует времени и человеческих ресурсов.
Серж просто умеет получать файлы ресурсов и обрабатывать их перед отправкой в TMS. В итоге архитектура такая: Git — Serge — TMS. Серж берет файлы из Git и обрабатывает их по определенным правилам.
Затем он конвертирует их в формат PO и отправляет в Smartcat. Серж получает переведенные файлы PO из Smartcat, конвертирует их и отправляет в Git. Для нас также большой плюс, что Серж работает в нашей компании.
Таким образом, вся «кухня» остается за каменной стеной.
Ничего секретного не выходит :) Основные функции:
- Сопоставьте исходную цель для файла и идентификатор строки ресурса.
- Возможность выбора файлов по маске пути или содержимому.
- Обработка содержимого файлов ресурсов до/после синтаксического анализа.
- Настройка парсеров.
Полученные результаты
Самое главное, что за сравнительно короткий срок, примерно за три месяца, мы решили проблему и перестали быть узким местом.
Результаты и цифры
Экран | Сколько часов это было (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.
* Подробнее об автоскриншотах: наши коллеги написали автотесты и создали Kaspresso — фреймворк для автотестирования .
Здесь был сделан автоскрин, который мы используем при локализации.
Как побочный продукт автотестов.
Теги: #автоматизация рутинных работ #локализация интерфейса #локализация продукта #локализация приложений #переводы приложений
-
О Ненависти К C++
19 Oct, 24 -
Десять Забытых Тегов
19 Oct, 24 -
Им Нечего Было Скрывать
19 Oct, 24 -
Я Найду
19 Oct, 24