Added translation tool

This commit is contained in:
kkapsner 2018-09-12 00:07:39 +02:00
parent f05717836d
commit c16aea3d6e
2 changed files with 82 additions and 0 deletions

80
.tools/translate.js Normal file
View File

@ -0,0 +1,80 @@
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);
});

View File

@ -22,7 +22,9 @@
"ignorelist",
"onloaded",
"prefs",
"promisify",
"spodermenpls",
"unticking",
"webgl",
"yfdyh"
],