scratch-l10n 5.0.231 → 5.0.233
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/.editorconfig +9 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +53 -46
- package/.github/workflows/ci-cd.yml +5 -5
- package/.github/workflows/commitlint.yml +1 -1
- package/.github/workflows/daily-help-update.yml +4 -4
- package/.github/workflows/daily-tx-pull.yml +4 -4
- package/.github/workflows/signature-assistant.yml +3 -3
- package/.prettierignore +11 -0
- package/CHANGELOG.md +14 -0
- package/README.md +12 -12
- package/commitlint.config.js +3 -3
- package/dist/l10n.js +224 -232
- package/dist/l10n.js.map +1 -1
- package/dist/localeData.js +223 -232
- package/dist/localeData.js.map +1 -1
- package/dist/supportedLocales.js +123 -130
- package/dist/supportedLocales.js.map +1 -1
- package/eslint.config.mjs +13 -0
- package/lib/batch.js +10 -12
- package/lib/progress-logger.mjs +33 -33
- package/lib/transifex.js +145 -144
- package/lib/validate.mjs +32 -31
- package/package.json +7 -8
- package/prettier.config.mjs +3 -0
- package/release.config.js +13 -13
- package/renovate.json5 +3 -5
- package/scripts/build-data.mjs +33 -49
- package/scripts/build-i18n-src.js +29 -28
- package/scripts/freshdesk-api.js +129 -144
- package/scripts/help-utils.js +129 -139
- package/scripts/tx-pull-editor.mjs +54 -51
- package/scripts/tx-pull-help-articles.js +14 -14
- package/scripts/tx-pull-help-names.js +14 -14
- package/scripts/tx-pull-locale-articles.js +19 -19
- package/scripts/tx-pull-www.mjs +79 -76
- package/scripts/tx-push-help.mjs +87 -96
- package/scripts/tx-push-src.js +65 -65
- package/scripts/validate-extension-inputs.mjs +65 -68
- package/scripts/validate-translations.mjs +33 -29
- package/scripts/validate-www.mjs +45 -43
- package/src/index.mjs +4 -3
- package/src/locale-data.mjs +148 -150
- package/src/supported-locales.mjs +124 -131
@@ -1,86 +1,83 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
|
-
|
3
2
|
/**
|
4
|
-
* @
|
3
|
+
* @file
|
5
4
|
* Script to validate extension block input placeholders
|
6
5
|
*/
|
7
|
-
|
8
|
-
import
|
9
|
-
import
|
10
|
-
import
|
11
|
-
import
|
12
|
-
import locales from '../src/supported-locales.mjs';
|
6
|
+
import assert from 'assert'
|
7
|
+
import async from 'async'
|
8
|
+
import fs from 'fs'
|
9
|
+
import path from 'path'
|
10
|
+
import locales from '../src/supported-locales.mjs'
|
13
11
|
|
14
12
|
// Globals
|
15
|
-
const JSON_DIR = path.join(process.cwd(), '/editor/extensions')
|
16
|
-
const source = JSON.parse(fs.readFileSync(`${JSON_DIR}/en.json`))
|
13
|
+
const JSON_DIR = path.join(process.cwd(), '/editor/extensions')
|
14
|
+
const source = JSON.parse(fs.readFileSync(`${JSON_DIR}/en.json`))
|
17
15
|
|
18
16
|
// Matches everything inside brackets, and the brackets themselves.
|
19
17
|
// e.g. matches '[MOTOR_ID]', '[POWER]' from 'altera a potência de [MOTOR_ID] para [POWER]'
|
20
|
-
const blockInputRegex = /\[.+?\]/g
|
18
|
+
const blockInputRegex = /\[.+?\]/g
|
21
19
|
|
22
|
-
let numTotalErrors = 0
|
20
|
+
let numTotalErrors = 0
|
23
21
|
|
24
22
|
const validateExtensionInputs = (translationData, locale) => {
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
}
|
51
|
-
}
|
23
|
+
let numLocaleErrors = 0
|
24
|
+
for (const block of Object.keys(translationData)) {
|
25
|
+
const englishBlockInputs = source[block].match(blockInputRegex)
|
26
|
+
|
27
|
+
if (!englishBlockInputs) continue
|
28
|
+
|
29
|
+
// If null (meaning no matches), that means that English block inputs exist but translated ones don't.
|
30
|
+
// Coerce it to an empty array so that the assertion below fails, instead of getting the less-helpful error
|
31
|
+
// that we can't call Array.includes on null.
|
32
|
+
const translatedBlockInputs = translationData[block].match(blockInputRegex) || []
|
33
|
+
|
34
|
+
for (const input of englishBlockInputs) {
|
35
|
+
// Currently there are enough errors here that it would be tedious to fix an error, rerun this tool
|
36
|
+
// to find the next error, and repeat. So, catch the assertion error and add to the number of total errors.
|
37
|
+
// This allows all errors to be displayed when the command is run, rather than just the first encountered.
|
38
|
+
try {
|
39
|
+
assert(
|
40
|
+
translatedBlockInputs.includes(input),
|
41
|
+
|
42
|
+
`Block '${block}' in locale '${locale}' does not include input ${input}:\n` + translationData[block],
|
43
|
+
)
|
44
|
+
} catch (err) {
|
45
|
+
numLocaleErrors++
|
46
|
+
console.error(err.message + '\n')
|
47
|
+
}
|
52
48
|
}
|
49
|
+
}
|
53
50
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
}
|
51
|
+
if (numLocaleErrors > 0) {
|
52
|
+
numTotalErrors += numLocaleErrors
|
53
|
+
throw new Error(`${numLocaleErrors} total error(s) for locale '${locale}'`)
|
54
|
+
}
|
55
|
+
}
|
59
56
|
|
60
57
|
const validate = (locale, callback) => {
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
}
|
71
|
-
|
72
|
-
callback();
|
73
|
-
});
|
74
|
-
};
|
75
|
-
|
76
|
-
async.each(Object.keys(locales), validate, function (err) {
|
77
|
-
if (err) {
|
78
|
-
console.error(err); // eslint-disable-line no-console
|
79
|
-
process.exit(1);
|
58
|
+
fs.readFile(`${JSON_DIR}/${locale}.json`, (err, data) => {
|
59
|
+
if (err) callback(err)
|
60
|
+
// let this throw an error if invalid json
|
61
|
+
data = JSON.parse(data)
|
62
|
+
|
63
|
+
try {
|
64
|
+
validateExtensionInputs(data, locale)
|
65
|
+
} catch (error) {
|
66
|
+
console.error(error.message + '\n')
|
80
67
|
}
|
81
68
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
69
|
+
callback()
|
70
|
+
})
|
71
|
+
}
|
72
|
+
|
73
|
+
async.each(Object.keys(locales), validate, err => {
|
74
|
+
if (err) {
|
75
|
+
console.error(err)
|
76
|
+
process.exit(1)
|
77
|
+
}
|
78
|
+
|
79
|
+
if (numTotalErrors > 0) {
|
80
|
+
console.error(`${numTotalErrors} total extension input error(s)`)
|
81
|
+
process.exit(1)
|
82
|
+
}
|
83
|
+
})
|
@@ -1,48 +1,52 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
|
+
/**
|
3
|
+
* @file
|
4
|
+
* Script to validate the translation json
|
5
|
+
*/
|
6
|
+
import async from 'async'
|
7
|
+
import fs from 'fs'
|
8
|
+
import path from 'path'
|
9
|
+
import { validateTranslations } from '../lib/validate.mjs'
|
10
|
+
import locales from '../src/supported-locales.mjs'
|
2
11
|
|
3
12
|
/**
|
4
|
-
* @
|
13
|
+
* @file
|
5
14
|
* Script to validate the translation json
|
6
15
|
*/
|
7
16
|
|
8
|
-
const args = process.argv.slice(2)
|
17
|
+
const args = process.argv.slice(2)
|
9
18
|
const usage = `
|
10
19
|
Validate translation json. Usage:
|
11
20
|
node validate_translations.mjs path
|
12
21
|
path: where to find the downloaded json files
|
13
|
-
|
22
|
+
`
|
14
23
|
// Fail immediately if the TX_TOKEN is not defined
|
15
24
|
if (args.length < 1) {
|
16
|
-
|
17
|
-
|
25
|
+
process.stdout.write(usage)
|
26
|
+
process.exit(1)
|
18
27
|
}
|
19
|
-
import fs from 'fs';
|
20
|
-
import path from 'path';
|
21
|
-
import async from 'async';
|
22
|
-
import {validateTranslations} from '../lib/validate.mjs';
|
23
|
-
import locales from '../src/supported-locales.mjs';
|
24
28
|
|
25
29
|
// Globals
|
26
|
-
const JSON_DIR = path.resolve(args[0])
|
30
|
+
const JSON_DIR = path.resolve(args[0])
|
27
31
|
|
28
|
-
const source = JSON.parse(fs.readFileSync(`${JSON_DIR}/en.json`))
|
32
|
+
const source = JSON.parse(fs.readFileSync(`${JSON_DIR}/en.json`))
|
29
33
|
|
30
34
|
const validate = (locale, callback) => {
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
};
|
39
|
-
validateTranslations(translations, source);
|
40
|
-
});
|
41
|
-
};
|
42
|
-
|
43
|
-
async.each(Object.keys(locales), validate, function (err) {
|
44
|
-
if (err) {
|
45
|
-
console.error(err); // eslint-disable-line no-console
|
46
|
-
process.exit(1);
|
35
|
+
fs.readFile(`${JSON_DIR}/${locale}.json`, (err, data) => {
|
36
|
+
if (err) callback(err)
|
37
|
+
// let this throw an error if invalid json
|
38
|
+
data = JSON.parse(data)
|
39
|
+
const translations = {
|
40
|
+
locale: locale,
|
41
|
+
translations: data,
|
47
42
|
}
|
48
|
-
|
43
|
+
validateTranslations(translations, source)
|
44
|
+
})
|
45
|
+
}
|
46
|
+
|
47
|
+
async.each(Object.keys(locales), validate, err => {
|
48
|
+
if (err) {
|
49
|
+
console.error(err)
|
50
|
+
process.exit(1)
|
51
|
+
}
|
52
|
+
})
|
package/scripts/validate-www.mjs
CHANGED
@@ -1,63 +1,65 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
|
+
/**
|
3
|
+
* @file
|
4
|
+
* Script to validate the www translation json
|
5
|
+
*/
|
6
|
+
import async from 'async'
|
7
|
+
import fs from 'fs'
|
8
|
+
import glob from 'glob'
|
9
|
+
import path from 'path'
|
10
|
+
import { validateTranslations } from '../lib/validate.mjs'
|
11
|
+
import locales from '../src/supported-locales.mjs'
|
2
12
|
|
3
13
|
/**
|
4
|
-
* @
|
14
|
+
* @file
|
5
15
|
* Script to validate the www translation json
|
6
16
|
*/
|
7
17
|
|
8
|
-
const args = process.argv.slice(2)
|
18
|
+
const args = process.argv.slice(2)
|
9
19
|
const usage = `
|
10
20
|
Validate translation json. Usage:
|
11
21
|
node validate_www.mjs path
|
12
22
|
path: root folder for all the www resource folders
|
13
|
-
|
23
|
+
`
|
14
24
|
if (args.length < 1) {
|
15
|
-
|
16
|
-
|
25
|
+
process.stdout.write(usage)
|
26
|
+
process.exit(1)
|
17
27
|
}
|
18
|
-
import fs from 'fs';
|
19
|
-
import path from 'path';
|
20
|
-
import glob from 'glob';
|
21
|
-
import async from 'async';
|
22
|
-
import {validateTranslations} from '../lib/validate.mjs';
|
23
|
-
import locales from '../src/supported-locales.mjs';
|
24
28
|
|
25
29
|
// Globals
|
26
|
-
const WWW_DIR = path.resolve(args[0])
|
27
|
-
const RESOURCES = glob.sync(`${path.resolve(WWW_DIR)}/*`)
|
30
|
+
const WWW_DIR = path.resolve(args[0])
|
31
|
+
const RESOURCES = glob.sync(`${path.resolve(WWW_DIR)}/*`)
|
28
32
|
|
29
33
|
const validate = (localeData, callback) => {
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
}
|
34
|
+
fs.readFile(localeData.localeFileName, (err, data) => {
|
35
|
+
if (err) callback(err)
|
36
|
+
// let this throw an error if invalid json
|
37
|
+
data = JSON.parse(data)
|
38
|
+
const translations = {
|
39
|
+
locale: localeData.locale,
|
40
|
+
translations: data,
|
41
|
+
}
|
42
|
+
validateTranslations(translations, localeData.sourceData)
|
43
|
+
})
|
44
|
+
}
|
41
45
|
|
42
46
|
const validateResource = (resource, callback) => {
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
});
|
51
|
-
async.each(allLocales, validate, function (err) {
|
52
|
-
if (err) {
|
53
|
-
callback(err);
|
54
|
-
}
|
55
|
-
});
|
56
|
-
};
|
57
|
-
|
58
|
-
async.each(RESOURCES, validateResource, function (err) {
|
47
|
+
const source = JSON.parse(fs.readFileSync(`${resource}/en.json`))
|
48
|
+
const allLocales = Object.keys(locales).map(loc => ({
|
49
|
+
locale: loc,
|
50
|
+
localeFileName: `${resource}/${loc}.json`,
|
51
|
+
sourceData: source,
|
52
|
+
}))
|
53
|
+
async.each(allLocales, validate, err => {
|
59
54
|
if (err) {
|
60
|
-
|
61
|
-
process.exit(1);
|
55
|
+
callback(err)
|
62
56
|
}
|
63
|
-
})
|
57
|
+
})
|
58
|
+
}
|
59
|
+
|
60
|
+
async.each(RESOURCES, validateResource, err => {
|
61
|
+
if (err) {
|
62
|
+
console.error(err)
|
63
|
+
process.exit(1)
|
64
|
+
}
|
65
|
+
})
|
package/src/index.mjs
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
-
import localeData from './locale-data.mjs'
|
2
|
-
import locales, {localeMap, isRtl} from './supported-locales.mjs'
|
3
|
-
|
1
|
+
import localeData from './locale-data.mjs'
|
2
|
+
import locales, { localeMap, isRtl } from './supported-locales.mjs'
|
3
|
+
|
4
|
+
export { locales as default, localeData, localeMap, isRtl }
|
package/src/locale-data.mjs
CHANGED
@@ -1,157 +1,155 @@
|
|
1
1
|
// temporarily we have all the locale data in scratch-l10n
|
2
|
+
import af from './locale-data/af.js'
|
3
|
+
import am from './locale-data/am.js'
|
4
|
+
import ar from './locale-data/ar.js'
|
5
|
+
import ast from './locale-data/ast.js'
|
6
|
+
import az from './locale-data/az.js'
|
7
|
+
import be from './locale-data/be.js'
|
8
|
+
import bg from './locale-data/bg.js'
|
9
|
+
import bn from './locale-data/bn.js'
|
10
|
+
import ca from './locale-data/ca.js'
|
11
|
+
import ckb from './locale-data/ckb.js'
|
12
|
+
import cs from './locale-data/cs.js'
|
13
|
+
import cy from './locale-data/cy.js'
|
14
|
+
import da from './locale-data/da.js'
|
15
|
+
import de from './locale-data/de.js'
|
16
|
+
import el from './locale-data/el.js'
|
17
|
+
import en from './locale-data/en.js'
|
18
|
+
import eo from './locale-data/eo.js'
|
19
|
+
import es from './locale-data/es.js'
|
20
|
+
import et from './locale-data/et.js'
|
21
|
+
import eu from './locale-data/eu.js'
|
22
|
+
import fa from './locale-data/fa.js'
|
23
|
+
import fi from './locale-data/fi.js'
|
24
|
+
import fil from './locale-data/fil.js'
|
25
|
+
import fr from './locale-data/fr.js'
|
26
|
+
import fy from './locale-data/fy.js'
|
27
|
+
import ga from './locale-data/ga.js'
|
28
|
+
import gd from './locale-data/gd.js'
|
29
|
+
import gl from './locale-data/gl.js'
|
30
|
+
import ha from './locale-data/ha.js'
|
31
|
+
import he from './locale-data/he.js'
|
32
|
+
import hi from './locale-data/hi.js'
|
33
|
+
import hr from './locale-data/hr.js'
|
34
|
+
import hu from './locale-data/hu.js'
|
35
|
+
import hy from './locale-data/hy.js'
|
36
|
+
import id from './locale-data/id.js'
|
37
|
+
import is from './locale-data/is.js'
|
38
|
+
import it from './locale-data/it.js'
|
39
|
+
import ja from './locale-data/ja.js'
|
40
|
+
import ka from './locale-data/ka.js'
|
41
|
+
import kk from './locale-data/kk.js'
|
42
|
+
import km from './locale-data/km.js'
|
43
|
+
import ko from './locale-data/ko.js'
|
44
|
+
import ku from './locale-data/ku.js'
|
45
|
+
import lt from './locale-data/lt.js'
|
46
|
+
import lv from './locale-data/lv.js'
|
47
|
+
import mi from './locale-data/mi.js'
|
48
|
+
import mn from './locale-data/mn.js'
|
49
|
+
import nb from './locale-data/nb.js'
|
50
|
+
import nl from './locale-data/nl.js'
|
51
|
+
import nn from './locale-data/nn.js'
|
52
|
+
import nso from './locale-data/nso.js'
|
53
|
+
import or from './locale-data/or.js'
|
54
|
+
import pl from './locale-data/pl.js'
|
55
|
+
import pt from './locale-data/pt.js'
|
56
|
+
import qu from './locale-data/qu.js'
|
57
|
+
import ro from './locale-data/ro.js'
|
58
|
+
import ru from './locale-data/ru.js'
|
59
|
+
import sk from './locale-data/sk.js'
|
60
|
+
import sl from './locale-data/sl.js'
|
61
|
+
import sr from './locale-data/sr.js'
|
62
|
+
import sv from './locale-data/sv.js'
|
63
|
+
import sw from './locale-data/sw.js'
|
64
|
+
import th from './locale-data/th.js'
|
65
|
+
import tn from './locale-data/tn.js'
|
66
|
+
import tr from './locale-data/tr.js'
|
67
|
+
import uk from './locale-data/uk.js'
|
68
|
+
import uz from './locale-data/uz.js'
|
69
|
+
import vi from './locale-data/vi.js'
|
70
|
+
import xh from './locale-data/xh.js'
|
71
|
+
import zh from './locale-data/zh.js'
|
72
|
+
import zu from './locale-data/zu.js'
|
73
|
+
import { customLocales } from './supported-locales.mjs'
|
2
74
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
let localeData = [].concat(
|
78
|
-
en,
|
79
|
-
af,
|
80
|
-
am,
|
81
|
-
ar,
|
82
|
-
ast,
|
83
|
-
az,
|
84
|
-
be,
|
85
|
-
bg,
|
86
|
-
bn,
|
87
|
-
ca,
|
88
|
-
ckb,
|
89
|
-
cs,
|
90
|
-
cy,
|
91
|
-
da,
|
92
|
-
de,
|
93
|
-
el,
|
94
|
-
eo,
|
95
|
-
es,
|
96
|
-
et,
|
97
|
-
eu,
|
98
|
-
fa,
|
99
|
-
fi,
|
100
|
-
fil,
|
101
|
-
fr,
|
102
|
-
fy,
|
103
|
-
ga,
|
104
|
-
gd,
|
105
|
-
gl,
|
106
|
-
ha,
|
107
|
-
he,
|
108
|
-
hi,
|
109
|
-
hu,
|
110
|
-
hr,
|
111
|
-
hy,
|
112
|
-
id,
|
113
|
-
is,
|
114
|
-
it,
|
115
|
-
ja,
|
116
|
-
ka,
|
117
|
-
kk,
|
118
|
-
ko,
|
119
|
-
km,
|
120
|
-
ku,
|
121
|
-
lt,
|
122
|
-
lv,
|
123
|
-
mi,
|
124
|
-
mn,
|
125
|
-
nl,
|
126
|
-
nb,
|
127
|
-
nn,
|
128
|
-
nso,
|
129
|
-
or,
|
130
|
-
pl,
|
131
|
-
pt,
|
132
|
-
sl,
|
133
|
-
sk,
|
134
|
-
sr,
|
135
|
-
sv,
|
136
|
-
sw,
|
137
|
-
qu,
|
138
|
-
ro,
|
139
|
-
ru,
|
140
|
-
th,
|
141
|
-
tn,
|
142
|
-
tr,
|
143
|
-
uk,
|
144
|
-
uz,
|
145
|
-
vi,
|
146
|
-
xh,
|
147
|
-
zh,
|
148
|
-
zu
|
149
|
-
);
|
75
|
+
const localeData = [].concat(
|
76
|
+
en,
|
77
|
+
af,
|
78
|
+
am,
|
79
|
+
ar,
|
80
|
+
ast,
|
81
|
+
az,
|
82
|
+
be,
|
83
|
+
bg,
|
84
|
+
bn,
|
85
|
+
ca,
|
86
|
+
ckb,
|
87
|
+
cs,
|
88
|
+
cy,
|
89
|
+
da,
|
90
|
+
de,
|
91
|
+
el,
|
92
|
+
eo,
|
93
|
+
es,
|
94
|
+
et,
|
95
|
+
eu,
|
96
|
+
fa,
|
97
|
+
fi,
|
98
|
+
fil,
|
99
|
+
fr,
|
100
|
+
fy,
|
101
|
+
ga,
|
102
|
+
gd,
|
103
|
+
gl,
|
104
|
+
ha,
|
105
|
+
he,
|
106
|
+
hi,
|
107
|
+
hu,
|
108
|
+
hr,
|
109
|
+
hy,
|
110
|
+
id,
|
111
|
+
is,
|
112
|
+
it,
|
113
|
+
ja,
|
114
|
+
ka,
|
115
|
+
kk,
|
116
|
+
ko,
|
117
|
+
km,
|
118
|
+
ku,
|
119
|
+
lt,
|
120
|
+
lv,
|
121
|
+
mi,
|
122
|
+
mn,
|
123
|
+
nl,
|
124
|
+
nb,
|
125
|
+
nn,
|
126
|
+
nso,
|
127
|
+
or,
|
128
|
+
pl,
|
129
|
+
pt,
|
130
|
+
sl,
|
131
|
+
sk,
|
132
|
+
sr,
|
133
|
+
sv,
|
134
|
+
sw,
|
135
|
+
qu,
|
136
|
+
ro,
|
137
|
+
ru,
|
138
|
+
th,
|
139
|
+
tn,
|
140
|
+
tr,
|
141
|
+
uk,
|
142
|
+
uz,
|
143
|
+
vi,
|
144
|
+
xh,
|
145
|
+
zh,
|
146
|
+
zu,
|
147
|
+
)
|
150
148
|
|
151
149
|
for (const lang in customLocales) {
|
152
|
-
|
150
|
+
localeData.push(customLocales[lang])
|
153
151
|
}
|
154
152
|
|
155
153
|
export {
|
156
|
-
|
157
|
-
}
|
154
|
+
localeData as default, // data expected for initializing ReactIntl.addLocaleData
|
155
|
+
}
|