frontend/i18n-unused.js (view raw)
1var fs = require('fs');
2var glob = require('glob');
3
4glob(
5 '**/*.{js,jsx,ts,tsx}',
6 {ignore: ['**/node_modules/**'], absolute: true},
7 function (err, filesPaths) {
8 if (err) {
9 console.log(err);
10 return;
11 }
12
13 const i18nSourceFileRelativePath = '/locales/en.json';
14 const i18nSourceFilePath = `${__dirname}${i18nSourceFileRelativePath}`;
15
16 const sourceJson = fs.readFileSync(i18nSourceFilePath, 'UTF-8');
17 const preSourceTranslations = JSON.parse(sourceJson);
18 const preKeys = Object.keys(preSourceTranslations);
19
20 const keysToKeep = preKeys.filter(k => k.split('.')[0] === 'PROTECTED');
21 filesPaths.forEach(filePath => {
22 const content = fs.readFileSync(filePath, 'UTF-8');
23
24 preKeys.forEach(key => {
25 if (content.includes(key) && !keysToKeep.includes(key)) {
26 keysToKeep.push(key);
27
28 //supports plurals for english source translation
29 if (preKeys.includes(`${key}_plural`)) {
30 keysToKeep.push(`${key}_plural`);
31 }
32 }
33 });
34 });
35
36 const sourceTranslationsToKeep = {};
37 keysToKeep.sort();
38 keysToKeep.forEach(key => {
39 sourceTranslationsToKeep[key] = preSourceTranslations[key];
40 });
41
42 const sourceJsonToKeep = JSON.stringify(sourceTranslationsToKeep, null, 4);
43 fs.writeFileSync(i18nSourceFilePath, sourceJsonToKeep);
44 console.warn(
45 `This script is a workaround, ${
46 preKeys.length - keysToKeep.length
47 } keys were removed from the ${i18nSourceFileRelativePath}, please make sure to review them before running i18n-format and adapt the code to avoid future deletion.`
48 );
49 }
50);