我希望将电子邮件的模板保持国际化。我默认使用Pyramid 1.4和Chameleon。
我试过直接使用TranslationString作为PageTextTemplate的主体:
default_email_body=r"""
Hello${salutation}${letter_comma}
... full text with several ${data.attributes} ...
Cordialment,
${sender.name}."""
email_body_template = PageTextTemplate(_('proposed-email-body',
default_email_body,
mapping=params))
email_body = email_body_template.render()
但为email_body
分配了msgid而不是默认值,当我执行python setup.py extract_messages
时,默认文本不会自动插入。
我是否需要做一些特别的事情来连接我的翻译域?
有没有更好的方法来实现这一目标?
我的真实世界要求是从几个对象创建一封电子邮件。用户导航到页面,该页面除了返回普通的HTML页面外,还会创建一个电子邮件,将文本自动发送给审阅者,审阅者可以将其重新发送给客户端或拒绝它。在这种情况下,对于电子邮件文本,i18n有两种可能的要求:
我们选择到目前为止第一个,如果时间允许它和客户推动它,请执行第二个选项。
带有变色龙的i18n的docs on pyramid仅指ZPT模板,而不是TXT模板。但我们的电子邮件文本是纯文本。
因此,如何为纯文本模板执行i18n的文档存在差距。
有什么想法吗?
答案 0 :(得分:2)
大多数问题都可以通过了解Pyramid的i18n docs来解决。
一些事情。首先,Chameleon环境需要配置本地化程序。当您通过调用render('templates/my_email.pt', opts, request=request)
使用默认的Chameleon设置时,Pyramid会为您执行此操作。如果您直接使用Chameleon的API,我认为不会找到本地化程序。此外,您还需要一个区域设置协商器来确定本地化程序应使用的区域设置。有一个默认协商器,但如果您在请求之外执行此操作,则可能无法正确配置用户的区域设置。
无论如何,我的建议是坚持使用Pyramid的渲染器,而不是直接使用Chameleon,因为你失去了Pyramid在这个领域为你做的很多有用的配置。
如果您出于某种原因无法使用Pyramid的渲染器之一,我链接的i18n文档会显示底层系统的工作原理。你需要一个localizer
。金字塔使用gettext。然后,您创建一个TranslationString
实例并调用result = localizer.translate(ts)
。这些都是使用默认渲染器在幕后发生的。