AdGuardHome/scripts/translations/unused.js

64 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-09-16 15:42:57 +01:00
const fs = require('fs');
const path = require('path');
const SRC_DIR = '../../client/src/'
const LOCALES_DIR = '../../client/src/__locales';
const BASE_FILE = path.join(LOCALES_DIR, 'en.json');
// Strings that may be found by the algorithm,
// but in fact they are used.
const KNOWN_USED_STRINGS = {
'blocking_mode_refused': true,
'blocking_mode_nxdomain': true,
'blocking_mode_custom_ip': true,
}
function traverseDir(dir, callback) {
fs.readdirSync(dir).forEach(file => {
let fullPath = path.join(dir, file);
if (fs.lstatSync(fullPath).isDirectory()) {
traverseDir(fullPath, callback);
} else {
callback(fullPath);
}
});
}
const contains = (key, files) => {
for (let file of files) {
if (file.includes(key)) {
return true;
}
}
return false;
}
const main = () => {
const baseLanguage = require(BASE_FILE);
const files = [];
traverseDir(SRC_DIR, (path) => {
const canContain = (path.endsWith('.js') || path.endsWith('.json')) &&
!path.includes(LOCALES_DIR);
if (canContain) {
files.push(fs.readFileSync(path).toString());
}
});
const unused = [];
for (let key in baseLanguage) {
if (!contains(key, files) && !KNOWN_USED_STRINGS[key]) {
unused.push(key);
}
}
console.log('Unused keys:');
for (let key of unused) {
console.log(key);
}
}
main();