@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 +53 -0
- package/dist/canonicalizer.d.ts +1 -1
- package/dist/canonicalizer.d.ts.map +1 -1
- package/dist/canonicalizer.js +120 -29
- package/dist/canonicalizer.js.map +1 -1
- package/dist/polyfill.js +16 -2
- package/dist/polyfill.js.map +1 -1
- package/dist/umd/intl-locale.js +119 -29
- package/dist/umd/intl-locale.js.map +1 -1
- package/dist/umd/intl-locale.min.js +1 -1
- package/dist/umd/intl-locale.min.js.map +1 -1
- package/dist/umd/polyfill.js +134 -30
- package/dist/umd/polyfill.js.map +1 -1
- package/dist-es6/canonicalizer.d.ts +1 -1
- package/dist-es6/canonicalizer.d.ts.map +1 -1
- package/dist-es6/canonicalizer.js +111 -29
- package/dist-es6/canonicalizer.js.map +1 -1
- package/dist-es6/polyfill.js +16 -2
- package/dist-es6/polyfill.js.map +1 -1
- package/lib/canonicalizer.d.ts +1 -1
- package/lib/canonicalizer.d.ts.map +1 -1
- package/lib/canonicalizer.js +120 -29
- package/lib/canonicalizer.js.map +1 -1
- package/lib/polyfill.js +16 -2
- package/lib/polyfill.js.map +1 -1
- package/package.json +6 -10
- package/src/canonicalizer.ts +145 -29
- package/src/polyfill.ts +19 -2
package/dist/umd/polyfill.js
CHANGED
|
@@ -2135,6 +2135,13 @@
|
|
|
2135
2135
|
}
|
|
2136
2136
|
};
|
|
2137
2137
|
|
|
2138
|
+
var __spreadArrays$1 = (undefined && undefined.__spreadArrays) || function () {
|
|
2139
|
+
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
2140
|
+
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
2141
|
+
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
2142
|
+
r[k] = a[j];
|
|
2143
|
+
return r;
|
|
2144
|
+
};
|
|
2138
2145
|
function canonicalizeAttrs(strs) {
|
|
2139
2146
|
return Object.keys(strs.reduce(function (all, str) {
|
|
2140
2147
|
all[str.toLowerCase()] = 1;
|
|
@@ -2165,6 +2172,16 @@
|
|
|
2165
2172
|
function compareExtension(e1, e2) {
|
|
2166
2173
|
return e1.type < e2.type ? -1 : e1.type > e2.type ? 1 : 0;
|
|
2167
2174
|
}
|
|
2175
|
+
function mergeVariants(v1, v2) {
|
|
2176
|
+
var result = __spreadArrays$1(v1);
|
|
2177
|
+
for (var _i = 0, v2_1 = v2; _i < v2_1.length; _i++) {
|
|
2178
|
+
var v = v2_1[_i];
|
|
2179
|
+
if (v1.indexOf(v) < 0) {
|
|
2180
|
+
result.push(v);
|
|
2181
|
+
}
|
|
2182
|
+
}
|
|
2183
|
+
return result;
|
|
2184
|
+
}
|
|
2168
2185
|
/**
|
|
2169
2186
|
* CAVEAT: We don't do this section in the spec bc they have no JSON data
|
|
2170
2187
|
* 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,
|
|
@@ -2174,29 +2191,99 @@
|
|
|
2174
2191
|
en-u-ms-imperial ⇒ en-u-ms-uksystem
|
|
2175
2192
|
* @param lang
|
|
2176
2193
|
*/
|
|
2177
|
-
function canonicalizeUnicodeLanguageId(
|
|
2194
|
+
function canonicalizeUnicodeLanguageId(unicodeLanguageId) {
|
|
2178
2195
|
/**
|
|
2179
|
-
* If the language subtag matches the type attribute of a languageAlias element in Supplemental Data,
|
|
2180
|
-
*
|
|
2181
|
-
*
|
|
2182
|
-
* - Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.
|
|
2196
|
+
* If the language subtag matches the type attribute of a languageAlias element in Supplemental Data, replace the language subtag with the replacement value.
|
|
2197
|
+
* 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.
|
|
2198
|
+
* 2. Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.
|
|
2183
2199
|
*/
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2200
|
+
// From https://github.com/unicode-org/icu/blob/master/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java#L1246
|
|
2201
|
+
// Try language _ variant
|
|
2202
|
+
var finalLangAst = unicodeLanguageId;
|
|
2203
|
+
if (unicodeLanguageId.variants.length) {
|
|
2204
|
+
var replacedLang_1 = '';
|
|
2205
|
+
for (var _i = 0, _a = unicodeLanguageId.variants; _i < _a.length; _i++) {
|
|
2206
|
+
var variant = _a[_i];
|
|
2207
|
+
if ((replacedLang_1 =
|
|
2208
|
+
languageAlias[emitUnicodeLanguageId({
|
|
2209
|
+
lang: unicodeLanguageId.lang,
|
|
2210
|
+
variants: [variant],
|
|
2211
|
+
})])) {
|
|
2212
|
+
var replacedLangAst = parseUnicodeLanguageId(replacedLang_1.split(SEPARATOR));
|
|
2213
|
+
finalLangAst = {
|
|
2214
|
+
lang: replacedLangAst.lang,
|
|
2215
|
+
script: finalLangAst.script || replacedLangAst.script,
|
|
2216
|
+
region: finalLangAst.region || replacedLangAst.region,
|
|
2217
|
+
variants: mergeVariants(finalLangAst.variants, replacedLangAst.variants),
|
|
2218
|
+
};
|
|
2219
|
+
break;
|
|
2220
|
+
}
|
|
2221
|
+
}
|
|
2222
|
+
}
|
|
2223
|
+
// language _ script _ country
|
|
2224
|
+
// ug-Arab-CN -> ug-CN
|
|
2225
|
+
if (finalLangAst.script && finalLangAst.region) {
|
|
2226
|
+
var replacedLang_2 = languageAlias[emitUnicodeLanguageId({
|
|
2227
|
+
lang: finalLangAst.lang,
|
|
2228
|
+
script: finalLangAst.script,
|
|
2229
|
+
region: finalLangAst.region,
|
|
2230
|
+
variants: [],
|
|
2231
|
+
})];
|
|
2232
|
+
if (replacedLang_2) {
|
|
2233
|
+
var replacedLangAst = parseUnicodeLanguageId(replacedLang_2.split(SEPARATOR));
|
|
2234
|
+
finalLangAst = {
|
|
2235
|
+
lang: replacedLangAst.lang,
|
|
2236
|
+
script: replacedLangAst.script,
|
|
2237
|
+
region: replacedLangAst.region,
|
|
2238
|
+
variants: finalLangAst.variants,
|
|
2239
|
+
};
|
|
2240
|
+
}
|
|
2241
|
+
}
|
|
2242
|
+
// language _ country
|
|
2243
|
+
// eg. az_AZ -> az_Latn_A
|
|
2244
|
+
if (finalLangAst.region) {
|
|
2245
|
+
var replacedLang_3 = languageAlias[emitUnicodeLanguageId({
|
|
2246
|
+
lang: finalLangAst.lang,
|
|
2247
|
+
region: finalLangAst.region,
|
|
2248
|
+
variants: [],
|
|
2249
|
+
})];
|
|
2250
|
+
if (replacedLang_3) {
|
|
2251
|
+
var replacedLangAst = parseUnicodeLanguageId(replacedLang_3.split(SEPARATOR));
|
|
2252
|
+
finalLangAst = {
|
|
2253
|
+
lang: replacedLangAst.lang,
|
|
2254
|
+
script: finalLangAst.script || replacedLangAst.script,
|
|
2255
|
+
region: replacedLangAst.region,
|
|
2256
|
+
variants: finalLangAst.variants,
|
|
2257
|
+
};
|
|
2258
|
+
}
|
|
2191
2259
|
}
|
|
2192
|
-
|
|
2193
|
-
|
|
2260
|
+
// only language
|
|
2261
|
+
// e.g. twi -> ak
|
|
2262
|
+
var replacedLang = languageAlias[emitUnicodeLanguageId({
|
|
2263
|
+
lang: finalLangAst.lang,
|
|
2264
|
+
variants: [],
|
|
2265
|
+
})];
|
|
2266
|
+
if (replacedLang) {
|
|
2267
|
+
var replacedLangAst = parseUnicodeLanguageId(replacedLang.split(SEPARATOR));
|
|
2268
|
+
finalLangAst = {
|
|
2269
|
+
lang: replacedLangAst.lang,
|
|
2270
|
+
script: finalLangAst.script || replacedLangAst.script,
|
|
2271
|
+
region: finalLangAst.region || replacedLangAst.region,
|
|
2272
|
+
variants: finalLangAst.variants,
|
|
2273
|
+
};
|
|
2274
|
+
}
|
|
2275
|
+
if (finalLangAst.region) {
|
|
2276
|
+
var region = finalLangAst.region.toUpperCase();
|
|
2194
2277
|
var regionAlias = territoryAlias[region];
|
|
2195
2278
|
var replacedRegion = void 0;
|
|
2196
2279
|
if (regionAlias) {
|
|
2197
2280
|
var regions = regionAlias.split(' ');
|
|
2198
2281
|
replacedRegion = regions[0];
|
|
2199
|
-
var likelySubtag = supplemental.likelySubtags[
|
|
2282
|
+
var likelySubtag = supplemental.likelySubtags[emitUnicodeLanguageId({
|
|
2283
|
+
lang: finalLangAst.lang,
|
|
2284
|
+
script: finalLangAst.script,
|
|
2285
|
+
variants: [],
|
|
2286
|
+
})];
|
|
2200
2287
|
if (likelySubtag) {
|
|
2201
2288
|
var likelyRegion = parseUnicodeLanguageId(likelySubtag.split(SEPARATOR)).region;
|
|
2202
2289
|
if (likelyRegion && regions.indexOf(likelyRegion) > -1) {
|
|
@@ -2205,32 +2292,35 @@
|
|
|
2205
2292
|
}
|
|
2206
2293
|
}
|
|
2207
2294
|
if (replacedRegion) {
|
|
2208
|
-
|
|
2295
|
+
finalLangAst.region = replacedRegion;
|
|
2209
2296
|
}
|
|
2297
|
+
finalLangAst.region = finalLangAst.region.toUpperCase();
|
|
2210
2298
|
}
|
|
2211
|
-
if (
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2299
|
+
if (finalLangAst.script) {
|
|
2300
|
+
finalLangAst.script =
|
|
2301
|
+
finalLangAst.script[0].toUpperCase() +
|
|
2302
|
+
finalLangAst.script.slice(1).toLowerCase();
|
|
2303
|
+
if (scriptAlias[finalLangAst.script]) {
|
|
2304
|
+
finalLangAst.script = scriptAlias[finalLangAst.script];
|
|
2216
2305
|
}
|
|
2217
2306
|
}
|
|
2218
|
-
if (
|
|
2219
|
-
for (var i = 0; i <
|
|
2220
|
-
var variant =
|
|
2307
|
+
if (finalLangAst.variants.length) {
|
|
2308
|
+
for (var i = 0; i < finalLangAst.variants.length; i++) {
|
|
2309
|
+
var variant = finalLangAst.variants[i].toLowerCase();
|
|
2221
2310
|
if (variantAlias[variant]) {
|
|
2222
2311
|
var alias = variantAlias[variant];
|
|
2223
2312
|
if (isUnicodeVariantSubtag(alias)) {
|
|
2224
|
-
|
|
2313
|
+
finalLangAst.variants[i] = alias;
|
|
2225
2314
|
}
|
|
2226
2315
|
else if (isUnicodeLanguageSubtag(alias)) {
|
|
2227
2316
|
// Yes this can happen per the spec
|
|
2228
|
-
|
|
2317
|
+
finalLangAst.lang = alias;
|
|
2229
2318
|
}
|
|
2230
2319
|
}
|
|
2231
2320
|
}
|
|
2232
|
-
|
|
2321
|
+
finalLangAst.variants.sort();
|
|
2233
2322
|
}
|
|
2323
|
+
return finalLangAst;
|
|
2234
2324
|
}
|
|
2235
2325
|
/**
|
|
2236
2326
|
* Canonicalize based on
|
|
@@ -2240,7 +2330,7 @@
|
|
|
2240
2330
|
* @param locale
|
|
2241
2331
|
*/
|
|
2242
2332
|
function canonicalizeUnicodeLocaleId(locale) {
|
|
2243
|
-
canonicalizeUnicodeLanguageId(locale.lang);
|
|
2333
|
+
locale.lang = canonicalizeUnicodeLanguageId(locale.lang);
|
|
2244
2334
|
if (locale.extensions) {
|
|
2245
2335
|
for (var _i = 0, _a = locale.extensions; _i < _a.length; _i++) {
|
|
2246
2336
|
var extension = _a[_i];
|
|
@@ -2253,7 +2343,7 @@
|
|
|
2253
2343
|
break;
|
|
2254
2344
|
case 't':
|
|
2255
2345
|
if (extension.lang) {
|
|
2256
|
-
canonicalizeUnicodeLanguageId(extension.lang);
|
|
2346
|
+
extension.lang = canonicalizeUnicodeLanguageId(extension.lang);
|
|
2257
2347
|
}
|
|
2258
2348
|
extension.fields = canonicalizeKVs(extension.fields);
|
|
2259
2349
|
break;
|
|
@@ -2288,7 +2378,21 @@
|
|
|
2288
2378
|
return canonicalizeLocaleList(locales);
|
|
2289
2379
|
}
|
|
2290
2380
|
|
|
2291
|
-
if (
|
|
2381
|
+
if (typeof Intl === 'undefined') {
|
|
2382
|
+
if (typeof window !== 'undefined') {
|
|
2383
|
+
Object.defineProperty(window, 'Intl', {
|
|
2384
|
+
value: {},
|
|
2385
|
+
});
|
|
2386
|
+
}
|
|
2387
|
+
else if (typeof global !== 'undefined') {
|
|
2388
|
+
Object.defineProperty(global, 'Intl', {
|
|
2389
|
+
value: {},
|
|
2390
|
+
});
|
|
2391
|
+
}
|
|
2392
|
+
}
|
|
2393
|
+
if (!('getCanonicalLocales' in Intl) ||
|
|
2394
|
+
// Native Intl.getCanonicalLocales is just buggy
|
|
2395
|
+
Intl.getCanonicalLocales('und-x-private')[0] === 'x-private') {
|
|
2292
2396
|
Object.defineProperty(Intl, 'getCanonicalLocales', {
|
|
2293
2397
|
value: getCanonicalLocales,
|
|
2294
2398
|
writable: true,
|