diff options
Diffstat (limited to 'extra/update-language-files/index.js')
-rw-r--r-- | extra/update-language-files/index.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/extra/update-language-files/index.js b/extra/update-language-files/index.js new file mode 100644 index 0000000..acb6bd4 --- /dev/null +++ b/extra/update-language-files/index.js @@ -0,0 +1,103 @@ +// Need to use ES6 to read language files + +import fs from "fs"; +import util from "util"; + +/** + * 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 + * @returns {void} + */ +function copyFiles(langCode, baseLang) { + if (fs.existsSync("./languages")) { + fs.rmSync("./languages", { + recursive: true, + force: 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} baseLangCode Second language to copy keys from + * @returns {void} + */ +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); +fs.rmSync("./languages", { + recursive: true, + force: true, +}); + +console.log("Done. Fixing formatting by ESLint..."); |