mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-09-23 20:18:42 +08:00
chore(i18n): cleanup i18n file (#8318)
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
// this script is used to clean up the unused keys in the i18n file
|
||||
// just run `node packages/frontend/i18n/cleanup.mjs`
|
||||
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
import { glob } from 'glob';
|
||||
|
||||
const REPO_ROOT = path.resolve(
|
||||
fileURLToPath(import.meta.url),
|
||||
'..',
|
||||
'..',
|
||||
'..',
|
||||
'..'
|
||||
);
|
||||
|
||||
const files = await glob('packages/frontend/**/src/**/*.{js,tsx,ts}', {
|
||||
ignore: [
|
||||
'**/node_modules/**',
|
||||
'**/packages/frontend/i18n/src/resources/*',
|
||||
'**/dist/**',
|
||||
'**/lib/**',
|
||||
],
|
||||
cwd: REPO_ROOT,
|
||||
absolute: true,
|
||||
});
|
||||
|
||||
const filesWithContent = files.map(file => {
|
||||
return {
|
||||
path: file,
|
||||
content: fs.readFileSync(file, 'utf8'),
|
||||
};
|
||||
});
|
||||
|
||||
const enjson = JSON.parse(
|
||||
fs.readFileSync(
|
||||
path.join(REPO_ROOT, 'packages/frontend/i18n/src/resources/en.json'),
|
||||
'utf8'
|
||||
)
|
||||
);
|
||||
|
||||
const keys = Object.keys(enjson).filter(
|
||||
// exceptions
|
||||
key => !key.startsWith('com.affine.payment.modal.')
|
||||
);
|
||||
|
||||
const unusedKeys = keys.filter(key => {
|
||||
const regex1 = new RegExp(`[\`'"]${key.replace('.', '\\.')}[\`'"]`, 'g');
|
||||
// some place use i18n key like `t[`com.affine.modal.${var}`]`
|
||||
// com.affine.modal.confirm -> com.affine.modal.
|
||||
const keyWithoutLastDot = key.replace(/(?<=\.)[^.]+$/, '');
|
||||
const regex2 = new RegExp(
|
||||
`[\`'"]${keyWithoutLastDot.replace('.', '\\.')}`,
|
||||
'g'
|
||||
);
|
||||
for (const file of filesWithContent) {
|
||||
const match = file.content.match(regex1) || file.content.match(regex2);
|
||||
if (match) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
for (const key of unusedKeys) {
|
||||
delete enjson[key];
|
||||
}
|
||||
|
||||
// write back to file
|
||||
fs.writeFileSync(
|
||||
path.join(REPO_ROOT, 'packages/frontend/i18n/src/resources/en.json'),
|
||||
JSON.stringify(enjson, null, 2)
|
||||
);
|
||||
Reference in New Issue
Block a user