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)
并引用文档(强调我的):
您可以加载翻译目录,激活它并将文本翻译成您选择的语言,但记得切换回原始 语言,因为激活翻译目录是基于每个线程完成的,这样的更改将影响在同一个线程中运行的代码.
从文档中我发现这种方式更好:
为了帮助编写更简洁的代码,还有一个上下文管理器 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)
看来我可以在发送的每条消息之前使用 Translation.activate(some_lang) 。我不确定这是否有效。
我发现可以将 Context 实例发送到 render_to_string。如果我能以某种方式将语言设置放在该上下文中,那就太好了。
| 归档时间: |
|
| 查看次数: |
3003 次 |
| 最近记录: |