@formatjs/intl-getcanonicallocales 1.2.1 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,59 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.2.6](https://github.com/formatjs/formatjs/compare/@formatjs/intl-getcanonicallocales@1.2.5...@formatjs/intl-getcanonicallocales@1.2.6) (2020-06-06)
7
+
8
+ **Note:** Version bump only for package @formatjs/intl-getcanonicallocales
9
+
10
+
11
+
12
+
13
+
14
+ ## [1.2.5](https://github.com/formatjs/formatjs/compare/@formatjs/intl-getcanonicallocales@1.2.4...@formatjs/intl-getcanonicallocales@1.2.5) (2020-06-06)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **@formatjs/intl-getcanonicallocales:** handle non-existent Intl object ([b488ee8](https://github.com/formatjs/formatjs/commit/b488ee88b8ccab854b738ba4ad9c3947058121a1))
20
+
21
+
22
+
23
+
24
+
25
+ ## [1.2.4](https://github.com/formatjs/formatjs/compare/@formatjs/intl-getcanonicallocales@1.2.3...@formatjs/intl-getcanonicallocales@1.2.4) (2020-05-28)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * **@formatjs/intl-utils:** Add missing cldr-core to package.json dep ([d0b72fe](https://github.com/formatjs/formatjs/commit/d0b72fe398c7017d03e8ee66c98ad88fe3e47657))
31
+
32
+
33
+
34
+
35
+
36
+ ## [1.2.3](https://github.com/formatjs/formatjs/compare/@formatjs/intl-getcanonicallocales@1.2.2...@formatjs/intl-getcanonicallocales@1.2.3) (2020-05-27)
37
+
38
+ **Note:** Version bump only for package @formatjs/intl-getcanonicallocales
39
+
40
+
41
+
42
+
43
+
44
+ ## [1.2.2](https://github.com/formatjs/formatjs/compare/@formatjs/intl-getcanonicallocales@1.2.1...@formatjs/intl-getcanonicallocales@1.2.2) (2020-05-25)
45
+
46
+
47
+ ### Bug Fixes
48
+
49
+ * **@formatjs/intl-getcanonicallocales:** fix alias lookup algo ([b39e3c2](https://github.com/formatjs/formatjs/commit/b39e3c2b1baefc011825f8e443769c2095beeb12))
50
+ * **@formatjs/intl-getcanonicallocales:** fix region casing ([396dbe7](https://github.com/formatjs/formatjs/commit/396dbe769bef6eb82ae274ba4935e70e076b2854))
51
+ * **@formatjs/intl-getcanonicallocales:** Handle aliases properly ([9e19e4b](https://github.com/formatjs/formatjs/commit/9e19e4b769560f3717f9589ab6180e932aaf96f8))
52
+ * **@formatjs/intl-getcanonicallocales:** set the polyfill if native impl is buggy ([555a28b](https://github.com/formatjs/formatjs/commit/555a28b2d6d3c48f69d765c5090f7880ef603adc))
53
+ * **@formatjs/intl-locale:** fix add/remove likely subtags ([d72f952](https://github.com/formatjs/formatjs/commit/d72f952a66905a3a7edd75518ccaa72c2020273e))
54
+
55
+
56
+
57
+
58
+
6
59
  ## [1.2.1](https://github.com/formatjs/formatjs/compare/@formatjs/intl-getcanonicallocales@1.2.0...@formatjs/intl-getcanonicallocales@1.2.1) (2020-05-23)
7
60
 
8
61
  **Note:** Version bump only for package @formatjs/intl-getcanonicallocales
@@ -8,7 +8,7 @@ We get the following transformation:
8
8
  en-u-ms-imperial ⇒ en-u-ms-uksystem
9
9
  * @param lang
10
10
  */
11
- export declare function canonicalizeUnicodeLanguageId(lang: UnicodeLanguageId): void;
11
+ export declare function canonicalizeUnicodeLanguageId(unicodeLanguageId: UnicodeLanguageId): UnicodeLanguageId;
12
12
  /**
13
13
  * Canonicalize based on
14
14
  * https://www.unicode.org/reports/tr35/tr35.html#Canonical_Unicode_Locale_Identifiers
@@ -1 +1 @@
1
- {"version":3,"file":"canonicalizer.d.ts","sourceRoot":"","sources":["../src/canonicalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAiB,iBAAiB,EAAC,MAAM,SAAS,CAAC;AAiD1E;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA4D3E;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,eAAe,GACtB,eAAe,CA0BjB"}
1
+ {"version":3,"file":"canonicalizer.d.ts","sourceRoot":"","sources":["../src/canonicalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAiB,iBAAiB,EAAC,MAAM,SAAS,CAAC;AA4D1E;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,iBAAiB,GACnC,iBAAiB,CAmKnB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,eAAe,GACtB,eAAe,CA0BjB"}
@@ -1,8 +1,16 @@
1
1
  "use strict";
2
+ var __spreadArrays = (this && this.__spreadArrays) || function () {
3
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
4
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
5
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
6
+ r[k] = a[j];
7
+ return r;
8
+ };
2
9
  Object.defineProperty(exports, "__esModule", { value: true });
3
10
  var aliases_1 = require("./aliases");
4
11
  var parser_1 = require("./parser");
5
12
  var likelySubtags = require("cldr-core/supplemental/likelySubtags.json");
13
+ var emitter_1 = require("./emitter");
6
14
  function canonicalizeAttrs(strs) {
7
15
  return Object.keys(strs.reduce(function (all, str) {
8
16
  all[str.toLowerCase()] = 1;
@@ -33,6 +41,16 @@ function compareKV(t1, t2) {
33
41
  function compareExtension(e1, e2) {
34
42
  return e1.type < e2.type ? -1 : e1.type > e2.type ? 1 : 0;
35
43
  }
44
+ function mergeVariants(v1, v2) {
45
+ var result = __spreadArrays(v1);
46
+ for (var _i = 0, v2_1 = v2; _i < v2_1.length; _i++) {
47
+ var v = v2_1[_i];
48
+ if (v1.indexOf(v) < 0) {
49
+ result.push(v);
50
+ }
51
+ }
52
+ return result;
53
+ }
36
54
  /**
37
55
  * CAVEAT: We don't do this section in the spec bc they have no JSON data
38
56
  * Use the bcp47 data to replace keys, types, tfields, and tvalues by their canonical forms. See Section 3.6.4 U Extension Data Files) and Section 3.7.1 T Extension Data Files. The aliases are in the alias attribute value, while the canonical is in the name attribute value. For example,
@@ -42,29 +60,99 @@ We get the following transformation:
42
60
  en-u-ms-imperial ⇒ en-u-ms-uksystem
43
61
  * @param lang
44
62
  */
45
- function canonicalizeUnicodeLanguageId(lang) {
63
+ function canonicalizeUnicodeLanguageId(unicodeLanguageId) {
46
64
  /**
47
- * If the language subtag matches the type attribute of a languageAlias element in Supplemental Data,
48
- * replace the language subtag with the replacement value.
49
- * - If there are additional subtags in the replacement value, add them to the result, but only if there is no corresponding subtag already in the tag.
50
- * - Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.
65
+ * If the language subtag matches the type attribute of a languageAlias element in Supplemental Data, replace the language subtag with the replacement value.
66
+ * 1. If there are additional subtags in the replacement value, add them to the result, but only if there is no corresponding subtag already in the tag.
67
+ * 2. Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.
51
68
  */
52
- var sourceLang = lang.lang.toLowerCase();
53
- var langAlias = aliases_1.languageAlias[sourceLang];
54
- if (langAlias) {
55
- var langAliasAst = parser_1.parseUnicodeLanguageId(langAlias.split('-'));
56
- lang.lang = langAliasAst.lang;
57
- lang.script = lang.script || langAliasAst.script;
58
- lang.region = lang.region || langAliasAst.region;
69
+ // From https://github.com/unicode-org/icu/blob/master/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java#L1246
70
+ // Try language _ variant
71
+ var finalLangAst = unicodeLanguageId;
72
+ if (unicodeLanguageId.variants.length) {
73
+ var replacedLang_1 = '';
74
+ for (var _i = 0, _a = unicodeLanguageId.variants; _i < _a.length; _i++) {
75
+ var variant = _a[_i];
76
+ if ((replacedLang_1 =
77
+ aliases_1.languageAlias[emitter_1.emitUnicodeLanguageId({
78
+ lang: unicodeLanguageId.lang,
79
+ variants: [variant],
80
+ })])) {
81
+ var replacedLangAst = parser_1.parseUnicodeLanguageId(replacedLang_1.split(parser_1.SEPARATOR));
82
+ finalLangAst = {
83
+ lang: replacedLangAst.lang,
84
+ script: finalLangAst.script || replacedLangAst.script,
85
+ region: finalLangAst.region || replacedLangAst.region,
86
+ variants: mergeVariants(finalLangAst.variants, replacedLangAst.variants),
87
+ };
88
+ break;
89
+ }
90
+ }
91
+ }
92
+ // language _ script _ country
93
+ // ug-Arab-CN -> ug-CN
94
+ if (finalLangAst.script && finalLangAst.region) {
95
+ var replacedLang_2 = aliases_1.languageAlias[emitter_1.emitUnicodeLanguageId({
96
+ lang: finalLangAst.lang,
97
+ script: finalLangAst.script,
98
+ region: finalLangAst.region,
99
+ variants: [],
100
+ })];
101
+ if (replacedLang_2) {
102
+ var replacedLangAst = parser_1.parseUnicodeLanguageId(replacedLang_2.split(parser_1.SEPARATOR));
103
+ finalLangAst = {
104
+ lang: replacedLangAst.lang,
105
+ script: replacedLangAst.script,
106
+ region: replacedLangAst.region,
107
+ variants: finalLangAst.variants,
108
+ };
109
+ }
110
+ }
111
+ // language _ country
112
+ // eg. az_AZ -> az_Latn_A
113
+ if (finalLangAst.region) {
114
+ var replacedLang_3 = aliases_1.languageAlias[emitter_1.emitUnicodeLanguageId({
115
+ lang: finalLangAst.lang,
116
+ region: finalLangAst.region,
117
+ variants: [],
118
+ })];
119
+ if (replacedLang_3) {
120
+ var replacedLangAst = parser_1.parseUnicodeLanguageId(replacedLang_3.split(parser_1.SEPARATOR));
121
+ finalLangAst = {
122
+ lang: replacedLangAst.lang,
123
+ script: finalLangAst.script || replacedLangAst.script,
124
+ region: replacedLangAst.region,
125
+ variants: finalLangAst.variants,
126
+ };
127
+ }
128
+ }
129
+ // only language
130
+ // e.g. twi -> ak
131
+ var replacedLang = aliases_1.languageAlias[emitter_1.emitUnicodeLanguageId({
132
+ lang: finalLangAst.lang,
133
+ variants: [],
134
+ })];
135
+ if (replacedLang) {
136
+ var replacedLangAst = parser_1.parseUnicodeLanguageId(replacedLang.split(parser_1.SEPARATOR));
137
+ finalLangAst = {
138
+ lang: replacedLangAst.lang,
139
+ script: finalLangAst.script || replacedLangAst.script,
140
+ region: finalLangAst.region || replacedLangAst.region,
141
+ variants: finalLangAst.variants,
142
+ };
59
143
  }
60
- if (lang.region) {
61
- var region = lang.region.toUpperCase();
144
+ if (finalLangAst.region) {
145
+ var region = finalLangAst.region.toUpperCase();
62
146
  var regionAlias = aliases_1.territoryAlias[region];
63
147
  var replacedRegion = void 0;
64
148
  if (regionAlias) {
65
149
  var regions = regionAlias.split(' ');
66
150
  replacedRegion = regions[0];
67
- var likelySubtag = likelySubtags.supplemental.likelySubtags[lang.lang];
151
+ var likelySubtag = likelySubtags.supplemental.likelySubtags[emitter_1.emitUnicodeLanguageId({
152
+ lang: finalLangAst.lang,
153
+ script: finalLangAst.script,
154
+ variants: [],
155
+ })];
68
156
  if (likelySubtag) {
69
157
  var likelyRegion = parser_1.parseUnicodeLanguageId(likelySubtag.split(parser_1.SEPARATOR)).region;
70
158
  if (likelyRegion && regions.indexOf(likelyRegion) > -1) {
@@ -73,32 +161,35 @@ function canonicalizeUnicodeLanguageId(lang) {
73
161
  }
74
162
  }
75
163
  if (replacedRegion) {
76
- lang.region = replacedRegion;
164
+ finalLangAst.region = replacedRegion;
77
165
  }
166
+ finalLangAst.region = finalLangAst.region.toUpperCase();
78
167
  }
79
- if (lang.script) {
80
- lang.script =
81
- lang.script[0].toUpperCase() + lang.script.slice(1).toLowerCase();
82
- if (aliases_1.scriptAlias[lang.script]) {
83
- lang.script = aliases_1.scriptAlias[lang.script];
168
+ if (finalLangAst.script) {
169
+ finalLangAst.script =
170
+ finalLangAst.script[0].toUpperCase() +
171
+ finalLangAst.script.slice(1).toLowerCase();
172
+ if (aliases_1.scriptAlias[finalLangAst.script]) {
173
+ finalLangAst.script = aliases_1.scriptAlias[finalLangAst.script];
84
174
  }
85
175
  }
86
- if (lang.variants.length) {
87
- for (var i = 0; i < lang.variants.length; i++) {
88
- var variant = lang.variants[i].toLowerCase();
176
+ if (finalLangAst.variants.length) {
177
+ for (var i = 0; i < finalLangAst.variants.length; i++) {
178
+ var variant = finalLangAst.variants[i].toLowerCase();
89
179
  if (aliases_1.variantAlias[variant]) {
90
180
  var alias = aliases_1.variantAlias[variant];
91
181
  if (parser_1.isUnicodeVariantSubtag(alias)) {
92
- lang.variants[i] = alias;
182
+ finalLangAst.variants[i] = alias;
93
183
  }
94
184
  else if (parser_1.isUnicodeLanguageSubtag(alias)) {
95
185
  // Yes this can happen per the spec
96
- lang.lang = alias;
186
+ finalLangAst.lang = alias;
97
187
  }
98
188
  }
99
189
  }
100
- lang.variants.sort();
190
+ finalLangAst.variants.sort();
101
191
  }
192
+ return finalLangAst;
102
193
  }
103
194
  exports.canonicalizeUnicodeLanguageId = canonicalizeUnicodeLanguageId;
104
195
  /**
@@ -109,7 +200,7 @@ exports.canonicalizeUnicodeLanguageId = canonicalizeUnicodeLanguageId;
109
200
  * @param locale
110
201
  */
111
202
  function canonicalizeUnicodeLocaleId(locale) {
112
- canonicalizeUnicodeLanguageId(locale.lang);
203
+ locale.lang = canonicalizeUnicodeLanguageId(locale.lang);
113
204
  if (locale.extensions) {
114
205
  for (var _i = 0, _a = locale.extensions; _i < _a.length; _i++) {
115
206
  var extension = _a[_i];
@@ -122,7 +213,7 @@ function canonicalizeUnicodeLocaleId(locale) {
122
213
  break;
123
214
  case 't':
124
215
  if (extension.lang) {
125
- canonicalizeUnicodeLanguageId(extension.lang);
216
+ extension.lang = canonicalizeUnicodeLanguageId(extension.lang);
126
217
  }
127
218
  extension.fields = canonicalizeKVs(extension.fields);
128
219
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"canonicalizer.js","sourceRoot":"","sources":["../src/canonicalizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canonicalizer.js","sourceRoot":"","sources":["../src/canonicalizer.ts"],"names":[],"mappings":"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"}
package/dist/polyfill.js CHANGED
@@ -1,7 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var _1 = require("./");
4
- if (!('getCanonicalLocales' in Intl)) {
3
+ var _1 = require(".");
4
+ if (typeof Intl === 'undefined') {
5
+ if (typeof window !== 'undefined') {
6
+ Object.defineProperty(window, 'Intl', {
7
+ value: {},
8
+ });
9
+ }
10
+ else if (typeof global !== 'undefined') {
11
+ Object.defineProperty(global, 'Intl', {
12
+ value: {},
13
+ });
14
+ }
15
+ }
16
+ if (!('getCanonicalLocales' in Intl) ||
17
+ // Native Intl.getCanonicalLocales is just buggy
18
+ Intl.getCanonicalLocales('und-x-private')[0] === 'x-private') {
5
19
  Object.defineProperty(Intl, 'getCanonicalLocales', {
6
20
  value: _1.getCanonicalLocales,
7
21
  writable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../src/polyfill.ts"],"names":[],"mappings":";;AAAA,uBAAuC;AACvC,IAAI,CAAC,CAAC,qBAAqB,IAAI,IAAI,CAAC,EAAE;IACpC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,EAAE;QACjD,KAAK,EAAE,sBAAmB;QAC1B,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ"}
1
+ {"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../src/polyfill.ts"],"names":[],"mappings":";;AAAA,sBAAsC;AACtC,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;IAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;YACpC,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACxC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;YACpC,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;KACJ;CACF;AACD,IACE,CAAC,CAAC,qBAAqB,IAAI,IAAI,CAAC;IAChC,gDAAgD;IAC9C,IAAY,CAAC,mBAAkD,CAC/D,eAAe,CAChB,CAAC,CAAC,CAAC,KAAK,WAAW,EACpB;IACA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,EAAE;QACjD,KAAK,EAAE,sBAAmB;QAC1B,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;CACJ"}
@@ -2145,6 +2145,13 @@
2145
2145
  }
2146
2146
  };
2147
2147
 
2148
+ var __spreadArrays$1 = (undefined && undefined.__spreadArrays) || function () {
2149
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
2150
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
2151
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
2152
+ r[k] = a[j];
2153
+ return r;
2154
+ };
2148
2155
  function canonicalizeAttrs(strs) {
2149
2156
  return Object.keys(strs.reduce(function (all, str) {
2150
2157
  all[str.toLowerCase()] = 1;
@@ -2175,6 +2182,16 @@
2175
2182
  function compareExtension(e1, e2) {
2176
2183
  return e1.type < e2.type ? -1 : e1.type > e2.type ? 1 : 0;
2177
2184
  }
2185
+ function mergeVariants(v1, v2) {
2186
+ var result = __spreadArrays$1(v1);
2187
+ for (var _i = 0, v2_1 = v2; _i < v2_1.length; _i++) {
2188
+ var v = v2_1[_i];
2189
+ if (v1.indexOf(v) < 0) {
2190
+ result.push(v);
2191
+ }
2192
+ }
2193
+ return result;
2194
+ }
2178
2195
  /**
2179
2196
  * CAVEAT: We don't do this section in the spec bc they have no JSON data
2180
2197
  * Use the bcp47 data to replace keys, types, tfields, and tvalues by their canonical forms. See Section 3.6.4 U Extension Data Files) and Section 3.7.1 T Extension Data Files. The aliases are in the alias attribute value, while the canonical is in the name attribute value. For example,
@@ -2184,29 +2201,99 @@
2184
2201
  en-u-ms-imperial ⇒ en-u-ms-uksystem
2185
2202
  * @param lang
2186
2203
  */
2187
- function canonicalizeUnicodeLanguageId(lang) {
2204
+ function canonicalizeUnicodeLanguageId(unicodeLanguageId) {
2188
2205
  /**
2189
- * If the language subtag matches the type attribute of a languageAlias element in Supplemental Data,
2190
- * replace the language subtag with the replacement value.
2191
- * - If there are additional subtags in the replacement value, add them to the result, but only if there is no corresponding subtag already in the tag.
2192
- * - Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.
2206
+ * If the language subtag matches the type attribute of a languageAlias element in Supplemental Data, replace the language subtag with the replacement value.
2207
+ * 1. If there are additional subtags in the replacement value, add them to the result, but only if there is no corresponding subtag already in the tag.
2208
+ * 2. Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.
2193
2209
  */
2194
- var sourceLang = lang.lang.toLowerCase();
2195
- var langAlias = languageAlias[sourceLang];
2196
- if (langAlias) {
2197
- var langAliasAst = parseUnicodeLanguageId(langAlias.split('-'));
2198
- lang.lang = langAliasAst.lang;
2199
- lang.script = lang.script || langAliasAst.script;
2200
- lang.region = lang.region || langAliasAst.region;
2210
+ // From https://github.com/unicode-org/icu/blob/master/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java#L1246
2211
+ // Try language _ variant
2212
+ var finalLangAst = unicodeLanguageId;
2213
+ if (unicodeLanguageId.variants.length) {
2214
+ var replacedLang_1 = '';
2215
+ for (var _i = 0, _a = unicodeLanguageId.variants; _i < _a.length; _i++) {
2216
+ var variant = _a[_i];
2217
+ if ((replacedLang_1 =
2218
+ languageAlias[emitUnicodeLanguageId({
2219
+ lang: unicodeLanguageId.lang,
2220
+ variants: [variant],
2221
+ })])) {
2222
+ var replacedLangAst = parseUnicodeLanguageId(replacedLang_1.split(SEPARATOR));
2223
+ finalLangAst = {
2224
+ lang: replacedLangAst.lang,
2225
+ script: finalLangAst.script || replacedLangAst.script,
2226
+ region: finalLangAst.region || replacedLangAst.region,
2227
+ variants: mergeVariants(finalLangAst.variants, replacedLangAst.variants),
2228
+ };
2229
+ break;
2230
+ }
2231
+ }
2232
+ }
2233
+ // language _ script _ country
2234
+ // ug-Arab-CN -> ug-CN
2235
+ if (finalLangAst.script && finalLangAst.region) {
2236
+ var replacedLang_2 = languageAlias[emitUnicodeLanguageId({
2237
+ lang: finalLangAst.lang,
2238
+ script: finalLangAst.script,
2239
+ region: finalLangAst.region,
2240
+ variants: [],
2241
+ })];
2242
+ if (replacedLang_2) {
2243
+ var replacedLangAst = parseUnicodeLanguageId(replacedLang_2.split(SEPARATOR));
2244
+ finalLangAst = {
2245
+ lang: replacedLangAst.lang,
2246
+ script: replacedLangAst.script,
2247
+ region: replacedLangAst.region,
2248
+ variants: finalLangAst.variants,
2249
+ };
2250
+ }
2251
+ }
2252
+ // language _ country
2253
+ // eg. az_AZ -> az_Latn_A
2254
+ if (finalLangAst.region) {
2255
+ var replacedLang_3 = languageAlias[emitUnicodeLanguageId({
2256
+ lang: finalLangAst.lang,
2257
+ region: finalLangAst.region,
2258
+ variants: [],
2259
+ })];
2260
+ if (replacedLang_3) {
2261
+ var replacedLangAst = parseUnicodeLanguageId(replacedLang_3.split(SEPARATOR));
2262
+ finalLangAst = {
2263
+ lang: replacedLangAst.lang,
2264
+ script: finalLangAst.script || replacedLangAst.script,
2265
+ region: replacedLangAst.region,
2266
+ variants: finalLangAst.variants,
2267
+ };
2268
+ }
2269
+ }
2270
+ // only language
2271
+ // e.g. twi -> ak
2272
+ var replacedLang = languageAlias[emitUnicodeLanguageId({
2273
+ lang: finalLangAst.lang,
2274
+ variants: [],
2275
+ })];
2276
+ if (replacedLang) {
2277
+ var replacedLangAst = parseUnicodeLanguageId(replacedLang.split(SEPARATOR));
2278
+ finalLangAst = {
2279
+ lang: replacedLangAst.lang,
2280
+ script: finalLangAst.script || replacedLangAst.script,
2281
+ region: finalLangAst.region || replacedLangAst.region,
2282
+ variants: finalLangAst.variants,
2283
+ };
2201
2284
  }
2202
- if (lang.region) {
2203
- var region = lang.region.toUpperCase();
2285
+ if (finalLangAst.region) {
2286
+ var region = finalLangAst.region.toUpperCase();
2204
2287
  var regionAlias = territoryAlias[region];
2205
2288
  var replacedRegion = void 0;
2206
2289
  if (regionAlias) {
2207
2290
  var regions = regionAlias.split(' ');
2208
2291
  replacedRegion = regions[0];
2209
- var likelySubtag = supplemental.likelySubtags[lang.lang];
2292
+ var likelySubtag = supplemental.likelySubtags[emitUnicodeLanguageId({
2293
+ lang: finalLangAst.lang,
2294
+ script: finalLangAst.script,
2295
+ variants: [],
2296
+ })];
2210
2297
  if (likelySubtag) {
2211
2298
  var likelyRegion = parseUnicodeLanguageId(likelySubtag.split(SEPARATOR)).region;
2212
2299
  if (likelyRegion && regions.indexOf(likelyRegion) > -1) {
@@ -2215,32 +2302,35 @@
2215
2302
  }
2216
2303
  }
2217
2304
  if (replacedRegion) {
2218
- lang.region = replacedRegion;
2305
+ finalLangAst.region = replacedRegion;
2219
2306
  }
2307
+ finalLangAst.region = finalLangAst.region.toUpperCase();
2220
2308
  }
2221
- if (lang.script) {
2222
- lang.script =
2223
- lang.script[0].toUpperCase() + lang.script.slice(1).toLowerCase();
2224
- if (scriptAlias[lang.script]) {
2225
- lang.script = scriptAlias[lang.script];
2309
+ if (finalLangAst.script) {
2310
+ finalLangAst.script =
2311
+ finalLangAst.script[0].toUpperCase() +
2312
+ finalLangAst.script.slice(1).toLowerCase();
2313
+ if (scriptAlias[finalLangAst.script]) {
2314
+ finalLangAst.script = scriptAlias[finalLangAst.script];
2226
2315
  }
2227
2316
  }
2228
- if (lang.variants.length) {
2229
- for (var i = 0; i < lang.variants.length; i++) {
2230
- var variant = lang.variants[i].toLowerCase();
2317
+ if (finalLangAst.variants.length) {
2318
+ for (var i = 0; i < finalLangAst.variants.length; i++) {
2319
+ var variant = finalLangAst.variants[i].toLowerCase();
2231
2320
  if (variantAlias[variant]) {
2232
2321
  var alias = variantAlias[variant];
2233
2322
  if (isUnicodeVariantSubtag(alias)) {
2234
- lang.variants[i] = alias;
2323
+ finalLangAst.variants[i] = alias;
2235
2324
  }
2236
2325
  else if (isUnicodeLanguageSubtag(alias)) {
2237
2326
  // Yes this can happen per the spec
2238
- lang.lang = alias;
2327
+ finalLangAst.lang = alias;
2239
2328
  }
2240
2329
  }
2241
2330
  }
2242
- lang.variants.sort();
2331
+ finalLangAst.variants.sort();
2243
2332
  }
2333
+ return finalLangAst;
2244
2334
  }
2245
2335
  /**
2246
2336
  * Canonicalize based on
@@ -2250,7 +2340,7 @@
2250
2340
  * @param locale
2251
2341
  */
2252
2342
  function canonicalizeUnicodeLocaleId(locale) {
2253
- canonicalizeUnicodeLanguageId(locale.lang);
2343
+ locale.lang = canonicalizeUnicodeLanguageId(locale.lang);
2254
2344
  if (locale.extensions) {
2255
2345
  for (var _i = 0, _a = locale.extensions; _i < _a.length; _i++) {
2256
2346
  var extension = _a[_i];
@@ -2263,7 +2353,7 @@
2263
2353
  break;
2264
2354
  case 't':
2265
2355
  if (extension.lang) {
2266
- canonicalizeUnicodeLanguageId(extension.lang);
2356
+ extension.lang = canonicalizeUnicodeLanguageId(extension.lang);
2267
2357
  }
2268
2358
  extension.fields = canonicalizeKVs(extension.fields);
2269
2359
  break;