aboutsummaryrefslogtreecommitdiff
path: root/.github/build/find-missing-translations.js
diff options
context:
space:
mode:
authorRémy Raes <raes.remy@gmail.com>2023-04-06 00:28:09 +0200
committerGitHub <noreply@github.com>2023-04-06 00:28:09 +0200
commit7ec5413c0e71300814350164c69e6452136bd4cd (patch)
tree0b01bde876db7be51ab2d5a645bb3d13c745bfec /.github/build/find-missing-translations.js
parent80ceb2b317336c454d83392028501a31da89e77e (diff)
downloadNorthstarMods-7ec5413c0e71300814350164c69e6452136bd4cd.tar.gz
NorthstarMods-7ec5413c0e71300814350164c69e6452136bd4cd.zip
Add CI logic for finding missing translations (#608)
* build: add script to get missing keys per language * fix: typo * fix: check arguments before launching script * feat: script can be run with language argument * docs: add readme * fix: remove multiple spaces while searching for translations * build: add translations check CI * refactor: put translation job alongside encoding job * feat: add unicode characters because why not * build: exit with an error code if some translations are missing * build: exit using process.exit * feat: CI should continue running with missing translations * build: use actions/checkout v3 * refactor: put build directory into .github directory
Diffstat (limited to '.github/build/find-missing-translations.js')
-rw-r--r--.github/build/find-missing-translations.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/.github/build/find-missing-translations.js b/.github/build/find-missing-translations.js
new file mode 100644
index 00000000..3f6c6c99
--- /dev/null
+++ b/.github/build/find-missing-translations.js
@@ -0,0 +1,66 @@
+const fs = require('fs');
+const { exit } = require('process');
+const langPath = "Northstar.Client/mod/resource";
+const knownLanguages = ['english', 'french', 'german', 'italian', 'japanese', 'mspanish', 'portuguese', 'russian', 'spanish', 'tchinese'];
+
+
+// Proceed checks before launch
+if (![2,3].includes(process.argv.length)) {
+ console.error('Wrong number of arguments, either call this script with no argument, or with a language.');
+ return;
+}
+const inputLang = process.argv[2];
+if (process.argv.length === 3 && !knownLanguages.includes(inputLang)) {
+ console.error(`"${inputLang}" is not a valid language.\nValid languages are: ${knownLanguages}`);
+ return;
+}
+
+
+// Get language files names
+const langs = fs.readdirSync(langPath)
+ .filter(lang => lang.indexOf('northstar_client_localisation_') !== -1);
+
+
+function getLanguageKeys (lang) {
+ if (knownLanguages.indexOf(lang) === -1) return;
+ return fs.readFileSync(`${langPath}/northstar_client_localisation_${lang}.txt`, {encoding:'utf16le', flag:'r'})
+ .split('\n')
+ .filter(line => line.length !== 0) // remove empty lines
+ .map(line => line.replaceAll(/\s+/g, ' ').trim()) // remove multiple spaces
+ .map(line => line.replaceAll('\t', '')) // remove tabs characters
+
+ // keep only lines with translation keys
+ .filter(line => {
+ const words = line.split('" "');
+ return words.length === 2 && words[1] !== 'english"'
+ })
+ .map(line => line.split('" "')[0].substring(1)); // only keep translation keys (throw values)
+}
+
+// We use english keys as reference for other languages
+const englishKeys = getLanguageKeys('english');
+const inputLanguages = inputLang !== undefined ? ["", inputLang] : [...knownLanguages];
+inputLanguages.shift();
+
+// Check for each language if there are missing keys
+var missingKeysCount = 0;
+
+for (const language of inputLanguages) {
+ const languageKeys = getLanguageKeys(language);
+ const missingKeys = [...englishKeys] // clone
+ .filter(key => languageKeys.indexOf(key) === -1);
+ const missingKeysLength = missingKeys.length;
+ console.log(
+ missingKeysLength === 0
+ ? `✔️ "${language}" doesn't have missing keys.`
+ : `❌ "${language}" has ${missingKeys.length} missing key${missingKeys.length === 1 ? '' : 's'}:`
+ );
+
+ if (missingKeysLength !== 0) {
+ console.log(missingKeys);
+ missingKeysCount += missingKeys.length;
+ }
+}
+
+process.exitCode = missingKeysCount;
+exit();