разными языками?
Начни с примера по i18n в репозитории aiogram
лично я храню в json-файликах, которые выгружаются в память (сгенерированный класс) на старте бота https://t.me/aiogram_ru/1015475
Да, мне тоже один друг советовал в них. Щас почитаю i18n, Груша плохого не посоветует.
Если чё, я этот i18n ненавижу
Ммммммммм, ладно
Ну, попробуйте флюент, от мозиллы. Питон адаптеров аж две штуки
Я так понимаю фичей вроде роллбэка у тебя нет
Приведи пример работы этого механизма
код загрузки словарей в память сначала анализирует файлы. если они отличаются по структуре от главного, он их насильно меняет, т.е. добавляет значения из главного, которые можно потом перевести на нужный en.json: {'hello': 'world' 'kek': 'lol'} ru.json: {'hello': 'мир'} после перезапуска ru.json изменяется на: {'hello': 'мир' 'kek': 'lol'}
Заебись, по сути это роллбек, но он пишет файл, что плохо. Я щас к своему модулю пилю роллбек по карте локалей. А у тебя можно жсоны тянуть откуда угодно? А что насчёт форматирования переменных?
А current language в бд храниться, правильно?
Речь про пример из доки аиограм или вообще?
да файлов мало и они не очень большие, так что норм ну сейчас настроено что бот проходится по всем json-файлам в папке langdir/ когда надо форматировать, пишу строки типа "hello {user}" чтобы уже в коде юзать как l.hello.format(user='Mars')
А что есть сказать насчёт флюента?
да всё никак руки не дойдут. Я согласен с Алексом, что для флюента нет толковых инструментов (и энтузиазма со стороны Mozilla), но всё равно мне это больше нравится, чем gettext
Хм, хз. Мой модуль позволяет брать контент файлов флюента откуда хочешь, хоть из базы данных, причём любой. Кроме того: 1) Нормальные преобразователи данных, в том числе под кастомные функции флюента 2) Роллбек, который я сначала забыл сделать. 3) Выбор локали откуда угодно внутри мидлвари. 4) Красивый код в хендлере, без километров магии вида ...(_(...).format(...)
4. покажи пример как бот бы сказал hello Mars
async def handler(m: Message, i18n: TranslatorRunner): if m.from_user.username: await m.answer(i18n.basics.hello(user=m.from_user.username))
норм. а если бы не было {user}, то пришлось бы писать hello()?
А может сделать только английский?
Обсуждают сегодня