@lingo.dev/_spec 0.24.2
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +19 -0
- package/build/index.cjs +496 -0
- package/build/index.d.cts +396 -0
- package/build/index.d.ts +396 -0
- package/build/index.mjs +496 -0
- package/package.json +33 -0
package/README.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Lingo.dev Spec
|
2
|
+
|
3
|
+
A utility package for Lingo.dev.
|
4
|
+
|
5
|
+
### Installation
|
6
|
+
|
7
|
+
```bash
|
8
|
+
npm i lingo.dev
|
9
|
+
```
|
10
|
+
|
11
|
+
### Usage
|
12
|
+
|
13
|
+
```
|
14
|
+
import {} from 'lingo.dev/spec';
|
15
|
+
```
|
16
|
+
|
17
|
+
### Documentation
|
18
|
+
|
19
|
+
[Documentation](https://lingo.dev/go/docs)
|
package/build/index.cjs
ADDED
@@ -0,0 +1,496 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/locales.ts
|
2
|
+
var _zod = require('zod'); var _zod2 = _interopRequireDefault(_zod);
|
3
|
+
var localeMap = {
|
4
|
+
// Urdu (Pakistan)
|
5
|
+
ur: ["ur-PK"],
|
6
|
+
// Vietnamese (Vietnam)
|
7
|
+
vi: ["vi-VN"],
|
8
|
+
// Turkish (Turkey)
|
9
|
+
tr: ["tr-TR"],
|
10
|
+
// Tamil (India)
|
11
|
+
ta: ["ta-IN"],
|
12
|
+
// Serbian
|
13
|
+
sr: [
|
14
|
+
"sr-RS",
|
15
|
+
// Serbian (Latin)
|
16
|
+
"sr-Latn-RS",
|
17
|
+
// Serbian (Latin)
|
18
|
+
"sr-Cyrl-RS"
|
19
|
+
// Serbian (Cyrillic)
|
20
|
+
],
|
21
|
+
// Hungarian (Hungary)
|
22
|
+
hu: ["hu-HU"],
|
23
|
+
// Hebrew (Israel)
|
24
|
+
he: ["he-IL"],
|
25
|
+
// Estonian (Estonia)
|
26
|
+
et: ["et-EE"],
|
27
|
+
// Greek (Greece)
|
28
|
+
el: ["el-GR"],
|
29
|
+
// Danish (Denmark)
|
30
|
+
da: ["da-DK"],
|
31
|
+
// Azerbaijani (Azerbaijan)
|
32
|
+
az: ["az-AZ"],
|
33
|
+
// Thai (Thailand)
|
34
|
+
th: ["th-TH"],
|
35
|
+
// Swedish (Sweden)
|
36
|
+
sv: ["sv-SE"],
|
37
|
+
// English
|
38
|
+
en: [
|
39
|
+
"en-US",
|
40
|
+
// United States
|
41
|
+
"en-GB",
|
42
|
+
// United Kingdom
|
43
|
+
"en-AU",
|
44
|
+
// Australia
|
45
|
+
"en-CA"
|
46
|
+
// Canada
|
47
|
+
],
|
48
|
+
// Spanish
|
49
|
+
es: [
|
50
|
+
"es-ES",
|
51
|
+
// Spain
|
52
|
+
"es-419",
|
53
|
+
// Latin America
|
54
|
+
"es-MX",
|
55
|
+
// Mexico
|
56
|
+
"es-AR"
|
57
|
+
// Argentina
|
58
|
+
],
|
59
|
+
// French
|
60
|
+
fr: [
|
61
|
+
"fr-FR",
|
62
|
+
// France
|
63
|
+
"fr-CA",
|
64
|
+
// Canada
|
65
|
+
"fr-BE"
|
66
|
+
// Belgium
|
67
|
+
],
|
68
|
+
// Catalan (Spain)
|
69
|
+
ca: ["ca-ES"],
|
70
|
+
// Japanese (Japan)
|
71
|
+
ja: ["ja-JP"],
|
72
|
+
// German
|
73
|
+
de: [
|
74
|
+
"de-DE",
|
75
|
+
// Germany
|
76
|
+
"de-AT",
|
77
|
+
// Austria
|
78
|
+
"de-CH"
|
79
|
+
// Switzerland
|
80
|
+
],
|
81
|
+
// Portuguese
|
82
|
+
pt: [
|
83
|
+
"pt-PT",
|
84
|
+
// Portugal
|
85
|
+
"pt-BR"
|
86
|
+
// Brazil
|
87
|
+
],
|
88
|
+
// Italian
|
89
|
+
it: [
|
90
|
+
"it-IT",
|
91
|
+
// Italy
|
92
|
+
"it-CH"
|
93
|
+
// Switzerland
|
94
|
+
],
|
95
|
+
// Russian
|
96
|
+
ru: [
|
97
|
+
"ru-RU",
|
98
|
+
// Russia
|
99
|
+
"ru-BY"
|
100
|
+
// Belarus
|
101
|
+
],
|
102
|
+
// Ukrainian (Ukraine)
|
103
|
+
uk: ["uk-UA"],
|
104
|
+
// Belarusian (Belarus)
|
105
|
+
be: ["be-BY"],
|
106
|
+
// Hindi (India)
|
107
|
+
hi: ["hi-IN"],
|
108
|
+
// Chinese
|
109
|
+
zh: [
|
110
|
+
"zh-CN",
|
111
|
+
// Simplified Chinese (China)
|
112
|
+
"zh-TW",
|
113
|
+
// Traditional Chinese (Taiwan)
|
114
|
+
"zh-HK",
|
115
|
+
// Traditional Chinese (Hong Kong)
|
116
|
+
"zh-Hans",
|
117
|
+
// Simplified Chinese
|
118
|
+
"zh-Hant",
|
119
|
+
// Traditional Chinese
|
120
|
+
"zh-Hant-HK",
|
121
|
+
// Traditional Chinese (Hong Kong)
|
122
|
+
"zh-Hant-TW",
|
123
|
+
// Traditional Chinese (Taiwan)
|
124
|
+
"zh-Hant-CN",
|
125
|
+
// Traditional Chinese (China)
|
126
|
+
"zh-Hans-HK",
|
127
|
+
// Simplified Chinese (Hong Kong)
|
128
|
+
"zh-Hans-TW",
|
129
|
+
// Simplified Chinese (China)
|
130
|
+
"zh-Hans-CN"
|
131
|
+
// Simplified Chinese (China)
|
132
|
+
],
|
133
|
+
// Korean (South Korea)
|
134
|
+
ko: ["ko-KR"],
|
135
|
+
// Arabic
|
136
|
+
ar: [
|
137
|
+
"ar-EG",
|
138
|
+
// Egypt
|
139
|
+
"ar-SA",
|
140
|
+
// Saudi Arabia
|
141
|
+
"ar-AE",
|
142
|
+
// United Arab Emirates
|
143
|
+
"ar-MA"
|
144
|
+
// Morocco
|
145
|
+
],
|
146
|
+
// Bulgarian (Bulgaria)
|
147
|
+
bg: ["bg-BG"],
|
148
|
+
// Czech (Czech Republic)
|
149
|
+
cs: ["cs-CZ"],
|
150
|
+
// Dutch
|
151
|
+
nl: [
|
152
|
+
"nl-NL",
|
153
|
+
// Netherlands
|
154
|
+
"nl-BE"
|
155
|
+
// Belgium
|
156
|
+
],
|
157
|
+
// Polish (Poland)
|
158
|
+
pl: ["pl-PL"],
|
159
|
+
// Indonesian (Indonesia)
|
160
|
+
id: ["id-ID"],
|
161
|
+
// Malay (Malaysia)
|
162
|
+
ms: ["ms-MY"],
|
163
|
+
// Finnish (Finland)
|
164
|
+
fi: ["fi-FI"],
|
165
|
+
// Basque (Spain)
|
166
|
+
eu: ["eu-ES"],
|
167
|
+
// Croatian (Croatia)
|
168
|
+
hr: ["hr-HR"],
|
169
|
+
// Hebrew (Israel) - alternative code
|
170
|
+
iw: ["iw-IL"],
|
171
|
+
// Khmer (Cambodia)
|
172
|
+
km: ["km-KH"],
|
173
|
+
// Latvian (Latvia)
|
174
|
+
lv: ["lv-LV"],
|
175
|
+
// Lithuanian (Lithuania)
|
176
|
+
lt: ["lt-LT"],
|
177
|
+
// Norwegian (Norway)
|
178
|
+
no: ["no-NO"],
|
179
|
+
// Romanian (Romania)
|
180
|
+
ro: ["ro-RO"],
|
181
|
+
// Slovak (Slovakia)
|
182
|
+
sk: ["sk-SK"],
|
183
|
+
// Swahili
|
184
|
+
sw: [
|
185
|
+
"sw-TZ",
|
186
|
+
// Tanzania
|
187
|
+
"sw-KE"
|
188
|
+
// Kenya
|
189
|
+
],
|
190
|
+
// Persian (Iran)
|
191
|
+
fa: ["fa-IR"],
|
192
|
+
// Filipino (Philippines)
|
193
|
+
fil: ["fil-PH"],
|
194
|
+
// Punjabi
|
195
|
+
pa: [
|
196
|
+
"pa-IN",
|
197
|
+
// India
|
198
|
+
"pa-PK"
|
199
|
+
// Pakistan
|
200
|
+
],
|
201
|
+
// Bengali
|
202
|
+
bn: [
|
203
|
+
"bn-BD",
|
204
|
+
// Bangladesh
|
205
|
+
"bn-IN"
|
206
|
+
// India
|
207
|
+
],
|
208
|
+
// Irish (Ireland)
|
209
|
+
ga: ["ga-IE"],
|
210
|
+
// Maltese (Malta)
|
211
|
+
mt: ["mt-MT"],
|
212
|
+
// Slovenian (Slovenia)
|
213
|
+
sl: ["sl-SI"],
|
214
|
+
// Albanian (Albania)
|
215
|
+
sq: ["sq-AL"],
|
216
|
+
// Bavarian (Germany)
|
217
|
+
bar: ["bar-DE"],
|
218
|
+
// Neapolitan (Italy)
|
219
|
+
nap: ["nap-IT"],
|
220
|
+
// Afrikaans (South Africa)
|
221
|
+
af: ["af-ZA"],
|
222
|
+
// Somali (Somalia)
|
223
|
+
so: ["so-SO"],
|
224
|
+
// Tigrinya (Ethiopia)
|
225
|
+
ti: ["ti-ET"],
|
226
|
+
// Standard Moroccan Tamazight (Morocco)
|
227
|
+
zgh: ["zgh-MA"],
|
228
|
+
// Tagalog (Philippines)
|
229
|
+
tl: ["tl-PH"],
|
230
|
+
// Telugu (India)
|
231
|
+
te: ["te-IN"]
|
232
|
+
};
|
233
|
+
var localeCodesShort = Object.keys(localeMap);
|
234
|
+
var localeCodesFull = Object.values(localeMap).flat();
|
235
|
+
var localeCodesFullUnderscore = localeCodesFull.map((value) => value.replace("-", "_"));
|
236
|
+
var localeCodesFullExplicitRegion = localeCodesFull.map((value) => {
|
237
|
+
const chunks = value.split("-");
|
238
|
+
const result = [chunks[0], "-r", chunks.slice(1).join("-")].join("");
|
239
|
+
return result;
|
240
|
+
});
|
241
|
+
var localeCodes = [
|
242
|
+
...localeCodesShort,
|
243
|
+
...localeCodesFull,
|
244
|
+
...localeCodesFullUnderscore,
|
245
|
+
...localeCodesFullExplicitRegion
|
246
|
+
];
|
247
|
+
var localeCodeSchema = _zod2.default.string().refine((value) => localeCodes.includes(value), {
|
248
|
+
message: "Invalid locale code"
|
249
|
+
});
|
250
|
+
var resolveLocaleCode = (value) => {
|
251
|
+
const existingFullLocaleCode = Object.values(localeMap).flat().includes(value);
|
252
|
+
if (existingFullLocaleCode) {
|
253
|
+
return value;
|
254
|
+
}
|
255
|
+
const existingShortLocaleCode = Object.keys(localeMap).includes(value);
|
256
|
+
if (existingShortLocaleCode) {
|
257
|
+
const correspondingFullLocales = localeMap[value];
|
258
|
+
const fallbackFullLocale = correspondingFullLocales[0];
|
259
|
+
return fallbackFullLocale;
|
260
|
+
}
|
261
|
+
throw new Error(`Invalid locale code: ${value}`);
|
262
|
+
};
|
263
|
+
var getAlternativeLocaleCodes = (locale) => {
|
264
|
+
if (locale.includes("-")) {
|
265
|
+
return [locale.replace(/-/g, "_")];
|
266
|
+
} else if (locale.includes("_")) {
|
267
|
+
return [locale.replace(/_/g, "-")];
|
268
|
+
} else {
|
269
|
+
return [];
|
270
|
+
}
|
271
|
+
};
|
272
|
+
var getLocaleCodeDelimiter = (locale) => {
|
273
|
+
if (locale.includes("_")) {
|
274
|
+
return "_";
|
275
|
+
} else if (locale.includes("-")) {
|
276
|
+
return "-";
|
277
|
+
} else {
|
278
|
+
return null;
|
279
|
+
}
|
280
|
+
};
|
281
|
+
var resolveOverridenLocale = (locale, delimiter) => {
|
282
|
+
if (!delimiter) {
|
283
|
+
return locale;
|
284
|
+
}
|
285
|
+
const currentDelimiter = getLocaleCodeDelimiter(locale);
|
286
|
+
if (!currentDelimiter) {
|
287
|
+
return locale;
|
288
|
+
}
|
289
|
+
return locale.replace(currentDelimiter, delimiter);
|
290
|
+
};
|
291
|
+
|
292
|
+
// src/formats.ts
|
293
|
+
|
294
|
+
var bucketTypes = [
|
295
|
+
"android",
|
296
|
+
"csv",
|
297
|
+
"flutter",
|
298
|
+
"html",
|
299
|
+
"json",
|
300
|
+
"markdown",
|
301
|
+
"xcode-strings",
|
302
|
+
"xcode-stringsdict",
|
303
|
+
"xcode-xcstrings",
|
304
|
+
"yaml",
|
305
|
+
"yaml-root-key",
|
306
|
+
"properties",
|
307
|
+
"po",
|
308
|
+
"xliff",
|
309
|
+
"xml",
|
310
|
+
"srt",
|
311
|
+
"dato",
|
312
|
+
"compiler",
|
313
|
+
"vtt"
|
314
|
+
];
|
315
|
+
var bucketTypeSchema = _zod2.default.enum(bucketTypes);
|
316
|
+
|
317
|
+
// src/config.ts
|
318
|
+
|
319
|
+
var localeSchema = _zod2.default.object({
|
320
|
+
source: localeCodeSchema,
|
321
|
+
targets: _zod2.default.array(localeCodeSchema)
|
322
|
+
});
|
323
|
+
var createConfigDefinition = (definition) => definition;
|
324
|
+
var extendConfigDefinition = (definition, params) => {
|
325
|
+
const schema = params.createSchema(definition.schema);
|
326
|
+
const defaultValue = params.createDefaultValue(definition.defaultValue);
|
327
|
+
const upgrader = (config) => params.createUpgrader(config, schema, defaultValue);
|
328
|
+
return createConfigDefinition({
|
329
|
+
schema,
|
330
|
+
defaultValue,
|
331
|
+
parse: (rawConfig) => {
|
332
|
+
const safeResult = schema.safeParse(rawConfig);
|
333
|
+
if (safeResult.success) {
|
334
|
+
return safeResult.data;
|
335
|
+
}
|
336
|
+
const localeErrors = safeResult.error.errors.filter((issue) => issue.message.includes("Invalid locale code")).map((issue) => {
|
337
|
+
let unsupportedLocale = "";
|
338
|
+
const path = issue.path;
|
339
|
+
const config = rawConfig;
|
340
|
+
if (config.locale) {
|
341
|
+
unsupportedLocale = path.reduce((acc, key) => {
|
342
|
+
if (acc && typeof acc === "object" && key in acc) {
|
343
|
+
return acc[key];
|
344
|
+
}
|
345
|
+
return acc;
|
346
|
+
}, config.locale);
|
347
|
+
}
|
348
|
+
return `Unsupported locale: ${unsupportedLocale}`;
|
349
|
+
});
|
350
|
+
if (localeErrors.length > 0) {
|
351
|
+
throw new Error(`
|
352
|
+
${localeErrors.join("\n")}`);
|
353
|
+
}
|
354
|
+
const baseConfig = definition.parse(rawConfig);
|
355
|
+
const result = upgrader(baseConfig);
|
356
|
+
return result;
|
357
|
+
}
|
358
|
+
});
|
359
|
+
};
|
360
|
+
var configV0Schema = _zod2.default.object({
|
361
|
+
version: _zod2.default.number().default(0)
|
362
|
+
});
|
363
|
+
var configV0Definition = createConfigDefinition({
|
364
|
+
schema: configV0Schema,
|
365
|
+
defaultValue: { version: 0 },
|
366
|
+
parse: (rawConfig) => {
|
367
|
+
return configV0Schema.parse(rawConfig);
|
368
|
+
}
|
369
|
+
});
|
370
|
+
var configV1Definition = extendConfigDefinition(configV0Definition, {
|
371
|
+
createSchema: (baseSchema) => baseSchema.extend({
|
372
|
+
locale: localeSchema,
|
373
|
+
buckets: _zod2.default.record(_zod2.default.string(), bucketTypeSchema).default({}).optional()
|
374
|
+
}),
|
375
|
+
createDefaultValue: () => ({
|
376
|
+
version: 1,
|
377
|
+
locale: {
|
378
|
+
source: "en",
|
379
|
+
targets: ["es"]
|
380
|
+
},
|
381
|
+
buckets: {}
|
382
|
+
}),
|
383
|
+
createUpgrader: () => ({
|
384
|
+
version: 1,
|
385
|
+
locale: {
|
386
|
+
source: "en",
|
387
|
+
targets: ["es"]
|
388
|
+
},
|
389
|
+
buckets: {}
|
390
|
+
})
|
391
|
+
});
|
392
|
+
var configV1_1Definition = extendConfigDefinition(configV1Definition, {
|
393
|
+
createSchema: (baseSchema) => baseSchema.extend({
|
394
|
+
buckets: _zod2.default.record(
|
395
|
+
bucketTypeSchema,
|
396
|
+
_zod2.default.object({
|
397
|
+
include: _zod2.default.array(_zod2.default.string()).default([]),
|
398
|
+
exclude: _zod2.default.array(_zod2.default.string()).default([]).optional()
|
399
|
+
})
|
400
|
+
).default({})
|
401
|
+
}),
|
402
|
+
createDefaultValue: (baseDefaultValue) => ({
|
403
|
+
...baseDefaultValue,
|
404
|
+
version: 1.1,
|
405
|
+
buckets: {}
|
406
|
+
}),
|
407
|
+
createUpgrader: (oldConfig, schema) => {
|
408
|
+
const upgradedConfig = {
|
409
|
+
...oldConfig,
|
410
|
+
version: 1.1,
|
411
|
+
buckets: {}
|
412
|
+
};
|
413
|
+
if (oldConfig.buckets) {
|
414
|
+
for (const [bucketPath, bucketType] of Object.entries(oldConfig.buckets)) {
|
415
|
+
if (!upgradedConfig.buckets[bucketType]) {
|
416
|
+
upgradedConfig.buckets[bucketType] = {
|
417
|
+
include: []
|
418
|
+
};
|
419
|
+
}
|
420
|
+
_optionalChain([upgradedConfig, 'access', _ => _.buckets, 'access', _2 => _2[bucketType], 'optionalAccess', _3 => _3.include, 'access', _4 => _4.push, 'call', _5 => _5(bucketPath)]);
|
421
|
+
}
|
422
|
+
}
|
423
|
+
return upgradedConfig;
|
424
|
+
}
|
425
|
+
});
|
426
|
+
var configV1_2Definition = extendConfigDefinition(configV1_1Definition, {
|
427
|
+
createSchema: (baseSchema) => baseSchema.extend({
|
428
|
+
locale: localeSchema.extend({
|
429
|
+
extraSource: localeCodeSchema.optional()
|
430
|
+
})
|
431
|
+
}),
|
432
|
+
createDefaultValue: (baseDefaultValue) => ({
|
433
|
+
...baseDefaultValue,
|
434
|
+
version: 1.2
|
435
|
+
}),
|
436
|
+
createUpgrader: (oldConfig) => ({
|
437
|
+
...oldConfig,
|
438
|
+
version: 1.2
|
439
|
+
})
|
440
|
+
});
|
441
|
+
var bucketItemSchema = _zod2.default.object({
|
442
|
+
path: _zod2.default.string(),
|
443
|
+
delimiter: _zod2.default.union([_zod2.default.literal("-"), _zod2.default.literal("_"), _zod2.default.literal(null)]).optional()
|
444
|
+
});
|
445
|
+
var configV1_3Definition = extendConfigDefinition(configV1_2Definition, {
|
446
|
+
createSchema: (baseSchema) => baseSchema.extend({
|
447
|
+
buckets: _zod2.default.record(
|
448
|
+
bucketTypeSchema,
|
449
|
+
_zod2.default.object({
|
450
|
+
include: _zod2.default.array(_zod2.default.union([_zod2.default.string(), bucketItemSchema])).default([]),
|
451
|
+
exclude: _zod2.default.array(_zod2.default.union([_zod2.default.string(), bucketItemSchema])).default([]).optional()
|
452
|
+
})
|
453
|
+
).default({})
|
454
|
+
}),
|
455
|
+
createDefaultValue: (baseDefaultValue) => ({
|
456
|
+
...baseDefaultValue,
|
457
|
+
version: 1.3
|
458
|
+
}),
|
459
|
+
createUpgrader: (oldConfig) => ({
|
460
|
+
...oldConfig,
|
461
|
+
version: 1.3
|
462
|
+
})
|
463
|
+
});
|
464
|
+
var LATEST_CONFIG_DEFINITION = configV1_3Definition;
|
465
|
+
function parseI18nConfig(rawConfig) {
|
466
|
+
try {
|
467
|
+
const result = LATEST_CONFIG_DEFINITION.parse(rawConfig);
|
468
|
+
return result;
|
469
|
+
} catch (error) {
|
470
|
+
throw new Error(`Failed to parse config: ${error.message}`);
|
471
|
+
}
|
472
|
+
}
|
473
|
+
var defaultConfig = LATEST_CONFIG_DEFINITION.defaultValue;
|
474
|
+
|
475
|
+
|
476
|
+
|
477
|
+
|
478
|
+
|
479
|
+
|
480
|
+
|
481
|
+
|
482
|
+
|
483
|
+
|
484
|
+
|
485
|
+
|
486
|
+
|
487
|
+
|
488
|
+
|
489
|
+
|
490
|
+
|
491
|
+
|
492
|
+
|
493
|
+
|
494
|
+
|
495
|
+
|
496
|
+
exports.bucketItemSchema = bucketItemSchema; exports.bucketTypeSchema = bucketTypeSchema; exports.bucketTypes = bucketTypes; exports.configV0Definition = configV0Definition; exports.configV1Definition = configV1Definition; exports.configV1_1Definition = configV1_1Definition; exports.configV1_2Definition = configV1_2Definition; exports.configV1_3Definition = configV1_3Definition; exports.defaultConfig = defaultConfig; exports.getAlternativeLocaleCodes = getAlternativeLocaleCodes; exports.getLocaleCodeDelimiter = getLocaleCodeDelimiter; exports.localeCodeSchema = localeCodeSchema; exports.localeCodes = localeCodes; exports.localeCodesFull = localeCodesFull; exports.localeCodesFullExplicitRegion = localeCodesFullExplicitRegion; exports.localeCodesFullUnderscore = localeCodesFullUnderscore; exports.localeCodesShort = localeCodesShort; exports.localeSchema = localeSchema; exports.parseI18nConfig = parseI18nConfig; exports.resolveLocaleCode = resolveLocaleCode; exports.resolveOverridenLocale = resolveOverridenLocale;
|