mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-11-25 14:35:48 +03:00
39b9807f19
Updates #2643. Squashed commit of the following: commit d923a934d9bca757f5abd26abc616197e5f1fec9 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Tue Apr 13 19:10:08 2021 +0300 client: upd ru commit 114483ee80a0c850a0c25ce9c419e5d1f69d2fec Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Tue Apr 13 18:43:03 2021 +0300 client: imp en commit 1e57298d66d67ab4a2cbb1c3045094eefb05d667 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Tue Apr 13 17:46:07 2021 +0300 client: fix ru commit 5baca6561d844fe257ff6f3a70d64c9a7dc2273f Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Tue Apr 13 17:39:51 2021 +0300 client: upd i18n
121 lines
3.1 KiB
JavaScript
121 lines
3.1 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const requestPromise = require('request-promise');
|
|
const twoskyConfig = require('../../.twosky.json')[0];
|
|
|
|
const { project_id: TWOSKY_PROJECT_ID, languages } = twoskyConfig;
|
|
const LOCALES_DIR = '../../client/src/__locales';
|
|
const LOCALES_LIST = Object.keys(languages);
|
|
const BASE_FILE = 'en.json';
|
|
const TWOSKY_URI = process.env.TWOSKY_URI;
|
|
|
|
/**
|
|
* Prepare params to get translations from twosky
|
|
* @param {string} locale language shortcut
|
|
* @param {object} twosky config twosky
|
|
*/
|
|
const getRequestUrl = (locale, url, projectId) => {
|
|
return `${url}/download?format=json&language=${locale}&filename=${BASE_FILE}&project=${projectId}`;
|
|
};
|
|
|
|
/**
|
|
* Promise wrapper for writing in file
|
|
* @param {string} filename
|
|
* @param {any} body
|
|
*/
|
|
function writeInFile(filename, body) {
|
|
let normalizedBody = removeEmpty(JSON.parse(body));
|
|
|
|
return new Promise((resolve, reject) => {
|
|
if (typeof normalizedBody !== 'string') {
|
|
try {
|
|
normalizedBody = JSON.stringify(normalizedBody, null, 4) + '\n'; // eslint-disable-line
|
|
} catch (err) {
|
|
reject(err);
|
|
}
|
|
}
|
|
|
|
fs.writeFile(filename, normalizedBody, (err) => {
|
|
if (err) reject(err);
|
|
resolve('Ok');
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Clear initial from empty value keys
|
|
* @param {object} initialObject
|
|
*/
|
|
function removeEmpty(initialObject) {
|
|
let processedObject = {};
|
|
Object.keys(initialObject).forEach(prop => {
|
|
if (initialObject[prop]) {
|
|
processedObject[prop] = initialObject[prop];
|
|
}
|
|
});
|
|
return processedObject;
|
|
}
|
|
|
|
/**
|
|
* Request twosky
|
|
* @param {string} url
|
|
* @param {string} locale
|
|
*/
|
|
const request = (url, locale) => (
|
|
requestPromise.get(url)
|
|
.then((res) => {
|
|
if (res.length) {
|
|
const pathToFile = path.join(LOCALES_DIR, `${locale}.json`);
|
|
return writeInFile(pathToFile, res);
|
|
}
|
|
return null;
|
|
})
|
|
.then((res) => {
|
|
let result = locale;
|
|
result += res ? ' - OK' : ' - Empty';
|
|
return result;
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
return `${locale} - Not OK`;
|
|
}));
|
|
|
|
/**
|
|
* Sleep.
|
|
* @param {number} ms
|
|
*/
|
|
const sleep = (ms) => new Promise((resolve) => {
|
|
setTimeout(resolve, ms);
|
|
});
|
|
|
|
/**
|
|
* Download locales
|
|
*/
|
|
const download = async () => {
|
|
const locales = LOCALES_LIST;
|
|
|
|
if (!TWOSKY_URI) {
|
|
console.error('No credentials');
|
|
return;
|
|
}
|
|
|
|
const requests = [];
|
|
for (let i = 0; i < locales.length; i++) {
|
|
const locale = locales[i];
|
|
const url = getRequestUrl(locale, TWOSKY_URI, TWOSKY_PROJECT_ID);
|
|
requests.push(request(url, locale));
|
|
|
|
// Don't request the Crowdin API too aggressively to prevent spurious
|
|
// 400 errors.
|
|
await sleep(200);
|
|
}
|
|
|
|
Promise
|
|
.all(requests)
|
|
.then((res) => {
|
|
res.forEach(item => console.log(item));
|
|
})
|
|
.catch(err => console.log(err));
|
|
};
|
|
|
|
download();
|