BrazeやMailchimpのメールテンプレートを翻訳する
メール配信プラットフォームによって、翻訳データの保持方法は異なります。キャンペーンのローカライズが煩雑になりがちなのは、ファイル形式ではなく、このデータ構造の違いが原因です。Transeptは3つの方式すべてに対応しているため、事前に形式を調整することなく、手元にあるテンプレートをそのままアップロードできます。
目次
各プラットフォームはどの方式で翻訳を管理していますか?
メール配信プラットフォームのローカライズ方法は、大きく3つに分かれます。以下の表でお使いのプラットフォームを確認すると、何をアップロードし、どのような成果物が得られるかが分かります。
| プラットフォームの仕組み | プラットフォーム | アップロードする対象 |
|---|---|---|
| テンプレートとは別に用意された、キー付きの独立した翻訳テーブル | Braze(CSVまたはAPI)、Klaviyo(CSV) | 翻訳ファイル:詳細は文字列ファイルを参照してください |
| 言語ごとに独立した完全なテンプレートを用意する方式 | Iterable、Customer.io、Brevo | テンプレート(言語ごとに1ファイル、プレーンHTML) |
| 1つのテンプレート内ですべての言語を保持し、条件分岐で選択する方式 | Mailchimp、Brazeの翻訳タグ、独自構築のLiquidテンプレート全般 | テンプレート自体(詳細は後述) |
- プラットフォーム側で翻訳が生成され、それをレビューするだけでよい場合は、別の作業になります。完成した訳文を既存の翻訳として取り込めば、翻訳メモリと用語集がそこから学習します。
Brazeのテンプレートを翻訳するには?
テンプレートHTMLをアップロードします。Brazeで{% translation %}タグが付けられた各範囲は、そのタグのIDをキーとする1つの文字列として抽出されます。タグの外側にあるものは一切変更されません。タグのないテキストは、Brazeでローカライズしないと指定したテキストです。これを翻訳すると、Brazeが言語ごとに出し分けることのない文言がファイルに入ってしまいます。
エクスポートされるのは、書き換えたテンプレートではなく翻訳テーブルです。これは意図した仕様で、ぜひ理解しておきたい点です。タグ内のテキストはBrazeの「デフォルト」で、翻訳が用意されていないロケールの受信者に送られる内容です。そのため、原文の言語のまま残す必要があります。翻訳は、テンプレートと一緒にBrazeへアップロードするCSVに入れます。
つまり、往復の手順はこうです。テンプレートをアップロードして翻訳し、文字列ファイル(キー付き)かCSVをエクスポートして、それをBrazeにアップロードします。テンプレート自体を変更する必要はありません。
- Brazeの制限はインポート時にチェックされるため、問題があれば実行後ではなく実行前にわかります。1メッセージにつき翻訳タグは200個まで、1タグにつきデフォルトテキストは2,000文字まで、タグのネスト(入れ子)は不可、メッセージ内でIDが一意である必要があります。
- ローカライズされたリンク先など、HTML属性内にあるタグも通常どおり読み込まれます。
- Brazeは、翻訳CSVをExcelで開かないよう注意を促しています。非ラテン文字が文字化けするためです。この注意は、誰が作ったファイルであっても、Brazeに戻すファイルには当てはまります。
すべての言語を1つにまとめたテンプレートを翻訳するには?
Mailchimpには多言語キャンペーン機能がないため、テンプレート内にすべての言語を含め、*|IF:MC_LANGUAGE=es|* … *|ELSE:|* … *|END:IF|*のような条件分岐で出し分けます。独自に組んだLiquidテンプレートでも、{% if lang == "es" %}で同じように出し分けます。テンプレートをアップロードすると、Transeptは各条件分岐を1つの文字列として読み込み、各分岐をその言語向けの訳文として扱います。
各分岐はデフォルトのバリエーションとしてではなく、独立した文として翻訳されます。これは思っている以上に重要です。リピーターが読む分岐と新規顧客が読む分岐では、通常、意図も文面も異なります。条件分岐全体をひとかたまりとして翻訳すると、どちらの文面も不自然になってしまいます。
テンプレートに含まれていなかった言語は、エクスポート時にファイルへ新しい分岐として書き込まれます。デフォルトがフォールバックとして機能し続けるよう、デフォルトの手前に配置されます。1つのテンプレートをアップロードするだけで、対応言語が増えたテンプレートが1つ返されます。
{% if vip %}や*|IF:PURCHASES>0|*など、言語に関係のない条件分岐は、その中のテキストを含めて一切変更されません。対象となるのは、MailchimpのMC_LANGUAGEに対する判定、または言語名を指定するLiquid変数のみです。- そうした条件分岐の内部にネストされた言語条件分岐も検出され、通常どおり翻訳されます。
- 新しい分岐には、Transeptで使用される言語コードのラベルが付けられます。プラットフォーム側でその言語に異なる表記が想定されている場合は、エクスポートしたファイル側で名前を変更してください。
プラットフォームにローカライズ機能がまったくない場合は?
その場合、テンプレートは単なるHTMLファイルとなるため、最も簡単なケースといえます。ファイルをアップロードして全体を翻訳し、言語ごとに1つのファイルとしてエクスポートします。エクスポート処理ではファイルを再構築するのではなく、元のファイルに翻訳文を書き込むため、HTMLメールに不可欠なレイアウト、インラインスタイル、テーブル構造がそのまま維持されます。
1回のアップロードから1回の実行ですべてのロケールを生成するには、複数言語を使用してください。
パーソナライズタグはどのように翻訳から保護されますか?
パーソナライズタグは、AIがテキストを見る前に隠され、翻訳後に元に戻されます。さらに、AIの出力はすべて原文と照合されるため、タグが欠けることはありません。対象はLiquid({{first_name}}、{% if %})、Brazeの属性構文({{${first_name}}})、Mailchimpのマージタグ(*|FNAME|*)、printfプレースホルダーで、設定は何も要りません。
ただし、タグ内で意図的に翻訳されるものが1つあります。フォールバックテキストです。{{ first_name | default:"friend" }}のfriendは、名が登録されていない受信者全員が読む言葉で、配信の大半を占めることも珍しくありません。つまりこれも文面なので、周りのタグは書かれたとおりに残したまま翻訳されます。
この方法で翻訳できないものは?
キャンペーンを計画する前に把握しておくべき制限が2点あります。どちらもプレビューには表示されないため注意が必要です。
- Mailchimpの件名は言語ごとに出し分けができません。件名はテンプレートのコンテンツではなくキャンペーンのメタデータであるため、条件分岐が適用されません。これはMailchimp側の制限であり、Transept側で回避することはできません。言語ごとの件名が必要な場合は、言語別にキャンペーンを分ける必要があります。
- Brazeテンプレートのタグなしテキストは翻訳されません。Braze自体がそのテキストをローカライズしないためです。段落を言語ごとに出し分ける必要がある場合は、先にBraze側で翻訳タグで囲んでから、再度インポートしてください。
- プレビューには1つの言語しか表示されないため、これら2つの問題は見落とされがちです。配信前にプレビューではなく、エクスポートしたファイルを確認してください。
TranseptはBrazeやMailchimpに直接接続できますか?
いいえ。これは意図した設計です。各プラットフォームのAPIは、それぞれの都合で仕様変更や廃止、レート制限が行われます。知らないうちに動かなくなる連携は、連携がないよりも厄介です。ファイルの往復なら同じ作業ができ、これからも動き続けます。しかも、配信先に届く前に中身を確認できるファイルが手元に残ります。
翻訳後にBrazeテンプレートをエクスポートしたところ、変更されていないように見えます。これは不具合ですか?
いいえ、これは正常な動作です。Brazeテンプレートにはデフォルトのテキストのみが含まれており、デフォルトは原文の言語のまま残す必要があります。翻訳が存在しないロケールの受信者には、このデフォルトが送信されるためです。翻訳データは文字列エクスポートに含まれています。エクスポートメニューから文字列ファイル(キー付き)またはCSVを選択し、変更されていない元のテンプレートと一緒にBrazeへアップロードしてください。
VIPブロックなど、言語に関係のない条件分岐はどうなりますか?
構造もテキストも含め、一切変更されません。MailchimpのMC_LANGUAGEマージタグに対する判定、または言語名を表すLiquid変数を実際の言語コードと比較している判定のみが、言語条件分岐として扱われます。なお、VIPブロックの内部にネストされた言語ブロックも検出され、通常どおり翻訳されます。
テンプレートにこれまで分岐が存在しなかった言語を追加できますか?
はい。ほかの言語と同じように翻訳すれば、エクスポート時に条件分岐へ新しい分岐が書き込まれます。デフォルトがフォールバックとして機能し続けるよう、新しい分岐はデフォルトの分岐の手前に置かれます。アップロードしたテンプレートより多くの言語に対応したテンプレートが1つ返されます。
アップロードするのはテンプレートと翻訳CSVのどちらですか?
お使いのプラットフォームから受け取った方で構いません。どちらでも使えます。プラットフォーム側で翻訳がキー付きテーブルとして個別に管理されている場合(Braze、Klaviyoなど)はCSVをアップロードし、テンプレート内に各言語がインラインで保持されている場合やローカライズ機能が一切ない場合はテンプレートをアップロードしてください。両方ある場合は、CSVの方が近道です。詳しくは文字列ファイルをご覧ください。
解決しない場合は、アプリ内のLiteressに質問するか、[email protected]までご連絡ください。