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 часов и не нагружать разработчиков рутиной.

Badoo Tech

April 21, 2020
Tweet

More Decks by Badoo Tech

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. 3

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. Это строка, фраза или целый текст —
    неделимая единица для перевода
    Лексема
    8

    View Slide

  9. ТЕХНИЧЕСКОЕ
    ЗАДАНИЕ
    9

    View Slide

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

    View Slide

  11. Do you smoke?
    Yes No
    11

    View Slide

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

    View Slide

  13. Fancy visiting a party?
    Yes No
    13

    View Slide

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

    View Slide

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

    View Slide

  16. ПЕРЕВОД
    16

    View Slide

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

    View Slide

  18. Порядок перевода
    18

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. Контекст
    23

    View Slide

  24. Контекст
    24

    View Slide

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

    View Slide

  26. Контекст
    26

    View Slide

  27. Контекст
    27

    View Slide

  28. Контекст
    28

    View Slide

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

    View Slide

  30. ТЕКСТ ДО ТЕКСТ ДО ТЕКСТ ДО ТЕКСТ ДО ТЕКСТ ДО
    ТЕКСТ ПОСЛЕ ТЕКСТ ПОСЛЕ ТЕКСТ ПОСЛЕ
    Перевод лексемы должен быть согласован
    с текстом ДО и ПОСЛЕ
    Контекст
    30

    View Slide

  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

    View Slide

  32. Контекст
    Stories
    32

    View Slide

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

    View Slide

  34. Единый стиль
    34

    View Slide

  35. - Your account has been blocked
    - You’ve been blocked
    - UH OH!
    Единый стиль
    35

    View Slide

  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:[email protected]]]! Хотите повторить?
    Память переводов
    36

    View Slide

  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:[email protected]]]! Хотите повторить?
    You got an extra {{num_likes}}
    {{num_matches}} [[likes:num_likes]]
    [[matches:num_matches]] – fancy another
    go?
    84 % Вы получили {{num_matches}}
    [[matches:[email protected]]]! Хотите
    повторить?
    Память переводов
    37

    View Slide

  38. Падежи и числительные
    38

    View Slide

  39. 39

    View Slide

  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

    View Slide

  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:[email protected]]],
    чтобы отправить подарок {{second_user_name}}.
    Перевод с указанием падежа
    Число от
    разработчика
    Выбранный
    переводчиком падеж
    41

    View Slide

  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
    Перевод с указанием падежа

    View Slide

  43. Проверка переводов
    43

    View Slide

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

    View Slide

  45. Проверка переводов
    You need {{num}} {{credits}}
    45

    View Slide

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

    View Slide

  47. Проверка переводов
    Уже сентябрь?! Решайте, кто согреет вас этой осенью ❤
    It’s September?! A whole new month of ❤
    47

    View Slide

  48. • Контекст переводчикам — всегда!
    • Гибкая система === уместные переводы
    • Нужна автоматическая проверка переводов
    Вывод
    48

    View Slide

  49. ПОМОЩЬ
    ПОЛЬЗОВАТЕЛЕЙ
    49

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  56. 56

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  60. Вы получили дополнительные {{num_likes}}
    [[likes:num_likes]] - попробуем еще раз?
    Votes: 6
    У тебя есть дополнительные {{num_likes}}
    [[likes:num_likes]] – попробуешь еще раз?
    Votes: 3
    Совместный перевод
    60

    View Slide

  61. Вывод
    • Пользователи подскажут
    • И помогут!
    61

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  67. Ошибки при
    использовании лексем
    67

    View Slide

  68. Напишите {{[email protected]}} за
    {{credits_amount}} [[credits:[email protected]]]
    Ошибки при использовании лексем
    Число от разработчика
    Матрица падежных форм
    слова Кредит Падеж от переводчика
    Падеж от переводчика
    Имя пользователя
    от разработчика
    68

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  72. Вывод
    • Разработчики должны заниматься
    только функционалом
    • Нужна автоматическая проверка
    значений переменных
    Это экономит нервы
    72

    View Slide

  73. КОНТРОЛЬ
    КАЧЕСТВА
    73

    View Slide

  74. 74

    View Slide

  75. 75

    View Slide

  76. 76

    View Slide

  77. 77

    View Slide

  78. 78

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  82. 82

    View Slide

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

    View Slide

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

    View Slide

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

    ...


    Знакомства


    ...

    View Slide

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

    View Slide

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

    View Slide

  88. Стоит отметить
    • Нужно понять, какими устройствами
    пользуется ваша аудитория
    • Обязательно тестировать на всех
    целевых устройствах
    • Может помочь выборочный аудит
    переводов
    88

    View Slide

  89. РЕЛИЗ
    89

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  95. Версионирование
    переводов
    95

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  99. Релизы на разные
    платформы
    99

    View Slide

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

    View Slide

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

    View Slide

  102. • AppStore
    • GooglePlay

    Hot Update
    Production
    Server
    102
    Перевод
    интегрированный
    Перевод с сервера
    Обновление
    интегрированного
    перевода
    Релиз переводов
    Вы понравились друг другу!

    View Slide

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

    View Slide

  104. ИТОГИ
    104

    View Slide

  105. Подробное ТЗ
    +
    Контекст, история переводов
    +
    Автоматизирование контроля
    +
    Свобода разработчиков
    от непрофильных задач
    =
    Формула успеха
    105

    View Slide

  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

    View Slide