mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2024-12-22 21:00:23 +01:00
80 lines
2.1 KiB
JavaScript
80 lines
2.1 KiB
JavaScript
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);
|
|
}); |