tgs / bot /middlewares /i18n.py
AZILS's picture
Upload 119 files
054900e verified
"""1. Get all texts
pybabel extract --input-dirs=. -o bot/locales/messages.pot --project=messages.
2. Init translations
pybabel init -i bot/locales/messages.pot -d bot/locales -D messages -l en
pybabel init -i bot/locales/messages.pot -d bot/locales -D messages -l ru
pybabel init -i bot/locales/messages.pot -d bot/locales -D messages -l uk
3. Compile translations
pybabel compile -d bot/locales -D messages --statistics
pybabel update -i bot/locales/messages.pot -d bot/locales -D messages
"""
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from aiogram.utils.i18n.middleware import I18nMiddleware
from bot.core.config import DEFAULT_LOCALE
from bot.services.users import get_language_code
if TYPE_CHECKING:
from aiogram.types import TelegramObject, User
from sqlalchemy.ext.asyncio import AsyncSession
class ACLMiddleware(I18nMiddleware):
DEFAULT_LANGUAGE_CODE = DEFAULT_LOCALE
async def get_locale(self, event: TelegramObject, data: dict[str, Any]) -> str:
session: AsyncSession = data["session"]
user: User | None = getattr(event, "from_user", None)
if not user:
return self.DEFAULT_LANGUAGE_CODE
language_code: str | None = await get_language_code(session=session, user_id=user.id)
return language_code or self.DEFAULT_LANGUAGE_CODE