summaryrefslogtreecommitdiffstats
path: root/extra/update-language-files/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'extra/update-language-files/index.js')
-rw-r--r--extra/update-language-files/index.js103
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...");