我正在编码Discord机器人。在那里定义命令,例如
@commands.command()
async def hello(self, ctx):
await ctx.send("Hello world!")
这将创建命令hello
,该命令将发送一条消息。
现在,我想为其添加翻译。在我的数据库中,我通过行会ID存储每个行会的语言。公会ID在ctx.guild.id
中传递。我想要一个处理该过程的翻译功能。而且我不想每次翻译时都传递公会ID。我已经看到了使用ContextVars
进行此操作的一些方法。但是我不知道它是如何工作的。
有人对如何处理有建议吗? IdleRPG对此也进行了集成,但是非常复杂:https://github.com/Gelbpunkt/IdleRPG/blob/v4/utils/i18n.py
实际的翻译功能似乎不是问题。最后,它应该看起来像这样。
def _(self, text):
# Do gettext stuff here (This is the part I know about)
# Get the context without the need to pass it to the function (But how?)
return translation
@commands.command()
async def hello(self, ctx):
await ctx.send(_("Hello world")) # Auto pass ctx to _(), but how?