Система переводав Badoo
Badoo, Юрий Насретдинов[email protected]
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
• 177+ млн пользователей•PHP-FPM: 30+ тыс запросов в сек• 140 тыс регистраций в день• 3 млн фото / видео в день• 50 языков интерфейса
О компании
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Система перевода
Hello
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Система перевода Привет
שלום
Bonjour
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Blitz-шаблоны<h1>Results</h1><!-- BEGIN NOTHING -->No results found<!-- END NOTHING --><!-- BEGIN RESULT --><div>Name {{name}}, {{score}}</div><!-- END RESULT -->
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Linc-файлы (тексты)
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Blitz-шаблоны
• Шаблоны обрабатываются с помощью движка Blitz
• С помощью умного алгоритма™ выделяются куски текста: лексемы
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Blitz-шаблоны<h1>Results</h1><!-- BEGIN NOTHING -->No results found<!-- END NOTHING --><!-- BEGIN RESULT --><div>Name {{name}}, {{score}}</div><!-- END RESULT -->
root_0: #1
NOTHING: NOTHING_0: #2
RESULT: RESULT_0: #3
#3
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Генерация файлов<h1>Results</h1><!-- BEGIN NOTHING -->No results found<!-- END NOTHING --><!-- BEGIN RESULT --><div>Name {{name}}, {{score}}</div><!-- END RESULT -->
<h1>Результаты</h1><!-- BEGIN NOTHING -->Результатов не найдено<!-- END NOTHING --><!-- BEGIN RESULT --><div>Имя {{name}},{{score}}</div><!-- END RESULT -->
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Генерация файлов
• Нет специальных маркеров лексем
• Пре-генерируются шаблоны, переведенные на все языки
• + 100 000 файлов при деплое
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Лексемы• Каждая лексема получает свой идентификатор (Lexem_id)
• Даже лексемы с тем же текстом каждый раз* получают новый id
• Переводчики могут независимо поменять любой текст на сайте
* В новом контексте
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Типичный workflowZAPILIT-1Задача:
Ветка: ZAPILIT-1_done_job(7bf41e1cae80ec6)
+ file1.tpl- file2.phpM file3.tpl
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Типичный workflowЛексемы:
ZAPILIT-1:3 новых5 изменено
Деплой: git merge ZAPILIT-1
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Типичный workflowЛексемы:
ZAPILIT-1:3 новых5 изменено
Деплой: git merge ZAPILIT-1
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Mini-staging: «шоты»• Staging из текущей ветки
• Быстрое создание
• Лексемы попадают на перевод во время тестирования задачи
• Позволяют сократить время ожидания переводчиков
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Иерархия языков
Master
Devel
English (UK) Portuguese (Brazil)
Portuguese (Portugal)
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Иерархия языков
• Отдельный язык — Devel
• Сначала переводится на Master
• Перевод наследуется от родителя
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Проблемы с git?
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Интеграция с git
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Проблемы с git
• Один файл могут редактировать в разных ветках одновременно
• Ветки могут мержить друг в друга
• Нужно сохранять id лексем после мержа двух версий файла
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Хранение данных• Полная структура файла хранится в базе данных
• Каждой лексеме в файле выдается уникальный id
root_0: #1
NOTHING: NOTHING_0: #2
RESULT: RESULT_0: #3
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Что делать?• «Контекст» лексемы #3:
«RESULT / RESULT_0»
• Уровень вложенности блоков имеет значение
• Лексемы с тем же содержимым имеют такое же название лексемы (RESULT_0)
root_0: #1
NOTHING: NOTHING_0: #2
RESULT: RESULT_0: #3
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Интеграция с git• Хранятся мастер-версии и диффы к мастеру
• Между собой диффы не мержатся
• Лексемы в том же контексте получают тот же id
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Сохранение id лексем
root_0: #1
NOTHING: NOTHING_0: #2
root_0: #1
RESULT: RESULT_0: #3
+
Задача1 Задача2
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Сохранение id лексемroot_0: #1
NOTHING: NOTHING_0: #2
RESULT: RESULT_0: #3
Задача1
Задача2
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Summary• Лексемы выделяются автоматически из HTML-кода и linc-файлов
• Полная прегенерация шаблонов
• Интеграция с git и таск-трекером
• Задачи попадают на перевод в момент начала тестирования задачи
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Вопросы
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Спасибо за внимание!
Badoo, Юрий Насретдинов[email protected]
twitter.com/YNasretdinov
23.10.12, 0:08
Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg
Интерфейс