2

我想保持电子邮件的模板国际化。我默认使用 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. 或使用收件人(客户)的语言

到目前为止,我们选择第一个,如果时间允许并且客户推动它,请执行第二个选项。

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

因此,在如何为纯文本模板执行 i18n 的文档中存在空白。

有任何想法吗?

4

1 回答 1

2

大多数这些问题都可以通过了解 Pyramid 的i18n 文档来解决。

几件事。首先,Chameleon 环境需要配置一个定位器。当您通过调用使用默认的 Chameleon 设置时,Pyramid 会为您执行此操作render('templates/my_email.pt', opts, request=request)。如果您直接使用 Chameleon 的 API,我认为不会找到本地化程序。此外,您还需要一个语言环境协商者来确定本地化人员应该使用的语言环境。有一个默认的协商器,但如果您在请求之外执行此操作,则可能无法正确配置用户的区域设置。

无论如何,我的建议是坚持使用 Pyramid 的渲染器,而不是直接使用 Chameleon,因为你失去了 Pyramid 在这方面为你做的很多有用的配置。

If you cannot use one of Pyramid's renderers for some reason, the i18n docs I linked show how the underlying system works. You need a localizer. Pyramid uses gettext. You then create a TranslationString instance and invoke result = localizer.translate(ts). This is all happening behind the scenes using the default renderers.

于 2013-03-21T04:33:20.070 回答