50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
const fs = require('fs');
|
|
const path = 'src/composables/useI18n.js';
|
|
let content = fs.readFileSync(path, 'utf8');
|
|
|
|
const messagesMatch = content.match(/const messages = ({[\s\S]*?});/);
|
|
if (!messagesMatch) {
|
|
console.error('Could not find messages object');
|
|
process.exit(1);
|
|
}
|
|
|
|
const messages = eval(`(${messagesMatch[1]})`);
|
|
const en = messages.en || {};
|
|
const allLangKeys = Object.keys(en).filter((k) => k.startsWith('language.'));
|
|
|
|
function injectMissingLanguageLabels(localeCode) {
|
|
const blockStartRegex = new RegExp(`\\s{2}['\"]?${localeCode}['\"]?\\s*:\\s*\\{`);
|
|
const startIndex = content.search(blockStartRegex);
|
|
if (startIndex === -1) return;
|
|
const braceStart = content.indexOf('{', startIndex);
|
|
let i = braceStart + 1;
|
|
let depth = 1;
|
|
while (i < content.length && depth > 0) {
|
|
if (content[i] === '{') depth++;
|
|
else if (content[i] === '}') depth--;
|
|
i++;
|
|
}
|
|
const block = content.slice(braceStart + 1, i - 1);
|
|
let updated = block;
|
|
let addedAny = false;
|
|
allLangKeys.forEach((key) => {
|
|
const keyRegex = new RegExp(`(['\"])${key}\\1\\s*:\\s*(['\"]).*?\\2`);
|
|
if (!keyRegex.test(updated)) {
|
|
const value = en[key];
|
|
updated = updated.trim().endsWith(',') ? updated + `\n '${key}': '${value}'` : updated + `,\n '${key}': '${value}'`;
|
|
addedAny = true;
|
|
}
|
|
});
|
|
if (addedAny) {
|
|
content = content.slice(0, braceStart + 1) + updated + content.slice(i - 1);
|
|
}
|
|
}
|
|
|
|
Object.keys(messages).forEach((locale) => {
|
|
if (locale === 'en') return;
|
|
injectMissingLanguageLabels(locale);
|
|
});
|
|
|
|
fs.writeFileSync(path, content);
|
|
console.log('Filled missing language.* labels for all locales.');
|