29
Система перевода в Badoo Badoo, Юрий Насретдинов [email protected]

Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

  • Upload
    ontico

  • View
    315

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

Система переводав Badoo

Badoo, Юрий Насретдинов[email protected]

Page 2: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

• 177+ млн пользователей•PHP-FPM: 30+ тыс запросов в сек• 140 тыс регистраций в день• 3 млн фото / видео в день• 50 языков интерфейса

О компании

Page 3: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Система перевода

Hello

Page 4: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Система перевода Привет

שלום   

Bonjour

Page 5: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

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 -->

Page 6: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Linc-файлы (тексты)

Page 7: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Blitz-шаблоны

• Шаблоны обрабатываются с помощью движка Blitz

• С помощью умного алгоритма™ выделяются куски текста: лексемы

Page 8: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

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

Page 9: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

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 -->

Page 10: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Генерация файлов

• Нет специальных маркеров лексем

• Пре-генерируются шаблоны, переведенные на все языки

• + 100 000 файлов при деплое

Page 11: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Лексемы• Каждая лексема получает свой идентификатор (Lexem_id)

• Даже лексемы с тем же текстом каждый раз* получают новый id

• Переводчики могут независимо поменять любой текст на сайте

* В новом контексте

Page 12: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

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

Page 13: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Типичный workflowЛексемы:

ZAPILIT-1:3 новых5 изменено

Деплой: git merge ZAPILIT-1

Page 14: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Типичный workflowЛексемы:

ZAPILIT-1:3 новых5 изменено

Деплой: git merge ZAPILIT-1

Page 15: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Mini-staging: «шоты»• Staging из текущей ветки

• Быстрое создание

• Лексемы попадают на перевод во время тестирования задачи

• Позволяют сократить время ожидания переводчиков

Page 16: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Иерархия языков

Master

Devel

English (UK) Portuguese (Brazil)

Portuguese (Portugal)

Page 17: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Иерархия языков

• Отдельный язык — Devel

• Сначала переводится на Master

• Перевод наследуется от родителя

Page 18: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Проблемы с git?

Page 19: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Интеграция с git

Page 20: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Проблемы с git

• Один файл могут редактировать в разных ветках одновременно

• Ветки могут мержить друг в друга

• Нужно сохранять id лексем после мержа двух версий файла

Page 21: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

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

Page 22: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

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

Page 23: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Интеграция с git• Хранятся мастер-версии и диффы к мастеру

• Между собой диффы не мержатся

• Лексемы в том же контексте получают тот же id

Page 24: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

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

Page 25: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

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

Page 26: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Summary• Лексемы выделяются автоматически из HTML-кода и linc-файлов

• Полная прегенерация шаблонов

• Интеграция с git и таск-трекером

• Задачи попадают на перевод в момент начала тестирования задачи

Page 27: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Вопросы

Page 28: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Спасибо за внимание!

Badoo, Юрий Насретдинов[email protected]

twitter.com/YNasretdinov

Page 29: Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)

23.10.12, 0:08

Страница 1 из 1http://badoocdn.com/v2/-/-/i/logo.5.svg

Интерфейс