리소스 관리 시스템에서 리소스를 일치시키고 선택하는 방법

리소스가 요청되면 현재 리소스 컨텍스트와 어느 정도 일치하는 몇 가지 후보가 있을 수 있습니다. 리소스 관리 시스템은 모든 후보를 분석하여 반환할 가장 적합한 후보를 결정합니다. 이 작업은 모든 후보의 순위를 지정할 모든 한정자를 고려하여 수행됩니다.

이 순위 지정 프로세스에서 여러 한정자에 서로 다른 우선 순위가 부여됩니다. 언어가 전체 순위에 가장 큰 영향을 주고, 다음으로 대비, 배율 등의 순서로 이어집니다. 각 한정자에 대해 후보 한정자를 컨텍스트 한정자 값과 비교하여 일치 품질을 결정합니다. 비교 방법은 한정자에 따라 다릅니다.

언어 태그 일치 방법에 대한 자세한 내용은 리소스 관리 시스템에서 언어 태그를 일치시키는 방법을 참조하세요.

배율 및 대비 등의 일부 한정자의 경우 항상 최소 일치 수준이 있습니다. 예를 들어 "scale-100" 일치로 한정된 후보는 "scale-400" 컨텍스트와 약간 일치하지만, "scale-200" 또는 "scale-400"(완벽한 일치의 경우)으로 한정된 후보만큼 일치하지는 않습니다.

하지만 언어 또는 홈 지역과 같은 다른 한정자의 경우 일치 수준뿐만 아니라 비일치 비교도 있을 수 있습니다. 예를 들어 "en-US"로 언어로 한정된 후보는 "en-GB" 컨텍스트에 대한 부분 일치이지만 "fr"로 한정된 후보는 전혀 일치하지 않습니다. 마찬가지로 홈 지역에 대해 "155"(서유럽)로 한정된 후보는 홈 지역이 "FR"로 설정된 사용자의 컨텍스트와 어느 정도 일치하지만 "US"로 한정된 후보는 전혀 일치하지 않습니다.

후보를 평가할 때 한정자에 대한 비일치 비교가 있는 경우 해당 후보는 전반적으로 비일치 순위가 되며 선택되지 않습니다. 이런 방법으로 높은 우선 순위의 한정자는 최적의 일치를 선택할 때 가중치가 가장 크지만, 우선 순위가 낮은 한정자도 이러한 비일치로 인해 후보를 제거할 수 있습니다.

후보는 한정자에 대해 전혀 표시되지 않은 경우 해당 한정자에 대해 중립입니다. 모든 한정자에 대해 중립 후보는 항상 컨텍스트 한정자 값에 대한 일치이지만, 해당 한정자에 대해 표시되고 어떤 일치 수준(정확한 일치 또는 부분 일치)이 있는 후보에 비해 낮은 우선 순위의 일치 품질만 있습니다. 예를 들어 "en-US", "en", "fr"로 한정된 후보와 언어 중립 후보도 있는 경우 언어 한정자 값이 "en-GB"인 컨텍스트에 대해 후보는 "en", "en-US", 중립, "fr"의 순서로 순위가 매겨집니다. 이 경우 "fr"은 전혀 일치하지 않지만 다른 후보는 어느 정도 일치합니다.

전체 순위 지정 프로세스는 가장 우선 순위가 높은 한정자인 언어와 관련된 후보를 평가하는 것으로 시작합니다. 비일치 항목은 제거됩니다. 나머지 후보는 언어에 대한 일치 품질을 기준으로 순위가 지정됩니다. 동등한 품질이 있는 경우 다음으로 우선 순위가 높은 한정자인 대비가 고려되며, 대비에 대한 일치 품질을 사용하여 동등한 후보를 구분합니다. 대비 다음으로 배율 한정자가 나머지 동등한 후보를 구분하는 데 사용되며 올바른 순서의 순위 지정에 도달하는 데 필요한 만큼의 한정자를 통해 동일한 프로세스를 수행합니다.

컨텍스트와 일치하지 않는 한정자로 인해 모든 후보가 고려 대상에서 제거된 경우 리소스 로더는 표시할 수 있는 기본 후보를 찾는 두 번째 패스를 거칩니다. 기본 후보는 PRI 파일을 만드는 동안 결정되며 런타임 컨텍스트에 대해 선택할 후보가 항상 있는지 확인해야 합니다. 일치하지 않고 기본값이 아닌 한정자가 후보에 있는 경우 해당 리소스 후보는 영구적으로 고려 대상에서 제외됩니다.

여전히 고려 대상인 모든 리소스 후보에 대해 리소스 로더는 우선 순위가 가장 높은 컨텍스트 한정자 값을 확인하며 최적의 일치 또는 최고의 기본 점수가 있는 후보를 선택합니다. 실제 일치는 기본 점수보다 더 나은 것으로 간주됩니다.

동률이 있는 경우 다음으로 우선 순위가 높은 컨텍스트 한정자 값이 검사되고 가장 일치하는 항목이 발견될 때까지 프로세스가 계속됩니다.

리소스 후보 선택 예제

다음 파일을 고려합니다.

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

그리고 다음 항목이 현재 컨텍스트의 설정이라고 가정합니다.

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

고대비 및 독일어가 설정에서 정의한 컨텍스트와 일치하지 않으므로 리소스 관리 시스템에서 세 개의 파일을 제거합니다. 그러면 다음 후보가 남아 있습니다.

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

남아 있는 이러한 후보에 대해 리소스 관리 시스템은 우선 순위가 가장 높은 컨텍스트 한정자인 언어를 사용합니다. 설정에서 영어가 프랑스어보다 먼저 나열되므로 영어 리소스가 프랑스어 리소스보다 우선 순위가 더 높은 일치입니다.

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

다음으로, 리소스 관리 시스템은 다음으로 우선 순위가 높은 컨텍스트 한정자인 배율을 사용합니다. 따라서 다음과 같은 리소스가 반환됩니다.

en/images/logo.scale-400.jpg

고급 NamedResource.ResolveAll 메서드를 사용하여 모든 후보를 컨텍스트 설정과 일치하는 순서대로 검색할 수 있습니다. 방금 설명한 예제에서 ResolveAll은 후보를 다음 순서로 반환합니다.

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

대체 선택 항목을 생성하는 예제

다음 파일을 고려합니다.

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

그리고 다음 항목이 현재 컨텍스트의 설정이라고 가정합니다.

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

컨텍스트와 일치하지 않으므로 모든 파일이 제거됩니다. 따라서 기본 패스를 입력합니다. 여기서 PRI를 만드는 동안 기본값(MakePri.exe를 사용하여 수동으로 리소스 컴파일 참조)은 다음과 같습니다.

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

이렇게 하면 현재 사용자 또는 기본값과 일치하는 모든 리소스가 남습니다.

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

리소스 관리 시스템은 우선 순위가 가장 높은 컨텍스트 한정자인 언어를 사용하여 점수가 가장 높은 명명된 리소스를 반환합니다.

de/images/contrast-standard/logo.jpg

중요 API