forked from Calinou/GDevelop-website
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathi18n-helpers.js
52 lines (43 loc) · 1.35 KB
/
i18n-helpers.js
1
2
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
const fs = require('fs');
const path = require('path');
const ISO6391 = require('iso-639-1');
const i18nPath = path.join(__dirname, 'i18n');
const getShortestCode = langLongCode => {
if (langLongCode === 'pt-BR') return langLongCode;
const langParts = langLongCode.split('-');
return langParts[0];
};
const getLocaleMessages = filename => {
try {
return JSON.parse(fs.readFileSync(path.join(i18nPath, filename), 'utf8'));
} catch (e) {
return null;
}
};
const getLocaleName = langCode => ISO6391.getName(langCode);
const computeTranslationRatio = locale => {
const allMessages = Object.keys(locale.messages);
const sameAsKeyCount = allMessages.filter(key => locale.messages[key] === key)
.length;
return 1 - sameAsKeyCount / allMessages.length;
};
const getAllLocales = () =>
fs
.readdirSync(i18nPath)
.filter(filename => filename.indexOf('.json') !== -1)
.filter(filename => filename !== 'catalog.json')
.map(filename => ({
filename,
langLongCode: filename.replace('.json', ''),
langCode: getShortestCode(filename.replace('.json', '')),
messages: getLocaleMessages(filename),
}))
.map(locale => ({
...locale,
path: locale.langCode,
name: getLocaleName(locale.langCode),
translationRatio: computeTranslationRatio(locale),
}));
module.exports = {
getAllLocales,
};