Вступление
В этой статье я покажу как я делаю телеграм ботов с поддержкой нескольких языков. Всё для ботов на aiogram, используя пакет Babel.
В принципе, каждый мой бот переведён как минимум на английский, можешь посмотреть любой и ознакомиться подробнее. Самый простой для ознакомления будет TextifyPic_bot. Ну а для продвинутого уровня смотри NotebookOnMarginalia_bot
Наш бот пример будет состоять из 2х *.py файлов, main.py и config.py. В первом будет точка входа и соответствующие обработчики, а во втором настройка для переводов.
Переводы
Ищем необходимые строки
Каждую строку необходимо будет обернуть вокруг алиаса нижнее_подчёркивание. А для этого импортируем соответствующий модуль для бота:
Извлекаем строчки
После того как все необходимые строки были выделены можно начать извлечение строк в директорию locales. Все строки и данные о них будут сохранены в messages.pot файле.
Инициализация локалей
Ты должен будешь сделать ровно столько локалей, сколько языков ты собираешься использовать. В моём случае их 2, и делаются они вот так:
Делаем перевод
После инициализации требуемых локалей можно приступить к самим переводам. То есть открываем сгенерированные .po файлы и записываем переводы.
Язык на котором ты пишешь изначальные тексты переводить не надо.
Компиляция переводов
Теперь скомпилируем переводы. Мы должны будем сгенерировать специальные файлы .mo.
Теперь при посещении такого бота, у пользователя который использует другой язык, будут отображаться правильные строки. Но что если нужно исправить или обновить переводы, для этого предусмотрен немного другой алгоритм.
Обновляем переводы
Сначала извлекаем из всех файлов с переводами, изменения в них.
После обновляем все локали
Обновляем/исправляем переводы. И наконец, компилируем переводы:
Всё, переводы обновлены.
Заключение
Переводы для ботов в телеграм не так просто сделать и могут вызвать достаточно головной боли для того, кто делает это в первые.
Главное уяснить алгоритм для инициализации:
- Оборачиваем необходимые строки.
- Извлекаем всё обёрнутые строки в один мастер файл.
- Инициализируем требуемые локали(языки)
- Переводим
- Компилируем
Для обновления переводов:
- Извлекаем всё обёрнутые строки в один мастер файл.
- Обновляем существующие локали
- Переводим
- Компилируем
Самый сложный шаг, на мой взгляд это наверное сами переводы. А всё остальное дело техники.