diff --git a/.tools/translate.js b/.tools/translate.js new file mode 100644 index 0000000..49d469f --- /dev/null +++ b/.tools/translate.js @@ -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); +}); \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 1819391..4d40664 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -22,7 +22,9 @@ "ignorelist", "onloaded", "prefs", + "promisify", "spodermenpls", + "unticking", "webgl", "yfdyh" ],