ローカライゼーション
多くの国に顧客を持つ企業にとって、Brazeの導入初期にローカライゼーションに取り組むことで、時間とリソースを節約できます。
仕組み
ロケール情報は、Braze SDK(自動)またはREST APIを使用して収集したデータに基づき、ユーザーのプロファイルに保存されます。ロケールには言語と地域の識別子が含まれます。この情報は、Brazeのセグメンテーションツールで国および言語の項目から利用できます。
翻訳管理
翻訳を管理するために、以下のアプローチを検討してください。
すべてに1つのテンプレート
このアプローチでは、Liquidを使用してBraze内の単一のテンプレートにローカライゼーションを適用します。送信後、ダッシュボードには集約されたキャンペーン分析が表示されます。ユーザーレベルのエンゲージメントは、カスタムセグメントファネルを使用して測定できます。たとえば、CountryフィルターとReceived キャンペーンフィルターを組み合わせます。
| 利点 | 考慮事項 |
|---|---|
| - 一元化されたアプローチ - メール作成時間の短縮、メールを複数回作成する必要がない |
- 手動でのレポート作成 - キャンペーンレポートには国別ではなく集約された指標が表示される - Liquidが想定どおりに動作するか徹底的にテストする必要がある - 国の値の取得方法や設定した国の数によっては、各国のテストが困難になる場合がある - タイムゾーンをまたいだ特定の時刻での送信スケジュールが難しい - 国ごとに異なるコンテンツを送信したい場合に使いにくい |
国ごとに1つのテンプレート
このアプローチでは、テンプレートを送信ロケールごとに分離します。送信後、ダッシュボードには各国ごとの送信分析がレポートされ、ダウンストリームのユーザーレベルのCurrentsイベントも特定のキャンペーンに紐づけられます。
- テンプレートは、メンテナンスとトラッキングの目的でタグを実装することで恩恵を受けます。
- キャンペーンは、同じBrazeテンプレートやContent Blocks(Liquidを含むメールテンプレートなど)から設定を引き継ぐことができます。
- 既存のキャンペーンやテンプレートは複製して、より短期間で価値を実現できます。
| 利点 | 考慮事項 |
|---|---|
| - 複数のロケーションに対してスケーラブル - Braze内での国別収益レポート(キャンペーンごとなど) - 国ごとにコンテンツが大きく異なる場合の柔軟性 |
- 戦略的な構造設計が必要 - より多くの構築作業が必要(国ごとに個別のキャンペーンを作成するなど) |
すべてに1つのジャーニー
このアプローチでは、キャンバスの基本とLiquidを使用して各ユーザーのメッセージングを定義し、ローカライゼーションを処理します。
キャンバスの送信後、ダッシュボードには集約されたキャンバス分析が表示されます。一方、ユーザーレベルのエンゲージメントは、カスタムセグメントファネルを使用して測定できます。たとえば、CountryフィルターとReceived キャンバス Stepフィルターを組み合わせます。
| 利点 | 考慮事項 |
|---|---|
| - 一元化されたアプローチ - メール作成時間の短縮 - メールを複数回作成する必要がない |
- 手動でのレポート作成 - キャンバスレポートには国別ではなく集約された指標が表示される - Liquidが想定どおりに動作するか徹底的にテストする必要がある - 国の値の取得方法や設定した国の数によっては、各国のテストが困難になる場合がある - タイムゾーンをまたいだ特定の時刻での送信スケジュールが難しい - 国ごとに異なるコンテンツを送信したい場合に使いにくい |
国ごとに1つのジャーニー
このアプローチでは、キャンバスジャーニービルダーが複数のキャンバスコンポーネントを使用したユーザージャーニー作成の柔軟性を提供します。これらのコンポーネントは、コンポーネントレベルおよびジャーニー全体のレベルで複製できます。
ローカライゼーションは以下の方法で実現できます。
- 国ごとに個別のキャンバスを作成し、複雑なユーザージャーニーがファネルの最上部でオーディエンスフィルターを使用して定義されるようにします
- 国ごとのカスタマイズされたユーザージャーニーでは、オーディエンスパスを実装して、大規模にユーザーを直感的にセグメント化し、1つのキャンバス内で各国ごとに個別のメッセージスレッドを作成します
送信後、ダッシュボードには国ごとの動的な分析と、顧客の現在のロケーションに基づいたユーザーレベルのCurrentsイベントが表示されます。
| 利点 | 考慮事項 |
|---|---|
| - Braze内での国別収益レポート(キャンバス、バリアント、またはステップごとなど) - 国ごとにコンテンツが大きく異なる場合の柔軟性 - 将来的にジャーニーの一部として他のチャネルを追加できる |
- 戦略的な構造設計が必要 - より多くの構築作業が必要(国ごとに個別のメッセージステップを作成するなど) - 1つのキャンバス内で各国にカスタムの複雑なジャーニーを設定すると、キャンバスが大きくなり読みにくくなる場合がある |
翻訳メッセージの送信
ユーザーの言語、ロケール、またはカスタム属性に基づいてパーソナライズされたメッセージを送信するには、以下のいずれかの方法を使用します。
翻訳Liquidタグ(推奨)
Brazeは、1つのメッセージで異なる言語のユーザーをターゲットにするための{% translation salutation %}Hello!{% endtranslation %} Liquidタグをサポートしています。
詳細なウォークスルーについては、翻訳タグの使用に関するガイドを参照してください。
代替アプローチ
メッセージ本文にコンテンツを手動で貼り付け、Liquidを使用して受信者に正しい言語を条件付きで表示できます。これを行うには:
- メッセージを作成し、言語を選択して、選択した各言語のLiquid条件ロジックを生成します。
-
以下のLiquidテンプレートを使用してメッセージを構築できます。テンプレートを使用する各フィールドでは、テンプレートの括弧付きセグメントの後にバリエーションを入力する必要があります。バリエーションは、その前の括弧内で参照されている言語コードに対応する必要があります。
{% if ${language} == 'en' %} This is a message in English from Braze! {% elsif ${language} == 'es' %} Este es un mensaje en español de Braze ! {% elsif ${language} == 'zh' %} 这是一条来自Braze的中文消息。 {% else %} This is a message from Braze! This will go to anyone who does not match the other specified languages! {% endif %}
- 送信前にメッセージをテストするには、ユーザーのIDまたはメールアドレスを入力して、言語に応じてメッセージがどのように表示されるかを確認します。

メッセージングには常に{% else %}ステートメントを含めることをお勧めします。ほとんどのユーザーには特定の言語のメッセージが表示されますが、以下のユーザーにはこのテキストが表示されます。
- 言語が選択されていない
- Brazeがサポートしていない言語を使用している
- デバイスの言語が検出できない
BrazeのContent Blocksは再利用可能なコンテンツブロックです。ブロックが変更されると、そのブロックへのすべての参照が変更されます。たとえば、メールのヘッダーやフッターの更新はすべてのメールに反映されるほか、翻訳の格納にも使用できます。これらのブロックはREST APIを使用して作成および更新でき、ユーザーはプログラムで翻訳をアップロードできます。
ダッシュボードでキャンペーンを作成する際、Content Blocksはタグ{{content_blocks.${name_of_content_block}}}を使用して参照できます。これらのブロックには、オプション1のように各言語の条件ロジック内にすべての翻訳を含めることも、言語ごとに個別のブロックを使用することもできます。
Content Blocksは翻訳管理プロセスとしても活用できます。翻訳が必要なコンテンツをコンテンツブロックに格納し、取得、翻訳、更新します:
- ダッシュボードで「Needs Translation」タグ付きのコンテンツブロックを手動で作成します。
- サービスが
/content_blocks/listエンドポイントを使用して、すべてのコンテンツブロックを毎晩取得します。 - サービスが
/content_blocks/infoエンドポイントを通じて各コンテンツブロックの詳細を取得し、翻訳対象としてタグ付けされたブロックを確認します。 - 翻訳サービスがすべての「Needs Translation」コンテンツブロックの本文を翻訳します。
- サービスが
/content_block/updateエンドポイントにアクセスして翻訳済みコンテンツを更新し、タグを「Translation Complete」に更新します。
カタログを使用すると、APIおよびCSVファイル経由でインポートしたJSONオブジェクトからデータにアクセスし、カスタム属性やカスタムイベントプロパティと同様にLiquidを通じてメッセージを充実させることができます。例:
以下のAPI呼び出しでカタログを作成します:
curl --location --request POST 'https://your_api_endpoint/catalogs' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR-REST-API-KEY' \
--data-raw '{
"catalogs": [
{
"name": "translations",
"description": "My localization samples",
"fields": [
{
"name": "id",
"type": "string"
},
{
"name": "context",
"type": "string"
},
{
"name": "language",
"type": "string"
},
{
"name": "body",
"type": "string"
}
]
}
]
}'
以下のAPI呼び出しでアイテムを追加します:
curl --location --request POST 'https://your_api_endpoint/catalogs/translations/items' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR-REST-API-KEY' \
--data-raw '{
"items": [
{
"id": "1",
"context": "1",
"language": "en",
"body": "Hey"
},
{
"id": "2",
"context": "1",
"language": "es",
"body": "Hola"
},
{
"id": "3",
"context": "1",
"language": "pt",
"body": "Oi"
},
{
"id": "4",
"context": "1",
"language": "de",
"body": "Hallo"
}
]
}'
以下の形式でCSVを作成します:
| id | context | language | body |
|---|---|---|---|
| 1 | 1 | en | Hey |
| 2 | 1 | es | Hola |
| 3 | 1 | pt | Oi |
| 4 | 1 | de | Hallo |
| 5 | 2 | en | Hey |
| 6 | 2 | es | Hola |
| 7 | 2 | pt | Oi |
| 8 | 2 | de | Hallo |
| 9 | 3 | en | Hey |
| 10 | 3 | es | Hola |
| 11 | 3 | pt | Oi |
| 12 | 3 | de | Hallo |
これらのカタログアイテムは、以下の例に示すようにパーソナライゼーションを使用して参照するか、データのグループを作成できるセレクションを使用して参照できます。
{% catalog_items translations 1 %}
{{items[0].body}}
//returns “Hey”
多くのBrazeパートナーが、TransifexやCrowdinなどのローカライゼーションソリューションを提供しています。通常、ユーザーは社内チームや翻訳エージェンシーと並行してプラットフォームを使用します。これらの翻訳はそこにアップロードされ、REST API経由でアクセスできます。これらのサービスはConnected Contentも活用しており、ユーザーはAPI経由で翻訳を取得できます。
たとえば、以下のConnected Content呼び出しはTransifexとCrowdinを呼び出して翻訳を取得し、{{${language}}}を活用して特定のユーザーに正しい翻訳を特定します。この翻訳はJSONブロック「strings」に保存され、参照されます。
{% connected_content https://www.transifex.com/api/2/project/example/resource/example/translation/{{${language}}}/strings :basic_auth semc :save strings %}
{{strings[0].translation}}
{% connected_content https://api.crowdin.com/api/project/braze-test/export-file?key=you_api_key&language={{${language}}}&file=test.json&export_translated_only=1 :save response %}
{{response.value_1}}
翻訳をスプレッドシートにホストし、以下のいずれかの方法を使用して関連する言語でメッセージを送信します。
翻訳エージェンシーと連携して翻訳をGoogleスプレッドシートに保存し、Braze Connected Contentを使用してこのコンテンツをクエリできます。メッセージを送信すると、各ユーザーの選択した言語に基づいて、関連する翻訳がキャンペーン本文に取り込まれます。

Google Sheets APIには、プロジェクトごとに100秒あたり500リクエストの制限があります。Connected Content呼び出しはキャッシュできますが、このソリューションは高トラフィックのキャンペーンにはスケーラブルではありません。
このオプションは、GoogleスプレッドシートをConnected Content経由でクエリするJSONオブジェクトに変換する代替方法を提供します。スプレッドシートをSheetDB経由でJSON APIに変換することで、API呼び出しの頻度に応じて複数のサブスクリプションプランから選択できます。
スプレッドシートの構造はオプション4の手順に従いますが、SheetDBはオブジェクトをクエリするための追加フィルターも提供しています。
一部のユーザーは、SheetDBの検索メソッドをGETリクエスト呼び出しに実装して、{{${language}}} Liquidタグに基づいてJSONオブジェクトをフィルタリングすることで、大きな条件ブロックを構築する代わりに自動的に1つの言語の結果を返すようにし、LiquidやConnected Blockの依存関係を減らしてSheetDBを実装することを好む場合があります。
ステップ1:Googleスプレッドシートのフォーマット
まず、言語が異なるオブジェクトになるようにGoogleスプレッドシートを構築します:
| language | title1 | body1 | title2 | body2 |
| en | Hey | 1 | Hey2 | 5 |
| es | Hola | 2 | Hola2 | 6 |
| pt | Oi | 3 | Oi2 | 7 |
| de | Hallo | 4 | Hallo2 | 8 |
ステップ2:Connected Content呼び出しで言語Liquidタグを使用する
次に、Connected Content呼び出し内で{{${language}}} Liquidタグを実装します。SheetDBはスプレッドシートの作成時にsheet_idを自動生成します。
{% connected_content https://sheetdb.io/api/v1/[sheet_id]/search?language={{${language}}} :save result%}
ステップ3:メッセージのテンプレート化
最後に、Liquidを使用してメッセージをテンプレート化します:
{{result[0].title1}} //returns “Hey”
{{result[0].title2}} //returns “Hey2”
考慮事項
{{${language}}}フィールドは、マッチさせたいすべてのユーザーに対して定義されている必要があります。定義されていない場合、言語が設定されていないユーザーのフォールバックハンドラーとしてLiquid条件ブロックを含める必要があります。- Googleスプレッドシート内のデータモデリングは、メッセージオブジェクトを持つのではなく、言語駆動の縦方向の構造に従う必要があります。
- SheetDBは無料アカウントの制限があり、キャンペーン戦略に基づいて検討すべき複数の有料オプションを提供しています。
- Connected Content呼び出しはキャッシュできます。API呼び出しの予測される頻度を測定し、検索メソッドを使用する代わりにメインのSheetDBエンドポイントを呼び出す代替アプローチを検討することをお勧めします。
このオプションは、GoogleスプレッドシートをConnected Contentでクエリできる JSON APIに変換します。Sheetlabsは大量のクエリボリュームをサポートし、無料および有料のプランを提供しています。
ステップ1:Googleスプレッドシートで翻訳シートを準備する
各行が1つの言語になるようにGoogleスプレッドシートを構築します。例:
| language | greeting | title1 | legal1 |
|---|---|---|---|
| en | Welcome! | Your exclusive offer is here | … |
| fr | Bienvenue! | Votre offre exclusive est arrivée | … |
ステップ2:Sheetlabsを使用してシートをインポートし、APIを作成する
- Sheetlabsでサインアップします。
- Sheetlabsの手順に従って、Googleスプレッドシートからデータをインポートします。
- ステップ1で作成したスプレッドシートを選択します。
- Create a matching APIを選択します。
ステップ3:Sheetlabs認証トークンをBrazeに追加する(任意)
Sheetlabs APIが公開の場合、このステップはスキップしてください。認証が必要な場合:
- SheetlabsのMy Accountページに移動し、APIトークンをコピーします。
- BrazeのBasic Auth認証の手順に従って、Brazeで基本認証の認証情報を作成します。Sheetlabsのユーザー名(メールアドレス)とコピーしたAPIトークンを使用します。
sheetlabs_credsなどの名前で認証情報を保存します。
ステップ4:Connected ContentからSheetlabs APIを呼び出す
SheetlabsへのConnected Content呼び出しを追加します。/XXX/yourapiをステップ2で作成したAPIのパスに置き換えてください。
{% connected_content https://sheetlabs.com/XXX/yourapi?language={{${language}}} :save translations :basic_auth sheetlabs_creds %}
ステップ5:メッセージのテンプレート化
Liquidを使用して返されたフィールドを参照します。例:
{{translations[0].greeting}} {{${first_name}}},
{{translations[0].body1}}
考慮事項
- マッチさせたいすべてのユーザーに対して
{{${language}}}フィールドを定義してください。ユーザーに言語が設定されていない場合は、Liquidフォールバックを含めてください。 - Connected Content呼び出しはキャッシュできます。Sheetlabsプランを選択する際に、予測されるAPI頻度を測定してください。
詳細については、SheetlabsをBrazeで使用するを参照してください。