如何在render_to_string帮助器中设置语言?

Bjö*_*lja 9 django internationalization

从Django的保存信号我想发送一封电子邮件.应根据保存的内容(具有lang标志)设置电子邮件的语言.如何将该语言传递给Djangos render_to_string帮助器?我只能找到RequestContexts的语言设置,这里没有请求或用户可用.

真诚的Björn

dus*_*san 11

基于Django文档的答案:

from django.template.loader import render_to_string
from django.utils import translation

(...)

cur_language = translation.get_language()
try:
    translation.activate(some_language)
    text = render_to_string('email-confirmation.html')
finally:
    translation.activate(cur_language)
Run Code Online (Sandbox Code Playgroud)

并引用文档(强调我的):

您可以加载翻译目录,激活它并将文本翻译成您选择的语言,但记得切换回原始 语言,因为激活翻译目录是基于每个线程完成的,这样的更改将影响在同一个线程中运行的代码.


Raú*_*tín 7

文档中我发现这种方式更好:

为了帮助编写更简洁的代码,还有一个上下文管理器 django.utils.translation.override() 在输入时存储当前语言并在退出时恢复它。有了它,上面的例子就变成了:

from django.utils import translation

def welcome_translated(language):
    with translation.override(language):
        return translation.ugettext('welcome')
Run Code Online (Sandbox Code Playgroud)


Bjö*_*lja 1

看来我可以在发送的每条消息之前使用 Translation.activate(some_lang) 。我不确定这是否有效。

我发现可以将 Context 实例发送到 render_to_string。如果我能以某种方式将语言设置放在该上下文中,那就太好了。