Как поменять язык на клавиатуре и инлайн кнопках в телеграм боте Aiogram

У меня есть бот в телеграм и я уже сделал функцию выбора языка и всё работает коректно, но я не знаю как поменять язык на кнопках если они созданы в другом файле keyboards.py и записаны вот так:

markup_games = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
lot = types.KeyboardButton('первое')
num = types.KeyboardButton('второе')
cases = types.KeyboardButton('третье')
markup_games.add(lot, num, cases)

markup_work_admin = types.InlineKeyboardMarkup(row_width=2)
work_admin_trx = types.InlineKeyboardButton('? Баланс TRX', callback_data='work_admin_trx')
work_admin_usd = types.InlineKeyboardButton('? Баланс USDT', callback_data='work_admin_usd')
markup_work_admin.add(work_admin_trx, work_admin_usd)

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

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

Для каждой клавиатуры можно создать функцию, которая будет ее генерировать, что-то вроде:

def markup_work_admin(lang: str):
    markup = types.InlineKeyboardMarkup(row_width=2)
    # заполняем клавиатуру кнопками нужного языка (опираясь на lang)
    # кнопки с разными языками можно записать заранее в отдельном файле, либо через gettext тот же
    return markup

если не нравится, что при каждом вызове функции генерируется новый экземпляр клавы, можно добавить кеш в виде декоратора cache или lru_cache из functools

from functools import lru_cache


@lru_cache
def markup_work_admin(lang: str):
    markup = types.InlineKeyboardMarkup(row_width=2)
    # заполняем клавиатуру кнопками нужного языка (опираясь на lang)
    # кнопки с разными языками можно записать заранее в отдельном файле, либо через gettext тот же
    return markup
→ Ссылка