Как я прикручивал английский к своему боту TG Notion⁠⁠

Серия TG Notion

Решил я как-то, что моему боту TG Notion пора заговорить по-английски. Казалось бы — чего сложного? Перевёл строки, добавил кнопку, готово.

Ага, щас.

В итоге я три дня чинил то, что не должно было ломаться, и чуть не поседел. Но по порядку.

Первый затык — кнопка

Сначала сделал просто: в шапку добавил кнопку EN/RU. Нажал — язык поменялся. Красота.

Но когда перезапустил Mini App — текст кнопки сбросился на EN, хотя интерфейс остался английским. То есть язык поменялся, а кнопка об этом забыла.

Оказалось, я забыл обновлять текст кнопки при загрузке. Мелочь, но полчаса жизни она мне сожрала.

javascript

javascript

Все строки через t()

Дальше встал вопрос: как переводить всё это хозяйство? Захардкодить английский в HTML? Нет, нужен был нормальный подход.

Сделал словарь translations для двух языков и функцию t(key), которая достаёт нужную строку. Все тексты в интерфейсе — только через t().

javascript

javascript

И всё, что видит пользователь, теперь идёт через t('...'). Кнопки, плейсхолдеры, ошибки, пустые состояния.

Бэкенд тоже надо переводить

Думал, что на этом всё. Хуй там.

Оказалось, что inline-карточки досок генерируются на сервере, а не в Mini App. И если в Mini App язык сменился, сервер об этом знать не знает. Поэтому карточки в чате оставались на русском.

Пришлось и на бэкенде делать переводы. Добавил getLang() и те же ключи.

javascript

javascript

Теперь кнопки в карточках зависят от языка. Но тут вылезла новая залупа.
Синхронизация языка

Проблема: юзер в Mini App выбрал английский, а бэкенд смотрит только на язык Telegram. Если в Telegram русский, а в Mini App английский — карточки всё равно русские.

Решение — сохранять выбранный язык в базу. При переключении в Mini App отправляем язык на сервер, а бэкенд при генерации карточек берёт его из базы.

javascript

javascript

javascript

javascript

После этого язык в Mini App и в карточках наконец совпал.

Склонение — отдельная боль

Казалось бы, всё готово. Но остался пустяк: счётчик заметок.

«1 заметок», «3 заметок» — звучит как говно. Для русского нужны склонения: заметка, заметки, заметок. Для английского проще: note/notes.

javascript

javascript

Убил на это ещё час. Зато теперь «1 заметка», «2 заметки», «5 заметок» — как надо.

Итог

Локализация готова. Теперь TG Notion говорит на двух языках, сохраняет выбор и не путается в склонениях.

Но самое главное — я понял: перевод — это не «поменял строки», а целый слой архитектуры. Особенно когда у тебя фронт, бэкенд и база.

Если интересно посмотреть на код или пощупать бота:

Бот: https://t.me/Telega_notion_bot
Репозиторий: https://github.com/Elrick-from-Malnibone/tg-notion-node

Заходите, тестируйте, ломайте. Всё в открытом доступе.

Правила сообщества

0. Запрещены посты вне тематики сообщества

1. Уважайте труд людей, пишите только конструктивную критику,

2. Не выкладывайте информацию по своему проекту чаще 2ух раз в месяц

1
Автор поста оценил этот комментарий

Забавно. Но про локализацию уже подумали, если захочешь сделать нормально, копай в сторону i18n.

Удачи!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества