HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
language_tag_impl.hpp
1// Copyright Take Vos 2022.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "language_tag_intf.hpp"
8#include "../utility/utility.hpp"
9#include "../macros.hpp"
10#include <algorithm>
11#include <numeric>
12#include <string_view>
13#include <utility>
14#include <array>
15#include <optional>
16#include <string>
17#include <format>
18#include <ranges>
19#include <vector>
20
21hi_export_module(hikogui.i18n.language_tag : impl);
22
23hi_export namespace hi { inline namespace v1 {
24namespace detail {
25
33[[nodiscard]] consteval auto language_tag_expansions_init() noexcept
34{
36
37 // We are using a c-style array to std::array conversion because
38 // compilers, tools and analysers do not handle large std::array constructors.
39
40 // clang-format off
41 constexpr data_type data[] = {
42 {"aa", "aa-Latn-ET"},
43 {"aai", "aai-Latn-ZZ"},
44 {"aak", "aak-Latn-ZZ"},
45 {"aau", "aau-Latn-ZZ"},
46 {"ab", "ab-Cyrl-GE"},
47 {"abi", "abi-Latn-ZZ"},
48 {"abq", "abq-Cyrl-ZZ"},
49 {"abr", "abr-Latn-GH"},
50 {"abt", "abt-Latn-ZZ"},
51 {"aby", "aby-Latn-ZZ"},
52 {"acd", "acd-Latn-ZZ"},
53 {"ace", "ace-Latn-ID"},
54 {"ach", "ach-Latn-UG"},
55 {"ada", "ada-Latn-GH"},
56 {"ade", "ade-Latn-ZZ"},
57 {"adj", "adj-Latn-ZZ"},
58 {"adp", "adp-Tibt-BT"},
59 {"ady", "ady-Cyrl-RU"},
60 {"adz", "adz-Latn-ZZ"},
61 {"ae", "ae-Avst-IR"},
62 {"aeb", "aeb-Arab-TN"},
63 {"aey", "aey-Latn-ZZ"},
64 {"af", "af-Latn-ZA"},
65 {"agc", "agc-Latn-ZZ"},
66 {"agd", "agd-Latn-ZZ"},
67 {"agg", "agg-Latn-ZZ"},
68 {"agm", "agm-Latn-ZZ"},
69 {"ago", "ago-Latn-ZZ"},
70 {"agq", "agq-Latn-CM"},
71 {"aha", "aha-Latn-ZZ"},
72 {"ahl", "ahl-Latn-ZZ"},
73 {"aho", "aho-Ahom-IN"},
74 {"ajg", "ajg-Latn-ZZ"},
75 {"ak", "ak-Latn-GH"},
76 {"akk", "akk-Xsux-IQ"},
77 {"ala", "ala-Latn-ZZ"},
78 {"ali", "ali-Latn-ZZ"},
79 {"aln", "aln-Latn-XK"},
80 {"alt", "alt-Cyrl-RU"},
81 {"am", "am-Ethi-ET"},
82 {"amm", "amm-Latn-ZZ"},
83 {"amn", "amn-Latn-ZZ"},
84 {"amo", "amo-Latn-NG"},
85 {"amp", "amp-Latn-ZZ"},
86 {"an", "an-Latn-ES"},
87 {"anc", "anc-Latn-ZZ"},
88 {"ank", "ank-Latn-ZZ"},
89 {"ann", "ann-Latn-ZZ"},
90 {"any", "any-Latn-ZZ"},
91 {"aoj", "aoj-Latn-ZZ"},
92 {"aom", "aom-Latn-ZZ"},
93 {"aoz", "aoz-Latn-ID"},
94 {"apc", "apc-Arab-ZZ"},
95 {"apd", "apd-Arab-TG"},
96 {"ape", "ape-Latn-ZZ"},
97 {"apr", "apr-Latn-ZZ"},
98 {"aps", "aps-Latn-ZZ"},
99 {"apz", "apz-Latn-ZZ"},
100 {"ar", "ar-Arab-EG"},
101 {"arc", "arc-Armi-IR"},
102 {"arc-nbat", "arc-Nbat-JO"},
103 {"arc-palm", "arc-Palm-SY"},
104 {"arh", "arh-Latn-ZZ"},
105 {"arn", "arn-Latn-CL"},
106 {"aro", "aro-Latn-BO"},
107 {"arq", "arq-Arab-DZ"},
108 {"ars", "ars-Arab-SA"},
109 {"ary", "ary-Arab-MA"},
110 {"arz", "arz-Arab-EG"},
111 {"as", "as-Beng-IN"},
112 {"asa", "asa-Latn-TZ"},
113 {"ase", "ase-Sgnw-US"},
114 {"asg", "asg-Latn-ZZ"},
115 {"aso", "aso-Latn-ZZ"},
116 {"ast", "ast-Latn-ES"},
117 {"ata", "ata-Latn-ZZ"},
118 {"atg", "atg-Latn-ZZ"},
119 {"atj", "atj-Latn-CA"},
120 {"auy", "auy-Latn-ZZ"},
121 {"av", "av-Cyrl-RU"},
122 {"avl", "avl-Arab-ZZ"},
123 {"avn", "avn-Latn-ZZ"},
124 {"avt", "avt-Latn-ZZ"},
125 {"avu", "avu-Latn-ZZ"},
126 {"awa", "awa-Deva-IN"},
127 {"awb", "awb-Latn-ZZ"},
128 {"awo", "awo-Latn-ZZ"},
129 {"awx", "awx-Latn-ZZ"},
130 {"ay", "ay-Latn-BO"},
131 {"ayb", "ayb-Latn-ZZ"},
132 {"az", "az-Latn-AZ"},
133 {"az-arab", "az-Arab-IR"},
134 {"az-iq", "az-Arab-IQ"},
135 {"az-ir", "az-Arab-IR"},
136 {"az-ru", "az-Cyrl-RU"},
137 {"ba", "ba-Cyrl-RU"},
138 {"bal", "bal-Arab-PK"},
139 {"ban", "ban-Latn-ID"},
140 {"bap", "bap-Deva-NP"},
141 {"bar", "bar-Latn-AT"},
142 {"bas", "bas-Latn-CM"},
143 {"bav", "bav-Latn-ZZ"},
144 {"bax", "bax-Bamu-CM"},
145 {"bba", "bba-Latn-ZZ"},
146 {"bbb", "bbb-Latn-ZZ"},
147 {"bbc", "bbc-Latn-ID"},
148 {"bbd", "bbd-Latn-ZZ"},
149 {"bbj", "bbj-Latn-CM"},
150 {"bbp", "bbp-Latn-ZZ"},
151 {"bbr", "bbr-Latn-ZZ"},
152 {"bcf", "bcf-Latn-ZZ"},
153 {"bch", "bch-Latn-ZZ"},
154 {"bci", "bci-Latn-CI"},
155 {"bcm", "bcm-Latn-ZZ"},
156 {"bcn", "bcn-Latn-ZZ"},
157 {"bco", "bco-Latn-ZZ"},
158 {"bcq", "bcq-Ethi-ZZ"},
159 {"bcu", "bcu-Latn-ZZ"},
160 {"bdd", "bdd-Latn-ZZ"},
161 {"be", "be-Cyrl-BY"},
162 {"bef", "bef-Latn-ZZ"},
163 {"beh", "beh-Latn-ZZ"},
164 {"bej", "bej-Arab-SD"},
165 {"bem", "bem-Latn-ZM"},
166 {"bet", "bet-Latn-ZZ"},
167 {"bew", "bew-Latn-ID"},
168 {"bex", "bex-Latn-ZZ"},
169 {"bez", "bez-Latn-TZ"},
170 {"bfd", "bfd-Latn-CM"},
171 {"bfq", "bfq-Taml-IN"},
172 {"bft", "bft-Arab-PK"},
173 {"bfy", "bfy-Deva-IN"},
174 {"bg", "bg-Cyrl-BG"},
175 {"bgc", "bgc-Deva-IN"},
176 {"bgn", "bgn-Arab-PK"},
177 {"bgx", "bgx-Grek-TR"},
178 {"bhb", "bhb-Deva-IN"},
179 {"bhg", "bhg-Latn-ZZ"},
180 {"bhi", "bhi-Deva-IN"},
181 {"bhl", "bhl-Latn-ZZ"},
182 {"bho", "bho-Deva-IN"},
183 {"bhy", "bhy-Latn-ZZ"},
184 {"bi", "bi-Latn-VU"},
185 {"bib", "bib-Latn-ZZ"},
186 {"big", "big-Latn-ZZ"},
187 {"bik", "bik-Latn-PH"},
188 {"bim", "bim-Latn-ZZ"},
189 {"bin", "bin-Latn-NG"},
190 {"bio", "bio-Latn-ZZ"},
191 {"biq", "biq-Latn-ZZ"},
192 {"bjh", "bjh-Latn-ZZ"},
193 {"bji", "bji-Ethi-ZZ"},
194 {"bjj", "bjj-Deva-IN"},
195 {"bjn", "bjn-Latn-ID"},
196 {"bjo", "bjo-Latn-ZZ"},
197 {"bjr", "bjr-Latn-ZZ"},
198 {"bjt", "bjt-Latn-SN"},
199 {"bjz", "bjz-Latn-ZZ"},
200 {"bkc", "bkc-Latn-ZZ"},
201 {"bkm", "bkm-Latn-CM"},
202 {"bkq", "bkq-Latn-ZZ"},
203 {"bku", "bku-Latn-PH"},
204 {"bkv", "bkv-Latn-ZZ"},
205 {"blg", "blg-Latn-MY"},
206 {"blt", "blt-Tavt-VN"},
207 {"bm", "bm-Latn-ML"},
208 {"bmh", "bmh-Latn-ZZ"},
209 {"bmk", "bmk-Latn-ZZ"},
210 {"bmq", "bmq-Latn-ML"},
211 {"bmu", "bmu-Latn-ZZ"},
212 {"bn", "bn-Beng-BD"},
213 {"bng", "bng-Latn-ZZ"},
214 {"bnm", "bnm-Latn-ZZ"},
215 {"bnp", "bnp-Latn-ZZ"},
216 {"bo", "bo-Tibt-CN"},
217 {"boj", "boj-Latn-ZZ"},
218 {"bom", "bom-Latn-ZZ"},
219 {"bon", "bon-Latn-ZZ"},
220 {"bpy", "bpy-Beng-IN"},
221 {"bqc", "bqc-Latn-ZZ"},
222 {"bqi", "bqi-Arab-IR"},
223 {"bqp", "bqp-Latn-ZZ"},
224 {"bqv", "bqv-Latn-CI"},
225 {"br", "br-Latn-FR"},
226 {"bra", "bra-Deva-IN"},
227 {"brh", "brh-Arab-PK"},
228 {"brx", "brx-Deva-IN"},
229 {"brz", "brz-Latn-ZZ"},
230 {"bs", "bs-Latn-BA"},
231 {"bsj", "bsj-Latn-ZZ"},
232 {"bsq", "bsq-Bass-LR"},
233 {"bss", "bss-Latn-CM"},
234 {"bst", "bst-Ethi-ZZ"},
235 {"bto", "bto-Latn-PH"},
236 {"btt", "btt-Latn-ZZ"},
237 {"btv", "btv-Deva-PK"},
238 {"bua", "bua-Cyrl-RU"},
239 {"buc", "buc-Latn-YT"},
240 {"bud", "bud-Latn-ZZ"},
241 {"bug", "bug-Latn-ID"},
242 {"buk", "buk-Latn-ZZ"},
243 {"bum", "bum-Latn-CM"},
244 {"buo", "buo-Latn-ZZ"},
245 {"bus", "bus-Latn-ZZ"},
246 {"buu", "buu-Latn-ZZ"},
247 {"bvb", "bvb-Latn-GQ"},
248 {"bwd", "bwd-Latn-ZZ"},
249 {"bwr", "bwr-Latn-ZZ"},
250 {"bxh", "bxh-Latn-ZZ"},
251 {"bye", "bye-Latn-ZZ"},
252 {"byn", "byn-Ethi-ER"},
253 {"byr", "byr-Latn-ZZ"},
254 {"bys", "bys-Latn-ZZ"},
255 {"byv", "byv-Latn-CM"},
256 {"byx", "byx-Latn-ZZ"},
257 {"bza", "bza-Latn-ZZ"},
258 {"bze", "bze-Latn-ML"},
259 {"bzf", "bzf-Latn-ZZ"},
260 {"bzh", "bzh-Latn-ZZ"},
261 {"bzw", "bzw-Latn-ZZ"},
262 {"ca", "ca-Latn-ES"},
263 {"cad", "cad-Latn-US"},
264 {"can", "can-Latn-ZZ"},
265 {"cbj", "cbj-Latn-ZZ"},
266 {"cch", "cch-Latn-NG"},
267 {"ccp", "ccp-Cakm-BD"},
268 {"ce", "ce-Cyrl-RU"},
269 {"ceb", "ceb-Latn-PH"},
270 {"cfa", "cfa-Latn-ZZ"},
271 {"cgg", "cgg-Latn-UG"},
272 {"ch", "ch-Latn-GU"},
273 {"chk", "chk-Latn-FM"},
274 {"chm", "chm-Cyrl-RU"},
275 {"cho", "cho-Latn-US"},
276 {"chp", "chp-Latn-CA"},
277 {"chr", "chr-Cher-US"},
278 {"cic", "cic-Latn-US"},
279 {"cja", "cja-Arab-KH"},
280 {"cjm", "cjm-Cham-VN"},
281 {"cjv", "cjv-Latn-ZZ"},
282 {"ckb", "ckb-Arab-IQ"},
283 {"ckl", "ckl-Latn-ZZ"},
284 {"cko", "cko-Latn-ZZ"},
285 {"cky", "cky-Latn-ZZ"},
286 {"cla", "cla-Latn-ZZ"},
287 {"cme", "cme-Latn-ZZ"},
288 {"cmg", "cmg-Soyo-MN"},
289 {"co", "co-Latn-FR"},
290 {"cop", "cop-Copt-EG"},
291 {"cps", "cps-Latn-PH"},
292 {"cr", "cr-Cans-CA"},
293 {"crh", "crh-Cyrl-UA"},
294 {"crj", "crj-Cans-CA"},
295 {"crk", "crk-Cans-CA"},
296 {"crl", "crl-Cans-CA"},
297 {"crm", "crm-Cans-CA"},
298 {"crs", "crs-Latn-SC"},
299 {"cs", "cs-Latn-CZ"},
300 {"csb", "csb-Latn-PL"},
301 {"csw", "csw-Cans-CA"},
302 {"ctd", "ctd-Pauc-MM"},
303 {"cu", "cu-Cyrl-RU"},
304 {"cu-glag", "cu-Glag-BG"},
305 {"cv", "cv-Cyrl-RU"},
306 {"cy", "cy-Latn-GB"},
307 {"da", "da-Latn-DK"},
308 {"dad", "dad-Latn-ZZ"},
309 {"daf", "daf-Latn-CI"},
310 {"dag", "dag-Latn-ZZ"},
311 {"dah", "dah-Latn-ZZ"},
312 {"dak", "dak-Latn-US"},
313 {"dar", "dar-Cyrl-RU"},
314 {"dav", "dav-Latn-KE"},
315 {"dbd", "dbd-Latn-ZZ"},
316 {"dbq", "dbq-Latn-ZZ"},
317 {"dcc", "dcc-Arab-IN"},
318 {"ddn", "ddn-Latn-ZZ"},
319 {"de", "de-Latn-DE"},
320 {"ded", "ded-Latn-ZZ"},
321 {"den", "den-Latn-CA"},
322 {"dga", "dga-Latn-ZZ"},
323 {"dgh", "dgh-Latn-ZZ"},
324 {"dgi", "dgi-Latn-ZZ"},
325 {"dgl", "dgl-Arab-ZZ"},
326 {"dgr", "dgr-Latn-CA"},
327 {"dgz", "dgz-Latn-ZZ"},
328 {"dia", "dia-Latn-ZZ"},
329 {"dje", "dje-Latn-NE"},
330 {"dmf", "dmf-Medf-NG"},
331 {"dnj", "dnj-Latn-CI"},
332 {"dob", "dob-Latn-ZZ"},
333 {"doi", "doi-Deva-IN"},
334 {"dop", "dop-Latn-ZZ"},
335 {"dow", "dow-Latn-ZZ"},
336 {"drh", "drh-Mong-CN"},
337 {"dri", "dri-Latn-ZZ"},
338 {"drs", "drs-Ethi-ZZ"},
339 {"dsb", "dsb-Latn-DE"},
340 {"dtm", "dtm-Latn-ML"},
341 {"dtp", "dtp-Latn-MY"},
342 {"dts", "dts-Latn-ZZ"},
343 {"dty", "dty-Deva-NP"},
344 {"dua", "dua-Latn-CM"},
345 {"duc", "duc-Latn-ZZ"},
346 {"dud", "dud-Latn-ZZ"},
347 {"dug", "dug-Latn-ZZ"},
348 {"dv", "dv-Thaa-MV"},
349 {"dva", "dva-Latn-ZZ"},
350 {"dww", "dww-Latn-ZZ"},
351 {"dyo", "dyo-Latn-SN"},
352 {"dyu", "dyu-Latn-BF"},
353 {"dz", "dz-Tibt-BT"},
354 {"dzg", "dzg-Latn-ZZ"},
355 {"ebu", "ebu-Latn-KE"},
356 {"ee", "ee-Latn-GH"},
357 {"efi", "efi-Latn-NG"},
358 {"egl", "egl-Latn-IT"},
359 {"egy", "egy-Egyp-EG"},
360 {"eka", "eka-Latn-ZZ"},
361 {"eky", "eky-Kali-MM"},
362 {"el", "el-Grek-GR"},
363 {"ema", "ema-Latn-ZZ"},
364 {"emi", "emi-Latn-ZZ"},
365 {"en", "en-Latn-US"},
366 {"en-gb-oed", "en-GB-oxendict"},
367 {"enn", "enn-Latn-ZZ"},
368 {"enq", "enq-Latn-ZZ"},
369 {"en-shaw", "en-Shaw-GB"},
370 {"eo", "eo-Latn-001"},
371 {"eri", "eri-Latn-ZZ"},
372 {"es", "es-Latn-ES"},
373 {"esg", "esg-Gonm-IN"},
374 {"esu", "esu-Latn-US"},
375 {"et", "et-Latn-EE"},
376 {"etr", "etr-Latn-ZZ"},
377 {"ett", "ett-Ital-IT"},
378 {"etu", "etu-Latn-ZZ"},
379 {"etx", "etx-Latn-ZZ"},
380 {"eu", "eu-Latn-ES"},
381 {"ewo", "ewo-Latn-CM"},
382 {"ext", "ext-Latn-ES"},
383 {"eza", "eza-Latn-ZZ"},
384 {"fa", "fa-Arab-IR"},
385 {"faa", "faa-Latn-ZZ"},
386 {"fab", "fab-Latn-ZZ"},
387 {"fag", "fag-Latn-ZZ"},
388 {"fai", "fai-Latn-ZZ"},
389 {"fan", "fan-Latn-GQ"},
390 {"ff", "ff-Latn-SN"},
391 {"ff-adlm", "ff-Adlm-GN"},
392 {"ffi", "ffi-Latn-ZZ"},
393 {"ffm", "ffm-Latn-ML"},
394 {"fi", "fi-Latn-FI"},
395 {"fia", "fia-Arab-SD"},
396 {"fil", "fil-Latn-PH"},
397 {"fit", "fit-Latn-SE"},
398 {"fj", "fj-Latn-FJ"},
399 {"flr", "flr-Latn-ZZ"},
400 {"fmp", "fmp-Latn-ZZ"},
401 {"fo", "fo-Latn-FO"},
402 {"fod", "fod-Latn-ZZ"},
403 {"fon", "fon-Latn-BJ"},
404 {"for", "for-Latn-ZZ"},
405 {"fpe", "fpe-Latn-ZZ"},
406 {"fqs", "fqs-Latn-ZZ"},
407 {"fr", "fr-Latn-FR"},
408 {"frc", "frc-Latn-US"},
409 {"frp", "frp-Latn-FR"},
410 {"frr", "frr-Latn-DE"},
411 {"frs", "frs-Latn-DE"},
412 {"fub", "fub-Arab-CM"},
413 {"fud", "fud-Latn-WF"},
414 {"fue", "fue-Latn-ZZ"},
415 {"fuf", "fuf-Latn-GN"},
416 {"fuh", "fuh-Latn-ZZ"},
417 {"fuq", "fuq-Latn-NE"},
418 {"fur", "fur-Latn-IT"},
419 {"fuv", "fuv-Latn-NG"},
420 {"fuy", "fuy-Latn-ZZ"},
421 {"fvr", "fvr-Latn-SD"},
422 {"fy", "fy-Latn-NL"},
423 {"ga", "ga-Latn-IE"},
424 {"gaa", "gaa-Latn-GH"},
425 {"gaf", "gaf-Latn-ZZ"},
426 {"gag", "gag-Latn-MD"},
427 {"gah", "gah-Latn-ZZ"},
428 {"gaj", "gaj-Latn-ZZ"},
429 {"gam", "gam-Latn-ZZ"},
430 {"gan", "gan-Hans-CN"},
431 {"gaw", "gaw-Latn-ZZ"},
432 {"gay", "gay-Latn-ID"},
433 {"gba", "gba-Latn-ZZ"},
434 {"gbf", "gbf-Latn-ZZ"},
435 {"gbm", "gbm-Deva-IN"},
436 {"gby", "gby-Latn-ZZ"},
437 {"gbz", "gbz-Arab-IR"},
438 {"gcr", "gcr-Latn-GF"},
439 {"gd", "gd-Latn-GB"},
440 {"gde", "gde-Latn-ZZ"},
441 {"gdn", "gdn-Latn-ZZ"},
442 {"gdr", "gdr-Latn-ZZ"},
443 {"geb", "geb-Latn-ZZ"},
444 {"gej", "gej-Latn-ZZ"},
445 {"gel", "gel-Latn-ZZ"},
446 {"gez", "gez-Ethi-ET"},
447 {"gfk", "gfk-Latn-ZZ"},
448 {"ggn", "ggn-Deva-NP"},
449 {"ghs", "ghs-Latn-ZZ"},
450 {"gil", "gil-Latn-KI"},
451 {"gim", "gim-Latn-ZZ"},
452 {"gjk", "gjk-Arab-PK"},
453 {"gjn", "gjn-Latn-ZZ"},
454 {"gju", "gju-Arab-PK"},
455 {"gkn", "gkn-Latn-ZZ"},
456 {"gkp", "gkp-Latn-ZZ"},
457 {"gl", "gl-Latn-ES"},
458 {"glk", "glk-Arab-IR"},
459 {"gmm", "gmm-Latn-ZZ"},
460 {"gmv", "gmv-Ethi-ZZ"},
461 {"gn", "gn-Latn-PY"},
462 {"gnd", "gnd-Latn-ZZ"},
463 {"gng", "gng-Latn-ZZ"},
464 {"god", "god-Latn-ZZ"},
465 {"gof", "gof-Ethi-ZZ"},
466 {"goi", "goi-Latn-ZZ"},
467 {"gom", "gom-Deva-IN"},
468 {"gon", "gon-Telu-IN"},
469 {"gor", "gor-Latn-ID"},
470 {"gos", "gos-Latn-NL"},
471 {"got", "got-Goth-UA"},
472 {"grb", "grb-Latn-ZZ"},
473 {"grc", "grc-Cprt-CY"},
474 {"grc-linb", "grc-Linb-GR"},
475 {"grt", "grt-Beng-IN"},
476 {"grw", "grw-Latn-ZZ"},
477 {"gsw", "gsw-Latn-CH"},
478 {"gu", "gu-Gujr-IN"},
479 {"gub", "gub-Latn-BR"},
480 {"guc", "guc-Latn-CO"},
481 {"gud", "gud-Latn-ZZ"},
482 {"gur", "gur-Latn-GH"},
483 {"guw", "guw-Latn-ZZ"},
484 {"gux", "gux-Latn-ZZ"},
485 {"guz", "guz-Latn-KE"},
486 {"gv", "gv-Latn-IM"},
487 {"gvf", "gvf-Latn-ZZ"},
488 {"gvr", "gvr-Deva-NP"},
489 {"gvs", "gvs-Latn-ZZ"},
490 {"gwc", "gwc-Arab-ZZ"},
491 {"gwi", "gwi-Latn-CA"},
492 {"gwt", "gwt-Arab-ZZ"},
493 {"gyi", "gyi-Latn-ZZ"},
494 {"ha", "ha-Latn-NG"},
495 {"ha-cm", "ha-Arab-CM"},
496 {"hag", "hag-Latn-ZZ"},
497 {"hak", "hak-Hans-CN"},
498 {"ham", "ham-Latn-ZZ"},
499 {"ha-sd", "ha-Arab-SD"},
500 {"haw", "haw-Latn-US"},
501 {"haz", "haz-Arab-AF"},
502 {"hbb", "hbb-Latn-ZZ"},
503 {"hdy", "hdy-Ethi-ZZ"},
504 {"he", "he-Hebr-IL"},
505 {"hhy", "hhy-Latn-ZZ"},
506 {"hi", "hi-Deva-IN"},
507 {"hia", "hia-Latn-ZZ"},
508 {"hif", "hif-Latn-FJ"},
509 {"hig", "hig-Latn-ZZ"},
510 {"hih", "hih-Latn-ZZ"},
511 {"hil", "hil-Latn-PH"},
512 {"hla", "hla-Latn-ZZ"},
513 {"hlu", "hlu-Hluw-TR"},
514 {"hmd", "hmd-Plrd-CN"},
515 {"hmt", "hmt-Latn-ZZ"},
516 {"hnd", "hnd-Arab-PK"},
517 {"hne", "hne-Deva-IN"},
518 {"hnj", "hnj-Hmnp-US"},
519 {"hnn", "hnn-Latn-PH"},
520 {"hno", "hno-Arab-PK"},
521 {"ho", "ho-Latn-PG"},
522 {"hoc", "hoc-Deva-IN"},
523 {"hoj", "hoj-Deva-IN"},
524 {"hot", "hot-Latn-ZZ"},
525 {"hr", "hr-Latn-HR"},
526 {"hsb", "hsb-Latn-DE"},
527 {"hsn", "hsn-Hans-CN"},
528 {"ht", "ht-Latn-HT"},
529 {"hu", "hu-Latn-HU"},
530 {"hui", "hui-Latn-ZZ"},
531 {"hy", "hy-Armn-AM"},
532 {"hz", "hz-Latn-NA"},
533 {"ia", "ia-Latn-001"},
534 {"i-ami", "ami"}, // grandfathered: not in ISO 639
535 {"ian", "ian-Latn-ZZ"},
536 {"iar", "iar-Latn-ZZ"},
537 {"iba", "iba-Latn-MY"},
538 {"ibb", "ibb-Latn-NG"},
539 {"i-bnn", "bnn"}, // grandfathered: not in ISO 639
540 {"iby", "iby-Latn-ZZ"},
541 {"ica", "ica-Latn-ZZ"},
542 {"ich", "ich-Latn-ZZ"},
543 {"id", "id-Latn-ID"},
544 {"idd", "idd-Latn-ZZ"},
545 {"i-default", "en-Latn-US"}, // grandfathered
546 {"idi", "idi-Latn-ZZ"},
547 {"idu", "idu-Latn-ZZ"},
548 {"ife", "ife-Latn-TG"},
549 {"ig", "ig-Latn-NG"},
550 {"igb", "igb-Latn-ZZ"},
551 {"ige", "ige-Latn-ZZ"},
552 {"i-hak", "hak-Hans-CN"}, // grandfathered
553 {"ii", "ii-Yiii-CN"},
554 {"ijj", "ijj-Latn-ZZ"},
555 {"ik", "ik-Latn-US"},
556 {"ikk", "ikk-Latn-ZZ"},
557 {"i-klingon", "tlh"}, // grandfathered: not in ISO 639
558 {"ikt", "ikt-Latn-CA"},
559 {"ikw", "ikw-Latn-ZZ"},
560 {"ikx", "ikx-Latn-ZZ"},
561 {"ilo", "ilo-Latn-PH"},
562 {"i-lux", "lb-Latn-LU"}, // grandfathered
563 {"imo", "imo-Latn-ZZ"},
564 {"in", "in-Latn-ID"},
565 {"i-navajo", "nv-Latn-US"}, // grandfathered
566 {"inh", "inh-Cyrl-RU"},
567 {"io", "io-Latn-001"},
568 {"iou", "iou-Latn-ZZ"},
569 {"i-pwn", "pwn"}, // grandfathered: not in ISO 639
570 {"iri", "iri-Latn-ZZ"},
571 {"is", "is-Latn-IS"},
572 {"it", "it-Latn-IT"},
573 {"i-tao", "tao"}, // grandfathered: not in ISO 639
574 {"i-tay", "tay"}, // grandfathered: not in ISO 639
575 {"i-tsu", "tsu"}, // grandfathered: not in ISO 639
576 {"iu", "iu-Cans-CA"},
577 {"iw", "iw-Hebr-IL"},
578 {"iwm", "iwm-Latn-ZZ"},
579 {"iws", "iws-Latn-ZZ"},
580 {"izh", "izh-Latn-RU"},
581 {"izi", "izi-Latn-ZZ"},
582 {"ja", "ja-Jpan-JP"},
583 {"jab", "jab-Latn-ZZ"},
584 {"jam", "jam-Latn-JM"},
585 {"jar", "jar-Latn-ZZ"},
586 {"jbo", "jbo-Latn-001"},
587 {"jbu", "jbu-Latn-ZZ"},
588 {"jen", "jen-Latn-ZZ"},
589 {"jgk", "jgk-Latn-ZZ"},
590 {"jgo", "jgo-Latn-CM"},
591 {"ji", "ji-Hebr-UA"},
592 {"jib", "jib-Latn-ZZ"},
593 {"jmc", "jmc-Latn-TZ"},
594 {"jml", "jml-Deva-NP"},
595 {"jra", "jra-Latn-ZZ"},
596 {"jut", "jut-Latn-DK"},
597 {"jv", "jv-Latn-ID"},
598 {"jw", "jw-Latn-ID"},
599 {"ka", "ka-Geor-GE"},
600 {"kaa", "kaa-Cyrl-UZ"},
601 {"kab", "kab-Latn-DZ"},
602 {"kac", "kac-Latn-MM"},
603 {"kad", "kad-Latn-ZZ"},
604 {"kai", "kai-Latn-ZZ"},
605 {"kaj", "kaj-Latn-NG"},
606 {"kam", "kam-Latn-KE"},
607 {"kao", "kao-Latn-ML"},
608 {"kbd", "kbd-Cyrl-RU"},
609 {"kbm", "kbm-Latn-ZZ"},
610 {"kbp", "kbp-Latn-ZZ"},
611 {"kbq", "kbq-Latn-ZZ"},
612 {"kbx", "kbx-Latn-ZZ"},
613 {"kby", "kby-Arab-NE"},
614 {"kcg", "kcg-Latn-NG"},
615 {"kck", "kck-Latn-ZW"},
616 {"kcl", "kcl-Latn-ZZ"},
617 {"kct", "kct-Latn-ZZ"},
618 {"kde", "kde-Latn-TZ"},
619 {"kdh", "kdh-Latn-TG"},
620 {"kdl", "kdl-Latn-ZZ"},
621 {"kdt", "kdt-Thai-TH"},
622 {"kea", "kea-Latn-CV"},
623 {"ken", "ken-Latn-CM"},
624 {"kez", "kez-Latn-ZZ"},
625 {"kfo", "kfo-Latn-CI"},
626 {"kfr", "kfr-Deva-IN"},
627 {"kfy", "kfy-Deva-IN"},
628 {"kg", "kg-Latn-CD"},
629 {"kge", "kge-Latn-ID"},
630 {"kgf", "kgf-Latn-ZZ"},
631 {"kgp", "kgp-Latn-BR"},
632 {"kha", "kha-Latn-IN"},
633 {"khb", "khb-Talu-CN"},
634 {"khn", "khn-Deva-IN"},
635 {"khq", "khq-Latn-ML"},
636 {"khs", "khs-Latn-ZZ"},
637 {"kht", "kht-Mymr-IN"},
638 {"khw", "khw-Arab-PK"},
639 {"khz", "khz-Latn-ZZ"},
640 {"ki", "ki-Latn-KE"},
641 {"kij", "kij-Latn-ZZ"},
642 {"kiu", "kiu-Latn-TR"},
643 {"kiw", "kiw-Latn-ZZ"},
644 {"kj", "kj-Latn-NA"},
645 {"kjd", "kjd-Latn-ZZ"},
646 {"kjg", "kjg-Laoo-LA"},
647 {"kjs", "kjs-Latn-ZZ"},
648 {"kjy", "kjy-Latn-ZZ"},
649 {"kk", "kk-Cyrl-KZ"},
650 {"kk-af", "kk-Arab-AF"},
651 {"kk-arab", "kk-Arab-CN"},
652 {"kkc", "kkc-Latn-ZZ"},
653 {"kk-cn", "kk-Arab-CN"},
654 {"kk-ir", "kk-Arab-IR"},
655 {"kkj", "kkj-Latn-CM"},
656 {"kk-mn", "kk-Arab-MN"},
657 {"kl", "kl-Latn-GL"},
658 {"kln", "kln-Latn-KE"},
659 {"klq", "klq-Latn-ZZ"},
660 {"klt", "klt-Latn-ZZ"},
661 {"klx", "klx-Latn-ZZ"},
662 {"km", "km-Khmr-KH"},
663 {"kmb", "kmb-Latn-AO"},
664 {"kmh", "kmh-Latn-ZZ"},
665 {"kmo", "kmo-Latn-ZZ"},
666 {"kms", "kms-Latn-ZZ"},
667 {"kmu", "kmu-Latn-ZZ"},
668 {"kmw", "kmw-Latn-ZZ"},
669 {"kn", "kn-Knda-IN"},
670 {"knf", "knf-Latn-GW"},
671 {"knp", "knp-Latn-ZZ"},
672 {"ko", "ko-Kore-KR"},
673 {"koi", "koi-Cyrl-RU"},
674 {"kok", "kok-Deva-IN"},
675 {"kol", "kol-Latn-ZZ"},
676 {"kos", "kos-Latn-FM"},
677 {"koz", "koz-Latn-ZZ"},
678 {"kpe", "kpe-Latn-LR"},
679 {"kpf", "kpf-Latn-ZZ"},
680 {"kpo", "kpo-Latn-ZZ"},
681 {"kpr", "kpr-Latn-ZZ"},
682 {"kpx", "kpx-Latn-ZZ"},
683 {"kqb", "kqb-Latn-ZZ"},
684 {"kqf", "kqf-Latn-ZZ"},
685 {"kqs", "kqs-Latn-ZZ"},
686 {"kqy", "kqy-Ethi-ZZ"},
687 {"kr", "kr-Latn-ZZ"},
688 {"krc", "krc-Cyrl-RU"},
689 {"kri", "kri-Latn-SL"},
690 {"krj", "krj-Latn-PH"},
691 {"krl", "krl-Latn-RU"},
692 {"krs", "krs-Latn-ZZ"},
693 {"kru", "kru-Deva-IN"},
694 {"ks", "ks-Arab-IN"},
695 {"ksb", "ksb-Latn-TZ"},
696 {"ksd", "ksd-Latn-ZZ"},
697 {"ksf", "ksf-Latn-CM"},
698 {"ksh", "ksh-Latn-DE"},
699 {"ksj", "ksj-Latn-ZZ"},
700 {"ksr", "ksr-Latn-ZZ"},
701 {"ktb", "ktb-Ethi-ZZ"},
702 {"ktm", "ktm-Latn-ZZ"},
703 {"kto", "kto-Latn-ZZ"},
704 {"ktr", "ktr-Latn-MY"},
705 {"ku", "ku-Latn-TR"},
706 {"ku-arab", "ku-Arab-IQ"},
707 {"kub", "kub-Latn-ZZ"},
708 {"kud", "kud-Latn-ZZ"},
709 {"kue", "kue-Latn-ZZ"},
710 {"kuj", "kuj-Latn-ZZ"},
711 {"ku-lb", "ku-Arab-LB"},
712 {"kum", "kum-Cyrl-RU"},
713 {"kun", "kun-Latn-ZZ"},
714 {"kup", "kup-Latn-ZZ"},
715 {"kus", "kus-Latn-ZZ"},
716 {"ku-yezi", "ku-Yezi-GE"},
717 {"kv", "kv-Cyrl-RU"},
718 {"kvg", "kvg-Latn-ZZ"},
719 {"kvr", "kvr-Latn-ID"},
720 {"kvx", "kvx-Arab-PK"},
721 {"kw", "kw-Latn-GB"},
722 {"kwj", "kwj-Latn-ZZ"},
723 {"kwo", "kwo-Latn-ZZ"},
724 {"kwq", "kwq-Latn-ZZ"},
725 {"kxa", "kxa-Latn-ZZ"},
726 {"kxc", "kxc-Ethi-ZZ"},
727 {"kxe", "kxe-Latn-ZZ"},
728 {"kxl", "kxl-Deva-IN"},
729 {"kxm", "kxm-Thai-TH"},
730 {"kxp", "kxp-Arab-PK"},
731 {"kxw", "kxw-Latn-ZZ"},
732 {"kxz", "kxz-Latn-ZZ"},
733 {"ky", "ky-Cyrl-KG"},
734 {"ky-arab", "ky-Arab-CN"},
735 {"ky-cn", "ky-Arab-CN"},
736 {"kye", "kye-Latn-ZZ"},
737 {"ky-latn", "ky-Latn-TR"},
738 {"ky-tr", "ky-Latn-TR"},
739 {"kyx", "kyx-Latn-ZZ"},
740 {"kzh", "kzh-Arab-ZZ"},
741 {"kzj", "kzj-Latn-MY"},
742 {"kzr", "kzr-Latn-ZZ"},
743 {"kzt", "kzt-Latn-MY"},
744 {"la", "la-Latn-VA"},
745 {"lab", "lab-Lina-GR"},
746 {"lad", "lad-Hebr-IL"},
747 {"lag", "lag-Latn-TZ"},
748 {"lah", "lah-Arab-PK"},
749 {"laj", "laj-Latn-UG"},
750 {"las", "las-Latn-ZZ"},
751 {"lb", "lb-Latn-LU"},
752 {"lbe", "lbe-Cyrl-RU"},
753 {"lbu", "lbu-Latn-ZZ"},
754 {"lbw", "lbw-Latn-ID"},
755 {"lcm", "lcm-Latn-ZZ"},
756 {"lcp", "lcp-Thai-CN"},
757 {"ldb", "ldb-Latn-ZZ"},
758 {"led", "led-Latn-ZZ"},
759 {"lee", "lee-Latn-ZZ"},
760 {"lem", "lem-Latn-ZZ"},
761 {"lep", "lep-Lepc-IN"},
762 {"leq", "leq-Latn-ZZ"},
763 {"leu", "leu-Latn-ZZ"},
764 {"lez", "lez-Cyrl-RU"},
765 {"lg", "lg-Latn-UG"},
766 {"lgg", "lgg-Latn-ZZ"},
767 {"li", "li-Latn-NL"},
768 {"lia", "lia-Latn-ZZ"},
769 {"lid", "lid-Latn-ZZ"},
770 {"lif", "lif-Deva-NP"},
771 {"lif-limb", "lif-Limb-IN"},
772 {"lig", "lig-Latn-ZZ"},
773 {"lih", "lih-Latn-ZZ"},
774 {"lij", "lij-Latn-IT"},
775 {"lis", "lis-Lisu-CN"},
776 {"ljp", "ljp-Latn-ID"},
777 {"lki", "lki-Arab-IR"},
778 {"lkt", "lkt-Latn-US"},
779 {"lle", "lle-Latn-ZZ"},
780 {"lln", "lln-Latn-ZZ"},
781 {"lmn", "lmn-Telu-IN"},
782 {"lmo", "lmo-Latn-IT"},
783 {"lmp", "lmp-Latn-ZZ"},
784 {"ln", "ln-Latn-CD"},
785 {"lns", "lns-Latn-ZZ"},
786 {"lnu", "lnu-Latn-ZZ"},
787 {"lo", "lo-Laoo-LA"},
788 {"loj", "loj-Latn-ZZ"},
789 {"lok", "lok-Latn-ZZ"},
790 {"lol", "lol-Latn-CD"},
791 {"lor", "lor-Latn-ZZ"},
792 {"los", "los-Latn-ZZ"},
793 {"loz", "loz-Latn-ZM"},
794 {"lrc", "lrc-Arab-IR"},
795 {"lt", "lt-Latn-LT"},
796 {"ltg", "ltg-Latn-LV"},
797 {"lu", "lu-Latn-CD"},
798 {"lua", "lua-Latn-CD"},
799 {"luo", "luo-Latn-KE"},
800 {"luy", "luy-Latn-KE"},
801 {"luz", "luz-Arab-IR"},
802 {"lv", "lv-Latn-LV"},
803 {"lwl", "lwl-Thai-TH"},
804 {"lzh", "lzh-Hans-CN"},
805 {"lzz", "lzz-Latn-TR"},
806 {"mad", "mad-Latn-ID"},
807 {"maf", "maf-Latn-CM"},
808 {"mag", "mag-Deva-IN"},
809 {"mai", "mai-Deva-IN"},
810 {"mak", "mak-Latn-ID"},
811 {"man", "man-Latn-GM"},
812 {"man-gn", "man-Nkoo-GN"},
813 {"man-nkoo", "man-Nkoo-GN"},
814 {"mas", "mas-Latn-KE"},
815 {"maw", "maw-Latn-ZZ"},
816 {"maz", "maz-Latn-MX"},
817 {"mbh", "mbh-Latn-ZZ"},
818 {"mbo", "mbo-Latn-ZZ"},
819 {"mbq", "mbq-Latn-ZZ"},
820 {"mbu", "mbu-Latn-ZZ"},
821 {"mbw", "mbw-Latn-ZZ"},
822 {"mci", "mci-Latn-ZZ"},
823 {"mcp", "mcp-Latn-ZZ"},
824 {"mcq", "mcq-Latn-ZZ"},
825 {"mcr", "mcr-Latn-ZZ"},
826 {"mcu", "mcu-Latn-ZZ"},
827 {"mda", "mda-Latn-ZZ"},
828 {"mde", "mde-Arab-ZZ"},
829 {"mdf", "mdf-Cyrl-RU"},
830 {"mdh", "mdh-Latn-PH"},
831 {"mdj", "mdj-Latn-ZZ"},
832 {"mdr", "mdr-Latn-ID"},
833 {"mdx", "mdx-Ethi-ZZ"},
834 {"med", "med-Latn-ZZ"},
835 {"mee", "mee-Latn-ZZ"},
836 {"mek", "mek-Latn-ZZ"},
837 {"men", "men-Latn-SL"},
838 {"mer", "mer-Latn-KE"},
839 {"met", "met-Latn-ZZ"},
840 {"meu", "meu-Latn-ZZ"},
841 {"mfa", "mfa-Arab-TH"},
842 {"mfe", "mfe-Latn-MU"},
843 {"mfn", "mfn-Latn-ZZ"},
844 {"mfo", "mfo-Latn-ZZ"},
845 {"mfq", "mfq-Latn-ZZ"},
846 {"mg", "mg-Latn-MG"},
847 {"mgh", "mgh-Latn-MZ"},
848 {"mgl", "mgl-Latn-ZZ"},
849 {"mgo", "mgo-Latn-CM"},
850 {"mgp", "mgp-Deva-NP"},
851 {"mgy", "mgy-Latn-TZ"},
852 {"mh", "mh-Latn-MH"},
853 {"mhi", "mhi-Latn-ZZ"},
854 {"mhl", "mhl-Latn-ZZ"},
855 {"mi", "mi-Latn-NZ"},
856 {"mif", "mif-Latn-ZZ"},
857 {"min", "min-Latn-ID"},
858 {"miw", "miw-Latn-ZZ"},
859 {"mk", "mk-Cyrl-MK"},
860 {"mki", "mki-Arab-ZZ"},
861 {"mkl", "mkl-Latn-ZZ"},
862 {"mkp", "mkp-Latn-ZZ"},
863 {"mkw", "mkw-Latn-ZZ"},
864 {"ml", "ml-Mlym-IN"},
865 {"mle", "mle-Latn-ZZ"},
866 {"mlp", "mlp-Latn-ZZ"},
867 {"mls", "mls-Latn-SD"},
868 {"mmo", "mmo-Latn-ZZ"},
869 {"mmu", "mmu-Latn-ZZ"},
870 {"mmx", "mmx-Latn-ZZ"},
871 {"mn", "mn-Cyrl-MN"},
872 {"mna", "mna-Latn-ZZ"},
873 {"mn-cn", "mn-Mong-CN"},
874 {"mnf", "mnf-Latn-ZZ"},
875 {"mni", "mni-Beng-IN"},
876 {"mn-mong", "mn-Mong-CN"},
877 {"mnw", "mnw-Mymr-MM"},
878 {"mo", "mo-Latn-RO"},
879 {"moa", "moa-Latn-ZZ"},
880 {"moe", "moe-Latn-CA"},
881 {"moh", "moh-Latn-CA"},
882 {"mos", "mos-Latn-BF"},
883 {"mox", "mox-Latn-ZZ"},
884 {"mpp", "mpp-Latn-ZZ"},
885 {"mps", "mps-Latn-ZZ"},
886 {"mpt", "mpt-Latn-ZZ"},
887 {"mpx", "mpx-Latn-ZZ"},
888 {"mql", "mql-Latn-ZZ"},
889 {"mr", "mr-Deva-IN"},
890 {"mrd", "mrd-Deva-NP"},
891 {"mrj", "mrj-Cyrl-RU"},
892 {"mro", "mro-Mroo-BD"},
893 {"ms", "ms-Latn-MY"},
894 {"ms-cc", "ms-Arab-CC"},
895 {"mt", "mt-Latn-MT"},
896 {"mtc", "mtc-Latn-ZZ"},
897 {"mtf", "mtf-Latn-ZZ"},
898 {"mti", "mti-Latn-ZZ"},
899 {"mtr", "mtr-Deva-IN"},
900 {"mua", "mua-Latn-CM"},
901 {"mur", "mur-Latn-ZZ"},
902 {"mus", "mus-Latn-US"},
903 {"mva", "mva-Latn-ZZ"},
904 {"mvn", "mvn-Latn-ZZ"},
905 {"mvy", "mvy-Arab-PK"},
906 {"mwk", "mwk-Latn-ML"},
907 {"mwr", "mwr-Deva-IN"},
908 {"mwv", "mwv-Latn-ID"},
909 {"mww", "mww-Hmnp-US"},
910 {"mxc", "mxc-Latn-ZW"},
911 {"mxm", "mxm-Latn-ZZ"},
912 {"my", "my-Mymr-MM"},
913 {"myk", "myk-Latn-ZZ"},
914 {"mym", "mym-Ethi-ZZ"},
915 {"myv", "myv-Cyrl-RU"},
916 {"myw", "myw-Latn-ZZ"},
917 {"myx", "myx-Latn-UG"},
918 {"myz", "myz-Mand-IR"},
919 {"mzk", "mzk-Latn-ZZ"},
920 {"mzm", "mzm-Latn-ZZ"},
921 {"mzn", "mzn-Arab-IR"},
922 {"mzp", "mzp-Latn-ZZ"},
923 {"mzw", "mzw-Latn-ZZ"},
924 {"mzz", "mzz-Latn-ZZ"},
925 {"na", "na-Latn-NR"},
926 {"nac", "nac-Latn-ZZ"},
927 {"naf", "naf-Latn-ZZ"},
928 {"nak", "nak-Latn-ZZ"},
929 {"nan", "nan-Hans-CN"},
930 {"nap", "nap-Latn-IT"},
931 {"naq", "naq-Latn-NA"},
932 {"nas", "nas-Latn-ZZ"},
933 {"nb", "nb-Latn-NO"},
934 {"nca", "nca-Latn-ZZ"},
935 {"nce", "nce-Latn-ZZ"},
936 {"ncf", "ncf-Latn-ZZ"},
937 {"nch", "nch-Latn-MX"},
938 {"nco", "nco-Latn-ZZ"},
939 {"ncu", "ncu-Latn-ZZ"},
940 {"nd", "nd-Latn-ZW"},
941 {"ndc", "ndc-Latn-MZ"},
942 {"nds", "nds-Latn-DE"},
943 {"ne", "ne-Deva-NP"},
944 {"neb", "neb-Latn-ZZ"},
945 {"new", "new-Deva-NP"},
946 {"nex", "nex-Latn-ZZ"},
947 {"nfr", "nfr-Latn-ZZ"},
948 {"ng", "ng-Latn-NA"},
949 {"nga", "nga-Latn-ZZ"},
950 {"ngb", "ngb-Latn-ZZ"},
951 {"ngl", "ngl-Latn-MZ"},
952 {"nhb", "nhb-Latn-ZZ"},
953 {"nhe", "nhe-Latn-MX"},
954 {"nhw", "nhw-Latn-MX"},
955 {"nif", "nif-Latn-ZZ"},
956 {"nii", "nii-Latn-ZZ"},
957 {"nij", "nij-Latn-ID"},
958 {"nin", "nin-Latn-ZZ"},
959 {"niu", "niu-Latn-NU"},
960 {"niy", "niy-Latn-ZZ"},
961 {"niz", "niz-Latn-ZZ"},
962 {"njo", "njo-Latn-IN"},
963 {"nkg", "nkg-Latn-ZZ"},
964 {"nko", "nko-Latn-ZZ"},
965 {"nl", "nl-Latn-NL"},
966 {"nmg", "nmg-Latn-CM"},
967 {"nmz", "nmz-Latn-ZZ"},
968 {"nn", "nn-Latn-NO"},
969 {"nnf", "nnf-Latn-ZZ"},
970 {"nnh", "nnh-Latn-CM"},
971 {"nnk", "nnk-Latn-ZZ"},
972 {"nnm", "nnm-Latn-ZZ"},
973 {"nnp", "nnp-Wcho-IN"},
974 {"no", "no-Latn-NO"},
975 {"no-bok", "nb-Latn-NO"}, // grandfathered
976 {"nod", "nod-Lana-TH"},
977 {"noe", "noe-Deva-IN"},
978 {"non", "non-Runr-SE"},
979 {"no-nyn", "nn-Latn-NO"}, // grandfathered
980 {"nop", "nop-Latn-ZZ"},
981 {"nou", "nou-Latn-ZZ"},
982 {"nqo", "nqo-Nkoo-GN"},
983 {"nr", "nr-Latn-ZA"},
984 {"nrb", "nrb-Latn-ZZ"},
985 {"nsk", "nsk-Cans-CA"},
986 {"nsn", "nsn-Latn-ZZ"},
987 {"nso", "nso-Latn-ZA"},
988 {"nss", "nss-Latn-ZZ"},
989 {"nst", "nst-Tnsa-IN"},
990 {"ntm", "ntm-Latn-ZZ"},
991 {"ntr", "ntr-Latn-ZZ"},
992 {"nui", "nui-Latn-ZZ"},
993 {"nup", "nup-Latn-ZZ"},
994 {"nus", "nus-Latn-SS"},
995 {"nuv", "nuv-Latn-ZZ"},
996 {"nux", "nux-Latn-ZZ"},
997 {"nv", "nv-Latn-US"},
998 {"nwb", "nwb-Latn-ZZ"},
999 {"nxq", "nxq-Latn-CN"},
1000 {"nxr", "nxr-Latn-ZZ"},
1001 {"ny", "ny-Latn-MW"},
1002 {"nym", "nym-Latn-TZ"},
1003 {"nyn", "nyn-Latn-UG"},
1004 {"nzi", "nzi-Latn-GH"},
1005 {"oc", "oc-Latn-FR"},
1006 {"ogc", "ogc-Latn-ZZ"},
1007 {"okr", "okr-Latn-ZZ"},
1008 {"okv", "okv-Latn-ZZ"},
1009 {"om", "om-Latn-ET"},
1010 {"ong", "ong-Latn-ZZ"},
1011 {"onn", "onn-Latn-ZZ"},
1012 {"ons", "ons-Latn-ZZ"},
1013 {"opm", "opm-Latn-ZZ"},
1014 {"or", "or-Orya-IN"},
1015 {"oro", "oro-Latn-ZZ"},
1016 {"oru", "oru-Arab-ZZ"},
1017 {"os", "os-Cyrl-GE"},
1018 {"osa", "osa-Osge-US"},
1019 {"ota", "ota-Arab-ZZ"},
1020 {"otk", "otk-Orkh-MN"},
1021 {"oui", "oui-Ougr-143"},
1022 {"ozm", "ozm-Latn-ZZ"},
1023 {"pa", "pa-Guru-IN"},
1024 {"pa-arab", "pa-Arab-PK"},
1025 {"pag", "pag-Latn-PH"},
1026 {"pal", "pal-Phli-IR"},
1027 {"pal-phlp", "pal-Phlp-CN"},
1028 {"pam", "pam-Latn-PH"},
1029 {"pap", "pap-Latn-AW"},
1030 {"pa-pk", "pa-Arab-PK"},
1031 {"pau", "pau-Latn-PW"},
1032 {"pbi", "pbi-Latn-ZZ"},
1033 {"pcd", "pcd-Latn-FR"},
1034 {"pcm", "pcm-Latn-NG"},
1035 {"pdc", "pdc-Latn-US"},
1036 {"pdt", "pdt-Latn-CA"},
1037 {"ped", "ped-Latn-ZZ"},
1038 {"peo", "peo-Xpeo-IR"},
1039 {"pex", "pex-Latn-ZZ"},
1040 {"pfl", "pfl-Latn-DE"},
1041 {"phl", "phl-Arab-ZZ"},
1042 {"phn", "phn-Phnx-LB"},
1043 {"pil", "pil-Latn-ZZ"},
1044 {"pip", "pip-Latn-ZZ"},
1045 {"pka", "pka-Brah-IN"},
1046 {"pko", "pko-Latn-KE"},
1047 {"pl", "pl-Latn-PL"},
1048 {"pla", "pla-Latn-ZZ"},
1049 {"pms", "pms-Latn-IT"},
1050 {"png", "png-Latn-ZZ"},
1051 {"pnn", "pnn-Latn-ZZ"},
1052 {"pnt", "pnt-Grek-GR"},
1053 {"pon", "pon-Latn-FM"},
1054 {"ppa", "ppa-Deva-IN"},
1055 {"ppo", "ppo-Latn-ZZ"},
1056 {"pra", "pra-Khar-PK"},
1057 {"prd", "prd-Arab-IR"},
1058 {"prg", "prg-Latn-001"},
1059 {"ps", "ps-Arab-AF"},
1060 {"pss", "pss-Latn-ZZ"},
1061 {"pt", "pt-Latn-BR"},
1062 {"ptp", "ptp-Latn-ZZ"},
1063 {"puu", "puu-Latn-GA"},
1064 {"pwa", "pwa-Latn-ZZ"},
1065 {"qu", "qu-Latn-PE"},
1066 {"quc", "quc-Latn-GT"},
1067 {"qug", "qug-Latn-EC"},
1068 {"rai", "rai-Latn-ZZ"},
1069 {"raj", "raj-Deva-IN"},
1070 {"rao", "rao-Latn-ZZ"},
1071 {"rcf", "rcf-Latn-RE"},
1072 {"rej", "rej-Latn-ID"},
1073 {"rel", "rel-Latn-ZZ"},
1074 {"res", "res-Latn-ZZ"},
1075 {"rgn", "rgn-Latn-IT"},
1076 {"rhg", "rhg-Rohg-MM"},
1077 {"ria", "ria-Latn-IN"},
1078 {"rif", "rif-Tfng-MA"},
1079 {"rif-nl", "rif-Latn-NL"},
1080 {"rjs", "rjs-Deva-NP"},
1081 {"rkt", "rkt-Beng-BD"},
1082 {"rm", "rm-Latn-CH"},
1083 {"rmf", "rmf-Latn-FI"},
1084 {"rmo", "rmo-Latn-CH"},
1085 {"rmt", "rmt-Arab-IR"},
1086 {"rmu", "rmu-Latn-SE"},
1087 {"rn", "rn-Latn-BI"},
1088 {"rna", "rna-Latn-ZZ"},
1089 {"rng", "rng-Latn-MZ"},
1090 {"ro", "ro-Latn-RO"},
1091 {"rob", "rob-Latn-ID"},
1092 {"rof", "rof-Latn-TZ"},
1093 {"roo", "roo-Latn-ZZ"},
1094 {"rro", "rro-Latn-ZZ"},
1095 {"rtm", "rtm-Latn-FJ"},
1096 {"ru", "ru-Cyrl-RU"},
1097 {"rue", "rue-Cyrl-UA"},
1098 {"rug", "rug-Latn-SB"},
1099 {"rw", "rw-Latn-RW"},
1100 {"rwk", "rwk-Latn-TZ"},
1101 {"rwo", "rwo-Latn-ZZ"},
1102 {"ryu", "ryu-Kana-JP"},
1103 {"sa", "sa-Deva-IN"},
1104 {"saf", "saf-Latn-GH"},
1105 {"sah", "sah-Cyrl-RU"},
1106 {"saq", "saq-Latn-KE"},
1107 {"sas", "sas-Latn-ID"},
1108 {"sat", "sat-Olck-IN"},
1109 {"sav", "sav-Latn-SN"},
1110 {"saz", "saz-Saur-IN"},
1111 {"sba", "sba-Latn-ZZ"},
1112 {"sbe", "sbe-Latn-ZZ"},
1113 {"sbp", "sbp-Latn-TZ"},
1114 {"sc", "sc-Latn-IT"},
1115 {"sck", "sck-Deva-IN"},
1116 {"scl", "scl-Arab-ZZ"},
1117 {"scn", "scn-Latn-IT"},
1118 {"sco", "sco-Latn-GB"},
1119 {"scs", "scs-Latn-CA"},
1120 {"sd", "sd-Arab-PK"},
1121 {"sdc", "sdc-Latn-IT"},
1122 {"sd-deva", "sd-Deva-IN"},
1123 {"sd-dind", "sd-Sind-IN"},
1124 {"sdh", "sdh-Arab-IR"},
1125 {"sd-khoj", "sd-Khoj-IN"},
1126 {"se", "se-Latn-NO"},
1127 {"sef", "sef-Latn-CI"},
1128 {"seh", "seh-Latn-MZ"},
1129 {"sei", "sei-Latn-MX"},
1130 {"ses", "ses-Latn-ML"},
1131 {"sg", "sg-Latn-CF"},
1132 {"sga", "sga-Ogam-IE"},
1133 {"sgn-be-fr", "fr-Sigw-BE"}, // grandfathered
1134 {"sgn-be-nl", "nl-Sigw-BE"}, // grandfathered
1135 {"sgn-ch-de", "de-Sigw-CH"}, // grandfathered
1136 {"sgs", "sgs-Latn-LT"},
1137 {"sgw", "sgw-Ethi-ZZ"},
1138 {"sgz", "sgz-Latn-ZZ"},
1139 {"shi", "shi-Tfng-MA"},
1140 {"shk", "shk-Latn-ZZ"},
1141 {"shn", "shn-Mymr-MM"},
1142 {"shu", "shu-Arab-ZZ"},
1143 {"si", "si-Sinh-LK"},
1144 {"sid", "sid-Latn-ET"},
1145 {"sig", "sig-Latn-ZZ"},
1146 {"sil", "sil-Latn-ZZ"},
1147 {"sim", "sim-Latn-ZZ"},
1148 {"sjr", "sjr-Latn-ZZ"},
1149 {"sk", "sk-Latn-SK"},
1150 {"skc", "skc-Latn-ZZ"},
1151 {"skr", "skr-Arab-PK"},
1152 {"sks", "sks-Latn-ZZ"},
1153 {"sl", "sl-Latn-SI"},
1154 {"sld", "sld-Latn-ZZ"},
1155 {"sli", "sli-Latn-PL"},
1156 {"sll", "sll-Latn-ZZ"},
1157 {"sly", "sly-Latn-ID"},
1158 {"sm", "sm-Latn-WS"},
1159 {"sma", "sma-Latn-SE"},
1160 {"smj", "smj-Latn-SE"},
1161 {"smn", "smn-Latn-FI"},
1162 {"smp", "smp-Samr-IL"},
1163 {"smq", "smq-Latn-ZZ"},
1164 {"sms", "sms-Latn-FI"},
1165 {"sn", "sn-Latn-ZW"},
1166 {"snc", "snc-Latn-ZZ"},
1167 {"snk", "snk-Latn-ML"},
1168 {"snp", "snp-Latn-ZZ"},
1169 {"snx", "snx-Latn-ZZ"},
1170 {"sny", "sny-Latn-ZZ"},
1171 {"so", "so-Latn-SO"},
1172 {"sog", "sog-Sogd-UZ"},
1173 {"sok", "sok-Latn-ZZ"},
1174 {"soq", "soq-Latn-ZZ"},
1175 {"sou", "sou-Thai-TH"},
1176 {"soy", "soy-Latn-ZZ"},
1177 {"spd", "spd-Latn-ZZ"},
1178 {"spl", "spl-Latn-ZZ"},
1179 {"sps", "sps-Latn-ZZ"},
1180 {"sq", "sq-Latn-AL"},
1181 {"sr", "sr-Cyrl-RS"},
1182 {"srb", "srb-Sora-IN"},
1183 {"sr-me", "sr-Latn-ME"},
1184 {"srn", "srn-Latn-SR"},
1185 {"srr", "srr-Latn-SN"},
1186 {"sr-ro", "sr-Latn-RO"},
1187 {"sr-ru", "sr-Latn-RU"},
1188 {"sr-tr", "sr-Latn-TR"},
1189 {"srx", "srx-Deva-IN"},
1190 {"ss", "ss-Latn-ZA"},
1191 {"ssd", "ssd-Latn-ZZ"},
1192 {"ssg", "ssg-Latn-ZZ"},
1193 {"ssy", "ssy-Latn-ER"},
1194 {"st", "st-Latn-ZA"},
1195 {"stk", "stk-Latn-ZZ"},
1196 {"stq", "stq-Latn-DE"},
1197 {"su", "su-Latn-ID"},
1198 {"sua", "sua-Latn-ZZ"},
1199 {"sue", "sue-Latn-ZZ"},
1200 {"suk", "suk-Latn-TZ"},
1201 {"sur", "sur-Latn-ZZ"},
1202 {"sus", "sus-Latn-GN"},
1203 {"sv", "sv-Latn-SE"},
1204 {"sw", "sw-Latn-TZ"},
1205 {"swb", "swb-Arab-YT"},
1206 {"swc", "swc-Latn-CD"},
1207 {"swg", "swg-Latn-DE"},
1208 {"swp", "swp-Latn-ZZ"},
1209 {"swv", "swv-Deva-IN"},
1210 {"sxn", "sxn-Latn-ID"},
1211 {"sxw", "sxw-Latn-ZZ"},
1212 {"syl", "syl-Beng-BD"},
1213 {"syr", "syr-Syrc-IQ"},
1214 {"szl", "szl-Latn-PL"},
1215 {"ta", "ta-Taml-IN"},
1216 {"taj", "taj-Deva-NP"},
1217 {"tal", "tal-Latn-ZZ"},
1218 {"tan", "tan-Latn-ZZ"},
1219 {"taq", "taq-Latn-ZZ"},
1220 {"tbc", "tbc-Latn-ZZ"},
1221 {"tbd", "tbd-Latn-ZZ"},
1222 {"tbf", "tbf-Latn-ZZ"},
1223 {"tbg", "tbg-Latn-ZZ"},
1224 {"tbo", "tbo-Latn-ZZ"},
1225 {"tbw", "tbw-Latn-PH"},
1226 {"tbz", "tbz-Latn-ZZ"},
1227 {"tci", "tci-Latn-ZZ"},
1228 {"tcy", "tcy-Knda-IN"},
1229 {"tdd", "tdd-Tale-CN"},
1230 {"tdg", "tdg-Deva-NP"},
1231 {"tdh", "tdh-Deva-NP"},
1232 {"tdu", "tdu-Latn-MY"},
1233 {"te", "te-Telu-IN"},
1234 {"ted", "ted-Latn-ZZ"},
1235 {"tem", "tem-Latn-SL"},
1236 {"teo", "teo-Latn-UG"},
1237 {"tet", "tet-Latn-TL"},
1238 {"tfi", "tfi-Latn-ZZ"},
1239 {"tg", "tg-Cyrl-TJ"},
1240 {"tg-arab", "tg-Arab-PK"},
1241 {"tgc", "tgc-Latn-ZZ"},
1242 {"tgo", "tgo-Latn-ZZ"},
1243 {"tg-pk", "tg-Arab-PK"},
1244 {"tgu", "tgu-Latn-ZZ"},
1245 {"th", "th-Thai-TH"},
1246 {"thl", "thl-Deva-NP"},
1247 {"thq", "thq-Deva-NP"},
1248 {"thr", "thr-Deva-NP"},
1249 {"ti", "ti-Ethi-ET"},
1250 {"tif", "tif-Latn-ZZ"},
1251 {"tig", "tig-Ethi-ER"},
1252 {"tik", "tik-Latn-ZZ"},
1253 {"tim", "tim-Latn-ZZ"},
1254 {"tio", "tio-Latn-ZZ"},
1255 {"tiv", "tiv-Latn-NG"},
1256 {"tk", "tk-Latn-TM"},
1257 {"tkl", "tkl-Latn-TK"},
1258 {"tkr", "tkr-Latn-AZ"},
1259 {"tkt", "tkt-Deva-NP"},
1260 {"tl", "tl-Latn-PH"},
1261 {"tlf", "tlf-Latn-ZZ"},
1262 {"tlx", "tlx-Latn-ZZ"},
1263 {"tly", "tly-Latn-AZ"},
1264 {"tmh", "tmh-Latn-NE"},
1265 {"tmy", "tmy-Latn-ZZ"},
1266 {"tn", "tn-Latn-ZA"},
1267 {"tnh", "tnh-Latn-ZZ"},
1268 {"to", "to-Latn-TO"},
1269 {"tof", "tof-Latn-ZZ"},
1270 {"tog", "tog-Latn-MW"},
1271 {"toq", "toq-Latn-ZZ"},
1272 {"tpi", "tpi-Latn-PG"},
1273 {"tpm", "tpm-Latn-ZZ"},
1274 {"tpz", "tpz-Latn-ZZ"},
1275 {"tqo", "tqo-Latn-ZZ"},
1276 {"tr", "tr-Latn-TR"},
1277 {"tru", "tru-Latn-TR"},
1278 {"trv", "trv-Latn-TW"},
1279 {"trw", "trw-Arab-PK"},
1280 {"ts", "ts-Latn-ZA"},
1281 {"tsd", "tsd-Grek-GR"},
1282 {"tsf", "tsf-Deva-NP"},
1283 {"tsg", "tsg-Latn-PH"},
1284 {"tsj", "tsj-Tibt-BT"},
1285 {"tsw", "tsw-Latn-ZZ"},
1286 {"tt", "tt-Cyrl-RU"},
1287 {"ttd", "ttd-Latn-ZZ"},
1288 {"tte", "tte-Latn-ZZ"},
1289 {"ttj", "ttj-Latn-UG"},
1290 {"ttr", "ttr-Latn-ZZ"},
1291 {"tts", "tts-Thai-TH"},
1292 {"ttt", "ttt-Latn-AZ"},
1293 {"tuh", "tuh-Latn-ZZ"},
1294 {"tul", "tul-Latn-ZZ"},
1295 {"tum", "tum-Latn-MW"},
1296 {"tuq", "tuq-Latn-ZZ"},
1297 {"tvd", "tvd-Latn-ZZ"},
1298 {"tvl", "tvl-Latn-TV"},
1299 {"tvu", "tvu-Latn-ZZ"},
1300 {"twh", "twh-Latn-ZZ"},
1301 {"twq", "twq-Latn-NE"},
1302 {"txg", "txg-Tang-CN"},
1303 {"txo", "txo-Toto-IN"},
1304 {"ty", "ty-Latn-PF"},
1305 {"tya", "tya-Latn-ZZ"},
1306 {"tyv", "tyv-Cyrl-RU"},
1307 {"tzm", "tzm-Latn-MA"},
1308 {"ubu", "ubu-Latn-ZZ"},
1309 {"udi", "udi-Aghb-RU"},
1310 {"udm", "udm-Cyrl-RU"},
1311 {"ug", "ug-Arab-CN"},
1312 {"uga", "uga-Ugar-SY"},
1313 {"ug-cyrl", "ug-Cyrl-KZ"},
1314 {"ug-kz", "ug-Cyrl-KZ"},
1315 {"ug-mn", "ug-Cyrl-MN"},
1316 {"uk", "uk-Cyrl-UA"},
1317 {"uli", "uli-Latn-FM"},
1318 {"umb", "umb-Latn-AO"},
1319 {"und", "en-Latn-US"},
1320 {"und-002", "en-Latn-NG"},
1321 {"und-003", "en-Latn-US"},
1322 {"und-005", "pt-Latn-BR"},
1323 {"und-009", "en-Latn-AU"},
1324 {"und-011", "en-Latn-NG"},
1325 {"und-013", "es-Latn-MX"},
1326 {"und-014", "sw-Latn-TZ"},
1327 {"und-015", "ar-Arab-EG"},
1328 {"und-017", "sw-Latn-CD"},
1329 {"und-018", "en-Latn-ZA"},
1330 {"und-019", "en-Latn-US"},
1331 {"und-021", "en-Latn-US"},
1332 {"und-029", "es-Latn-CU"},
1333 {"und-030", "zh-Hans-CN"},
1334 {"und-034", "hi-Deva-IN"},
1335 {"und-035", "id-Latn-ID"},
1336 {"und-039", "it-Latn-IT"},
1337 {"und-053", "en-Latn-AU"},
1338 {"und-054", "en-Latn-PG"},
1339 {"und-057", "en-Latn-GU"},
1340 {"und-061", "sm-Latn-WS"},
1341 {"und-142", "zh-Hans-CN"},
1342 {"und-143", "uz-Latn-UZ"},
1343 {"und-145", "ar-Arab-SA"},
1344 {"und-150", "ru-Cyrl-RU"},
1345 {"und-151", "ru-Cyrl-RU"},
1346 {"und-154", "en-Latn-GB"},
1347 {"und-155", "de-Latn-DE"},
1348 {"und-202", "en-Latn-NG"},
1349 {"und-419", "es-Latn-419"},
1350 {"und-ad", "ca-Latn-AD"},
1351 {"und-adlm", "ff-Adlm-GN"},
1352 {"und-ae", "ar-Arab-AE"},
1353 {"und-af", "fa-Arab-AF"},
1354 {"und-aghb", "udi-Aghb-RU"},
1355 {"und-ahom", "aho-Ahom-IN"},
1356 {"und-al", "sq-Latn-AL"},
1357 {"und-am", "hy-Armn-AM"},
1358 {"und-ao", "pt-Latn-AO"},
1359 {"und-aq", "und-Latn-AQ"},
1360 {"und-ar", "es-Latn-AR"},
1361 {"und-arab", "ar-Arab-EG"},
1362 {"und-arab-cc", "ms-Arab-CC"},
1363 {"und-arab-cn", "ug-Arab-CN"},
1364 {"und-arab-gb", "ks-Arab-GB"},
1365 {"und-arab-id", "ms-Arab-ID"},
1366 {"und-arab-in", "ur-Arab-IN"},
1367 {"und-arab-kh", "cja-Arab-KH"},
1368 {"und-arab-mm", "rhg-Arab-MM"},
1369 {"und-arab-mn", "kk-Arab-MN"},
1370 {"und-arab-mu", "ur-Arab-MU"},
1371 {"und-arab-ng", "ha-Arab-NG"},
1372 {"und-arab-pk", "ur-Arab-PK"},
1373 {"und-arab-tg", "apd-Arab-TG"},
1374 {"und-arab-th", "mfa-Arab-TH"},
1375 {"und-arab-tj", "fa-Arab-TJ"},
1376 {"und-arab-tr", "az-Arab-TR"},
1377 {"und-arab-yt", "swb-Arab-YT"},
1378 {"und-armi", "arc-Armi-IR"},
1379 {"und-armn", "hy-Armn-AM"},
1380 {"und-as", "sm-Latn-AS"},
1381 {"und-at", "de-Latn-AT"},
1382 {"und-avst", "ae-Avst-IR"},
1383 {"und-aw", "nl-Latn-AW"},
1384 {"und-ax", "sv-Latn-AX"},
1385 {"und-az", "az-Latn-AZ"},
1386 {"und-ba", "bs-Latn-BA"},
1387 {"und-bali", "ban-Bali-ID"},
1388 {"und-bamu", "bax-Bamu-CM"},
1389 {"und-bass", "bsq-Bass-LR"},
1390 {"und-batk", "bbc-Batk-ID"},
1391 {"und-bd", "bn-Beng-BD"},
1392 {"und-be", "nl-Latn-BE"},
1393 {"und-beng", "bn-Beng-BD"},
1394 {"und-bf", "fr-Latn-BF"},
1395 {"und-bg", "bg-Cyrl-BG"},
1396 {"und-bh", "ar-Arab-BH"},
1397 {"und-bhks", "sa-Bhks-IN"},
1398 {"und-bi", "rn-Latn-BI"},
1399 {"und-bj", "fr-Latn-BJ"},
1400 {"und-bl", "fr-Latn-BL"},
1401 {"und-bn", "ms-Latn-BN"},
1402 {"und-bo", "es-Latn-BO"},
1403 {"und-bopo", "zh-Bopo-TW"},
1404 {"und-bq", "pap-Latn-BQ"},
1405 {"und-br", "pt-Latn-BR"},
1406 {"und-brah", "pka-Brah-IN"},
1407 {"und-brai", "fr-Brai-FR"},
1408 {"und-bt", "dz-Tibt-BT"},
1409 {"und-bugi", "bug-Bugi-ID"},
1410 {"und-buhd", "bku-Buhd-PH"},
1411 {"und-bv", "und-Latn-BV"},
1412 {"und-by", "be-Cyrl-BY"},
1413 {"und-cakm", "ccp-Cakm-BD"},
1414 {"und-cans", "cr-Cans-CA"},
1415 {"und-cari", "xcr-Cari-TR"},
1416 {"und-cd", "sw-Latn-CD"},
1417 {"und-cf", "fr-Latn-CF"},
1418 {"und-cg", "fr-Latn-CG"},
1419 {"und-ch", "de-Latn-CH"},
1420 {"und-cham", "cjm-Cham-VN"},
1421 {"und-cher", "chr-Cher-US"},
1422 {"und-chrs", "xco-Chrs-UZ"},
1423 {"und-ci", "fr-Latn-CI"},
1424 {"und-cl", "es-Latn-CL"},
1425 {"und-cm", "fr-Latn-CM"},
1426 {"und-cn", "zh-Hans-CN"},
1427 {"und-co", "es-Latn-CO"},
1428 {"und-copt", "cop-Copt-EG"},
1429 {"und-cp", "und-Latn-CP"},
1430 {"und-cpmn", "und-Cpmn-CY"},
1431 {"und-cprt", "grc-Cprt-CY"},
1432 {"und-cr", "es-Latn-CR"},
1433 {"und-cu", "es-Latn-CU"},
1434 {"und-cv", "pt-Latn-CV"},
1435 {"und-cw", "pap-Latn-CW"},
1436 {"und-cy", "el-Grek-CY"},
1437 {"und-cyrl", "ru-Cyrl-RU"},
1438 {"und-cyrl-al", "mk-Cyrl-AL"},
1439 {"und-cyrl-ba", "sr-Cyrl-BA"},
1440 {"und-cyrl-ge", "os-Cyrl-GE"},
1441 {"und-cyrl-gr", "mk-Cyrl-GR"},
1442 {"und-cyrl-md", "uk-Cyrl-MD"},
1443 {"und-cyrl-ro", "bg-Cyrl-RO"},
1444 {"und-cyrl-sk", "uk-Cyrl-SK"},
1445 {"und-cyrl-tr", "kbd-Cyrl-TR"},
1446 {"und-cyrl-xk", "sr-Cyrl-XK"},
1447 {"und-cz", "cs-Latn-CZ"},
1448 {"und-de", "de-Latn-DE"},
1449 {"und-deva", "hi-Deva-IN"},
1450 {"und-deva-bt", "ne-Deva-BT"},
1451 {"und-deva-fj", "hif-Deva-FJ"},
1452 {"und-deva-mu", "bho-Deva-MU"},
1453 {"und-deva-pk", "btv-Deva-PK"},
1454 {"und-diak", "dv-Diak-MV"},
1455 {"und-dj", "aa-Latn-DJ"},
1456 {"und-dk", "da-Latn-DK"},
1457 {"und-do", "es-Latn-DO"},
1458 {"und-dogr", "doi-Dogr-IN"},
1459 {"und-dupl", "fr-Dupl-FR"},
1460 {"und-dz", "ar-Arab-DZ"},
1461 {"und-ea", "es-Latn-EA"},
1462 {"und-ec", "es-Latn-EC"},
1463 {"und-ee", "et-Latn-EE"},
1464 {"und-eg", "ar-Arab-EG"},
1465 {"und-egyp", "egy-Egyp-EG"},
1466 {"und-eh", "ar-Arab-EH"},
1467 {"und-elba", "sq-Elba-AL"},
1468 {"und-elym", "arc-Elym-IR"},
1469 {"und-er", "ti-Ethi-ER"},
1470 {"und-es", "es-Latn-ES"},
1471 {"und-et", "am-Ethi-ET"},
1472 {"und-ethi", "am-Ethi-ET"},
1473 {"und-eu", "en-Latn-IE"},
1474 {"und-ez", "de-Latn-EZ"},
1475 {"und-fi", "fi-Latn-FI"},
1476 {"und-fo", "fo-Latn-FO"},
1477 {"und-fr", "fr-Latn-FR"},
1478 {"und-ga", "fr-Latn-GA"},
1479 {"und-ge", "ka-Geor-GE"},
1480 {"und-geor", "ka-Geor-GE"},
1481 {"und-gf", "fr-Latn-GF"},
1482 {"und-gh", "ak-Latn-GH"},
1483 {"und-gl", "kl-Latn-GL"},
1484 {"und-glag", "cu-Glag-BG"},
1485 {"und-gn", "fr-Latn-GN"},
1486 {"und-gong", "wsg-Gong-IN"},
1487 {"und-gonm", "esg-Gonm-IN"},
1488 {"und-goth", "got-Goth-UA"},
1489 {"und-gp", "fr-Latn-GP"},
1490 {"und-gq", "es-Latn-GQ"},
1491 {"und-gr", "el-Grek-GR"},
1492 {"und-gran", "sa-Gran-IN"},
1493 {"und-grek", "el-Grek-GR"},
1494 {"und-grek-tr", "bgx-Grek-TR"},
1495 {"und-gs", "und-Latn-GS"},
1496 {"und-gt", "es-Latn-GT"},
1497 {"und-gujr", "gu-Gujr-IN"},
1498 {"und-guru", "pa-Guru-IN"},
1499 {"und-gw", "pt-Latn-GW"},
1500 {"und-hanb", "zh-Hanb-TW"},
1501 {"und-hang", "ko-Hang-KR"},
1502 {"und-hani", "zh-Hani-CN"},
1503 {"und-hano", "hnn-Hano-PH"},
1504 {"und-hans", "zh-Hans-CN"},
1505 {"und-hant", "zh-Hant-TW"},
1506 {"und-hebr", "he-Hebr-IL"},
1507 {"und-hebr-ca", "yi-Hebr-CA"},
1508 {"und-hebr-gb", "yi-Hebr-GB"},
1509 {"und-hebr-se", "yi-Hebr-SE"},
1510 {"und-hebr-ua", "yi-Hebr-UA"},
1511 {"und-hebr-us", "yi-Hebr-US"},
1512 {"und-hira", "ja-Hira-JP"},
1513 {"und-hk", "zh-Hant-HK"},
1514 {"und-hluw", "hlu-Hluw-TR"},
1515 {"und-hm", "und-Latn-HM"},
1516 {"und-hmng", "hnj-Hmng-LA"},
1517 {"und-hmnp", "hnj-Hmnp-US"},
1518 {"und-hn", "es-Latn-HN"},
1519 {"und-hr", "hr-Latn-HR"},
1520 {"und-ht", "ht-Latn-HT"},
1521 {"und-hu", "hu-Latn-HU"},
1522 {"und-hung", "hu-Hung-HU"},
1523 {"und-ic", "es-Latn-IC"},
1524 {"und-id", "id-Latn-ID"},
1525 {"und-il", "he-Hebr-IL"},
1526 {"und-in", "hi-Deva-IN"},
1527 {"und-iq", "ar-Arab-IQ"},
1528 {"und-ir", "fa-Arab-IR"},
1529 {"und-is", "is-Latn-IS"},
1530 {"und-it", "it-Latn-IT"},
1531 {"und-ital", "ett-Ital-IT"},
1532 {"und-jamo", "ko-Jamo-KR"},
1533 {"und-java", "jv-Java-ID"},
1534 {"und-jo", "ar-Arab-JO"},
1535 {"und-jp", "ja-Jpan-JP"},
1536 {"und-jpan", "ja-Jpan-JP"},
1537 {"und-kali", "eky-Kali-MM"},
1538 {"und-kana", "ja-Kana-JP"},
1539 {"und-ke", "sw-Latn-KE"},
1540 {"und-kg", "ky-Cyrl-KG"},
1541 {"und-kh", "km-Khmr-KH"},
1542 {"und-khar", "pra-Khar-PK"},
1543 {"und-khmr", "km-Khmr-KH"},
1544 {"und-khoj", "sd-Khoj-IN"},
1545 {"und-kits", "zkt-Kits-CN"},
1546 {"und-km", "ar-Arab-KM"},
1547 {"und-knda", "kn-Knda-IN"},
1548 {"und-kore", "ko-Kore-KR"},
1549 {"und-kp", "ko-Kore-KP"},
1550 {"und-kr", "ko-Kore-KR"},
1551 {"und-kthi", "bho-Kthi-IN"},
1552 {"und-kw", "ar-Arab-KW"},
1553 {"und-kz", "ru-Cyrl-KZ"},
1554 {"und-la", "lo-Laoo-LA"},
1555 {"und-lana", "nod-Lana-TH"},
1556 {"und-laoo", "lo-Laoo-LA"},
1557 {"und-latn-af", "tk-Latn-AF"},
1558 {"und-latn-am", "ku-Latn-AM"},
1559 {"und-latn-cn", "za-Latn-CN"},
1560 {"und-latn-cy", "tr-Latn-CY"},
1561 {"und-latn-dz", "fr-Latn-DZ"},
1562 {"und-latn-et", "en-Latn-ET"},
1563 {"und-latn-ge", "ku-Latn-GE"},
1564 {"und-latn-ir", "tk-Latn-IR"},
1565 {"und-latn-km", "fr-Latn-KM"},
1566 {"und-latn-ma", "fr-Latn-MA"},
1567 {"und-latn-mk", "sq-Latn-MK"},
1568 {"und-latn-mm", "kac-Latn-MM"},
1569 {"und-latn-mo", "pt-Latn-MO"},
1570 {"und-latn-mr", "fr-Latn-MR"},
1571 {"und-latn-ru", "krl-Latn-RU"},
1572 {"und-latn-sy", "fr-Latn-SY"},
1573 {"und-latn-tn", "fr-Latn-TN"},
1574 {"und-latn-tw", "trv-Latn-TW"},
1575 {"und-latn-ua", "pl-Latn-UA"},
1576 {"und-lb", "ar-Arab-LB"},
1577 {"und-lepc", "lep-Lepc-IN"},
1578 {"und-li", "de-Latn-LI"},
1579 {"und-limb", "lif-Limb-IN"},
1580 {"und-lina", "lab-Lina-GR"},
1581 {"und-linb", "grc-Linb-GR"},
1582 {"und-lisu", "lis-Lisu-CN"},
1583 {"und-lk", "si-Sinh-LK"},
1584 {"und-ls", "st-Latn-LS"},
1585 {"und-lt", "lt-Latn-LT"},
1586 {"und-lu", "fr-Latn-LU"},
1587 {"und-lv", "lv-Latn-LV"},
1588 {"und-ly", "ar-Arab-LY"},
1589 {"und-lyci", "xlc-Lyci-TR"},
1590 {"und-lydi", "xld-Lydi-TR"},
1591 {"und-ma", "ar-Arab-MA"},
1592 {"und-mahj", "hi-Mahj-IN"},
1593 {"und-maka", "mak-Maka-ID"},
1594 {"und-mand", "myz-Mand-IR"},
1595 {"und-mani", "xmn-Mani-CN"},
1596 {"und-marc", "bo-Marc-CN"},
1597 {"und-mc", "fr-Latn-MC"},
1598 {"und-md", "ro-Latn-MD"},
1599 {"und-me", "sr-Latn-ME"},
1600 {"und-medf", "dmf-Medf-NG"},
1601 {"und-mend", "men-Mend-SL"},
1602 {"und-merc", "xmr-Merc-SD"},
1603 {"und-mero", "xmr-Mero-SD"},
1604 {"und-mf", "fr-Latn-MF"},
1605 {"und-mg", "mg-Latn-MG"},
1606 {"und-mk", "mk-Cyrl-MK"},
1607 {"und-ml", "bm-Latn-ML"},
1608 {"und-mlym", "ml-Mlym-IN"},
1609 {"und-mm", "my-Mymr-MM"},
1610 {"und-mn", "mn-Cyrl-MN"},
1611 {"und-mo", "zh-Hant-MO"},
1612 {"und-modi", "mr-Modi-IN"},
1613 {"und-mong", "mn-Mong-CN"},
1614 {"und-mq", "fr-Latn-MQ"},
1615 {"und-mr", "ar-Arab-MR"},
1616 {"und-mroo", "mro-Mroo-BD"},
1617 {"und-mt", "mt-Latn-MT"},
1618 {"und-mtei", "mni-Mtei-IN"},
1619 {"und-mu", "mfe-Latn-MU"},
1620 {"und-mult", "skr-Mult-PK"},
1621 {"und-mv", "dv-Thaa-MV"},
1622 {"und-mx", "es-Latn-MX"},
1623 {"und-my", "ms-Latn-MY"},
1624 {"und-mymr", "my-Mymr-MM"},
1625 {"und-mymr-in", "kht-Mymr-IN"},
1626 {"und-mymr-th", "mnw-Mymr-TH"},
1627 {"und-mz", "pt-Latn-MZ"},
1628 {"und-na", "af-Latn-NA"},
1629 {"und-nand", "sa-Nand-IN"},
1630 {"und-narb", "xna-Narb-SA"},
1631 {"und-nbat", "arc-Nbat-JO"},
1632 {"und-nc", "fr-Latn-NC"},
1633 {"und-ne", "ha-Latn-NE"},
1634 {"und-newa", "new-Newa-NP"},
1635 {"und-ni", "es-Latn-NI"},
1636 {"und-nkoo", "man-Nkoo-GN"},
1637 {"und-nl", "nl-Latn-NL"},
1638 {"und-no", "nb-Latn-NO"},
1639 {"und-np", "ne-Deva-NP"},
1640 {"und-nshu", "zhx-Nshu-CN"},
1641 {"und-ogam", "sga-Ogam-IE"},
1642 {"und-olck", "sat-Olck-IN"},
1643 {"und-om", "ar-Arab-OM"},
1644 {"und-orkh", "otk-Orkh-MN"},
1645 {"und-orya", "or-Orya-IN"},
1646 {"und-osge", "osa-Osge-US"},
1647 {"und-osma", "so-Osma-SO"},
1648 {"und-ougr", "oui-Ougr-143"},
1649 {"und-pa", "es-Latn-PA"},
1650 {"und-palm", "arc-Palm-SY"},
1651 {"und-pauc", "ctd-Pauc-MM"},
1652 {"und-pe", "es-Latn-PE"},
1653 {"und-perm", "kv-Perm-RU"},
1654 {"und-pf", "fr-Latn-PF"},
1655 {"und-pg", "tpi-Latn-PG"},
1656 {"und-ph", "fil-Latn-PH"},
1657 {"und-phag", "lzh-Phag-CN"},
1658 {"und-phli", "pal-Phli-IR"},
1659 {"und-phlp", "pal-Phlp-CN"},
1660 {"und-phnx", "phn-Phnx-LB"},
1661 {"und-pk", "ur-Arab-PK"},
1662 {"und-pl", "pl-Latn-PL"},
1663 {"und-plrd", "hmd-Plrd-CN"},
1664 {"und-pm", "fr-Latn-PM"},
1665 {"und-pr", "es-Latn-PR"},
1666 {"und-prti", "xpr-Prti-IR"},
1667 {"und-ps", "ar-Arab-PS"},
1668 {"und-pt", "pt-Latn-PT"},
1669 {"und-pw", "pau-Latn-PW"},
1670 {"und-py", "gn-Latn-PY"},
1671 {"und-qa", "ar-Arab-QA"},
1672 {"und-qo", "en-Latn-DG"},
1673 {"und-re", "fr-Latn-RE"},
1674 {"und-rjng", "rej-Rjng-ID"},
1675 {"und-ro", "ro-Latn-RO"},
1676 {"und-rohg", "rhg-Rohg-MM"},
1677 {"und-rs", "sr-Cyrl-RS"},
1678 {"und-ru", "ru-Cyrl-RU"},
1679 {"und-runr", "non-Runr-SE"},
1680 {"und-rw", "rw-Latn-RW"},
1681 {"und-sa", "ar-Arab-SA"},
1682 {"und-samr", "smp-Samr-IL"},
1683 {"und-sarb", "xsa-Sarb-YE"},
1684 {"und-saur", "saz-Saur-IN"},
1685 {"und-sc", "fr-Latn-SC"},
1686 {"und-sd", "ar-Arab-SD"},
1687 {"und-se", "sv-Latn-SE"},
1688 {"und-sgnw", "ase-Sgnw-US"},
1689 {"und-shaw", "en-Shaw-GB"},
1690 {"und-shrd", "sa-Shrd-IN"},
1691 {"und-si", "sl-Latn-SI"},
1692 {"und-sidd", "sa-Sidd-IN"},
1693 {"und-sind", "sd-Sind-IN"},
1694 {"und-sinh", "si-Sinh-LK"},
1695 {"und-sj", "nb-Latn-SJ"},
1696 {"und-sk", "sk-Latn-SK"},
1697 {"und-sm", "it-Latn-SM"},
1698 {"und-sn", "fr-Latn-SN"},
1699 {"und-so", "so-Latn-SO"},
1700 {"und-sogd", "sog-Sogd-UZ"},
1701 {"und-sogo", "sog-Sogo-UZ"},
1702 {"und-sora", "srb-Sora-IN"},
1703 {"und-soyo", "cmg-Soyo-MN"},
1704 {"und-sr", "nl-Latn-SR"},
1705 {"und-st", "pt-Latn-ST"},
1706 {"und-sund", "su-Sund-ID"},
1707 {"und-sv", "es-Latn-SV"},
1708 {"und-sy", "ar-Arab-SY"},
1709 {"und-sylo", "syl-Sylo-BD"},
1710 {"und-syrc", "syr-Syrc-IQ"},
1711 {"und-tagb", "tbw-Tagb-PH"},
1712 {"und-takr", "doi-Takr-IN"},
1713 {"und-tale", "tdd-Tale-CN"},
1714 {"und-talu", "khb-Talu-CN"},
1715 {"und-taml", "ta-Taml-IN"},
1716 {"und-tang", "txg-Tang-CN"},
1717 {"und-tavt", "blt-Tavt-VN"},
1718 {"und-td", "fr-Latn-TD"},
1719 {"und-telu", "te-Telu-IN"},
1720 {"und-tf", "fr-Latn-TF"},
1721 {"und-tfng", "zgh-Tfng-MA"},
1722 {"und-tg", "fr-Latn-TG"},
1723 {"und-tglg", "fil-Tglg-PH"},
1724 {"und-th", "th-Thai-TH"},
1725 {"und-thaa", "dv-Thaa-MV"},
1726 {"und-thai", "th-Thai-TH"},
1727 {"und-thai-cn", "lcp-Thai-CN"},
1728 {"und-thai-kh", "kdt-Thai-KH"},
1729 {"und-thai-la", "kdt-Thai-LA"},
1730 {"und-tibt", "bo-Tibt-CN"},
1731 {"und-tirh", "mai-Tirh-IN"},
1732 {"und-tj", "tg-Cyrl-TJ"},
1733 {"und-tk", "tkl-Latn-TK"},
1734 {"und-tl", "pt-Latn-TL"},
1735 {"und-tm", "tk-Latn-TM"},
1736 {"und-tn", "ar-Arab-TN"},
1737 {"und-tnsa", "nst-Tnsa-IN"},
1738 {"und-to", "to-Latn-TO"},
1739 {"und-toto", "txo-Toto-IN"},
1740 {"und-tr", "tr-Latn-TR"},
1741 {"und-tv", "tvl-Latn-TV"},
1742 {"und-tw", "zh-Hant-TW"},
1743 {"und-tz", "sw-Latn-TZ"},
1744 {"und-ua", "uk-Cyrl-UA"},
1745 {"und-ug", "sw-Latn-UG"},
1746 {"und-ugar", "uga-Ugar-SY"},
1747 {"und-uy", "es-Latn-UY"},
1748 {"und-uz", "uz-Latn-UZ"},
1749 {"und-va", "it-Latn-VA"},
1750 {"und-vaii", "vai-Vaii-LR"},
1751 {"und-ve", "es-Latn-VE"},
1752 {"und-vith", "sq-Vith-AL"},
1753 {"und-vn", "vi-Latn-VN"},
1754 {"und-vu", "bi-Latn-VU"},
1755 {"und-wara", "hoc-Wara-IN"},
1756 {"und-wcho", "nnp-Wcho-IN"},
1757 {"und-wf", "fr-Latn-WF"},
1758 {"und-ws", "sm-Latn-WS"},
1759 {"und-xk", "sq-Latn-XK"},
1760 {"und-xpeo", "peo-Xpeo-IR"},
1761 {"und-xsux", "akk-Xsux-IQ"},
1762 {"und-ye", "ar-Arab-YE"},
1763 {"und-yezi", "ku-Yezi-GE"},
1764 {"und-yiii", "ii-Yiii-CN"},
1765 {"und-yt", "fr-Latn-YT"},
1766 {"und-zanb", "cmg-Zanb-MN"},
1767 {"und-zw", "sn-Latn-ZW"},
1768 {"unr", "unr-Beng-IN"},
1769 {"unr-deva", "unr-Deva-NP"},
1770 {"unr-np", "unr-Deva-NP"},
1771 {"unx", "unx-Beng-IN"},
1772 {"uok", "uok-Latn-ZZ"},
1773 {"ur", "ur-Arab-PK"},
1774 {"uri", "uri-Latn-ZZ"},
1775 {"urt", "urt-Latn-ZZ"},
1776 {"urw", "urw-Latn-ZZ"},
1777 {"usa", "usa-Latn-ZZ"},
1778 {"uth", "uth-Latn-ZZ"},
1779 {"utr", "utr-Latn-ZZ"},
1780 {"uvh", "uvh-Latn-ZZ"},
1781 {"uvl", "uvl-Latn-ZZ"},
1782 {"uz", "uz-Latn-UZ"},
1783 {"uz-af", "uz-Arab-AF"},
1784 {"uz-arab", "uz-Arab-AF"},
1785 {"uz-cn", "uz-Cyrl-CN"},
1786 {"vag", "vag-Latn-ZZ"},
1787 {"vai", "vai-Vaii-LR"},
1788 {"van", "van-Latn-ZZ"},
1789 {"ve", "ve-Latn-ZA"},
1790 {"vec", "vec-Latn-IT"},
1791 {"vep", "vep-Latn-RU"},
1792 {"vi", "vi-Latn-VN"},
1793 {"vic", "vic-Latn-SX"},
1794 {"viv", "viv-Latn-ZZ"},
1795 {"vls", "vls-Latn-BE"},
1796 {"vmf", "vmf-Latn-DE"},
1797 {"vmw", "vmw-Latn-MZ"},
1798 {"vo", "vo-Latn-001"},
1799 {"vot", "vot-Latn-RU"},
1800 {"vro", "vro-Latn-EE"},
1801 {"vun", "vun-Latn-TZ"},
1802 {"vut", "vut-Latn-ZZ"},
1803 {"wa", "wa-Latn-BE"},
1804 {"wae", "wae-Latn-CH"},
1805 {"waj", "waj-Latn-ZZ"},
1806 {"wal", "wal-Ethi-ET"},
1807 {"wan", "wan-Latn-ZZ"},
1808 {"war", "war-Latn-PH"},
1809 {"wbp", "wbp-Latn-AU"},
1810 {"wbq", "wbq-Telu-IN"},
1811 {"wbr", "wbr-Deva-IN"},
1812 {"wci", "wci-Latn-ZZ"},
1813 {"wer", "wer-Latn-ZZ"},
1814 {"wgi", "wgi-Latn-ZZ"},
1815 {"whg", "whg-Latn-ZZ"},
1816 {"wib", "wib-Latn-ZZ"},
1817 {"wiu", "wiu-Latn-ZZ"},
1818 {"wiv", "wiv-Latn-ZZ"},
1819 {"wja", "wja-Latn-ZZ"},
1820 {"wji", "wji-Latn-ZZ"},
1821 {"wls", "wls-Latn-WF"},
1822 {"wmo", "wmo-Latn-ZZ"},
1823 {"wnc", "wnc-Latn-ZZ"},
1824 {"wni", "wni-Arab-KM"},
1825 {"wnu", "wnu-Latn-ZZ"},
1826 {"wo", "wo-Latn-SN"},
1827 {"wob", "wob-Latn-ZZ"},
1828 {"wos", "wos-Latn-ZZ"},
1829 {"wrs", "wrs-Latn-ZZ"},
1830 {"wsg", "wsg-Gong-IN"},
1831 {"wsk", "wsk-Latn-ZZ"},
1832 {"wtm", "wtm-Deva-IN"},
1833 {"wuu", "wuu-Hans-CN"},
1834 {"wuv", "wuv-Latn-ZZ"},
1835 {"wwa", "wwa-Latn-ZZ"},
1836 {"xav", "xav-Latn-BR"},
1837 {"xbi", "xbi-Latn-ZZ"},
1838 {"xco", "xco-Chrs-UZ"},
1839 {"xcr", "xcr-Cari-TR"},
1840 {"xes", "xes-Latn-ZZ"},
1841 {"xh", "xh-Latn-ZA"},
1842 {"xla", "xla-Latn-ZZ"},
1843 {"xlc", "xlc-Lyci-TR"},
1844 {"xld", "xld-Lydi-TR"},
1845 {"xmf", "xmf-Geor-GE"},
1846 {"xmn", "xmn-Mani-CN"},
1847 {"xmr", "xmr-Merc-SD"},
1848 {"xna", "xna-Narb-SA"},
1849 {"xnr", "xnr-Deva-IN"},
1850 {"xog", "xog-Latn-UG"},
1851 {"xon", "xon-Latn-ZZ"},
1852 {"xpr", "xpr-Prti-IR"},
1853 {"xrb", "xrb-Latn-ZZ"},
1854 {"xsa", "xsa-Sarb-YE"},
1855 {"xsi", "xsi-Latn-ZZ"},
1856 {"xsm", "xsm-Latn-ZZ"},
1857 {"xsr", "xsr-Deva-NP"},
1858 {"xwe", "xwe-Latn-ZZ"},
1859 {"yam", "yam-Latn-ZZ"},
1860 {"yao", "yao-Latn-MZ"},
1861 {"yap", "yap-Latn-FM"},
1862 {"yas", "yas-Latn-ZZ"},
1863 {"yat", "yat-Latn-ZZ"},
1864 {"yav", "yav-Latn-CM"},
1865 {"yay", "yay-Latn-ZZ"},
1866 {"yaz", "yaz-Latn-ZZ"},
1867 {"yba", "yba-Latn-ZZ"},
1868 {"ybb", "ybb-Latn-CM"},
1869 {"yby", "yby-Latn-ZZ"},
1870 {"yer", "yer-Latn-ZZ"},
1871 {"ygr", "ygr-Latn-ZZ"},
1872 {"ygw", "ygw-Latn-ZZ"},
1873 {"yi", "yi-Hebr-001"},
1874 {"yko", "yko-Latn-ZZ"},
1875 {"yle", "yle-Latn-ZZ"},
1876 {"ylg", "ylg-Latn-ZZ"},
1877 {"yll", "yll-Latn-ZZ"},
1878 {"yml", "yml-Latn-ZZ"},
1879 {"yo", "yo-Latn-NG"},
1880 {"yon", "yon-Latn-ZZ"},
1881 {"yrb", "yrb-Latn-ZZ"},
1882 {"yre", "yre-Latn-ZZ"},
1883 {"yrl", "yrl-Latn-BR"},
1884 {"yss", "yss-Latn-ZZ"},
1885 {"yua", "yua-Latn-MX"},
1886 {"yue", "yue-Hant-HK"},
1887 {"yue-cn", "yue-Hans-CN"},
1888 {"yue-hans", "yue-Hans-CN"},
1889 {"yuj", "yuj-Latn-ZZ"},
1890 {"yut", "yut-Latn-ZZ"},
1891 {"yuw", "yuw-Latn-ZZ"},
1892 {"za", "za-Latn-CN"},
1893 {"zag", "zag-Latn-SD"},
1894 {"zdj", "zdj-Arab-KM"},
1895 {"zea", "zea-Latn-NL"},
1896 {"zgh", "zgh-Tfng-MA"},
1897 {"zh", "zh-Hans-CN"},
1898 {"zh-au", "zh-Hant-AU"},
1899 {"zh-bn", "zh-Hant-BN"},
1900 {"zh-bopo", "zh-Bopo-TW"},
1901 {"zh-gb", "zh-Hant-GB"},
1902 {"zh-gf", "zh-Hant-GF"},
1903 {"zh-guoyu", "cmn"}, // grandfathered
1904 {"zh-hakka", "hak-Hans-CN"}, // grandfathered
1905 {"zh-hanb", "zh-Hanb-TW"},
1906 {"zh-hant", "zh-Hant-TW"},
1907 {"zh-hk", "zh-Hant-HK"},
1908 {"zh-id", "zh-Hant-ID"},
1909 {"zh-min-nan", "nan-Hans-CN"}, // grandfathered
1910 {"zh-mo", "zh-Hant-MO"},
1911 {"zh-pa", "zh-Hant-PA"},
1912 {"zh-pf", "zh-Hant-PF"},
1913 {"zh-ph", "zh-Hant-PH"},
1914 {"zh-sr", "zh-Hant-SR"},
1915 {"zh-th", "zh-Hant-TH"},
1916 {"zh-tw", "zh-Hant-TW"},
1917 {"zh-us", "zh-Hant-US"},
1918 {"zh-vn", "zh-Hant-VN"},
1919 {"zhx", "zhx-Nshu-CN"},
1920 {"zh-xiang", "hsn-Hans-CN"}, // grandfathered
1921 {"zia", "zia-Latn-ZZ"},
1922 {"zkt", "zkt-Kits-CN"},
1923 {"zlm", "zlm-Latn-TG"},
1924 {"zmi", "zmi-Latn-MY"},
1925 {"zne", "zne-Latn-ZZ"},
1926 {"zu", "zu-Latn-ZA"},
1927 {"zza", "zza-Latn-TR"}};
1928 // clang-format on
1929
1930 constexpr auto data_size = sizeof(data) / sizeof(data[0]);
1931
1933 for (auto i = 0_uz; i != data_size; ++i) {
1934 r[i] = data[i];
1935 }
1936
1937 return r;
1938}
1939
1940constexpr auto language_tag_expansions = language_tag_expansions_init();
1941
1942inline std::optional<std::string_view> expand_language_tag(std::string_view from) noexcept
1943{
1944 auto const from_lower = to_lower(from);
1945 auto const it = std::lower_bound(language_tag_expansions.begin(), language_tag_expansions.end(), std::string_view{from_lower}, [](auto const& item, auto const& value) {
1946 return item.first < value;
1947 });
1948
1949 if (it != language_tag_expansions.end() and it->first == from) {
1950 return it->second;
1951 } else {
1952 return std::nullopt;
1953 }
1954}
1955
1956} // namespace detail
1957
1958inline language_tag::language_tag(std::string_view str) : language(), script(), region()
1959{
1960 // First do an initial pass over the expansion table to convert likely languages.
1961 // For example "nl" -> "nl-Latn-NL", "nl-BE" -> "nl-BE".
1962 if (auto expanded_str = detail::expand_language_tag(str)) {
1963 str = *expanded_str;
1964 }
1965
1966 *this = parse(str).expand();
1967}
1968
1969[[nodiscard]] inline language_tag language_tag::parse(std::string_view str)
1970{
1971 auto language = iso_639{};
1972 auto script = iso_15924{};
1973 auto region = iso_3166{};
1974
1975 char extension_first_char = 0;
1976
1977 // Replace underscores to dashes, since invalid language-tags do exist in the real world.
1978 auto str_ = std::string{str};
1979 for (auto& c : str_) {
1980 if (c == '_') {
1981 c = '-';
1982 }
1983 }
1984 str = std::string_view{str_};
1985
1986 for (auto const element_view : std::views::split(str, std::string_view{"-"})) {
1987 auto const element = std::string_view{element_view.begin(), element_view.end()};
1988 if (extension_first_char) {
1989 // Once inside the extensions portion of a language tag you can no
1990 // longer determine validity based on just the element size.
1991 ;
1992
1993 } else if (not language) {
1994 if (element == "*") {
1995 // wild card.
1996 language = {};
1997
1998 } else {
1999 hi_check(
2000 (element.size() == 2 or element.size() == 3) and is_alpha(element),
2001 "First element of a language tag must be a ISO-639 2 or 3 letter language code, got '{}'",
2002 str);
2003 // 2 or 3 letter non-optional ISO-639 language code.
2004 language = {element};
2005 }
2006
2007 } else {
2008 if (not script and not region and element.size() == 3 and is_alpha(element)) {
2009 // Up to 3 optional 3 letter extended language codes.
2010 // Ignore these for backward compatibility.
2011 ;
2012
2013 } else if (not script and not region and element.size() == 4 and is_alpha(element)) {
2014 // The language code may be followed by a 4 letter script code.
2015 script = {element};
2016
2017 } else if (not region and (element.size() == 2 and is_alpha(element))) {
2018 // The language code or script code may also be followed by a 2 letter country code.
2019 region = {element};
2020
2021 } else if (not region and ((element.size() == 2 or element.size() == 3) and is_digit(element))) {
2022 // The language code or script code may also be followed by a 2 or 3 digit country code.
2023 region = {element};
2024
2025 } else if ((element.size() >= 5 and element.size() <= 8) or (element.size() == 4 and is_digit(element.front()))) {
2026 // A variant has 5 to 8 letters or a 4 digit + letters code.
2027 ;
2028
2029 } else if (element.size() == 1) {
2030 // Start of an extension. We do not differentiate with private-use indicator.
2031 extension_first_char = element.front();
2032
2033 } else {
2034 throw parse_error(
2035 std::format("Unexpected element '{}' while parsing language tag '{}'", std::string_view{element}, str));
2036 }
2037 }
2038 }
2039
2040 return language_tag{language, script, region};
2041}
2042
2043[[nodiscard]] inline language_tag language_tag::expand() const noexcept
2044{
2045 auto r = *this;
2046
2047 if (script and region) {
2048 return r;
2049 }
2050
2051 if (auto from_language = detail::expand_language_tag(r.language.code())) {
2052 auto from_language_tag = parse(*from_language);
2053
2054 if (not r.script and from_language_tag.script) {
2055 r.script = from_language_tag.script;
2056 }
2057 if (not r.region and from_language_tag.region) {
2058 r.region = from_language_tag.region;
2059 }
2060 }
2061
2062 if (script and region) {
2063 return r;
2064 }
2065
2066 if (auto from_region = detail::expand_language_tag(std::string{"und-"} + std::string{r.region.code2()})) {
2067 auto from_region_tag = parse(*from_region);
2068
2069 if (not r.script and from_region_tag.script) {
2070 r.script = from_region_tag.script;
2071 }
2072 }
2073
2074 return r;
2075}
2076
2078{
2080
2081 for (auto const& language : languages) {
2082 auto& lang_tmp = tmp.emplace_back();
2083 for (auto const& variant : language.all_variants()) {
2084 lang_tmp.push_back(variant);
2085 }
2086 }
2087
2088 for (auto it = tmp.rbegin(); it != tmp.rend(); ++it) {
2089 // Remove duplicates in previous language-variant lists.
2090 for (auto jt = it + 1; jt != tmp.rend(); ++jt) {
2091 for (auto const& tag : *it) {
2092 std::erase(*jt, tag);
2093 }
2094 }
2095 }
2096
2097 auto r = std::vector<language_tag>{};
2098
2099 auto const count = std::accumulate(tmp.begin(), tmp.end(), 0_uz, [](auto const& value, auto const& item) {
2100 return value + item.size();
2101 });
2102 r.reserve(count);
2103
2104 for (auto const& variants : tmp) {
2105 for (auto const& tag : variants) {
2106 r.push_back(tag);
2107 }
2108 }
2109
2110 return r;
2111}
2112
2113}} // namespace hi::v1
The HikoGUI namespace.
Definition array_generic.hpp:20
std::vector< language_tag > variants(std::vector< language_tag > languages)
Add variants to the list of languages.
Definition language_tag_impl.hpp:2077
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
ISO-15924 script code.
Definition iso_15924_intf.hpp:23
The IETF BCP 47 language tag.
Definition language_tag_intf.hpp:30
language_tag expand() const noexcept
Expand the language tag to include script and language.
Definition language_tag_impl.hpp:2043
static language_tag parse(std::string_view str)
Parse the language, script and region raw from the string.
Definition language_tag_impl.hpp:1969
Exception thrown during parsing on an error.
Definition exception_intf.hpp:48
T accumulate(T... args)
T emplace_back(T... args)
T lower_bound(T... args)