Upgrade to Pro — share decks privately, control downloads, hide ads and more …

зыки, платформы, версии: масштабируем локализацию — Алексей Тимин(Badoo)

зыки, платформы, версии: масштабируем локализацию — Алексей Тимин(Badoo)

Выступление на Live! Badoo Localization Meetup (21/04/2020)

Если у продукта, который вы делаете, глобальные планы, то рано или поздно вам придется столкнуться с локализацией. Перевести на английский — полбеды, но когда добавляются новые языки и диалекты, то возникают не всегда очевидные трудности. Нужно уметь контролировать все изменения. А если ко всему прочему у вас параллельно могут существовать несколько версий одного текста… Вам не позавидуешь!

В случае нашей компании речь идет о четырех разных продуктах, 52 языках (11 из них — диалекты), 17 падежах в венгерском языке, письме справа налево в арабском и иврите, числительных в русском и огромном количестве версий и клиентов.

В докладе я поделюсь описанием нашего процесса перевода. Расскажу об интеграции локализации и Jira, об использовании Git-хуков и автоматических скриншотах. Мы разберём, как проводить А/B-тестирование. Обсудим, как обеспечить единство стиля с помощью глоссария и памяти переводов на ElasticSearch, а также как успевать переводить новый функционал за 48 часов и не нагружать разработчиков рутиной.

De18318c9ff86ea93435effe50a43c4b?s=128

Badoo Tech

April 21, 2020
Tweet

More Decks by Badoo Tech

Other Decks in Programming

Transcript

  1. Алексей Тимин · 21 Апреля ЯЗЫКИ, ПЛАТФОРМЫ, ВЕРСИИ: МАСШТАБИРУЕМ ЛОКАЛИЗАЦИЮ

    1
  2. Алексей Тимин Ведущий разработчик системы локализации, Badoo 2

  3. 3

  4. 150 000 фраз и текстов 52 языка и переводчика 300

    разработчиков 4
  5. • Проблемы переводчиков • Проблемы разработчиков • Нестандартный контроль качества

    • Проблемы релиза переводов 5
  6. «Система переводов - огонь!» Разработчики Badoo 6

  7. Локализация проекта Перевод Разработка клиента Контроль качества локализации Релиз локализованной

    версии ТЗ Разработка сервера 7
  8. Это строка, фраза или целый текст — неделимая единица для

    перевода Лексема 8
  9. ТЕХНИЧЕСКОЕ ЗАДАНИЕ 9

  10. Лексема Отдается сервером? Ключ Сan't connect Нет cannot_connect <a>Send a

    request</a> to get access to {{contact_name}}’s friends Да 123 You need {{credits_amount}} [[credits:credits_amount]] to let her know she’s your crush. Да she_crush ТЗ. Таблица лексем 10
  11. Do you smoke? Yes No 11

  12. Вы курите? Курю Не курю 12

  13. Fancy visiting a party? Yes No 13

  14. Пойдете на вечеринку? Курю Не курю 14

  15. • Мы учитываем использование лексемы в разных контекстах • Указываем,

    отдается лексема сервером или интегрируется в клиент Это экономит время Вывод 15
  16. ПЕРЕВОД 16

  17. Перевод • Порядок перевода • Контекст • Единый стиль •

    Падежи и числительные • Проверка переводов 17
  18. Порядок перевода 18

  19. Порядок перевода Язык N Понятный большинству переводчиков язык Язык 1

    Язык 2 19
  20. Порядок перевода EN Master 20 EN Великобритания EN США EN

    Австралия EN Канада EN Индия RU Россия ES Испания FR Франция ES Аргентина ES Мексика ES Колумбия FR Канада
  21. Порядок перевода EN Master 21 EN Великобритания EN США EN

    Австралия EN Канада EN Индия RU Россия ES Испания FR Франция ES Аргентина ES Мексика ES Колумбия FR Канада Hey! Неформальное приветствие ¡Hola! Salut! Привет! G’day mate ¿Qué onda?
  22. Порядок перевода EN Master 22 EN Великобритания EN США EN

    Австралия EN Канада EN Индия RU Россия ES Испания FR Франция ES Аргентина ES Мексика ES Колумбия FR Канада Hello! Стало более официально Salut! Привет! Надо проверить переводы! G’day mate ¡Hola! ¿Qué onda?
  23. Контекст 23

  24. Контекст 24

  25. Nozzle Gun Контекст 25

  26. Контекст 26

  27. Контекст 27

  28. Контекст 28

  29. Создание/редактирование лексем • Текстовое описание • Картинка • М /

    Ж • Типы переменных • Максимальная длина • Большой текст разбивается на части Контекст 29
  30. ТЕКСТ ДО ТЕКСТ ДО ТЕКСТ ДО ТЕКСТ ДО ТЕКСТ ДО

    ТЕКСТ ПОСЛЕ ТЕКСТ ПОСЛЕ ТЕКСТ ПОСЛЕ Перевод лексемы должен быть согласован с текстом ДО и ПОСЛЕ Контекст 30
  31. Unlock your Likes List to see everyone who’s interested at

    once Term Description Likes Noun Folder containing people who liked you - formerly "Admirateurs / Fans" Глоссарий 31
  32. Контекст Stories 32

  33. Вариант перевода Численная переменная М / Ж Web / Android

    / iOS Badoo / Bumble ? Зависимость перевода 33
  34. Единый стиль 34

  35. - Your account has been blocked - You’ve been blocked

    - UH OH! Единый стиль 35
  36. You got an extra {{num_likes}} [[likes:num_likes]] – fancy another go?

    Совпадение Схожесть Перевод You got an extra {{num_likes}} [[likes:num_likes]] – fancy another go? 100 % Вы получили {{num_likes}} [[likes:num_likes@3]]! Хотите повторить? Память переводов 36
  37. You got an extra {{num_likes}} [[likes:num_likes]] – fancy another go?

    Совпадение Схожесть Перевод You got an extra {{num_likes}} [[likes:num_likes]] – fancy another go? 100 % Вы получили {{num_likes}} [[likes:num_likes@3]]! Хотите повторить? You got an extra {{num_likes}} {{num_matches}} [[likes:num_likes]] [[matches:num_matches]] – fancy another go? 84 % Вы получили {{num_matches}} [[matches:num_matches@3]]! Хотите повторить? Память переводов 37
  38. Падежи и числительные 38

  39. 39

  40. Падеж \ Число 1, 21, 31, 41… 2-4 22-24, 32-34…

    0, 5-20, 25-30, 35-40… x.1-x.9 0. Именительный кредит кредита кредита кредитов кредита 1. Родительный кредита кредитов кредитов кредитов кредитов 2. Дательный кредиту кредитам кредитам кредитам кредитам 3. Винительный кредит кредита кредита кредитов кредита 4. Творительный кредитом кредитами кредитами кредитами кредитами 5. Предложный кредите кредитах кредитах кредитах кредитах Матрица падежных форм 40
  41. Падеж \ Число 1, 21, 31, 41… 2-4 22-24, 32-34…

    0, 5-20, 25-30, 35-40… x.1-x.9 0. Именительный кредит кредита кредита кредитов кредита 1. Родительный кредита кредитов кредитов кредитов кредитов 2. Дательный кредиту кредитам кредитам кредитам кредитам 3. Винительный кредит кредита кредита кредитов кредита 4. Творительный кредитом кредитами кредитами кредитами кредитами 5. Предложный кредите кредитах кредитах кредитах кредитах Вам нужно {{credits_amount}} [[credits:credits_amount@3]], чтобы отправить подарок {{second_user_name}}. Перевод с указанием падежа Число от разработчика Выбранный переводчиком падеж 41
  42. Падеж \ Число 1, 21, 31, 41… 2-4 22-24, 32-34…

    0, 5-20, 25-30, 35-40… x.1-x.9 0. Именительный кредит кредита кредита кредитов кредита 1. Родительный кредита кредитов кредитов кредитов кредитов 2. Дательный кредиту кредитам кредитам кредитам кредитам 3. Винительный кредит кредита кредита кредитов кредита 4. Творительный кредитом кредитами кредитами кредитами кредитами 5. Предложный кредите кредитах кредитах кредитах кредитах Вам нужно 10 кредитов , чтобы отправить подарок {{second_user_name}}. 42 Перевод с указанием падежа
  43. Проверка переводов 43

  44. Проверка переводов Уже сентябрь?! ? Решайте, кто согреет вас этой

    осенью ❤ 44
  45. Проверка переводов You need <b>{{num}} {{credits}}</b> 45

  46. Проверка переводов You need <b>{{num}} {{credits}}</b> 46

  47. Проверка переводов Уже сентябрь?! Решайте, кто согреет вас этой осенью

    ❤ It’s September?! A whole new month of ❤ 47
  48. • Контекст переводчикам — всегда! • Гибкая система === уместные

    переводы • Нужна автоматическая проверка переводов Вывод 48
  49. ПОМОЩЬ ПОЛЬЗОВАТЕЛЕЙ 49

  50. Помощь пользователей • АБ-тестирование • Совместный перевод 50

  51. A/B-ТЕСТИРОВАНИЕ ПЕРЕВОДОВ 51

  52. Готовы к новым знакомствам? Присоединяйтесь! Еще пара шагов… И вы

    станете частью Badoo! ИЛИ A/B-тестирование переводов 52
  53. A/B-тестирование переводов Готовы к новым знакомствам? Присоединяйтесь! Еще пара шагов…

    И вы станете частью Badoo! ИЛИ 53
  54. Вариант перевода Численная переменная М / Ж Web / Android

    / iOS Badoo / Bumble ? Зависимость перевода 54
  55. Вариант перевода Численная переменная М / Ж Web / Android

    / iOS Badoo / Bumble A/B-тест Зависимость перевода 55
  56. 56

  57. 2 дня 5000 лексем 57

  58. СОВМЕСТНЫЙ ПЕРЕВОД translate.badoo.com 58

  59. Совместный перевод 59

  60. Вы получили дополнительные {{num_likes}} [[likes:num_likes]] - попробуем еще раз? Votes:

    6 У тебя есть дополнительные {{num_likes}} [[likes:num_likes]] – попробуешь еще раз? Votes: 3 Совместный перевод 60
  61. Вывод • Пользователи подскажут • И помогут! 61

  62. РАЗРАБОТКА 62

  63. • Параллельная разработка • Ошибки при использовании лексем Разработка 63

  64. Параллельная разработка 64

  65. Параллельная разработка Отправь подарок send_gift Открыть приватные фото show_private …

    … Отправь подарок send_gift Открыть приватные фото show_photo … … Лексемы.txt Лексемы.txt 65
  66. Параллельная разработка Создание / изменение лексем в системе локализации Скачивание

    набора лексем Разработчики Отправь подарок send_gift Открыть приватные фото show_private … … 66
  67. Ошибки при использовании лексем 67

  68. Напишите <b>{{second_user_name@2}}</b> за {{credits_amount}} [[credits:credits_amount@3]] Ошибки при использовании лексем Число

    от разработчика Матрица падежных форм слова Кредит Падеж от переводчика Падеж от переводчика Имя пользователя от разработчика 68
  69. class TextContainer { private $translation = 'Напишите <b>{{second_user_name@2}}</b> за {{credits_amount}}

    [[credits:credits_amount@3]]'; private $var_types = [ 'second_user_name' => 'name', 'credits_amount' => 'int', ]; public function getReplaced(array $substitutions) { // Проверка типов значений, переданных для подстановки // Подстановка // return (все подстановки сделаны) ? Строка : Container; } public function __toString() { // Warning!!! Не все подстановки произведены!!! } } Контроль использования лексем 69
  70. class TextContainer { private $translation = 'Напишите <b>{{second_user_name@2}}</b> за {{credits_amount}}

    [[credits:credits_amount@3]]'; private $var_types = [ 'second_user_name' => 'name', 'credits_amount' => 'int', ]; public function getReplaced(array $substitutions) { // Проверка типов значений, переданных для подстановки // Подстановка // return (все подстановки сделаны) ? Строка : Container; } public function __toString() { // Warning!!! Не все подстановки произведены!!! } } Контроль использования лексем 70
  71. class TextContainer { private $translation = 'Напишите <b>{{second_user_name@2}}</b> за {{credits_amount}}

    [[credits:credits_amount@3]]'; private $var_types = [ 'second_user_name' => 'name', 'credits_amount' => 'int', ]; public function getReplaced(array $substitutions) { // Проверка типов значений, переданных для подстановки // Подстановка // return (все подстановки сделаны) ? Строка : Container; } public function __toString() { // Warning!!! Не все подстановки произведены!!! } } Контроль использования лексем 71
  72. Вывод • Разработчики должны заниматься только функционалом • Нужна автоматическая

    проверка значений переменных Это экономит нервы 72
  73. КОНТРОЛЬ КАЧЕСТВА 73

  74. 74

  75. 75

  76. 76

  77. 77

  78. 78

  79. Варианты контроля 79

  80. Тестовая версия сайта или приложения 80

  81. Проверка тестовой версии 81

  82. 82

  83. Скриншоты приложения 83

  84. Скриншоты из тестового окружения 84

  85. Скриншоты из тестового окружения 85 <ul> <li>...</li> <li> <!--lexeme_12345--> Знакомства

    <!--lexeme_12345_end--> </li> <li>...</li> </ul>
  86. Контроль во время перевода 86

  87. Контроль во время перевода 87

  88. Стоит отметить • Нужно понять, какими устройствами пользуется ваша аудитория

    • Обязательно тестировать на всех целевых устройствах • Может помочь выборочный аудит переводов 88
  89. РЕЛИЗ 89

  90. Версионирование лексем 90

  91. Версионирование лексем Подключите СуперСилу 91

  92. Версионирование лексем Подключите Badoo Премиум 92

  93. Версионирование лексем Jira Версия лексем Ветка задачи 93 Новая версия

    проекта Откат В релиз
  94. Версионирование лексем Версия лексем 94 В разработке В тестировании У

    пользователей Версия лексем Версия лексем
  95. Версионирование переводов 95

  96. Версионирование переводов It's a remath 96

  97. Версионирование переводов It’s a rematch 97

  98. Версионирование переводов Версия переводов 98 В разработке В тестировании У

    пользователей Версия переводов Версия переводов
  99. Релизы на разные платформы 99

  100. Перевод интегрированный Перевод с сервера Вы понравились друг другу! Релиз

    переводов 100
  101. • AppStore • GooglePlay Production Server 101 Перевод интегрированный Перевод

    с сервера Релиз переводов Вы понравились друг другу!
  102. • AppStore • GooglePlay Hot Update Production Server 102 Перевод

    интегрированный Перевод с сервера Обновление интегрированного перевода Релиз переводов Вы понравились друг другу!
  103. Вывод • Нужно учитывать путь релиза вашего приложения от вас

    до клиентов • Разные части приложения могут обновляться по-разному 103
  104. ИТОГИ 104

  105. Подробное ТЗ + Контекст, история переводов + Автоматизирование контроля +

    Свобода разработчиков от непрофильных задач = Формула успеха 105
  106. CHEERS! Переводим интерфейсы на полсотни языков. Sketch tech.badoo.com/ru/article/397/ Обновление строк

    на лету в мобильных приложениях tech.badoo.com/ru/article/403/ tech.badoo.com/ru/article/419/ А/Б-тестирование habr.com/ru/company/badoo/blog/498174/ Еще много крутого на tech.badoo.com 106