forked from cboard-org/cboard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcrowdin-fetch-latest.js
131 lines (116 loc) · 3.85 KB
/
crowdin-fetch-latest.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
const { CROWDIN_API_KEY } = require('../src/config');
console.log('Pulling translations from CrowdIn.');
const https = require('https');
const fs = require('fs');
const resolve = require('path').resolve;
const DecompressZip = require('decompress-zip');
const zipFilePath = resolve('./alltx.zip');
const extractPath = resolve('./src/translations');
const helpExtractPath = resolve('./src/translations/help');
const moreLanguagesExtractPath = resolve('./src/translations/moreLanguages');
const langExtractPath = resolve(extractPath + '/website/i18n');
const cboardSrcPath = resolve('./src/translations/src/cboard.json');
const downloadCboardJson = onComplete => {
console.log('Trying to download latest cboard.json...');
const cboardJson = fs.createWriteStream(cboardSrcPath);
https.get(
`https://api.crowdin.com/api/project/cboard/export-file?file=cboard.json&language=en&key=${CROWDIN_API_KEY}`,
function(response) {
response.pipe(cboardJson);
cboardJson.on('finish', function() {
console.log('cboard.json download complete.');
cboardJson.close(onComplete);
});
cboardJson.on('error', function(err) {
console.log('cboard.json download encountered error!');
console.log(err);
});
}
);
};
const downloadTranslations = onComplete => {
console.log('Trying to download latest translation strings...');
const allTxZip = fs.createWriteStream(zipFilePath);
https.get(
`https://api.crowdin.com/api/project/cboard/download/all.zip?key=${CROWDIN_API_KEY}`,
function(response) {
response.pipe(allTxZip);
allTxZip.on('finish', function() {
console.log('Translation download complete.');
allTxZip.close(onComplete);
});
allTxZip.on('error', function(err) {
console.log('Translation download encountered error!');
console.log(err);
});
}
);
};
const deleteTemporaryDownloadFile = () => {
console.log('Deleting temp file.');
fs.unlinkSync(zipFilePath);
};
const extractTranslations = () => {
console.log('Extracting zip to translations folder.');
const unzipper = new DecompressZip(zipFilePath);
unzipper.on('error', function(err) {
console.log('DecompressZip Caught an error:', err);
});
unzipper.on('extract', function(log) {
console.log('DecompressZip finished extracting.');
const dirs = fs
.readdirSync(langExtractPath, { withFileTypes: true })
.filter(dirent => dirent.isDirectory())
.map(dirent => dirent.name);
//copy and rename help files
dirs.forEach(dir => {
fs.copyFileSync(
`${langExtractPath}/${dir}/help/help.md`,
`${helpExtractPath}/${dir}.md`
);
});
dirs.forEach(dir => {
fs.copyFileSync(
`${langExtractPath}/${dir}/articles/moreLanguages.md`,
`${moreLanguagesExtractPath}/${dir}.md`
);
});
// delete directory recursively
try {
fs.rmdirSync(`${extractPath}/website`, { recursive: true });
console.log(`website folded was deleted.`);
} catch (err) {
console.error(`Error while deleting ${extractPath}/website`);
}
deleteTemporaryDownloadFile();
//handle special cases for custom languages
const custom = [
{
source: 'me-ME',
dest: 'sr-ME'
},
{
source: 'sr-CS',
dest: 'sr-RS'
}
];
custom.forEach(data => {
fs.copyFileSync(
`${extractPath}/${data.source}.json`,
`${extractPath}/${data.dest}.json`
);
fs.copyFileSync(
`${helpExtractPath}/${data.source}.md`,
`${helpExtractPath}/${data.dest}.md`
);
});
});
unzipper.on('progress', function(fileIndex, fileCount) {
console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount);
});
unzipper.extract({
path: extractPath
});
};
downloadCboardJson(() => null);
downloadTranslations(extractTranslations);