mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-11-15 18:14:15 -08:00
f67d7cdf3f
* [empty commit] pull request for Fix language update script * Avoid mass changes with update-language-files This commit updates the update-language-files script to prevent mass changes as seen on a number of recent PRs where the contributer has ran the script and comitted the results. The script has been updated to now require the --language argument to specify which language file to update. This ensures that only that file is updated instead of all files. If the provided language code does not already exist, a new file with that code is created. This should make it easier to add new languages as you only need to pass the language code to the script. The base lang code is now also passed as an optional argument to negate the need for a seperate script entry in package.json. The script has been restructures into a couple of functions to make it easier to understand. ESlint now only checks the changed file instead of them all in order to improve performance. Signed-off-by: Matthew Nickson <[email protected]> * Updated translation docs for new command Signed-off-by: Matthew Nickson <[email protected]> * [update-language-files] Add cross-env-shell Signed-off-by: Matthew Nickson <[email protected]> Co-authored-by: Louis Lam <[email protected]>
97 lines
2.8 KiB
JavaScript
97 lines
2.8 KiB
JavaScript
// Need to use ES6 to read language files
|
|
|
|
import fs from "fs";
|
|
import util from "util";
|
|
import rmSync from "../fs-rmSync.js";
|
|
|
|
/**
|
|
* Copy across the required language files
|
|
* Creates a local directory (./languages) and copies the required files
|
|
* into it.
|
|
* @param {string} langCode Code of language to update. A file will be
|
|
* created with this code if one does not already exist
|
|
* @param {string} baseLang The second base language file to copy. This
|
|
* will be ignored if set to "en" as en.js is copied by default
|
|
*/
|
|
function copyFiles(langCode, baseLang) {
|
|
if (fs.existsSync("./languages")) {
|
|
rmSync("./languages", { recursive: true });
|
|
}
|
|
fs.mkdirSync("./languages");
|
|
|
|
if (!fs.existsSync(`../../src/languages/${langCode}.js`)) {
|
|
fs.closeSync(fs.openSync(`./languages/${langCode}.js`, "a"));
|
|
} else {
|
|
fs.copyFileSync(`../../src/languages/${langCode}.js`, `./languages/${langCode}.js`);
|
|
}
|
|
fs.copyFileSync("../../src/languages/en.js", "./languages/en.js");
|
|
if (baseLang !== "en") {
|
|
fs.copyFileSync(`../../src/languages/${baseLang}.js`, `./languages/${baseLang}.js`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update the specified language file
|
|
* @param {string} langCode Language code to update
|
|
* @param {string} baseLang Second language to copy keys from
|
|
*/
|
|
async function updateLanguage(langCode, baseLangCode) {
|
|
const en = (await import("./languages/en.js")).default;
|
|
const baseLang = (await import(`./languages/${baseLangCode}.js`)).default;
|
|
|
|
let file = langCode + ".js";
|
|
console.log("Processing " + file);
|
|
const lang = await import("./languages/" + file);
|
|
|
|
let obj;
|
|
|
|
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) {
|
|
if (! obj[key]) {
|
|
obj[key] = en[key];
|
|
}
|
|
}
|
|
|
|
if (baseLang !== en) {
|
|
// Base second
|
|
for (const key in baseLang) {
|
|
if (! obj[key]) {
|
|
obj[key] = key;
|
|
}
|
|
}
|
|
}
|
|
|
|
const code = "export default " + util.inspect(obj, {
|
|
depth: null,
|
|
});
|
|
|
|
fs.writeFileSync(`../../src/languages/${file}`, code);
|
|
}
|
|
|
|
// Get command line arguments
|
|
const baseLangCode = process.env.npm_config_baselang || "en";
|
|
const langCode = process.env.npm_config_language;
|
|
|
|
// We need the file to edit
|
|
if (langCode == null) {
|
|
throw new Error("Argument --language=<code> must be provided");
|
|
}
|
|
|
|
console.log("Base Lang: " + baseLangCode);
|
|
console.log("Updating: " + langCode);
|
|
|
|
copyFiles(langCode, baseLangCode);
|
|
await updateLanguage(langCode, baseLangCode);
|
|
rmSync("./languages", { recursive: true });
|
|
|
|
console.log("Done. Fixing formatting by ESLint...");
|