uptime-kuma/extra/update-language-files/index.js

88 lines
2.3 KiB
JavaScript
Raw Normal View History

// Need to use ES6 to read language files
2021-09-01 09:08:27 +00:00
import fs from "fs";
import path from "path";
import util from "util";
2022-03-02 07:48:08 +00:00
import rmSync from "../fs-rmSync.js";
2021-09-01 09:08:27 +00:00
// https://stackoverflow.com/questions/13786160/copy-folder-recursively-in-node-js
/**
* Look ma, it's cp -R.
* @param {string} src The path to the thing to copy.
* @param {string} dest The path to the new copy.
*/
const copyRecursiveSync = function (src, dest) {
let exists = fs.existsSync(src);
let stats = exists && fs.statSync(src);
let isDirectory = exists && stats.isDirectory();
2021-09-01 09:08:27 +00:00
if (isDirectory) {
fs.mkdirSync(dest);
fs.readdirSync(src).forEach(function (childItemName) {
copyRecursiveSync(path.join(src, childItemName),
path.join(dest, childItemName));
});
} else {
fs.copyFileSync(src, dest);
}
};
2021-10-12 07:10:32 +00:00
console.log("Arguments:", process.argv);
const baseLangCode = process.argv[2] || "en";
2021-09-01 09:08:27 +00:00
console.log("Base Lang: " + baseLangCode);
2021-10-12 07:10:32 +00:00
if (fs.existsSync("./languages")) {
2022-03-02 07:48:08 +00:00
rmSync("./languages", { recursive: true });
2021-10-12 07:10:32 +00:00
}
2021-09-01 09:08:27 +00:00
copyRecursiveSync("../../src/languages", "./languages");
const en = (await import("./languages/en.js")).default;
const baseLang = (await import(`./languages/${baseLangCode}.js`)).default;
const files = fs.readdirSync("./languages");
console.log("Files:", files);
2021-09-01 09:08:27 +00:00
for (const file of files) {
2022-03-27 12:56:42 +00:00
if (! file.endsWith(".js")) {
2021-10-12 07:10:32 +00:00
console.log("Skipping " + file);
continue;
}
2021-09-01 09:08:27 +00:00
console.log("Processing " + file);
const lang = await import("./languages/" + file);
2021-09-01 09:08:27 +00:00
let obj;
2021-09-01 09:08:27 +00:00
if (lang.default) {
obj = lang.default;
} else {
console.log("Empty file");
obj = {
languageName: "<Your Language name in your language (not in English)>"
};
}
// En first
for (const key in en) {
2022-03-27 12:56:42 +00:00
if (! obj[key]) {
obj[key] = en[key];
2021-09-01 09:08:27 +00:00
}
}
2021-09-01 09:08:27 +00:00
if (baseLang !== en) {
2021-09-01 09:08:27 +00:00
// Base second
for (const key in baseLang) {
2022-03-27 12:56:42 +00:00
if (! obj[key]) {
2021-09-01 09:08:27 +00:00
obj[key] = key;
}
}
}
2021-09-01 09:08:27 +00:00
const code = "export default " + util.inspect(obj, {
depth: null,
});
2021-09-01 09:08:27 +00:00
fs.writeFileSync(`../../src/languages/${file}`, code);
2021-09-01 09:08:27 +00:00
}
2022-03-02 07:48:08 +00:00
rmSync("./languages", { recursive: true });
console.log("Done. Fixing formatting by ESLint...");