是否可以在 aiogram 中向 属性 添加参数?

Is it possible to add an argument to a property in aiogram?

我正在为 aiogram 机器人制作多语言功能,目前非常简单:

class Localization:

    locales = {
        'en': {
            'command': {
                'start': 'Hello!'
            }
        }
    }

    def __init__(self):
        self.__user_lang = dict()

    @property
    def available_langs(self):
        return tuple(self.locales.keys())

    def text(self, id):
        return self.locales[self.user_lang(id)]

    def user_lang(self, id):
        return self.__user_lang.get(id, 'en')

    def set_user_lang(self, id, lang):
        if lang in self.available_langs:
            self.__user_lang[id] = lang

我必须这样称呼它:

@dp.message_handler(commands=['start'])
async def start_command(message: types.Message):
    id = message.from_user.id

    await message.answer(locale.text(id)['commands']['start'])

我想在 @property 中更改 text 以缩短条目。

@property
def text(self):
    return self.locales[self.user_lang(id)]

这也将允许我构建这样的结构:

@dp.message_handler(lambda m: m.text == locale.text['buttons']['about'])
async def about(message: types.Message):
    pass

不是这样的:

@dp.message_handler(lambda m: m.text == locale.text(m.from_user.id)['buttons']['about'])
async def about(message: types.Message):
    pass

但我绝对想不出如何指定 属性 为哪个特定用户进行本地化。

P.S。我知道 i18n,但我正在学习并想尝试自己编写所有内容。

好吧,我绝对是笨蛋。

我可以在从处理程序调用的任何函数中获取当前用户:

from aiogram import types

@property
def user_lang(self):
    user = types.User.get_current()

    return self.__user_lang.get(user.id, 'ru')

等等...