在Pyramid中拥有i18n-ed电子邮件模板的最佳方式

时间:2013-03-20 17:43:17

标签: internationalization pyramid chameleon

我希望将电子邮件的模板保持国际化。我默认使用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有两种可能的要求:

  1. 使用网站用户的语言
  2. 或使用收件人(客户)的语言
  3. 我们选择到目前为止第一个,如果时间允许它和客户推动它,请执行第二个选项。

    带有变色龙的i18n的docs on pyramid仅指ZPT模板,而不是TXT模板。但我们的电子邮件文本是纯文本。

    因此,如何为纯文本模板执行i18n的文档存在差距。

    有什么想法吗?

1 个答案:

答案 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)。这些都是使用默认渲染器在幕后发生的。