Проблема с локализацией бот-телеграмм на aiogram

Я создал меню в боте для разных языков. Все работает нормально, но для "support" не работает, точнее, перевод берется с "ru", а не "en", но при этом перевод для остального работает нормально, кроме поддержки. bot.py:

@router.callback_query(F.data.startswith("lang_"))
async def on_language_selected(callback: types.CallbackQuery):
    language_code = callback.data.split("_")[1]
    set_user_language(callback.from_user.id, language_code)
    logging.debug(f"Language set to {language_code} for user {callback.from_user.id}")

    user_language_code = get_user_language(callback.from_user.id) or "en"
    user_language = localization.get(user_language_code, localization.get("en"))

    menu_kb = types.InlineKeyboardMarkup(inline_keyboard=[
        [types.InlineKeyboardButton(text=user_language["send_photo"], callback_data="send_photo")],
        [types.InlineKeyboardButton(text=user_language["support"], url="https://t.me/support")], #The translation does not work here
        [types.InlineKeyboardButton(text=user_language["profile"], callback_data="profile")],
        [types.InlineKeyboardButton(text=user_language["send_photo_free"], callback_data="send_photo_free")]
    ])

    await callback.message.answer(user_language["menu"], reply_markup=menu_kb)
# middlewares.py
from aiogram.types import Message
from localization import localization
from utils import get_user_language
class LanguageMiddleware:
    async def __call__(self, handler, event, data):
        user_id = event.from_user.id
        user_language_code = get_user_language(user_id) or "en"
        data["user_language"] = localization.get(user_language_code, localization.get("en"))
        return await handler(event, data)

    async def on_pre_process_callback_query(self, callback_query, data: dict):
        user_id = callback_query.from_user.id
        user_language_code = get_user_language(user_id)
        if not user_language_code:
            user_language_code = "en"  # Значение по умолчанию
        data["user_language_code"] = user_language_code
        data["user_language"] = localization.get(user_language_code, localization.get("en"))

localization.py:

localization = {
    "en": {
        "menu": "Welcome! Here's the menu.",
        "send_photo": "Send Photo",
        "profile": "Your personal profile is under development.",
        "support": "Support",
        "send_photo_free": "Send a Free Photo.",
        "used_free_photo": "You have already used your free photo.",
        "requirements_for_free_photo": "You must subscribe to the following channels to use the free plan:",
        "send_your_free_photo": "Now you can send a free photo",
        "no_photo_found": "Please send a photo.",
        "subscription_or_limit_error": "You must subscribe to all the necessary channels or you have already reached the limit of free photos.",
    },
    "ru": {
        "menu": "Вы выбрали язык. Вот меню.",
        "send_photo": "Отправить фото",
        "profile": "Профиль",
        "support": "Поддержка",
        "send_photo_free": "Отправить бесплатное фото",
        "used_free_photo": "Вы уже использовали своё бесплатное фото.",
        "requirements_for_free_photo": "Вы должны подписаться на следующие каналы для использования бесплатного тарифа:",
        "send_your_free_photo": "Теперь вы можете отправить бесплатную фотографию.",
        "no_photo_found": "Пожалуйста, отправьте фотографию.",
        "subscription_or_limit_error": "Вы должны подписаться на все необходимые каналы или уже достигли лимита бесплатных фото.",
    },
}

Может быть, я что-то делаю не так?

Я написал код локализации, он работает, но эта локализация не применяется для "support".


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

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

Попробуйте так ;)

from localization import localization

@router.callback_query(F.data.startswith("lang_"))
async def on_language_selected(callback: types.CallbackQuery):
    language_code = callback.data.split("_")[1]
    set_user_language(callback.from_user.id, language_code)
    logging.debug(f"Language set to {language_code} for user {callback.from_user.id}")

    user_language_code = get_user_language(callback.from_user.id) or "en"
    user_language = localization.get(user_language_code, localization.get("en"))

    if user_language_code == "en":
        user_language["support"] = localization["en"]["support"]
    else:
        user_language["support"] = localization["ru"]["support"]

    menu_kb = types.InlineKeyboardMarkup(inline_keyboard=[
        [types.InlineKeyboardButton(text=user_language["send_photo"], callback_data="send_photo")],
        [types.InlineKeyboardButton(text=user_language["support"], url="https://t.me/support")],
        [types.InlineKeyboardButton(text=user_language["profile"], callback_data="profile")],
        [types.InlineKeyboardButton(text=user_language["send_photo_free"], callback_data="send_photo_free")]
    ])

    await callback.message.answer(user_language["menu"], reply_markup=menu_kb)
→ Ссылка