用語集用語、ブランドボイスのテキスト、ルール、モデル設定は、いずれもロケールごとに保存されます。エンジンは翻訳リクエストを処理する際、どの保存済みエントリをそのリクエストのロケールに適用するかを解決します。ここでは、完全一致のコードの照合、地域バリアントをまたいだ継承、完全一致がない場合のフォールバックが行われます。この解決ロジックは、4 つの設定面すべてに共通です。
仕組み#
ロケールは入力時に正規化され、その正規形で保存・返却されます。大文字・小文字や区切り文字は補正されますが、サブタグは保持されます。
| 入力値 | 保存形式 |
|---|---|
EN | en |
en_US | en-US |
sr_Latn-RS | sr-Latn-RS |
zh-cn | zh-CN |
照合はサブタグ境界をまたいで双方向に行われます。保存されたロケールは、一方が他方と完全一致する場合、または一方が他方の上位にあたる場合に、リクエストへ適用されます。また、同じロケールの表記ゆれでも、一方が他方の上位ではないものの、地域によって文字体系が決まる場合は一致とみなされます。つまり、地域のみを指定した形式と文字体系を明示した形式は同等です(zh-CN ≡ zh-Hans-CN、zh-TW ≡ zh-Hant-TW)。
| 保存済み | 適用先 | 適用されないもの |
|---|---|---|
de | de, de-DE, de-AT, de-CH | - |
de-DE | de-DE, de | de-AT, de-CH(兄弟リージョン) |
zh-CN | zh-CN、zh-Hans-CN、zh | zh-TW、zh-Hant-TW(文字体系が異なる) |
逆方向の継承
単独の de-DE リクエストに対して、保存済みの de が使われるケースは、実運用で最もよく見られるパターンです。多くのエンジンは完全な地域コードで設定されていますが、実際に受け取るのはベースコードのリクエストです。どちらの方向にも対応しています。
複数一致する場合の解決#
適用可能な保存済みエントリが複数ある場合、エンジンはそれらを順位付けし、最適なものを使います。
- 完全一致または言語デフォルトを最優先。
deへのリクエストでは、de-DE(ドイツ語の CLDR デフォルトリージョン)が優先され、その次に単独のdeが続きます。 - 次に、より具体的なものを優先 し、タイブレークに使います。
- それ以外の一致するリージョンもフォールバックとして残ります。たとえば唯一のエントリが
de-CHしかない顧客でも、deリクエストに対してそれより良い一致がなければそのエントリが使われるため、設定が宙に浮くことはありません。
| リクエスト | 優先 | 適用されるもの(フォールバック) | 除外 |
|---|---|---|---|
de | de-DE、次に de | de-CH, de-AT | - |
de-DE | de-DE、次に de | - | de-AT, de-CH |
de-AT | de-AT、次に de | - | de-DE, de-CH |
順位付けと選定#
上記の順位付けは、複数を組み合わせる設定面では並び順を決め、1 つだけ選ぶ設定面ではどれが採用されるかを決めます。
| 設定面 | 順位付けの働き |
|---|---|
| 用語集 | 一致する用語はすべて取得対象になり、どれがプロンプトに入るかは意味的な関連性で決まります |
| ルール | 一致するルールはすべて含まれ、最も適合するロケールのものから順に並びます |
| ブランドボイス | 最も適合する 1 件のテキストが採用され、各リクエストに適用されるブランドボイスのテキストは 1 つだけです |
| モデル設定 | 最も適合するものがプライマリモデルになり、残りがフォールバックチェーンを構成します |
スクリプトの安全性#
もう 1 つの追加ルールは、テキストが特定の正書法に結び付いた用語集の custom_translation 項目にだけ適用されます。文字体系が曖昧なベース言語、たとえば sr(キリル文字またはラテン文字)や zh(簡体字または繁体字)では、保存時に文字体系を確定させる必要があります。指定方法は、明示的な文字体系(zh-Hans、sr-Cyrl)か、文字体系を決定できる地域(zh-CN → 簡体字、sr-RS → キリル文字。いずれも CLDR に準拠)です。拒否されるのは、文字体系も地域もない完全に素のコードだけです。読み取り時には、こうした確定済みの形式は同等に扱われます。たとえば、zh-Hans-CN として保存された用語は zh-CN のリクエストに適用され、その逆も同様です。ただし、文字体系が不明な素の zh リクエストでは、文字体系が確定された行は拾われません。予測しやすい結果にするには、明示的な文字体系または地域を指定してください。de のように文字体系が 1 つしかない言語では文字体系の指定は不要で、de は通常どおり de-DE に解決されます。non_translatable 項目は文字体系に関係なくそのまま通過します。
例#
地域コード(en-US から fr-FR、de-DE、nb-NO)で設定されたエンジンが、ベースコードのリクエスト(fr、de、no)を受け取る場合:
frのターゲットでは、fr-FRの用語集用語、ブランドボイスのテキスト、ルールが適用されます。これはfrのデフォルトとして順位付けされるのであって、最後の手段として使われるわけではありません。fr-FRはフランス語における CLDR のデフォルト地域だからです。enのソースはen-USのエントリに一致します。照合は双方向です。noターゲットがnb-NOを拾うことはありません。noとnbはリージョンの組み合わせではなく、異なる言語サブタグです。ターゲットにはnbを使ってください。
API でロケール解決を使う#
localize endpoint を呼び出すと、この解決は自動で行われます。エンジンは、リクエストの sourceLocale と targetLocale をもとに、適用対象となる用語集用語、ブランドボイスのテキスト、ルール、モデル設定を照合します。追加のパラメータは必要ありません。
