Vir*_*liu 11 django translation
我有一个模型,订单,在管理面板中有一个动作,让管理员将订单信息发送给该订单列出的某些人.每个人都有语言集,这是消息应该发送的语言.
我正在使用的简短版本:
from django.utils.translation import ugettext as _
from django.core.mail import EmailMessage
lang = method_that_gets_customer_language()
body = _("Dear mister X, here is the information you requested\n")
body += some_order_information
subject = _("Order information")
email = EmailMessage(subject, body, 'customer@example.org', ['admin@example.org'])
email.send()
Run Code Online (Sandbox Code Playgroud)
有关他使用的语言的客户信息,请参阅lang
.默认语言为en-us,翻译为法语(fr)和德语(de).
有没有办法使用翻译为指定的语言的方式lang
进行body
,并subject
再切换回EN-US?例如:lang
是'de'.主题和正文应该获得'de'翻译文件中指定的字符串.
编辑:
找到了解决方案.
from django.utils import translation
from django.utils.translation import ugettext as _
body = "Some text in English"
translation.activate('de')
print "%s" % _(body)
translation.activate('en')
Run Code Online (Sandbox Code Playgroud)
这需要body
变量,将其翻译为德语,打印它然后将语言返回到英语.
就像是
body = _("Some text in English")
translation.activate('de')
print "%s" % body
Run Code Online (Sandbox Code Playgroud)
但是用英文打印文本.
不确定激活/停用翻译是否是解决该问题的正确方法(?)
如果我面临这个问题,我会尝试构建一些模型来存储主题/正文/语言/类型字段。一些代码草案:
class ClientMessageTemplate(models.Model):
language = model.CharField(choices=AVAIALBLE_LANGUAGES,...)
subject = models.CharField(...)
body = models.CharField(...)
type = models.CharField(choices=AVAILABLE_MESSAGE_TYPES)
Run Code Online (Sandbox Code Playgroud)
然后您可以根据类型和客户端语言轻松检索您需要的 ClientMessageTemplate。
该解决方案的优点是,您可以通过管理界面维护所有数据,并且无需在每次发生更改时重新编译消息文件。
归档时间: |
|
查看次数: |
754 次 |
最近记录: |