是否可以在 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')
等等...
我正在为 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')
等等...