-
Notifications
You must be signed in to change notification settings - Fork 13
/
findAndSaveTranslations.js
62 lines (52 loc) · 2.27 KB
/
findAndSaveTranslations.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
53
54
55
56
57
58
59
60
61
62
const fs = require('fs');
const PO = require('pofile');
const fileWalker = require('./fileWalker');
const parseLangFromFileName = require('./parseLangFromFileName');
function findAndSaveTranslations (translations, dirWithJsFiles, dirWithTranslations, outputDirForExportedTranslations) {
fileWalker(dirWithTranslations, (walkErr, filePaths) => {
if (walkErr) {
console.log(walkErr);
}
const promises = filePaths.map(filePath => {
if (filePath.match(/(\w*)\.po$/) === null) {
return;
}
const lang = parseLangFromFileName(filePath);
return new Promise((resolve, reject) => {
PO.load(filePath, (loadErr, po) => {
if (loadErr) {
console.log(loadErr);
}
const translated = [];
po.items
.filter(item => translations.includes(item.msgid))
.forEach(item => {
translated.push({
msgid: item.msgid,
msgstr: item.msgstr[0]
});
});
resolve({ lang, translated });
});
});
});
Promise.all(promises).then(value => {
const allTranslations = {};
value
.filter(translatedObject => typeof translatedObject !== 'undefined')
.forEach(translatedObject => {
if (!allTranslations[translatedObject.lang]) {
allTranslations[translatedObject.lang] = [];
}
allTranslations[translatedObject.lang] = allTranslations[translatedObject.lang].concat(translatedObject.translated);
});
fs.writeFile(outputDirForExportedTranslations + 'translations.json', JSON.stringify(allTranslations), (writeErr) => {
if (writeErr) {
return console.log(writeErr);
}
return console.log('Translations were saved in ' + outputDirForExportedTranslations + 'translations.json');
});
});
});
}
module.exports = findAndSaveTranslations;