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. Dazu werden alle Qualifizierer berücksichtigt, um alle Kandidaten zu bewerten.
Bei diesem Bewertungsprozess werden die verschiedenen Qualifizierer unterschiedlichen Prioritäten gesetzt: Sprache hat die größte Auswirkung auf die Gesamtrangfolge, gefolgt von Kontrast, Skalierung usw. Für jeden Qualifizierer werden Kandidatenqualifizierer mit dem Kontextqualifiziererwert verglichen, um die Qualität der Übereinstimmung zu bestimmen. Wie der Vergleich erfolgt, hängt vom Qualifizierer ab.
Ausführliche Informationen dazu, wie der Sprachtagabgleich erfolgt, finden Sie unter "Übereinstimmung mit Sprachtags" im Ressourcenverwaltungssystem.
Für einige Qualifizierer, z. B. Skalierung und Kontrast, gibt es immer einen minimalen Grad an Übereinstimmung. Ein kandidat, der für "scale-100" qualifiziert ist, entspricht beispielsweise einem Kontext von "scale-400" in gewissem Maße, wenn auch nicht so gut wie ein Kandidat, der für "scale-200" oder (für eine perfekte Übereinstimmung) "scale-400" qualifiziert ist.
Bei anderen Qualifizierern, z. B. Sprache oder Heimatregion, ist es jedoch möglich, einen Vergleich ohne Übereinstimmung (sowie Grad des Abgleichs) zu haben. 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 entspricht ein Kandidat, der für die Heimatregion als "155" (Westeuropa) qualifiziert ist, einem Benutzer mit einer Einstellung der Heimatregion "FR" etwas gut, aber ein Kandidat, der als "US" qualifiziert ist, stimmt überhaupt nicht überein.
Wenn ein Kandidat ausgewertet wird, wenn für einen Qualifizierer ein Vergleich ohne Übereinstimmung vorliegt, erhält dieser Kandidat eine gesamtrangige Bewertung ohne Übereinstimmung und wird nicht ausgewählt. Auf diese Weise können die Qualifizierer mit höherer Priorität die größte Gewichtung bei der Auswahl der besten Übereinstimmung haben, aber selbst ein Qualifizierer mit niedriger Priorität kann einen Kandidaten aufgrund einer Nicht-Übereinstimmung beseitigen.
Ein Kandidat ist im Verhältnis zu einem Qualifizierer neutral, wenn er überhaupt nicht für diesen Qualifizierer markiert ist. Für jeden Qualifizierer ist ein neutraler Kandidat immer eine Übereinstimmung für den Kontextqualifiziererwert, aber nur mit einer niedrigeren Übereinstimmungsqualität als jeder Kandidat, der für diesen Qualifizierer markiert wurde und einen gewissen Grad an Übereinstimmung hat (genau oder teilweise). Wenn wir beispielsweise Kandidaten für "en-US", "en", "fr" und auch einen sprachneutralen Kandidaten haben, wird für einen Kontext mit einem Sprachqualifiziererwert von "en-GB" die Kandidaten in der folgenden Reihenfolge bewertet: "en", "en-US", neutral und "fr". In diesem Fall stimmt "fr" überhaupt nicht überein, während die anderen Kandidaten bis zu einem gewissen Grad übereinstimmen.
Der Gesamtbewertungsprozess beginnt mit der Bewertung von Kandidaten im Verhältnis zum Qualifizierer mit der höchsten Priorität, also der Sprache. Nicht-Übereinstimmungen werden eliminiert. Die verbleibenden Kandidaten werden in Bezug auf ihre Qualität der Übereinstimmung für die Sprache bewertet. Wenn es Bindungen gibt, wird der Qualifizierer mit der nächsten Priorität, Kontrast, berücksichtigt, wobei die Qualität der Übereinstimmung verwendet wird, um zwischen gebundenen Kandidaten zu unterscheiden. Nach dem Kontrast wird der Skalierungsqualifizierer verwendet, um verbleibende Bindungen zu unterscheiden, usw. durch so viele Qualifizierer wie erforderlich, um zu einer gut sortierten Rangfolge zu gelangen.
Wenn alle Kandidaten aufgrund von Qualifizierern, die nicht mit dem Kontext übereinstimmen, 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 immer ein Kandidat für einen beliebigen Laufzeitkontext 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 Ressourcenkandidaten, die noch berücksichtigt werden, untersucht das Ressourcenladeprogramm den Wert des Kontextqualifizierers 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 als eine Standardbewertung betrachtet.
Wenn eine Verknüpfung vorhanden ist, wird der Wert des Kontextqualifizierers mit der nächsten Priorität überprüft, und der Prozess wird fortgesetzt, bis die beste Übereinstimmung gefunden wird.
Beispiel für die Auswahl eines Ressourcenkandidaten
Berücksichtigen 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
Und angenommen, dies sind die Einstellungen im aktuellen Kontext.
Application language: en-US; fr-FR;
Scale: 400
Contrast: Standard
Das Ressourcenverwaltungssystem beseitigt drei der Dateien, da hoher Kontrast und die deutsche Sprache nicht mit dem durch die Einstellungen definierten Kontext übereinstimmen. Das hinterlässt diese Kandidaten.
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, der Sprache ist. Die englischen Ressourcen entsprechen näher 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 mit der nächsten 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 gerade durchgearbeitet 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 Fallbackauswahl
Berücksichtigen 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
Und angenommen, dies sind die Einstellungen im aktuellen Kontext.
User language: de-DE;
Scale: 400
Contrast: High
Alle Dateien werden eliminiert, da sie nicht mit dem Kontext übereinstimmen. Daher geben wir einen Standarddurchlauf ein, bei dem die Standardeinstellung (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 übrig, 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 Punktzahl zurückzugeben.
de/images/contrast-standard/logo.jpg