我有一个django项目,它使用一个向用户发送电子邮件的工作进程.工作进程侦听rabbitmq服务器并获取有关要发送的电子邮件,模板变量,要发送到的电子邮件地址等的所有详细信息.电子邮件正文使用django templates和render_to_string创建.
但是我想把这个国际化.我们的一些用户将使用英语网站,其中一些使用其他语言.他们应该用他们的语言收到电子邮件.我试图使用电子邮件工作进程(使用django.utils.translations.ugettext/ugettext_lazy),以便电子邮件主题和电子邮件正文具有_(...)或{%blocktrans%} resp.
但是,由于电子邮件是在不同的后台工作进程中呈现和发送的,因此正常的django语言检测过程似乎不适用.它没有用户会话,没有cookie或没有http标头可供查看.将消息发送到rabbitmq服务器时,我可以存储语言代码
但是我如何告诉django/gettext在某一点上使用该语言.
例如,我发送电子邮件的函数可能如下所示:
def send_email(details):
lang = details['lang']
name = details['name']
email_address = details['email_address']
switch_gettext_to_this_language_what_goes_here(lang):
# ?????
email_subject = _("Welcome to $SITE")
Run Code Online (Sandbox Code Playgroud)
如何将django translations/gettext切换为特定的语言代码以便_()使用该语言代码?
我可以使用当前语言环境获得翻译.
from django.utils.translation import ugettext as _
_("password")
Run Code Online (Sandbox Code Playgroud)
但是在我的代码中(一种特定的形式)我想用特定的语言进行翻译.我希望能够说出来.
ugettext_magic("de", "password")
Run Code Online (Sandbox Code Playgroud)
我已经用我需要的语言翻译了字符串.