From 718ef4aa1ed69387a6dbaee67436918ea1d63269 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 2 May 2024 15:10:39 +0200 Subject: [PATCH] add simple script to check how many variables from the main language is in use at the moment --- .../localization/unused-language-keys.js | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/devops/localization/unused-language-keys.js diff --git a/src/Umbraco.Web.UI.Client/devops/localization/unused-language-keys.js b/src/Umbraco.Web.UI.Client/devops/localization/unused-language-keys.js new file mode 100644 index 0000000000..6fa81fc45e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/devops/localization/unused-language-keys.js @@ -0,0 +1,64 @@ +/** + * This script is used to find unused language keys in the javascript files. It will take a main language (en.js) and compare with the other languages. + * + * Usage: node devops/localization/unused-language-keys.js + * Example: node devops/localization/unused-language-keys.js + * + * Copyright (c) 2024 by Umbraco HQ + */ +import fs from 'fs'; +import path from 'path'; +import glob from 'tiny-glob'; + +const mainLanguage = 'en.js'; + +const __dirname = import.meta.dirname; +const languageFolder = path.join(__dirname, '../../dist-cms/assets/lang'); + +// Check that the languageFolder exists +if (!fs.existsSync(languageFolder)) { + console.error(`The language folder does not exist: ${languageFolder}. You need to build the project first by running 'npm run build'`); + process.exit(1); +} + +const mainKeys = (await import(path.join(languageFolder, mainLanguage))).default; +const mainMap = buildMap(mainKeys); +const keys = Array.from(mainMap.keys()); +const usedKeys = new Set(); + +const elementAndControllerFiles = await glob(`${__dirname}/../../src/**/*.ts`); + +console.log(`Checking ${elementAndControllerFiles.length} files for unused keys`); + +// Find all the keys used in the javascript files +const filePromise = Promise.all(elementAndControllerFiles.map(async (file) => { + // Check if each key is in the file (simple) + const fileContent = fs.readFileSync(file, 'utf8'); + keys.forEach((key) => { + if (fileContent.includes(key)) { + usedKeys.add(key); + } + }); +})); + +await filePromise; + +const unusedKeys = Array.from(mainMap.keys()).filter((key) => !usedKeys.has(key)); + +console.log(`\n${mainLanguage}:`); +console.log(`Used keys in ${mainLanguage}:`); +console.log(usedKeys); +console.log(`Unused keys in ${mainLanguage}:`); +console.log(unusedKeys); + +function buildMap(keys) { + const map = new Map(); + + for (const key in keys) { + for (const subKey in keys[key]) { + map.set(`${key}_${subKey}`, keys[key][subKey]); + } + } + + return map; +}