i18n: uzupełnij etykiety language.*; skrypty tłumaczeń
This commit is contained in:
49
scripts/fill_language_labels.cjs
Normal file
49
scripts/fill_language_labels.cjs
Normal file
@@ -0,0 +1,49 @@
|
||||
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.');
|
||||
Reference in New Issue
Block a user