Come vengono trovate e scelte le risorse dal Sistema gestione risorse
Quando viene richiesta una risorsa, potrebbero esserci diversi candidati che corrispondono in qualche misura al contesto corrente. Il Sistema gestione risorse analizza tutti i candidati e individua quello migliore da restituire. Questa operazione viene eseguita prendendo in considerazione tutti i qualificatori per classificare tutti i candidati.
In questo processo di classificazione, ai diversi qualificatori vengono assegnate priorità diverse: la lingua ha il maggiore impatto sulla classifica complessiva, seguita dal contrasto, quindi scala e così via. Per ogni qualificatore, i qualificatori candidati vengono confrontati con il valore del qualificatore di contesto per determinare la qualità della corrispondenza. La modalità di confronto dipende dal qualificatore.
Per informazioni specifiche sulla modalità di corrispondenza dei tag di lingua, vedere Come il sistema di gestione risorse corrisponde ai tag di lingua.
Per alcuni qualificatori, ad esempio scala e contrasto, c'è sempre un certo grado di corrispondenza. Ad esempio, un candidato qualificato per "scale-100" corrisponde a un contesto "scale-400" a un certo livello, anche se non un candidato qualificato per "scale-200" o (per una corrispondenza perfetta) "scale-400".
Per altri qualificatori, tuttavia, come la lingua o l'area principale, è possibile avere un confronto non corrispondente (nonché gradi di corrispondenza). Ad esempio, un candidato qualificato per la lingua come "en-US" è una corrispondenza parziale per un contesto di "en-GB", ma un candidato qualificato come "fr" non è affatto una corrispondenza. Analogamente, un candidato qualificato per l'area principale come "155" (Europa occidentale) corrisponde a un contesto per un utente con un'impostazione "FR" piuttosto bene, ma un candidato qualificato come "STATI UNITI" non corrisponde affatto.
Quando un candidato viene valutato, se è presente un confronto non corrispondente per qualsiasi qualificatore, tale candidato otterrà una classificazione complessiva non corrispondente e non verrà selezionata. In questo modo, i qualificatori con priorità più alta possono avere il peso maggiore nella selezione della corrispondenza migliore, ma anche un qualificatore con priorità bassa può eliminare un candidato a causa di una mancata corrispondenza.
Un candidato è neutro in relazione a un qualificatore se non è contrassegnato per tale qualificatore. Per qualsiasi qualificatore, un candidato neutro è sempre una corrispondenza per il valore del qualificatore di contesto, ma solo con una qualità inferiore della corrispondenza rispetto a qualsiasi candidato contrassegnato per tale qualificatore e ha un certo grado di corrispondenza (esatto o parziale). Ad esempio, se abbiamo candidati qualificati per "en-US", "en", "fr" e anche un candidato indipendente dalla lingua, per un contesto con un valore qualificatore di lingua "en-GB", i candidati verranno classificati nell'ordine seguente: "en", "en-US", neutrale e "fr". In questo caso, "fr" non corrisponde affatto, mentre gli altri candidati corrispondono in qualche modo.
Il processo di classificazione generale inizia valutando i candidati in relazione al qualificatore con priorità più alta, ovvero lingua. Le corrispondenze non vengono eliminate. I candidati rimanenti vengono classificati in relazione alla loro qualità di corrispondenza per la lingua. Se sono presenti legami, viene considerato il qualificatore con priorità più alta successiva, il contrasto, utilizzando la qualità della corrispondenza per il contrasto per differenziare i candidati collegati. Al contrario, il qualificatore di scala viene usato per distinguere i legami rimanenti e così via, attraverso il numero di qualificatori necessari per arrivare a una classificazione ben ordinata.
Se tutti i candidati vengono rimossi dalla considerazione a causa di qualificatori che non corrispondono al contesto, il caricatore di risorse passa attraverso un secondo passaggio, cercando un candidato predefinito da visualizzare. I candidati predefiniti vengono determinati durante la creazione del file PRI e sono necessari per assicurarsi che esista sempre un candidato da selezionare per qualsiasi contesto di runtime. Se un candidato ha qualificatori che non corrispondono e non sono un valore predefinito, tale candidato alla risorsa viene generato in modo permanente.
Per tutti i candidati alle risorse ancora in considerazione, il caricatore di risorse esamina il valore del qualificatore di contesto con priorità più alta e sceglie quello con la corrispondenza migliore o il punteggio predefinito migliore. Qualsiasi corrispondenza effettiva viene considerata migliore di un punteggio predefinito.
Se è presente un legame, viene controllato il valore del qualificatore di contesto con priorità più alta e il processo continua fino a quando non viene trovata la corrispondenza migliore.
Esempio di scelta di un candidato alla risorsa
Prendere in considerazione questi file.
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
Si supponga che si tratta delle impostazioni nel contesto corrente.
Application language: en-US; fr-FR;
Scale: 400
Contrast: Standard
Il sistema di gestione risorse elimina tre dei file perché il contrasto elevato e la lingua tedesca non corrispondono al contesto definito dalle impostazioni. Questo lascia questi candidati.
en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg
fr/images/logo.scale-100.jpg
Per i candidati rimanenti, il sistema di gestione risorse usa il qualificatore di contesto con priorità più alta, ovvero il linguaggio. Le risorse inglesi sono una corrispondenza più simile a quella francese perché l'inglese è elencato prima del francese nelle impostazioni.
en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg
Successivamente, il sistema di gestione risorse usa il qualificatore di contesto con priorità più alta successiva, la scalabilità. Questa è la risorsa restituita.
en/images/logo.scale-400.jpg
È possibile utilizzare il metodo NamedResource.ResolveAll avanzato per recuperare tutti i candidati nell'ordine in cui corrispondono alle impostazioni del contesto. Per l'esempio appena descritto, ResolveAll restituisce i candidati in questo ordine.
en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg
fr/images/logo.scale-100.jpg
Esempio di produzione di una scelta di fallback
Prendere in considerazione questi file.
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
Si supponga che si tratta delle impostazioni nel contesto corrente.
User language: de-DE;
Scale: 400
Contrast: High
Tutti i file vengono eliminati perché non corrispondono al contesto. Quindi si immette un passaggio predefinito, in cui il valore predefinito (vedere Compilare manualmente le risorse con MakePri.exe) durante la creazione del file PRI era questo.
Language: fr-FR;
Scale: 400
Contrast: Standard
In questo modo tutte le risorse corrispondenti all'utente corrente o all'impostazione predefinita.
fr/images/contrast-standard/logo.scale-400.jpg
fr/images/contrast-standard/logo.scale-100.jpg
de/images/contrast-standard/logo.jpg
Il sistema di gestione risorse usa il qualificatore di contesto con priorità più alta, lingua, per restituire la risorsa denominata con il punteggio più alto.
de/images/contrast-standard/logo.jpg