リソース管理システムでの言語タグの照合の仕組み
前のトピック (「リソース管理システムでのリソースの照合と選択の仕組み」) では、一般的な修飾子の照合について説明しました。 このトピックでは、言語タグの照合についてさらに詳しく説明します。
はじめに
言語タグ修飾子を持つリソースは、アプリのランタイム言語リストに基づいて比較され、スコアリングされます。 さまざまな言語リストの定義については、「ユーザー プロファイルの言語とアプリ マニフェストの言語について」を参照してください。 リスト内の最初の言語の照合は、他の地域のバリアントであっても、リスト内の 2 番目の言語の照合の前に行われます。 たとえば、アプリのランタイム言語が en-US の場合、fr-CA リソースよりも en-GB のリソースが選択されます。 en の形式のリソースがない場合にのみ、fr-CA のリソースが選択されます (この場合、アプリの既定の言語を en のどの形式にも設定できないことに注意してください)。
スコアリング メカニズムでは、BCP-47 サブタグ レジストリに含まれるデータやその他のデータ ソースが使用されます。 これにより、一致の質の異なるスコアリング勾配が可能になり、複数の候補が使用可能な場合は、最も一致するスコアを持つ候補が選択されます。
そのため、言語コンテンツに一般的な用語でタグを付けることができますが、必要に応じて特定のコンテンツを指定することもできます。 たとえば、アプリには、米国、英国、その他の地域の両方に共通する英語の文字列が多数含まれている場合があります。 これらの文字列を "en" (英語) としてタグ付けすると、スペースとローカリゼーションのオーバーヘッドが節約されます。 "color/colour" という単語を含む文字列など、区別が必要な場合は、言語と地域の両方のサブタグを使用して、それぞれ "en-US" と "en-GB" のように、米国版と英国版を別々にタグ付けできます。
言語タグ
言語は、正規化された整形式の BCP-47 言語タグを使用して識別されます。 サブタグ コンポーネントは、BCP-47 サブタグ レジストリで定義されます。 BCP-47 言語タグの通常の構造は、次の 1 つ以上のサブタグ要素で構成されます。
- 言語サブタグ (必須)。
- スクリプト サブタグ (サブタグ レジストリで指定されている既定値を使用して推論できます)。
- リージョン サブタグ (オプションの)。
- バリアント サブタグ (オプションの)。
追加のサブタグ要素が存在する可能性がありますが、言語の一致にはほとんど影響しません。 ワイルドカード ("") を使用して定義された言語範囲はありません (例: "en-")。
2 つの言語のマッチング
Windows で 2 つの言語を比較するときは、通常、より大きなプロセスのコンテキスト内で行われます。 これは、Windows がアプリケーション言語の一覧を生成する場合など、複数の言語を評価するコンテキストにある場合があります (「ユーザー プロファイルの言語とアプリ マニフェストの言語について」を参照してください)。 Windows は、ユーザー設定の複数の言語をアプリのマニフェストで指定された言語に一致させることでこれを行います。 この比較は、特定のリソースに対する他の修飾子と共に言語を評価するというコンテキストで行われる場合もあります。 1 つの例は、Windows が特定のファイル リソースを特定のリソース コンテキストに解決する場合です。ユーザーの自宅の場所、デバイスの現在のスケールまたは DPI を、リソースの選択に考慮される他の要因 (言語以外) として使用します。
2 つの言語タグを比較すると、一致の近さに基づいてスコアが割り当てられます。
照合 | スコア | 例 |
---|---|---|
完全一致 | 最高 | en-AU : en-AU |
バリアントの一致 (言語、スクリプト、地域、バリアント) | en-AU-variant1 : en-AU-variant1-t-ja | |
リージョンの一致 (言語、スクリプト、リージョン) | en-AU : en-AU-variant1 | |
部分一致 (言語、スクリプト) | ||
- マクロリージョンの一致 | en-AU : en-053 | |
- リージョン ニュートラル マッチ | en-AU : en | |
- 綴るアフィニティの一致 (制限付きサポート) | en-AU : en-GB | |
- 優先リージョンの一致 | en-AU : en-US | |
- リージョンの一致 | en-AU : en-CA | |
未決定言語 (任意の言語の一致) | en-AU : und | |
一致なし (スクリプトの不一致または主言語タグの不一致) | 最低 | en-AU : fr-FR |
完全一致
タグがまったく同じである (すべてのサブタグ要素が一致する)。 比較は、バリエーションマッチまたは地域のマッチからこのマッチタイプに昇格できます。 たとえば、en-US は en-US と一致します。
バリアント一致
これらのタグは、言語、スクリプト、地域、およびバリアントのサブタグで一致しますが、他のいくつかの点で異なります。
リージョンの一致
これらのタグは、言語、スクリプト、および地域のサブタグで一致しますが、他のいくつかの点で異なります。 たとえば、de-DE-1996 は de-DE と一致し、en-US-x-Pirate は en-US と一致します。
部分一致
タグは言語サブタグとスクリプトサブタグで一致しますが、地域やその他のサブタグが異なります。 たとえば、en-US は en または en-* に対応付けられます。
マクロリージョンの一致
タグは、言語サブタグとスクリプトサブタグで一致します。どちらのタグにも領域サブタグがあり、一方は他方の領域を包含するマクロ領域を示します。 マクロ地域サブタグは常に数値であり、国連統計局の M.49 国番号と市外局番から派生します。 包括的な関係の詳細については、「マクロ地理的 (大陸) 地域、地理的サブ地域、および選択した経済グループとその他のグループの構成」を参照してください。
注: BCP-47 では、「経済グループ」または「その他のグループ」の UN コードはサポートされていません。
注: マクロ領域サブタグ「001」を持つタグは、領域に依存しないタグと同等と見なされます。 たとえば、「es-001」と「es」は同義語として扱われます。
リージョン ニュートラル マッチ
タグは言語サブタグとスクリプトサブタグで一致し、1 つのタグだけに地域タグがあります。 親一致は、他の部分一致よりも優先されます。
綴るアフィニティの一致
タグは言語サブタグとスクリプト サブタグで一致し、region サブタグには正書法の親和性があります。 アフィニティは、"en-IE" や "en-GB" など、言語固有のアフィニティ領域を定義する Windows で保持されるデータに依存しています。
優先リージョンの一致
タグは言語サブタグとスクリプト サブタグで一致し、地域サブタグの 1 つが言語の既定の地域サブタグです。 たとえば、"fr-FR" は "fr" サブタグの既定のリージョンです。 したがって、fr-FR は fr-CA よりも fr-BE に適しています。 これは、Windows がローカライズされる各言語の既定の地域を定義する Windows で保持されるデータに依存します。
兄弟の一致
タグは言語サブタグとスクリプト サブタグで一致し、どちらにも地域サブタグがありますが、それらの間に他の関係は定義されていません。 複数の兄弟が一致した場合、上位の一致がない場合、最後に列挙された兄弟が勝者になります。
未確定言語
リソースには、任意の言語に一致することを示すために "und" というタグを付けることができます。 このタグを スクリプト タグと一緒に使用して、スクリプトに基づいて一致をフィルタリングすることもできます。 たとえば、"und-Latn" は、ラテン文字を使用するすべての言語タグと一致します。 詳細については、下を参照してください。
スクリプトの不一致
タグが 1 次言語タグでのみ一致し、スクリプトでは一致しない場合、ペアは一致しないと見なされ、有効な一致のレベルを下回るスコアが付けられます。
一致なし。
1 次言語サブタグの不一致は、有効な一致のレベルを下回るスコアリングが付けられます。 たとえば、zh-Hant は zh-Hans と一致しません。
例
ユーザー言語 "zh-Hans-CN" (簡体字中国語 (中国)) は、次のリソースに示されている優先順位で一致します。 X は一致しないことを示します。
- 完全一致; 2. & 3. リージョンの一致; 4. 親の一致; 5. 兄弟の一致。
言語サブタグに BCP-47 サブタグ レジストリで定義された Suppress-Script 値がある場合、対応する照合が行われ、抑制されたスクリプト コードの値が使用されます。 たとえば、en-Latn-US は en-US と一致します。 次の例では、ユーザー言語は "en-AU" (英語 (オーストラリア)) です。
- 完全一致; 2. マクロリージョンの一致; 3. リージョンに依存しない一致; 4. 綴るアフィニティの一致;5. 優先リージョンの一致; 6. 兄弟の一致。
言語と言語リストの照合
場合によっては、1 つの言語を言語の一覧と照合する大きなプロセスの一部として照合が行われることがあります。 たとえば、1 つの言語ベースのリソースがアプリの言語リストと一致する場合があります。 一致のスコアは、リスト内で最初に一致した言語の位置によって重み付けされます。 リスト内の言語が低いほど、スコアは低くなります。
言語リストに、同じ言語とスクリプトのサブタグを持つ 2 つ以上の地域バリアントが含まれている場合、最初の言語タグの比較は、完全一致、バリアント一致、および地域一致についてのみスコアリングされます。 部分一致のスコアリングは、最後の地域バリアントに延期されます。 これにより、ユーザーは言語リストの照合動作を細かく制御できます。 一致動作には、最初の項目の言語とスクリプトに一致する 3 番目の項目がある場合に、リスト内の 2 番目の項目の完全一致を、リスト内の最初の項目の部分一致よりも優先することを許可することが含まれる場合があります。 次に例を示します。
- 言語リスト (順番): "pt-PT" (ポルトガル語 (ポルトガル))、"en-US" (英語 (米国))、"pt-BR" (ポルトガル語 (ブラジル))。
- リソース: "en-US"、"pt-BR"。
- スコアが高いリソース: "en-US"。
- 説明: 比較は「pt-PT」で始まりますが、完全一致は見つかりません。 ユーザーの言語リストに "pt-BR" が存在するため、部分一致は "pt-BR" との比較に延期されます。 次の言語比較は "en-US" で、これは完全に一致します。 したがって、勝者のリソースは "en-US" です。
OR
- 言語リスト (順番): "es-MX" (スペイン語 (メキシコ))、"es-HO" (スペイン語 (ホンジュラス))。
- リソース: "en-ES"、"es-HO"。
- スコアが高いリソース: "es-HO"。
未決定言語 ("und")
言語タグ "und" は、より適切な一致がない場合に、任意の言語に一致するリソースを指定するために使用できます。 これは、BCP-47 の言語の範囲の "" や "-<script>" に似ていると考えられます。 次に例を示します。
- 言語リスト: "en-US"、"zh-Hans-CN"。
- リソース: "zh-Hans-CN"、"und"。
- スコアが高いリソース: "und"。
- 説明: 比較は "en-US" で始まりますが、"en" (部分的またはそれ以上) に基づく一致は見つかりません。 「und」でタグ付けされたリソースがあるため、マッチングアルゴリズムはそれを使用します。
タグ "und" を使用すると、複数の言語が 1 つのリソースを共有し、個々の言語を例外として扱うことができます。 たとえば次のようになります。
- 言語リスト: "zh-Hans-CN"、"en-US"。
- リソース: "zh-Hans-CN"、"und"。
- スコアが高いリソース: "zh-Hans-CN"。
- 説明: 比較では、最初の項目の完全一致が見つかったため、"und" というラベルの付いたリソースはチェックされません。
スクリプト タグで "und" を使用すると、スクリプトでリソースをフィルター処理できます。 たとえば次のようになります。
- 言語リスト: "ru"。
- リソース: "und-Latn"、"und-Cyrl"、"und-Arab"。
- スコアが高いリソース: "und-Cyrl"。
- 説明: 比較では "ru" (部分的またはそれ以上) に一致するものが見つからなかったため、言語タグ "und" と一致します。 言語タグ "ru" に関連付けられた抑制スクリプト値 "Cyrl" は、リソース "und-Cyrl" と一致します。
綴るリージョンのアフィニティ
地域サブタグが異なる 2 つの言語タグが一致する場合、特定の地域のペアは、他の地域よりも互いに親和性が高くなる可能性があります。 サポートされているアフィネリングされたグループは、英語 ("en") 用のみです。 地域サブタグ "PH" (フィリピン) と "LR" (リベリア) は、地域サブタグ "US" と正書法アフィニオン アフィニティを持っています。 他のすべての地域サブタグは、"GB" (英国) 地域サブタグと関連しています。 したがって、"en-US" と "en-GB" の両方のリソースが使用可能な場合、"en-HK" (英語 (香港特別行政区)) の言語一覧は、"en-US" リソースよりも "en-GB" リソースの方がスコアが高くなります。
多くの地域バリアントを持つ言語の処理
一部の言語は大きな話者コミュニティを持ち、地域が異なると、その言語の変種を使っています。 英語やフランス語、スペイン語などが、多言語アプリでよくサポートされているその種の言語です。 地域差には、正書法の違い (たとえば、"color" と "color" の違い)、語彙などの方言の違い ("truck" と "lorry" など) が含まれます。
このように地域バリアントが多い言語は、世界対応のアプリを作るときに問題になります。"どれぐらいの数の地域バリアントをサポートすればいいのか"、"どれをサポートすればいいのか"、"アプリで地域バリアントを管理する最も費用対効果の高い方法はどれか"、といった疑問のすべてに答えることは、このトピックの範囲を超えています。 ただし、Windows の言語照合メカニズムには、地域バリアントの処理に役立つ機能が用意されています。
多くの場合、アプリは特定の言語の 1 種類のみをサポートします。 アプリに、出身地域に関係なく英語を話す人が使用することが想定される 1 種類の英語のリソースがあるとします。 この場合、リージョン サブタグのないタグ "en" は、その期待を反映します。 ただし、アプリではこれまで、地域サブタグを含む "en-US" などのタグを使用していた可能性があります。 この場合も、アプリは 1 種類の英語のみを使用し、Windows は、1 つの地域のバリアントに対してタグ付けされたリソースと、別の地域のバリアントのユーザー言語設定を適切な方法で照合します。
ただし、2 つ以上の地域バリアントをサポートする場合は、"en" と "en-US" などの違いがユーザー エクスペリエンスに大きな影響を与える可能性があるため、使用するリージョン サブタグを検討することが重要になります。
カナダで使用されているフランス語とヨーロッパフランス語で別々のフランス語ローカリゼーションを提供するとします。 カナダフランス語の場合は、「fr-CA」を使用できます。 ヨーロッパからの話者の場合、ローカライズはフランス語(フランス)を使用するため、それには「fr-FR」を使用できます。 しかし、特定のユーザーがベルギー出身で、言語設定が「fr-BE」の場合はどうでしょうか。彼らはどちらを手に入れますか? リージョン "BE" は "FR" と "CA" の両方とは異なり、両方に "任意のリージョン" が一致することを示唆しています。 ただし、フランスはたまたまフランス語の優先地域であるため、この場合、「fr-FR」が最適であると見なされます。
最初に、フランス語 (フランス) の文字列を使用し、総称的に "fr" として修飾して、1 種類のフランス語のみにアプリをローカライズし、次にカナダ フランス語のサポートを追加するとします。 おそらく、特定のリソースのみをカナダのフランス語に再翻訳する必要があります。 元のアセットはすべて「fr」として修飾されたまま引き続き使用し、「fr-CA」を使用して新しいアセットの小さなセットを追加するだけです。 ユーザーの言語設定が「fr-CA」の場合、「fr-CA」アセットの一致スコアは「fr」アセットよりも高くなります。 ただし、ユーザーの言語設定が他の種類のフランス語の場合は、地域に依存しないアセット「fr」が「fr-CA」アセットよりも適しています。
別の例として、スペインの話者とラテンアメリカの話者に別々のスペイン語のローカリゼーションを提供するとします。 さらに、ラテンアメリカ向けの翻訳がメキシコの仕入先から提供されたとします。 2 つのリソース セットに "es-ES" (スペイン) と "es-MX" (メキシコ) を使用する必要がありますか? そうすると、アルゼンチンやコロンビアなどの他のラテンアメリカ地域からの話者が「es-ES」リソースを取得するため、問題が発生する可能性があります。 この場合、マクロ領域サブタグ「es-419」を使用して、ラテンアメリカまたはカリブ海地域の任意の地域の話者のためにアセットを使用する予定であることを反映させることができます。
地域に依存しない言語タグとマクロ地域サブタグは、複数の地域品種をサポートする場合に非常に効果的です。 必要な個別の資産の数を最小限に抑えるために、特定の資産を、その資産が適用可能な最も広範な補償範囲を反映する方法で評価することができます。 次に、必要に応じて、より具体的なバリアントで広く適用可能なアセットを補完します。 地域に依存しない言語修飾子を持つアセットは、そのユーザーに適用される、より地域固有の修飾子を持つ別のアセットがない限り、すべての地域の種類のユーザーに使用されます。 たとえば、「en」のアセットはオーストラリア英語のユーザーには一致しますが、「en-053」(オーストラリアまたはニュージーランドで使用される英語)のアセットはそのユーザーにはよりよく一致し、「en-AU」のアセットは可能な限り最も一致します。
英語には特別な配慮が必要です。 アプリが 2 つの英語のローカライズを追加する場合、それらは米国英語と英国英語、つまり "国際" 英語用になる可能性があります。 前述のように、米国以外の特定の地域では米国のスペル規則に従っており、Windows 言語の一致ではそれが考慮されます。 このシナリオでは、バリアントの 1 つにリージョンに依存しないタグ「en」を使用することはお勧めしません。代わりに、"en-GB" と "en-US" を使用します。 (ただし、特定のリソースが個別のバリアントを必要としない場合は、"en" を使用できます)。"en-GB" または "en-US" が "en" に置き換えられると、Windows によって提供される正書法の地域アフィニティが妨げられます。 3 番目の英語ローカライゼーションを追加する場合は、必要に応じて追加のバリアントに特定の地域サブタグまたはマクロ地域サブタグ ("en-CA"、"en-AU"、"en-053" など) を使用しますが、"en-GB" と "en-US" は引き続き使用します。