mirror of
https://github.com/shuaiplus/nodewarden.git
synced 2026-06-20 13:00:39 +00:00
43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
const { readLocale } = require('./i18n-utils.cjs');
|
|
|
|
const localeFiles = [
|
|
['en', 'en.ts', 'en'],
|
|
['zh-CN', 'zh-CN.ts', 'zhCN'],
|
|
['zh-TW', 'zh-TW.ts', 'zhTW'],
|
|
['ru', 'ru.ts', 'ru'],
|
|
];
|
|
|
|
const locales = Object.fromEntries(
|
|
localeFiles.map(([locale, fileName, variableName]) => [locale, readLocale(fileName, variableName)])
|
|
);
|
|
const base = locales.en;
|
|
const baseKeys = Object.keys(base).sort();
|
|
const placeholderRe = /\{\w+\}/g;
|
|
const errors = [];
|
|
|
|
for (const [locale, table] of Object.entries(locales)) {
|
|
const keys = Object.keys(table).sort();
|
|
const missing = baseKeys.filter((key) => !(key in table));
|
|
const extra = keys.filter((key) => !baseKeys.includes(key));
|
|
if (missing.length || extra.length) {
|
|
errors.push({ locale, missing, extra });
|
|
}
|
|
|
|
for (const key of baseKeys) {
|
|
const basePlaceholders = Array.from(String(base[key]).matchAll(placeholderRe), (match) => match[0]).sort().join('|');
|
|
const localePlaceholders = Array.from(String(table[key]).matchAll(placeholderRe), (match) => match[0]).sort().join('|');
|
|
if (basePlaceholders !== localePlaceholders) {
|
|
errors.push({ locale, key, basePlaceholders, localePlaceholders });
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log(JSON.stringify({
|
|
counts: Object.fromEntries(Object.entries(locales).map(([locale, table]) => [locale, Object.keys(table).length])),
|
|
errors,
|
|
}, null, 2));
|
|
|
|
if (errors.length) {
|
|
process.exit(1);
|
|
}
|