mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2025-02-01 16:24:37 +01:00
Added translation tool
This commit is contained in:
parent
f05717836d
commit
c16aea3d6e
80
.tools/translate.js
Normal file
80
.tools/translate.js
Normal 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);
|
||||
});
|
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -22,7 +22,9 @@
|
||||
"ignorelist",
|
||||
"onloaded",
|
||||
"prefs",
|
||||
"promisify",
|
||||
"spodermenpls",
|
||||
"unticking",
|
||||
"webgl",
|
||||
"yfdyh"
|
||||
],
|
||||
|
Loading…
x
Reference in New Issue
Block a user