В моем коде маршрутизатора Aiogram у меня есть несколько обработчиков, которые сравнивают текст пользователя с текстом кнопок, переведенным модулем gettext:
@router.message(F.text == gettext("Settings"))
async def view_settings(message: Message):
...
В начале кода я установил значение по умолчанию для функции gettext:
import gettext as gt
gettext = gt.translation("ru", "translations", languages=["ru"]).gettext
которая возвращает функцию перевода текста кнопок на русский язык.
Каждый обработчик работает нормально, пока пользователь не настроит свой язык на другой язык, например английский или испанский. :
gettext = gt.translation("en", "translations", languages=["en"]).gettext
Язык пользователя больше не является русским, но обработчики по-прежнему сравнивают текст пользователя с текстом кнопок, который был переведен на первый инициированный язык - русский.
Есть ли способ пересчитать значение функции gettext в обработчиках каждый раз, когда диспетчер Aiogram решает, какой обработчик следует вызвать? Заранее скажу, не предлагайте переходить на inline-кнопки.
P.S. Я был бы рад создать один обработчик @router.message(F.text), в котором я бы проверял текст поочередно через if-else, но поскольку мне нужно использовать FSM в аргументах обработчиков, этот вариант не подходит.
Полный код, в котором возникла проблема (некоторые неважные вещи были удалены для повышения читабельности):
Подробнее здесь: https://stackoverflow.com/questions/786 ... ge-handler