2

メールのテンプレートを国際化していきたいです。デフォルトでは、Pyramid1.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には2つの可能な要件があります。

  1. サイトのユーザーの言語を使用して、
  2. または受信者(クライアント)の言語を使用する

これまでのところ1番目を選択しており、時間が許せばクライアントがそれをプッシュする場合は、2番目のオプションを実行します。

カメレオンを使用したi18nのピラミッドに関するドキュメントは、ZPTテンプレートのみを参照しており、TXTテンプレートは参照していません。しかし、私たちの電子メールテキストはプレーンテキストです。

したがって、プレーンテキストテンプレートに対してi18nを実行する方法のドキュメントにはギャップがあります。

何か案は?

4

1 に答える 1

2

これらの問題のほとんどは、Pyramid のi18n docsを理解することで解決できます。

いくつかのこと。まず、Chameleon 環境にローカライザーを構成する必要があります。Pyramid は、 を呼び出してデフォルトの Chameleon セットアップを使用すると、これを行いますrender('templates/my_email.pt', opts, request=request)。Chameleon の API を直接使用している場合、ローカライザーは見つからないと思います。また、ローカライザーが使用するロケールを決定するために、ロケール ネゴシエーターが必要になります。デフォルトのネゴシエーターがありますが、これをリクエストの外で行っている場合、ユーザーのロケールが適切に構成されていない可能性があります。

いずれにせよ、Chameleon を直接使用する代わりに、Pyramid のレンダラーを使用することに固執することをお勧めします。これは、この分野で Pyramid が行う便利な構成の多くを失うからです。

何らかの理由で Pyramid のレンダラーの 1 つを使用できない場合は、リンクした i18n ドキュメントに、基礎となるシステムがどのように機能するかが示されています。が必要ですlocalizer。Pyramid は gettext を使用します。次に、インスタンスを作成してTranslationStringを呼び出しresult = localizer.translate(ts)ます。これはすべて、デフォルトのレンダラーを使用して舞台裏で行われています。

于 2013-03-21T04:33:20.070 に答える