UNPKG

i18ntk

Version:

i18ntk (i18n Toolkit) - A comprehensive, enterprise-grade internationalization (i18n) management toolkit for JavaScript/TypeScript projects with advanced analysis, validation, and automation features

84 lines (67 loc) 2.8 kB
#!/usr/bin/env node const fs = require('fs'); const path = require('path'); const { loadTranslations, t } = require('../utils/i18n-helper'); // Load translations loadTranslations('en'); // Configuration const SOURCE_DIR = path.join(__dirname, '..', 'ui-locales'); const TARGET_LANGUAGES = ['de', 'fr', 'es', 'ru', 'ja', 'zh']; function createLanguageTemplate(lang) { const langDir = path.join(SOURCE_DIR, lang); if (!fs.existsSync(langDir)) { fs.mkdirSync(langDir, { recursive: true }); console.log(t('exportTranslations.createdDirectory', { dir: langDir })); } const enDir = path.join(SOURCE_DIR, 'en'); const enFiles = fs.readdirSync(enDir).filter(file => file.endsWith('.json')); console.log(t('exportTranslations.foundFiles', { count: enFiles.length })); enFiles.forEach(file => { console.log(` - ${file}`); }); enFiles.forEach(file => { const sourceFile = path.join(enDir, file); const targetFile = path.join(langDir, file); if (!fs.existsSync(targetFile)) { const sourceContent = JSON.parse(fs.readFileSync(sourceFile, 'utf8')); const templateContent = createTemplateFromEnglish(sourceContent); fs.writeFileSync(targetFile, JSON.stringify(templateContent, null, 2)); console.log(t('exportTranslations.createdTemplate', { lang, file })); } else { console.log(t('exportTranslations.skippedExisting', { lang, file })); } }); } function createTemplateFromEnglish(obj) { if (typeof obj === 'string') { return '⚠️ TRANSLATION NEEDED ⚠️'; } else if (typeof obj === 'object' && obj !== null) { const result = {}; for (const [key, value] of Object.entries(obj)) { result[key] = createTemplateFromEnglish(value); } return result; } return obj; } function main() { console.log(`\n${t('exportTranslations.title')}\n`); console.log(t('exportTranslations.creatingTemplates', { count: TARGET_LANGUAGES.length })); console.log(); TARGET_LANGUAGES.forEach(lang => { createLanguageTemplate(lang); }); const enFiles = fs.readdirSync(path.join(SOURCE_DIR, 'en')).filter(file => file.endsWith('.json')); console.log(`\n${t('exportTranslations.summary')}`); console.log(t('exportTranslations.summaryLanguages', { count: TARGET_LANGUAGES.length })); console.log(t('exportTranslations.summaryFilesPerLanguage', { count: enFiles.length })); console.log(t('exportTranslations.summaryTotalFiles', { count: TARGET_LANGUAGES.length * enFiles.length })); console.log(`\n${t('exportTranslations.success')}`); console.log(t('exportTranslations.location', { dir: SOURCE_DIR })); console.log(t('exportTranslations.nextSteps')); console.log(); } if (require.main === module) { main(); } module.exports = { createLanguageTemplate };