リソース管理システムでのリソースの照合と選択の仕組み

リソースを要求すると、現在のリソース コンテキストにある程度一致するリソース候補がいくつか存在する場合があります。 リソース管理システムはすべての候補を分析して、返すのに最もよい候補を決定します。 これを行うには、すべての修飾子を考慮してすべての候補をランク付けします。

このランク付けプロセスでは、異なる修飾子に異なる優先順位が与えられます。言語は全体的なランキングに最も大きな影響を与え、その後にコントラスト、スケールなどが与えられます。 修飾子ごとに、候補修飾子がコンテキスト修飾子値と比較され、一致の品質が決定されます。 比較の方法は、修飾子によって異なります。

言語タグの照合方法の詳細については、「 リソース管理システムが言語タグと一致する方法を参照してください。

スケールやコントラストなどの一部の修飾子では、常に一致する程度が最小限です。 たとえば、"scale-100" で修飾された候補は、"scale-400" のコンテキストに一致しますが、"scale-200" または (完全に一致する) "scale-400" の候補と一致しません。

ただし、言語やホームリージョンなどの他の修飾子では、一致しない比較 (および一致度) を持つことができます。 たとえば、"en-US" という言語で修飾された候補は、"en-GB" のコンテキストの部分的な一致ですが、"fr" として修飾された候補はまったく一致しません。 同様に、"155" (西ヨーロッパ) としてホーム リージョンの資格を持つ候補は、"FR" というホーム リージョンの設定を持つユーザーのコンテキストとやや一致しますが、"US" として認定された候補はまったく一致しません。

候補が評価されると、任意の修飾子に対して一致しない比較がある場合、その候補は全体的な非一致ランク付けを取得し、選択されません。 このように、優先順位の高い修飾子は、最適な一致を選択する際に最も重みを持つことができますが、優先順位の低い修飾子でも、一致しないために候補を排除できます。

その修飾子に対してまったくマークされていない場合、候補は修飾子に関連して中立です。 修飾子の場合、ニュートラル候補は常にコンテキスト修飾子値と一致しますが、その修飾子に対してマークされ、ある程度の一致 (正確または部分的) を持つ候補よりも低い一致の品質のみを持ちます。 たとえば、"en-US"、"en"、"fr"、および言語に依存しない候補の候補がある場合、言語修飾子の値が "en-GB" のコンテキストの場合、候補は "en"、"en-US"、neutral、および "fr" の順序でランク付けされます。 この場合、"fr" は一致しませんが、他の候補はある程度一致します。

全体的なランク付けプロセスは、最も優先度の高い修飾子 (言語) に関連して候補を評価することから始まります。 一致しない値は削除されます。 残りの候補は、言語の一致の質に関連してランク付けされます。 タイがある場合は、次に優先順位の高い修飾子であるコントラストが考慮され、一致の品質を使用して、関連付けられた候補間でコントラストを区別します。 これに対し、スケール修飾子は、残りのタイを区別するために使用されます。また、適切に順序付けされたランク付けに到達するために必要な数の修飾子を使用します。

コンテキストと一致しない修飾子のためにすべての候補が考慮から削除された場合、リソース ローダーは 2 番目のパスを通過し、表示する既定の候補を探します。 既定の候補は PRI ファイルの作成時に決定され、実行時コンテキストに対して選択する候補が常に存在することを確認する必要があります。 候補に一致しない修飾子があり、既定値ではない場合、そのリソース候補は完全に考慮されずにスローされます。

すべてのリソース候補がまだ考慮されている場合、リソース ローダーは最も優先度の高いコンテキスト修飾子の値を確認し、最適な一致スコアまたは最適な既定のスコアを持つものを選択します。 実際の一致は、既定のスコアよりも優れていると見なされます。

同点がある場合、次に優先度の高いコンテキスト修飾子の値が検査され、最適な一致が見つかるまでプロセスが続行されます。

リソース候補の選択例

これらのファイルについて考えてみましょう。

en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg  
fr/images/logo.scale-100.jpg
fr/images/contrast-high/logo.scale-400.jpg
fr/images/contrast-high/logo.scale-100.jpg
de/images/logo.jpg

そして、これらが現在のコンテキストの設定であるとします。

Application language: en-US; fr-FR;
Scale: 400
Contrast: Standard

ハイ コントラストとドイツ語が設定で定義されているコンテキストと一致しないため、リソース管理システムでは 3 つのファイルが削除されます。 これにより、これらの候補が残ります。

en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg  
fr/images/logo.scale-100.jpg

残りの候補の場合、リソース管理システムは、最も優先度の高いコンテキスト修飾子 (言語) を使用します。 設定では英語がフランス語より前に表示されるため、英語リソースはフランス語よりも近い一致です。

en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg  

次に、リソース管理システムは、次に優先順位の高いコンテキスト修飾子であるスケールを使用します。 したがって、これは返されるリソースです。

en/images/logo.scale-400.jpg

advanced NamedResource.ResolveAll メソッドを使用すると、コンテキスト設定と一致する順序ですべての候補を取得できます。 先ほど説明した例では、 ResolveAll はこの順序で候補を返します。

en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg  
fr/images/logo.scale-100.jpg

フォールバック選択肢を生成する例

これらのファイルについて考えてみましょう。

en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg  
fr/images/contrast-standard/logo.scale-400.jpg
fr/images/contrast-standard/logo.scale-100.jpg
de/images/contrast-standard/logo.jpg

そして、これらが現在のコンテキストの設定であるとします。

User language: de-DE;
Scale: 400
Contrast: High

コンテキストと一致しないため、すべてのファイルが削除されます。 そのため、PRI ファイルの作成時に既定のパス ( MakePri.exe を使用してリソースを手動で実行する方法を参照) を入力します。

Language: fr-FR;
Scale: 400
Contrast: Standard

これにより、現在のユーザーまたは既定値に一致するすべてのリソースが残されます。

fr/images/contrast-standard/logo.scale-400.jpg
fr/images/contrast-standard/logo.scale-100.jpg
de/images/contrast-standard/logo.jpg

リソース管理システムは、最も優先度の高いコンテキスト修飾子である言語を使用して、最高スコアの名前付きリソースを返します。

de/images/contrast-standard/logo.jpg

重要な API