1# basics
2fr, en-GB, en ; en-GB ; en-GB
3fr, en-GB, en ; en-US ; en
4fr, en-GB, en ; fr-FR ; fr
5fr, en-GB, en ; ja-JP ; fr
6
7# script fallbacks
8zh-CN, zh-TW, iw ; zh-Hant ; zh-TW
9zh-CN, zh-TW, iw ; zh ; zh-CN
10zh-CN, zh-TW, iw ; zh-Hans-CN ; zh-CN
11zh-CN, zh-TW, iw ; zh-Hant-HK ; zh-TW
12zh-CN, zh-TW, iw ; he-IT ; iw ; iw-u-rg-itzzzz
13
14# language-specific script fallbacks 1
15en, sr, nl ; sr-Latn ; sr
16en, sr, nl ; sh ; sr # different script, but seems okay and is as CLDR suggests
17en, sr, nl ; hr ; en
18en, sr, nl ; bs ; en
19en, sr, nl ; nl-Cyrl ; sr
20
21# language-specific script fallbacks 2
22en, sh ; sr ; sh
23en, sh ; sr-Cyrl ; sh
24en, sh ; hr ; sh
25
26# don't match hr to sr-Latn
27en, sr-Latn ; hr ; en
28
29# both deprecated and not
30fil, tl, iw, he ; he-IT ; he
31fil, tl, iw, he ; he ; he
32fil, tl, iw, he ; iw ; iw
33fil, tl, iw, he ; fil-IT ; fil
34fil, tl, iw, he ; fil ; fil
35fil, tl, iw, he ; tl ; tl
36
37# nearby languages
38en, fil, ro, nn ; tl ; fil
39en, fil, ro, nn ; mo ; ro
40en, fil, ro, nn ; nb ; nn
41en, fil, ro, nn ; ja ; en
42
43# nearby languages: Nynorsk to Bokmål
44en, nb ; nn ; nb
45
46# nearby languages: Danish does not match nn
47en, nn ; da ; en
48
49# nearby languages: Danish matches no
50en, no ; da ; no
51
52# nearby languages: Danish matches nb
53en, nb ; da ; nb
54
55# prefer matching languages over language variants.
56nn, en-GB ; no, en-US ; en-GB
57nn, en-GB ; nb, en-US ; en-GB
58
59# deprecated version is closer than same language with other differences
60nl, he, en-GB ; iw, en-US ; he
61
62# macro equivalent is closer than same language with other differences
63nl, zh, en-GB, no ; cmn, en-US ; zh
64nl, zh, en-GB, no ; nb, en-US ; no
65
66# legacy equivalent is closer than same language with other differences
67nl, fil, en-GB ; tl, en-US ; fil
68
69# distinguish near equivalents
70en, ro, mo, ro-MD ; ro ; ro
71en, ro, mo, ro-MD ; mo ; mo
72en, ro, mo, ro-MD ; ro-MD ; ro-MD
73
74# maximization of legacy
75sr-Cyrl, sr-Latn, ro, ro-MD ; sh ; sr-Latn
76sr-Cyrl, sr-Latn, ro, ro-MD ; mo ; ro-MD
77
78# empty
79 ; fr ; und
80 ; en ; und
81
82# private use subtags
83fr, en-GB, x-bork, es-ES, es-419 ; x-piglatin ; fr
84fr, en-GB, x-bork, es-ES, es-419 ; x-bork ; x-bork
85
86# grandfathered codes
87fr, i-klingon, en-Latn-US ; en-GB-oed ; en-Latn-US
88fr, i-klingon, en-Latn-US ; i-klingon ; tlh
89
90
91# simple variant match
92fr, en-GB, ja, es-ES, es-MX ; de, en-US ; en-GB
93fr, en-GB, ja, es-ES, es-MX ; de, zh ; fr
94
95# best match for traditional Chinese
96fr, zh-Hans-CN, en-US ; zh-TW ; zh-Hans-CN
97fr, zh-Hans-CN, en-US ; zh-Hant ; zh-Hans-CN
98fr, zh-Hans-CN, en-US ; zh-TW, en ; en-US
99fr, zh-Hans-CN, en-US ; zh-Hant-CN, en ; en-US
100fr, zh-Hans-CN, en-US ; zh-Hans, en ; zh-Hans-CN
101
102# more specific script should win in case regions are identical
103af, af-Latn, af-Arab ; af ; af
104af, af-Latn, af-Arab ; af-ZA ; af
105af, af-Latn, af-Arab ; af-Latn-ZA ; af-Latn
106af, af-Latn, af-Arab ; af-Latn ; af-Latn
107
108# more specific region should win
109nl, nl-NL, nl-BE ; nl ; nl
110nl, nl-NL, nl-BE ; nl-Latn ; nl
111nl, nl-NL, nl-BE ; nl-Latn-NL ; nl-NL
112nl, nl-NL, nl-BE ; nl-NL ; nl-NL
113
114# region may replace matched if matched is enclosing
115es-419,es ; es-MX ; es-419 ; es-MX
116es-419,es ; es-SG ; es
117
118# more specific region wins over more specific script
119nl, nl-Latn, nl-NL, nl-BE ; nl ; nl
120nl, nl-Latn, nl-NL, nl-BE ; nl-Latn ; nl-Latn
121nl, nl-Latn, nl-NL, nl-BE ; nl-NL ; nl-NL
122nl, nl-Latn, nl-NL, nl-BE ; nl-Latn-NL ; nl-NL
123
124# region distance Portuguese
125pt, pt-PT ; pt-ES ; pt-PT
126
127# if no preferred locale specified, pick top language, not regional
128en, fr, fr-CA, fr-CH ; fr-US ; fr ; fr-u-rg-uszzzz
129
130# region distance German
131de-AT, de-DE, de-CH ; de ; de-DE
132
133# en-AU is closer to en-GB than to en (which is en-US)
134en, en-GB, es-ES, es-419 ; en-AU ; en-GB
135en, en-GB, es-ES, es-419 ; es-MX ; es-419 ; es-MX
136en, en-GB, es-ES, es-419 ; es-PT ; es-ES
137
138# undefined
139it, fr ; und ; it
140
141# und does not match en
142it, en ; und ; it
143
144# undefined in priority list
145it, und ; und ; und
146it, und ; en ; it
147
148# undefined
149it, fr, zh ; und-FR ; fr
150it, fr, zh ; und-CN ; zh
151it, fr, zh ; und-Hans ; zh
152it, fr, zh ; und-Hant ; zh
153it, fr, zh ; und-Latn ; it
154
155# match on maximized tag
156fr, en-GB, ja, es-ES, es-MX ; ja-JP, en-GB ; ja
157fr, en-GB, ja, es-ES, es-MX ; ja-Jpan-JP, en-GB ; ja
158
159# pick best maximized tag
160ja, ja-Jpan-US, ja-JP, en, ru ; ja-Jpan, ru ; ja
161ja, ja-Jpan-US, ja-JP, en, ru ; ja-JP, ru ; ja-JP
162ja, ja-Jpan-US, ja-JP, en, ru ; ja-US, ru ; ja-Jpan-US
163
164# termination: pick best maximized match
165ja, ja-Jpan, ja-JP, en, ru ; ja-Jpan-JP, ru ; ja-JP
166ja, ja-Jpan, ja-JP, en, ru ; ja-Jpan, ru ; ja-Jpan
167
168# same language over exact, but distinguish when user is explicit
169fr, en-GB, ja, es-ES, es-MX ; ja, de ; ja
170en, de, fr, ja ; de-CH, fr ; de # TODO: ; de-u-rg-CH
171en-GB, nl ; en, nl ; en-GB
172en-GB, nl ; en, nl, en-GB ; nl
173
174# parent relation preserved
175en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-150 ; en-GB
176en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-AU ; en-GB
177en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-BE ; en-GB
178en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-GG ; en-GB
179en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-GI ; en-GB
180en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-HK ; en-GB
181en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-IE ; en-GB
182en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-IM ; en-GB
183en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-IN ; en-GB
184en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-JE ; en-GB
185en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-MT ; en-GB
186en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-NZ ; en-GB
187en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-PK ; en-GB
188en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-SG ; en-GB
189en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-DE ; en-GB
190en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; en-MT ; en-GB
191en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-AR ; es-419 ; es-AR
192en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-BO ; es-419 ; es-BO
193en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-CL ; es-419 ; es-CL
194en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-CO ; es-419 ; es-CO
195en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-CR ; es-419 ; es-CR
196en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-CU ; es-419 ; es-CU
197en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-DO ; es-419 ; es-DO
198en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-EC ; es-419 ; es-EC
199en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-GT ; es-419 ; es-GT
200en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-HN ; es-419 ; es-HN
201en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-MX ; es-419 ; es-MX
202en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-NI ; es-419 ; es-NI
203en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PA ; es-419 ; es-PA
204en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PE ; es-419 ; es-PE
205en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PR ; es-419 ; es-PR
206en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PT ; es
207en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-PY ; es-419 ; es-PY
208en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-SV ; es-419 ; es-SV
209en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-US ; es-419
210en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-UY ; es-419 ; es-UY
211en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; es-VE ; es-419 ; es-VE
212en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-AO ; pt-PT
213en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-CV ; pt-PT
214en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-GW ; pt-PT
215en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-MO ; pt-PT
216en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-MZ ; pt-PT
217en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-ST ; pt-PT
218en, en-US, en-GB, es, es-419, pt, pt-BR, pt-PT, zh, zh-Hant, zh-Hant-HK ; pt-TL ; pt-PT
219
220# preserve extensions
221en, de, sl-nedis ; de-FR-u-co-phonebk ; de ; de-u-co-phonebk-rg-frzzzz
222en, de, sl-nedis ; sl-nedis-u-cu-eur ; sl-nedis ; sl-nedis-u-cu-eur
223en, de, sl-nedis ; sl-u-cu-eur ; sl-nedis ; sl-nedis-u-cu-eur
224en, de, sl-nedis ; sl-HR-nedis-u-cu-eur ; sl-nedis ; sl-nedis-u-cu-eur-rg-hrzzzz
225en, de, sl-nedis ; de-t-m0-iso-i0-pinyin ; de ; de-t-m0-iso-i0-pinyin
226
227und, nl ; nl-BE-fonipa ; nl ; nl-u-rg-bezzzz
228und, nl-CA ; nl-BE-fonipa ; nl-CA ; nl-CA-u-rg-bezzzz
229und, nl-fonupa ; nl-BE-fonipa ; nl-fonupa ; nl-fonupa-u-rg-bezzzz
230und, no ; nn-DK-fonipa ; no ; no-u-rg-dkzzzz
231und, en-GB-u-sd-usca ; en-US-fonipa-u-nu-Arab-ca-buddhist-sd-usdc-t-m0-iso-i0-pinyin ; en-GB-u-sd-usca ; en-GB-t-m0-iso-i0-pinyin-u-ca-buddhist-nu-Arab-rg-uszzzz-sd-usca
View as plain text