Сравнить текст сообщения с результатом функции gettext в хендлере Aiogram

В коде 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 для перевода текста кнопок на русский.

Все хэндлеры работают нормально, пока пользователь не выставляет свой язык на какой-то другой, например, английский или испанский:

gettext = gt.translation("en", "translations", languages=["en"]).gettext

Язык пользователя теперь не русский, но хэндлеры всё ещё сравнивают текст пользователя с текстом кнопок, переведённым на первый язык, указанный по дефолту — на русский.

Есть ли какой-то способ повторно вызывать функцию gettext в хэндлерах каждый раз, когда Dispatcher Aiogram'а решает, какую функцию-хэндлер вызвать? Сразу скажу, не предлагайте переходить на inline-кнопки.

P.S. Я был бы рад использовать один хэндлер @router.message(F.text), где я бы поочерёдно проверял текст через if-else, но из-за того, что я в аргументах хэндлера использую машину состояний (FSM), этот вариант мне не подойдёт.

Полный код с проблемой (некоторые незначительные куски кода были вырезаны для большей читаемости):

import gettext as gt
from aiogram import F, Router
from aiogram.types import Message
from aiogram.utils.keyboard import ReplyKeyboardBuilder

gettext = gt.translation("ru", "translations", languages=["ru"]).gettext

router = Router()


@router.message(F.text == "English")
async def change_to_english_language(message: Message):
    global gettext
    gettext = gt.translation("en", "translations", languages=["en"]).gettext
    await message.answer(gettext("Now your language is English"))


@router.message(F.text == gettext("Settings"))
async def view_settings(message: Message):
    builder = ReplyKeyboardBuilder()
    builder.button(text=gettext("Language"))
    builder.button(text=gettext("Preferred name"))
    await message.answer(gettext("What do you want to set up?"),
                         reply_markup=builder.as_markup(resize_keyboard=True))

Ответы (1 шт):

Автор решения: Mipsirint

Я всё-таки решил свою проблему, есть способ использовать lambda-функции:

@router.message(F.text, F.func(lambda msg: msg.text == gettext("Settings")))
async def view_settings(message: Message):
    builder = ReplyKeyboardBuilder()
    builder.button(text=gettext("Language"))
    builder.button(text=gettext("Preferred name"))
    await message.answer(gettext("What do you want to set up?"),
                         reply_markup=builder.as_markup(resize_keyboard=True))
→ Ссылка