Share via


Wie das Ressourcenverwaltungssystem Ressourcen zuordnet und auswählt

Wenn eine Ressource angefordert wird, kann es mehrere Kandidaten geben, für die sich in einem gewissen Maße eine Übereinstimmung mit dem aktuellen Ressourcenkontext ergibt. Das Ressourcenverwaltungssystem analysiert alle Kandidaten und ermittelt den besten Kandidaten für die Rückgabe. Dies geschieht, indem alle Qualifizierer berücksichtigt werden, um alle Kandidaten zu bewerten.

In diesem Bewertungsprozess erhalten die verschiedenen Qualifizierer unterschiedliche Prioritäten: Sprache hat den größten Einfluss auf das Gesamtranking, gefolgt von Kontrast, dann Skalierung usw. Für jeden Qualifizierer werden Kandidatenqualifizierer mit dem Kontextqualifiziererwert verglichen, um die Qualität der Übereinstimmung zu bestimmen. Wie der Vergleich durchgeführt wird, hängt vom Qualifizierer ab.

Ausführliche Informationen zum Abgleich von Sprachtags finden Sie unter Abgleich von Sprachtags durch das Ressourcenverwaltungssystem.

Für einige Qualifizierer, z. B. Skalierung und Kontrast, gibt es immer einen minimalen Grad an Übereinstimmung. Beispielsweise entspricht ein kandidat, der für "scale-100" qualifiziert ist, einen Kontext von "scale-400" zu einem gewissen Grad, wenn auch nicht so gut wie ein Kandidat, der für "scale-200" oder (für eine perfekte Übereinstimmung) "scale-400" qualifiziert ist.

Für andere Qualifizierer, z. B. Sprache oder Heimatregion, ist es jedoch möglich, einen Vergleich ohne Übereinstimmung (sowie Übereinstimmungsgrade) durchzuführen. Beispielsweise ist ein Kandidat, der für die Sprache als "en-US" qualifiziert ist, eine Partielle Übereinstimmung für einen Kontext von "en-GB", aber ein Kandidat, der als "fr" qualifiziert ist, ist überhaupt keine Übereinstimmung. Ebenso stimmt ein Kandidat, der für die Heimatregion als "155" (Westeuropa) qualifiziert ist, einen Kontext für einen Benutzer mit der Einstellung für die Heimregion "FR" etwas gut ab, aber ein Kandidat, der als "USA" qualifiziert ist, stimmt überhaupt nicht überein.

Wenn ein Kandidat ausgewertet wird und ein Nicht-Übereinstimmungsvergleich für einen Qualifizierer vorhanden ist, erhält dieser Kandidat eine Gesamtrangfolge, die keine Übereinstimmung aufweist, und wird nicht ausgewählt. Auf diese Weise können qualifizierer mit höherer Priorität das größte Gewicht bei der Auswahl der besten Übereinstimmung haben, aber selbst ein Qualifizierer mit niedriger Priorität kann einen Kandidaten aufgrund eines Nicht-Matchs ausschließen.

Ein Kandidat ist gegenüber einem Qualifizierer neutral, wenn er für diesen Qualifizierer überhaupt nicht markiert ist. Für jeden Qualifizierer ist ein neutraler Kandidat immer eine Übereinstimmung mit dem Kontextqualifiziererwert, aber nur mit einer niedrigeren Übereinstimmungsqualität als jeder Kandidat, der für diesen Qualifizierer markiert wurde und einen gewissen Grad an Übereinstimmung (exakt oder teilweise) aufweist. Wenn wir beispielsweise Kandidaten für "en-US", "en", "fr" und auch einen sprachneutralen Kandidaten haben, werden die Kandidaten für einen Kontext mit dem Sprachqualifiziererwert "en-GB" in der folgenden Reihenfolge eingestuft: "en", "en-US", "neutral" und "fr". In diesem Fall stimmt "fr" überhaupt nicht überein, während die anderen Kandidaten zu einem gewissen Grad übereinstimmen.

Der Gesamtbewertungsprozess beginnt mit der Bewertung von Kandidaten in Bezug auf den Qualifizierer mit der höchsten Priorität, d. h. die Sprache. Nicht übereinstimmende Übereinstimmungen werden eliminiert. Die verbleibenden Kandidaten werden in Bezug auf ihre Qualität der Übereinstimmung für die Sprache bewertet. Wenn Verbindungen vorhanden sind, wird der Qualifizierer mit der nächsthöheren Priorität, kontrast, berücksichtigt, wobei die Qualität der Übereinstimmung für den Kontrast verwendet wird, um zwischen den gebundenen Kandidaten zu unterscheiden. Nach dem Kontrast wird der Skalierungsqualifizierer verwendet, um verbleibende Verbindungen usw. durch so viele Qualifizierer zu unterscheiden, wie erforderlich sind, um zu einer gut sortierten Rangfolge zu gelangen.

Wenn alle Kandidaten aufgrund von Qualifizierern, die nicht dem Kontext entsprechen, aus der Berücksichtigung entfernt werden, durchläuft das Ressourcenladeprogramm einen zweiten Durchlauf und sucht nach einem Standardkandidaten, der angezeigt werden soll. Standardkandidaten werden während der Erstellung der PRI-Datei bestimmt und müssen sicherstellen, dass für jeden Laufzeitkontext immer ein Kandidat ausgewählt werden kann. Wenn ein Kandidat über Qualifizierer verfügt, die nicht übereinstimmen und keine Standardeinstellung sind, wird dieser Ressourcenkandidat dauerhaft außer Betracht gezogen.

Für alle noch in Betracht gezogenen Ressourcenkandidaten überprüft das Ressourcenladeprogramm den Kontextqualifiziererwert mit der höchsten Priorität und wählt den Wert aus, der die beste Übereinstimmung oder die beste Standardbewertung aufweist. Jede tatsächliche Übereinstimmung wird als besser angesehen als eine Standardbewertung.

Wenn ein Gleichstand vorhanden ist, wird der Qualifiziererwert für den Kontext der nächsthöchsten Priorität überprüft, und der Prozess wird fortgesetzt, bis die beste Übereinstimmung gefunden wird.

Beispiel für die Auswahl eines Ressourcenkandidaten

Betrachten Sie diese Dateien.

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

Angenommen, dies sind die Einstellungen im aktuellen Kontext.

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

Das Ressourcenverwaltungssystem eliminiert drei der Dateien, da hoher Kontrast und die deutsche Sprache nicht mit dem durch die Einstellungen definierten Kontext übereinstimmen. Damit bleiben diese Kandidaten übrig.

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

Für die verbleibenden Kandidaten verwendet das Ressourcenverwaltungssystem den Kontextqualifizierer mit der höchsten Priorität( Sprache). Die englischen Ressourcen stimmen näher überein als die französischen Ressourcen, da Englisch in den Einstellungen vor Französisch aufgeführt ist.

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

Als Nächstes verwendet das Ressourcenverwaltungssystem den Kontextqualifizierer der nächsthöheren Priorität, skalierung. Dies ist also die zurückgegebene Ressource.

en/images/logo.scale-400.jpg

Sie können die erweiterte NamedResource.ResolveAll-Methode verwenden, um alle Kandidaten in der Reihenfolge abzurufen, in der sie den Kontexteinstellungen entsprechen. Für das Beispiel, das wir soeben durchlaufen haben, gibt ResolveAll Kandidaten in dieser Reihenfolge zurück.

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

Beispiel für die Erstellung einer Fallbackoption

Betrachten Sie diese Dateien.

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

Angenommen, dies sind die Einstellungen im aktuellen Kontext.

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

Alle Dateien werden entfernt, da sie nicht mit dem Kontext übereinstimmen. Daher geben wir einen Standarddurchlauf ein, bei dem der Standardwert (siehe Manuelles Kompilieren von Ressourcen mit MakePri.exe) während der Erstellung der PRI-Datei dies war.

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

Dadurch bleiben alle Ressourcen erhalten, die entweder dem aktuellen Benutzer oder dem Standard entsprechen.

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

Das Ressourcenverwaltungssystem verwendet den Kontextqualifizierer mit der höchsten Priorität(Sprache), um die benannte Ressource mit der höchsten Bewertung zurückzugeben.

de/images/contrast-standard/logo.jpg

Wichtige APIs