diff --git a/src/bot/middlewares/i18n.py b/src/bot/middlewares/i18n.py new file mode 100644 index 0000000..6d323e6 --- /dev/null +++ b/src/bot/middlewares/i18n.py @@ -0,0 +1,38 @@ +__all__ = ["I18nMiddleware"] + + +from typing import Any, Dict + +from aiogram.types import TelegramObject +from aiogram.utils.i18n import SimpleI18nMiddleware + +from database.models import TelegramUser + + +class I18nMiddleware(SimpleI18nMiddleware): + """ + Middleware for providing the user's language code. + Used for localizing bot messages. + """ + + async def get_locale( + self, + event: TelegramObject, + data: Dict[str, Any], + ) -> str: + """ + Retrieving the user's language code. + + Args: + event (TelegramObject): The incoming event. + data (Dict[str, Any]): Data for the event. + + Returns: + str: user's language code. + """ + telegram_user: TelegramUser | None = data.get("telegram_user") + + if telegram_user is None: + return self.i18n.default_locale + + return telegram_user.lang