1
0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2024-12-23 05:10:27 +01:00
CanvasBlocker/.tools/translate.js

80 lines
2.1 KiB
JavaScript
Raw Normal View History

2018-09-12 00:07:39 +02:00
const fs = require("fs");
const path = require("path");
const util = require("util");
const en = require("../_locales/en/messages.json");
const enKeys = Object.keys(en);
const language = process.argv[2];
function getTranslationPath(language){
return path.join(__dirname, "../_locales/" + language + "/messages.json");
}
async function loadTranslation(language){
const path = getTranslationPath(language);
return await util.promisify(fs.exists)(path)
.then(function(exists){
if (exists){
console.log("language exists -> load data");
return util.promisify(fs.readFile)(path, {encoding: "UTF-8"})
.then(function(data){
return JSON.parse(data);
});
}
else {
console.log("language does not exist -> create it");
return {};
}
});
}
async function saveTranslation(language, data){
const path = getTranslationPath(language);
return await util.promisify(fs.writeFile)(path, JSON.stringify(data, null, "\t"));
}
async function getInput(prompt){
return new Promise(function(resolve, reject){
process.stdout.write(prompt);
process.stdin.setEncoding('utf8');
process.stdin.resume();
process.stdin.on("data", function onData(data){
process.stdin.removeListener("data", onData);
process.stdin.pause();
resolve(data.replace(/[\n\r]+$/, ""));
});
});
}
async function askForTranslation(key){
const enData = en[key];
console.log("English translation for", key, ":", enData.message);
if (enData.description){
console.log("\nDescription:", enData.description);
}
return await getInput("Please enter translation: ");
}
async function translate(language){
const originalData = await loadTranslation(language);
const data = {};
for (var i = 0; i < enKeys.length; i += 1){
const key = enKeys[i];
const oldData = originalData[key];
const enData = en[key];
if (oldData && oldData.message && oldData.message.trim()){
data[key] = oldData;
}
else {
data[key] = {
message: enData.message.trim() === ""? "": await askForTranslation(key),
description: (oldData && oldData.description) || enData.description
};
}
}
return data;
}
translate(language).then(function(data){
return saveTranslation(language, data);
});