From 6b980d8017f6bb3161064179c86e3a2d0a22f451 Mon Sep 17 00:00:00 2001 From: geekiot Date: Sat, 8 Nov 2025 17:54:31 +0500 Subject: [PATCH] Add [localization]: add i18n middleware --- src/bot/middlewares/i18n.py | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/bot/middlewares/i18n.py 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