資源管理系統如何比對和選擇資源

當要求資源時,也許有幾個某程度符合目前資源內容的候選項目。 資源管理系統將會分析所有的候選項目,並判斷要傳回的最佳候選項目。 這是透過考慮所有限定詞對所有候選項目進行排名來完成的。

在此排名程序中,不同的限定詞被賦予不同的優先順序:語言對整體排名的影響最大,其次是對比,然後是縮放比例,等等。 對於每個限定詞,將候選項目限定詞與內容限定詞值進行比較,以確定相符度的品質。 如何進行比較取決於限定詞。

有關如何完成語言標籤相符度的具體詳細資訊,請參閱資源管理系統如何符合語言標籤

對於某些限定詞,例如縮放比例和對比,總是存在某種最小程度的相符度。 例如,符合「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」、中性和「fr」。 在此情況下,「fr」完全不相符,而其他候選項目則在某種程度上相符。

整體排名程序首先根據最高優先順序的限定詞 (即語言) 評估候選項目。 不相符者將被淘汰。 其餘候選項目根據其語言相符度品質進行排名。 如果存在任何相同排名,則考慮次高優先順序限定詞,也就是對比,使用相符度品質進行對比來區分相同排名的候選項目。 對比之後,縮放比例限定詞用於區分剩餘的相同排名,依此類推,透過盡可能多的限定詞來達到排序良好的排名。

如果由於限定詞與內容不符而將所有候選項目從考慮中移除,則資源載入器將進行第二遍,尋找要顯示的預設候選項目。 預設候選項目是在建立 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

資源管理系統淘汰了其中三個檔案,因為高對比和德文語言不符合設定定義的內容。 因此留下了這些候選項目。

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

您可以使用進階 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