Compartilhar via


Como o Sistema de Gerenciamento de Recursos faz a correspondência dos recursos e os escolhe

Quando um recurso é solicitado, pode haver vários candidatos que correspondam em um certo grau ao contexto de recurso atual. O Sistema de Gerenciamento de Recursos analisará todos os candidatos e determinará o melhor deles para ser retornado. Isso é feito levando em consideração todos os qualificadores para classificar todos os candidatos.

Nesse processo de classificação, os diferentes qualificadores recebem prioridades diferentes: o idioma tem o maior impacto na classificação geral, seguido pelo contraste, depois pela escala e assim por diante. Para cada qualificador, os qualificadores candidatos são comparados com o valor do qualificador de contexto para determinar a qualidade da correspondência. A forma como a comparação é feita depende do qualificador.

Para obter detalhes específicos sobre como a correspondência de marcas de idioma é feita, consulte Como o Sistema de Gerenciamento de Recursos corresponde às marcas de idioma.

Para alguns qualificadores, como escala e contraste, sempre há algum grau mínimo de correspondência. Por exemplo, um candidato qualificado para "escala-100" corresponde a um contexto de "escala-400" em algum grau, embora não tão bem quanto um candidato qualificado para "escala-200" ou (para uma correspondência perfeita) "escala-400".

Para outros qualificadores, no entanto, como idioma ou região de origem, é possível ter uma comparação sem correspondência (bem como graus de correspondência). Por exemplo, um candidato qualificado para o idioma como "en-US" é uma correspondência parcial para um contexto de "en-GB", mas um candidato qualificado como "fr" não é uma correspondência. Da mesma forma, um candidato qualificado para a região de origem como "155" (Europa Ocidental) corresponde um pouco bem a um contexto para um usuário com uma configuração de região de origem de "FR", mas um candidato qualificado como "EUA" não corresponde de forma alguma.

Quando um candidato é avaliado, se houver uma comparação sem correspondência para qualquer qualificador, esse candidato receberá uma classificação geral sem correspondência e não será selecionado. Dessa forma, os qualificadores de prioridade mais alta podem ter o maior peso na seleção da melhor correspondência, mas mesmo um qualificador de baixa prioridade pode eliminar um candidato devido a uma não correspondência.

Um candidato é neutro em relação a um qualificador se não estiver marcado para esse qualificador. Para qualquer qualificador, um candidato neutro é sempre uma correspondência para o valor do qualificador de contexto, mas apenas com uma qualidade de correspondência inferior a qualquer candidato que foi marcado para esse qualificador e tem algum grau de correspondência (exata ou parcial). Por exemplo, se tivermos candidatos qualificados para "en-US", "en", "fr" e também um candidato neutro em termos de idioma, para um contexto com um valor de qualificador de idioma de "en-GB", os candidatos serão classificados na seguinte ordem: "en", "en-US", neutro e "fr". Nesse caso, "fr" não corresponde de forma alguma, enquanto os outros candidatos correspondem em algum grau.

O processo geral de classificação começa avaliando os candidatos em relação ao qualificador de maior prioridade, que é o idioma. As não correspondências são eliminadas. Os demais candidatos são classificados em relação à qualidade da correspondência para o idioma. Se houver empates, o próximo qualificador de maior prioridade, contraste, é considerado, usando a qualidade da correspondência para contraste para diferenciar entre candidatos empatados. Após o contraste, o qualificador de escala é usado para diferenciar os empates restantes, e assim por diante, por meio de quantos qualificadores forem necessários para chegar a uma classificação bem ordenada.

Se todos os candidatos forem removidos da consideração devido a qualificadores que não correspondem ao contexto, o carregador de recursos passará por uma segunda passagem, procurando um candidato padrão para exibir. Os candidatos padrão são determinados durante a criação do arquivo PRI e são necessários para garantir que sempre haja algum candidato a ser selecionado para qualquer contexto de tempo de execução. Se um candidato tiver qualificadores que não correspondam e não sejam padrão, esse candidato a recurso será descartado permanentemente.

Para todos os candidatos a recursos ainda em consideração, o carregador de recursos examina o valor do qualificador de contexto de prioridade mais alta e escolhe aquele que tem a melhor correspondência ou a melhor pontuação padrão. Qualquer correspondência real é considerada melhor do que uma pontuação padrão.

Se houver um empate, o próximo valor do qualificador de contexto de prioridade mais alta será inspecionado e o processo continuará até que a melhor correspondência seja encontrada.

Exemplo de escolha de um candidato a recurso

Considere esses arquivos.

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

E suponha que essas sejam as configurações no contexto atual.

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

O Sistema de Gerenciamento de Recursos elimina três dos arquivos porque o alto contraste e o idioma alemão não correspondem ao contexto definido pelas configurações. Isso deixa esses 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 os candidatos restantes, o Sistema de Gerenciamento de Recursos usa o qualificador de contexto de prioridade mais alta, que é o idioma. Os recursos em inglês são mais parecidos do que os franceses porque o inglês está listado antes do francês nas configurações.

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

Em seguida, o Sistema de Gerenciamento de Recursos usa o próximo qualificador de contexto de prioridade mais alta, escala. Portanto, esse é o recurso retornado.

en/images/logo.scale-400.jpg

Você pode usar o método NamedResource.ResolveAll avançado para recuperar todos os candidatos na ordem em que eles correspondem às configurações de contexto. Para o exemplo que acabamos de examinar, ResolveAll retorna candidatos nesta ordem.

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

Exemplo de produção de uma opção de fallback

Considere esses arquivos.

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

E suponha que essas sejam as configurações no contexto atual.

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

Todos os arquivos são eliminados porque não correspondem ao contexto. Portanto, inserimos uma passagem padrão, em que o padrão (consulte Compilar recursos manualmente com MakePri.exe) durante a criação do arquivo PRI era este.

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

Isso deixa todos os recursos que correspondem ao usuário atual ou ao padrão.

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

O Sistema de Gerenciamento de Recursos usa o qualificador de contexto de prioridade mais alta, language, para retornar o recurso nomeado com a pontuação mais alta.

de/images/contrast-standard/logo.jpg

APIs importantes