Перевести бота кажется простой задачей: собрать все фразы, отдать переводчику, вставить обратно. На деле половина работы начинается после этого. Мы недавно перевели бота «Яна», помощника семейного психолога, с русского на английский и грузинский. Ниже то, что всплыло по ходу. Если вы заказываете многоязычного бота, по этому списку удобно проверить подрядчика. Если переводите своего сами, это места, куда стоит заглянуть до того, как туда заглянут пользователи.
Все тексты в одном месте, и пропуск должен быть громким
Первое, что приходится сделать, это найти все фразы, которые видит человек. Они разбросаны по коду: приветствие, подписи кнопок, подтверждения, ошибки, тексты напоминаний, подписи в выгрузке дневника. Мы свели их в один словарь, где у каждой русской фразы есть английская и грузинская пара, а бот берёт текст только через этот словарь.
Важная деталь в том, что происходит, если перевода нет. Самый удобный для разработчика вариант — тихо показать русский текст. Самый плохой для пользователя тоже он: человек, выбравший грузинский, через неделю видит посреди разговора русскую кнопку и не понимает, сломалось что-то или так задумано. Поэтому у нас отсутствующий перевод валит проверки ещё до выкладки, а не всплывает у пользователя.
Напоминание приходит не на том языке
Это самая коварная ошибка, потому что в обычном разговоре её не видно. Пока человек пишет боту, бот знает, на каком языке тот общается. А утреннее напоминание отправляется само, по расписанию, вне всякого разговора. Если код напоминания берёт язык «из текущей беседы», он получает значение по умолчанию, и человек, выбравший английский, получает напоминание по-русски.
Лечится это правилом: всё, что бот отправляет по своей инициативе, берёт язык из профиля пользователя, а не из контекста. Напоминания, вечерние вопросы, ежедневные итоги, выгрузки. Проверять это нужно отдельно, запуская именно отложенную отправку, потому что ручной прогон по меню такую ошибку не покажет.
Кнопка возврата должна остаться узнаваемой
Эту ошибку мы поймали сами, когда проверяли бота с настоящего аккаунта. Переключили язык на грузинский, потом захотели вернуться и не нашли кнопку «Русский»: её тоже перевели, и в меню стояло грузинское слово. Человек, который нажал не туда и попал в незнакомый язык, оказывается в той же ловушке, только без возможности прочитать подсказки.
Названия языков в переключателе всегда пишутся на самих этих языках: «Русский», «English», «ქართული». Это одно из немногих мест в боте, которое не переводится никогда, и это стоит закрепить проверкой, чтобы следующий переводчик не «исправил» его из лучших побуждений.
Заглавные буквы есть не везде
При проверке после перевода выяснилось, что бот иногда пишет с маленькой буквы: в части кнопок и подтверждений первая буква была строчной. Мы поправили русский и английский и добавили проверку, что подписи начинаются с заглавной.
С грузинским мы тут же ошиблись. В грузинском письме нет деления на строчные и прописные буквы. Есть отдельное начертание для заголовков, но в обычном тексте его не используют, и фраза, «поднятая» по правилам русского, выглядит для носителя странно. Проверку пришлось научить, что для грузинского она не действует. Вывод общий: правила оформления, которые кажутся универсальными, обычно оказываются правилами одного-двух языков, и на каждый новый язык их надо пересматривать.
Бот говорит о себе в мужском роде
По-английски бот может сказать «Saved», и никто не задумается, кто это сказал. По-русски приходится выбрать: «Сохранил» или «Сохранила». «Яна» — женский персонаж, но часть фраз писалась в разное время разными людьми, и в итоге бот то «записала», то «не сохранил». Пользователи такие вещи замечают сразу, а в боте, где человек делится личным, разнобой ломает ощущение, что говорит один и тот же собеседник.
Рядом стоит вторая сторона: бот не знает пол пользователя. Фразы вроде «ты справился» половину аудитории задевают. Мы прошлись по всем текстам и переписали обращения к человеку так, чтобы они не требовали рода. Это тоже стоит закрепить проверкой, потому что новые фразы появляются постоянно.
Голос должен совпадать с языком
Бот умеет отвечать голосом. Голос подбирается под язык и под персонажа: у каждого языка свой голос синтеза речи, и русский голос, читающий грузинский текст, звучит хуже, чем его отсутствие. Поэтому пару «язык — голос» мы держим в одном месте и проверяем, что для каждого поддерживаемого языка она задана.
Перевод проверяет носитель
Машинный перевод интерфейса сегодня выглядит прилично, но тон он передаёт плохо. В грузинском, например, нужно заранее решить, обращается бот к человеку на «вы» или на «ты», и выдержать это во всех фразах; машина легко смешивает оба варианта в соседних сообщениях. Мы закрепили выбранное обращение проверкой, а законченным перевод считаем только после того, как его прочитал носитель языка.
Крупные тексты вроде каталога упражнений мы переводим отдельно от интерфейса. Это уже не подписи кнопок, а содержание, и к нему нужен другой уровень вычитки.
Что из этого входит в работу
Всё перечисленное мы закладываем, когда делаем Telegram-бота на заказ на нескольких языках: единый словарь с громкой ошибкой на пропуск, язык из профиля для всего, что бот отправляет сам, неизменные названия языков в переключателе, правила оформления под каждый язык, единый голос персонажа и проверку носителем. Завершаем прогоном с настоящего аккаунта Telegram, потому что часть ошибок видна только там.
Если ваш бот уже говорит на нескольких языках и ведёт себя странно (напоминания приходят не на том языке, где-то проскакивает русский, пользователи не могут вернуться к своему языку), напишите в Telegram @signmark. Посмотрим и скажем, в чём дело.
Craft Podium