How the Resource Management System matches and chooses resources
当一个资源被求访的时候,对应当前上下文可能会有多个候选,每个具有不同的匹配程度。RMS决定哪个最适合,具体是根据格量对候选进行分级。
分级过程中,不同的格量有不同的优先级:语言优先级最高,然后是对比度,接着是缩放度,等等。格量值如何对比跟具体的格量类型有关系。
对于某些格量,比如缩放和对比度,总有一些最小程度的匹配。例如,scale-100能与scale-400在某种程度上匹配,但显然匹配度不如scale-200和scale-400。
对于其他格量,比u人语言以及本居区域,可以有完全不匹配的情形。比如en-US部分匹配en-GB,但是完全不匹配fr。对于本居区域,115(西欧)可以匹配FR到一定程度,但是完全不匹配US。
完全不匹配的候选会划分为不匹配的分级,并且不会被选用。更高优先级的格量可以有更高的权重,但是低优先级的格量可以消除不匹配的候选。
如果一个候选不具有目标格量,则此候选具有中立性。中立的候选是一个有效匹配,只不过具有的优先级比非中立候选要低。假使有格量为en_US, en, fr的候选以及一个语言中立的候选,在en-GB的情境下,候选会按照以下分级:en, en-US, neutral, fr。此情形下,fr完全不匹配。
整体分级过程从最高优先级格量(也就是语言)开始。不匹配的被消除。剩余的候选按照格量进行分级。如果有扯平的,那么下一级的格量(也就是对比度)会被纳入考量。
如果所有候选都无法匹配格量,那么资源加载器会重来来过,却寻找一个默认的候选来显示。默认的候选在PRI创建的时候就设定好了。如果一个候选不具有任何格量,也不是默认值,那么会被弃之不再使用。
所有格量匹配都比默认值优先级要高。
Example of choosing a resource candidate
对于下列候选:
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
因为de和high-constrast不在情境中,所以相关的候选会被移除,剩下:
en/images/logo.scale-400.jpg
en/images/logo.scale-200.jpg
en/images/logo.scale-100.jpg
fr/images/logo.scale-100.jpg
然后RMS依次根据语言和缩放来判读,最后选出:
en/images/logo.scale-400.jpg
NamedResource.ResolveAll可以列举符合情境的所有候选,也就是上面列出的四条。
Example of producing a fallback choice
假使有下列资源:
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
所有候选都不能满足情境,第一阶段会消除所有候选,然后第二阶段则筛选出当前用户相关或者默认的值:
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
How the Resource Management System matches language tags
Introduction
具有语言标签格量的资源按照应用的运行语言列表进行对比和打分。
Understand user profile languages and app manifest languages
对不同语言的配对是按照语言逐一进行的,基本语言有不同的区域。例如应用运行语言是en-US的时候,en-GB排在fr-CA之前。只有再en没有相对的资源,且默认引用语言不设置为en的情况下才会选中fr-CA。
打分机制采用BCP-47的subtag register包含的数据,以及其他数据资源。结果是产生一个打分范围,内有不同的格量匹配得上得候选。然后从中选取最合适得。
可以以通用便签,比如en来格量化某些资源,然后再en-US以及en-GB语言下对这些进行自定义。
Language tags
BCP-47语言标签含有以下子标签:
- 语言子标签(必需)
- 脚本子标签(有可能推断出来)
- 区域子标签(可选)
- 变种子表其(可选)
还有其他一些子标签,不过对语言得配选不会有影响。注意,无法通过通配符定义一众语言。
Matching two languages
某些大情境下,Wndows会对比两种语言。两种语言进行比较时,会采用最近匹配原则:
- 精确匹配(具有最高打分)例子:en_AU : en_AU
- 变种匹配,例子:en-AU-variant1; en-AU-variant-t-ja
- 地域匹配:en-AU : en-AU-variant1
- 部分匹配:
- 广地域匹配: en-AU:en-053
- 地域中性匹配:eu-AU:en
- 共性匹配:en-AU:en-GB
- 首选区域匹配:en-AU:en-US
- 任意地域匹配:en-AU:en-CA
- 无定夺得语言(任意语言匹配):en-AU:und
- 不匹配(优先级最低): en-AU:fr-FR
Exact match
标签以及子标签完全匹配。
Variant match
标签中的语言,脚本,地域以及变种子标签完全匹配,其他部分不匹配。
Region match
标签中的语言,脚本,以及地域匹配,其他部分不匹配。
例子:
- de-DE-1996匹配de-DE
- en-US-x-Pirate匹配en-US
Partial matches
标签中的语言,以及脚本匹配,其他部分不匹配。
例子:
- en-US匹配en
- en-US匹配en-*
Macro region match
标签中的语言,以及脚本匹配;两个标签皆有地域子标签,其中一个地域标签囊括另一个。地域子标签是数字式的,并United Nations Statistics Division M.49 country and area codes而来。更多参考Composition of macro geographic (continental) regions, geographical sub-regions, and selected economic and other groupings
注意:
- UN代码中的经济体组织以及其他组织在BCP-47中不受支持
- 编号001的地域即代表该地域本身,也就是说es-001等同于es
Region-neutral match
标签中的语言,以及脚本匹配;两个标签只有一个有地域子标签。
Orthographic affinity match
标签中的语言,以及脚本匹配;两个标签皆有地域子标签,地域间存在附属关系。
例如:
- en-IE和en-GB
Preferred region match
标签中的语言,以及脚本匹配;两个标签皆有地域子标签,其中一个是该语言的默认子标签。
例如:
- fr-FR是fr的默认区域,在匹配fr-CA的时候比fr-BE有更好匹配度。
Sibling match
标签中的语言,以及脚本匹配;两个标签皆有地域子标签,无从判定那个地域有更高优先级。此情形下,最后一个出现的地域子标签获胜。
Undetermined language
und表示不指定语言,也就意味着可以匹配任意语言。und-Latn可以匹配任何语言标签,如其拥有Latin脚本。
Script mismatch
如果只是语言匹配,但是脚本不匹配,那么这一对则不被考虑为配对关系,打分在正常配对以下。
No match
zh-Hant不匹配zh-Hans。
Examples
“zh-Hans-CN” 对于以下标签的匹配程度:
- x zh
- x zh-Hant
- 4 zh-Hans
- 1 zh-Hans-CN
- 2 zh-Hans-CN-variant1
- 3 zh-Hans-CN-variant2
- 5 zh-Hans-SG
- 1 zh-Hans-CN
1为完全匹配,2&3为地域匹配,4为上级匹配,5为同级匹配
Suppress-Script如果出现在语言子标签,则匹配方式稍有不同,具体略。
Matching a language to a language list
略
Undetermined language (“und”)
略
Orthographic regional affinity
略
Handling languages with many regional variants
略
(未完待续)