Cómo el sistema de administración de recursos compara y elige recursos
Cuando se solicita un recurso, podría haber varios candidatos que coincidan hasta cierto punto con el contexto de recursos actual. El sistema de administración de recursos analizará todos los candidatos y determinará el mejor candidato para devolver. Esto se hace teniendo en cuenta todos los calificadores para clasificar a todos los candidatos.
En este proceso de clasificación, los distintos calificadores reciben prioridades diferentes: el idioma tiene el mayor impacto en la clasificación general, seguido del contraste, la escala, etc. Para cada calificador, los calificadores candidatos se comparan con el valor del calificador de contexto para determinar la calidad de la coincidencia. La forma en que se realiza la comparación depende del calificador.
Para obtener detalles específicos sobre cómo se realiza la coincidencia de etiquetas de idioma, consulte Cómo coincide el sistema de administración de recursos con etiquetas de idioma.
Para algunos calificadores, como la escala y el contraste, siempre hay algún grado mínimo de coincidencia. Por ejemplo, un candidato calificado para "scale-100" coincide con un contexto de "scale-400" en cierto grado, aunque no así como un candidato calificado para "scale-200" o (para una coincidencia perfecta) "scale-400".
Sin embargo, para otros calificadores, como el idioma o la región principal, es posible tener una comparación no coincidente (así como grados de coincidencia). Por ejemplo, un candidato calificado para el idioma como "en-US" es una coincidencia parcial para un contexto de "en-GB", pero un candidato calificado como "fr" no es una coincidencia en absoluto. Del mismo modo, un candidato calificado para la región principal como "155" (Europa occidental) coincide con un contexto para un usuario con una configuración de región principal de "FR" algo bien, pero un candidato calificado como "EE. UU. " no coincide en absoluto.
Cuando se evalúa un candidato, si hay una comparación no coincidente para cualquier calificador, ese candidato obtendrá una clasificación no coincidente general y no se seleccionará. De este modo, los calificadores de mayor prioridad pueden tener el mayor peso al seleccionar la mejor coincidencia, pero incluso un calificador de prioridad baja puede eliminar un candidato debido a una no coincidencia.
Un candidato es neutro en relación con un calificador si no está marcado para ese calificador en absoluto. Para cualquier calificador, un candidato neutro siempre es una coincidencia para el valor del calificador de contexto, pero solo con una menor calidad de coincidencia que cualquier candidato marcado para ese calificador y tiene algún grado de coincidencia (exacto o parcial). Por ejemplo, si tenemos candidatos calificados para "en-US", "en", "fr" y también un candidato independiente del idioma, para un contexto con un valor calificador de idioma de "en-GB", los candidatos se clasificarán en el orden siguiente: "en", "en-US", neutral y "fr". En este caso, "fr" no coincide en absoluto, mientras que los demás candidatos coinciden con cierto grado.
El proceso de clasificación general comienza evaluando candidatos en relación con el calificador de prioridad más alta, que es el idioma. Se eliminan las no coincidencias. Los candidatos restantes se clasifican en relación con su calidad de coincidencia para el idioma. Si hay algún vínculo, se considera el siguiente calificador de prioridad más alta, el contraste, utilizando la calidad de coincidencia para el contraste para diferenciar entre los candidatos vinculados. Después del contraste, el calificador de escala se usa para diferenciar los empates restantes, etc., a través de tantos calificadores como sea necesario para llegar a una clasificación bien ordenada.
Si todos los candidatos se quitan de la consideración debido a calificadores que no coinciden con el contexto, el cargador de recursos pasa por un segundo paso, buscando un candidato predeterminado que se va a mostrar. Los candidatos predeterminados se determinan durante la creación del archivo PRI y son necesarios para asegurarse de que siempre haya algún candidato que seleccione para cualquier contexto en tiempo de ejecución. Si un candidato tiene calificadores que no coinciden y no son predeterminados, ese candidato de recurso se produce permanentemente fuera de consideración.
Para todos los candidatos de recursos que siguen teniendo en cuenta, el cargador de recursos examina el valor del calificador de contexto de prioridad más alta y elige el que tiene la mejor coincidencia o la mejor puntuación predeterminada. Cualquier coincidencia real se considera mejor que una puntuación predeterminada.
Si hay un empate, se inspecciona el siguiente valor de calificador de contexto de prioridad más alta y el proceso continúa hasta que se encuentre la mejor coincidencia.
Ejemplo de elección de un candidato de recursos
Tenga en cuenta estos archivos.
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
Y supongamos que se trata de la configuración en el contexto actual.
Application language: en-US; fr-FR;
Scale: 400
Contrast: Standard
El sistema de administración de recursos elimina tres de los archivos porque el contraste alto y el idioma alemán no coinciden con el contexto definido por la configuración. Eso deja a estos candidatos.
en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg
fr/images/logo.scale-100.jpg
Para los candidatos restantes, el sistema de administración de recursos usa el calificador de contexto de prioridad más alta, que es el idioma. Los recursos en inglés son una coincidencia más cercana que los franceses porque el inglés aparece antes del francés en la configuración.
en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg
A continuación, el sistema de administración de recursos usa el siguiente calificador de contexto de prioridad más alta, escala. Por lo tanto, este es el recurso devuelto.
en/images/logo.scale-400.jpg
Puede usar el método NamedResource.ResolveAll avanzado para recuperar todos los candidatos en el orden en que coinciden con la configuración de contexto. En el ejemplo que acabamos de recorrer, ResolveAll devuelve candidatos en este orden.
en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg
fr/images/logo.scale-100.jpg
Ejemplo de generación de una opción de reserva
Tenga en cuenta estos archivos.
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
Y supongamos que se trata de la configuración en el contexto actual.
User language: de-DE;
Scale: 400
Contrast: High
Todos los archivos se eliminan porque no coinciden con el contexto. Por lo tanto, se escribe un pase predeterminado, donde el valor predeterminado (vea Compilar recursos manualmente con MakePri.exe) durante la creación del archivo PRI fue este.
Language: fr-FR;
Scale: 400
Contrast: Standard
Esto deja todos los recursos que coinciden con el usuario actual o el valor predeterminado.
fr/images/contrast-standard/logo.scale-400.jpg
fr/images/contrast-standard/logo.scale-100.jpg
de/images/contrast-standard/logo.jpg
El sistema de administración de recursos usa el calificador de contexto de prioridad más alta, el idioma, para devolver el recurso con nombre con la puntuación más alta.
de/images/contrast-standard/logo.jpg