如何在不传递上下文的情况下翻译命令。 (Discord Bot)

时间:2019-09-03 13:35:39

标签: python discord.py gettext python-contextvars

我正在编码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?

0 个答案:

没有答案