i18ntk
Version:
i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.
805 lines • 144 kB
JSON
{
"meta": {
"version": "3.1.2",
"updated": "2026-05-07"
},
"common": {
"welcome": "Welcome",
"hello": "Hello",
"goodbye": "Goodbye",
"yes": "Yes",
"no": "No",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"loading": "Loading...",
"offlineTitle": "You are offline",
"offlineMessage": "Please check your internet connection",
"tryReconnect": "Try to reconnect",
"logout": "Logout",
"login": "Login",
"amount": "Amount",
"success": "Success",
"error": "Error",
"warning": "Warning",
"info": "Info:",
"debug": "Debug",
"progress": "Progress:",
"remaining": "Remaining:",
"total": "Total:",
"completed": "7. Completed successfully!",
"missing": "Missing",
"partial": "Partial",
"sameAsSource": "Same as source:",
"formatMismatch": "Format mismatch:",
"typeMismatch": "Type mismatch:",
"structureMismatch": "Structure mismatch:",
"invalidOption": "Invalid option",
"separator": "==================================================",
"initializationFailed": "❌ Initialization failed: {error}",
"stackTrace": "Stack trace: {stack}",
"pressEnterToContinue": "Press Enter to continue...",
"pressEnterToReturn": "Press Enter to return to main menu...",
"stepCompleted": "Step '{stepName}' completed.",
"stepFailed": "Step '{stepName}' failed.",
"runningStep": "Running step: {stepName}",
"command": "Command: {command}",
"startingWorkflow": "Starting workflow...",
"workflowCompleted": "Workflow completed.",
"checkReports": "Check reports for details.",
"errorExecutingCommand": "Error executing command: {error}",
"genericError": "❌ Error: {error}",
"errors": {
"errors": "Errors:",
"genericError": "❌ Error: {error}",
"initializationFailed": "❌ Initialization failed: {error}",
"initializationCancelled": "❌ Initialization cancelled by user.",
"translationKeyNotFound": "Translation key not found: {key}",
"sourceDirectoryNotFound": "Source directory not found: {directory}",
"configLoadingFailed": "Configuration loading failed",
"invalidSourceDirectory": "Invalid source directory: {directory}",
"securityViolation": "Security violation detected",
"authenticationFailed": "Authentication failed",
"sourceEqualsI18nWarn": "⚠️ sourceDir equals i18nDir ({sourceDir}). Falling back to {fallback} for source scanning."
},
"errorGeneratingStatusSummary": "Error generating status summary: {error}",
"errorRunningDebugTool": "Error running debug tool '{displayName}': {error}",
"errorReadingDebugLogs": "Error reading debug logs: {error}",
"errorAnalyzingLogFile": "Error analyzing log file: {error}",
"errorAnalyzingTranslationKeys": "Error analyzing translation keys: {error}",
"errorAnalyzingTranslationCompleteness": "Error analyzing translation completeness: {error}",
"analyzingTranslationCompleteness": "Analyzing translation completeness across all languages...",
"i18nDirectoryNotFound": "⚠️ i18n directory not found: {i18nDir}",
"translationCompletenessAnalysisFailed": "⚠️ Translation completeness analysis failed: {error}",
"failedToAnalyzeLanguage": "❌ Failed to analyze language {language}: {error}",
"errorReadingI18nDirectory": "❌ Error reading i18n directory:",
"languageCompletenessTitle": "📈 TRANSLATION COMPLETENESS BY LANGUAGE",
"errorAnalyzingTranslationFormat": "Error analyzing translation format: {error}",
"errorAnalyzingTranslationType": "Error analyzing translation type: {error}",
"errorAnalyzingTranslationStructure": "Error analyzing translation structure: {error}",
"errorAnalyzingTranslationFormatMismatch": "Error analyzing translation format mismatch: {error}",
"errorAnalyzingTranslationTypeMismatch": "Error analyzing translation type mismatch: {error}",
"errorAnalyzingTranslationStructureMismatch": "Error analyzing translation structure mismatch: {error}",
"errorAnalyzingTranslationSameAsSource": "Error analyzing translation same as source: {error}",
"title": "Status",
"nextStep1": "1. Check usage analysis:",
"nextStep2": "2. Validate translations:",
"nextStep3": "3. Analyze completeness:",
"nextStep4": "4. Complete missing translations:",
"nextStep5": "5. Generate summary report:",
"nextStep6": "6. Review and finalize translations:",
"generating": "Generating summary report...",
"review": "Reviewing translations...",
"finalizing": "Finalizing translations...",
"finalized": "Finalized successfully!",
"warnings": "Warnings:",
"completedKeys": "Completed keys:",
"missingKeys": "Missing keys:",
"partialKeys": "Partial keys:",
"home": "Home",
"settings": "Settings",
"startingSettings": "🎛️ Starting Settings CLI...",
"confirm": "Confirm",
"errorExiting": "Error while exiting."
},
"errors": {
"invalidOption": "❌ Invalid option: {option}. Please try again.",
"readlineClosed": "Input stream is closed; running in non-interactive mode.",
"noPackageJson": "No package.json found. Cannot auto-detect i18n framework.",
"noI18nDir": "No i18n directory found in the project root.",
"noI18nConfig": "No i18n configuration file found in the project root.",
"errorReadingDebugLogs": "Error reading debug logs: {error}"
},
"scanner": {
"help_message": "I18n Text Scanner Usage: node i18ntk-scanner.js [options] Options: --source-dir <dir> Source directory to scan (default: ./src) --output <file> Output file for scan results (default: ./i18ntk-scanner-report.json) --framework <name> Framework to target (react, vue, angular, vanilla) --patterns <patterns> Custom regex patterns (comma-separated) --include-tests Include test files in scan --exclude-dirs <dirs> Directories to exclude (comma-separated) --help Show this help Examples: node i18ntk-scanner.js --source-dir=./src --framework=react node i18ntk-scanner.js --patterns 'console.log\\((.*?)\\)' --include-tests node i18ntk-scanner.js --output=./scan-results.json",
"help_options": {
"source_dir": "Source directory to scan for i18n issues",
"output_dir": "Directory for scan reports and results",
"framework": "Target framework (react, vue, angular, vanilla)",
"patterns": "Custom regex patterns for text detection",
"exclude": "File patterns to exclude from scanning",
"output_report": "Generate detailed scan report",
"min_length": "Minimum text length to consider for translation",
"max_length": "Maximum text length to consider for translation",
"include_tests": "Include test files in the scanning process"
},
"starting": "🔍 Starting text scanner for framework: {framework}",
"sourceDirectory": "📁 Scanning directory: {sourceDir}",
"frameworkDetected": "🎯 Detected framework: {framework}",
"scanningFiles": "📊 Scanning {fileCount} files...",
"foundTexts": "📝 Found {textCount} texts requiring translation",
"generatingReport": "📊 Generating detailed report...",
"reportSaved": "💾 Scan report saved to: {reportPath}",
"noTextsFound": "✅ No hardcoded English texts found",
"scanComplete": "🎉 Scan completed successfully!",
"analysisTitle": "🔍 TRANSLATION SCAN ANALYSIS",
"fileSummary": "📄 {file}: {count} texts found",
"textLocation": "📍 Line {line}: {text}",
"foundText": "Found {count} potential hardcoded text instances",
"context": "📝 Context: {context}",
"severity": "⚠️ Severity: {severity}",
"recommendation": "💡 Recommendation: {recommendation}",
"welcome": {
"title": "🎯 Welcome to the Text Scanner!",
"description": "This tool scans your source code for hardcoded English text that may need translation."
},
"frameworkPrompt": {
"title": "🎯 Select Framework",
"available": "Available frameworks: react, vue, angular, vanilla",
"description": "Enter the framework type (or press Enter for auto-detection):",
"input": "Framework:"
},
"directoryPrompt": {
"title": "📁 Select Source Directory",
"current": "Current directory: {dir}",
"description": "Enter the directory to scan (or press Enter for current):",
"input": "Directory:"
},
"options": {
"includeTests": "Include test files?",
"excludeDirs": "Directories to exclude (comma-separated):",
"customPatterns": "Custom patterns to scan for (regex):"
},
"reportGenerated": "Scan report generated: {path}"
},
"fixer": {
"help_message": "I18n Translation Fixer Usage: node i18ntk-fixer.js [options] Options: --source-dir <dir> Source directory to scan (default: ./locales) --languages <langs> Comma separated list of languages to fix --markers <markers> Comma separated markers to treat as untranslated --no-backup Skip automatic backup creation --help Show this help Examples: node i18ntk-fixer.js --languages de,fr node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED node i18ntk-fixer.js --no-backup",
"starting": "🚀 Starting translation fixing for languages: {languages}",
"sourceDirectory": "📁 Source directory: {sourceDir}",
"sourceLanguage": "🔤 Source language: {sourceLanguage}",
"markers": "🏷️ Markers to fix: {markers}",
"scanningLanguage": "📊 Scanning {language}...",
"noLanguages": "❌ No languages specified for fixing.",
"allComplete": "🎉 All translations are already complete!",
"fullReportSaved": "📊 Full report saved to: {reportPath}",
"reviewReport": "Please review the report before proceeding.",
"backupCreated": "💾 Backup created successfully.",
"applyingFixes": "🔄 Applying fixes...",
"fixingComplete": "✅ Translation fixing complete!",
"operationCancelled": "❌ Operation cancelled by user.",
"analysisTitle": "🔍 TRANSLATION FIXING ANALYSIS",
"analysisSeparator": "==================================================",
"totalIssues": "Total issues found: {totalIssues}",
"missingTranslations": "Missing translations: {missing}",
"placeholderTranslations": "Placeholder translations: {placeholder}",
"noIssues": "✅ No issues found. All translations are complete.",
"detailedIssues": "📋 DETAILED ISSUES:",
"detailedSeparator": "--------------------------------------------------",
"filePath": "📄 {file} → {path}",
"missingKey": "❌ MISSING: {source} → {new}",
"placeholderKey": "⚠️ PLACEHOLDER: \"{target}\" → \"{new}\"",
"moreIssues": "... and {count} more issues. Check the report file for complete details.",
"confirmationTitle": "🤔 Do you want to proceed with these fixes?",
"confirmationOptions": "Options:",
"optionYes": "y - Yes, apply all fixes",
"optionNo": "n - No, cancel operation",
"optionShow": "s - Show detailed issues",
"choicePrompt": "Your choice (y/n/s):",
"nonInteractiveMode": "⚡ Non-interactive mode detected - applying fixes automatically...",
"reportGenerated": "📊 Fixer report generated: {path}",
"summary": "Fixer summary:",
"welcome": {
"title": "🎯 Welcome to the Translation Fixer!",
"description": "This tool will help you fix broken translations and placeholders across your locale files."
},
"markerPrompt": {
"title": "🏷️ Configure Placeholder Markers",
"description": "Enter the markers that indicate untranslated text (comma-separated):",
"currentDefaults": "Default markers: {markers}",
"input": "Markers (or press Enter for defaults):"
},
"languagePrompt": {
"title": "🌍 Select Languages to Fix",
"available": "Available languages: {languages}",
"description": "Enter languages to fix (comma-separated) or press Enter for all:",
"input": "Languages:",
"noLanguages": "No languages found to fix."
},
"directoryPrompt": {
"title": "📁 Select Directory",
"current": "Current directory: {dir}",
"description": "Enter the directory containing your locale files (or press Enter for current):",
"input": "Directory:"
},
"backupLocation": "Backup location: {dir}",
"completed": "Fixing completed.",
"creatingBackup": "Creating backup in {dir}...",
"dryRunMode": "Dry run mode: {mode}",
"error": "Fixer failed: {error}",
"fixing": "Fixing {language}...",
"foundLanguages": "Found {count} languages: {languages}",
"languageFixed": "{language}: fixed {fixed} key(s), skipped {skipped}.",
"running": "Running translation fixer...",
"totalFixed": "Total fixed: {count}"
},
"autorun": {
"stepAnalyzeTranslations": "Analyze translations",
"stepCompletedWithIcon": "✅ Completed: {stepName}",
"stepValidateTranslations": "Validate translations",
"stepRunning": "▶️ Step {stepNumber}/{totalSteps}: {stepName}",
"separator": "==================================================",
"stepFailed": "❌ Failed: {stepName}",
"errorLabel": "Error",
"autoRunScriptTitle": "🧪 Auto-Run Workflow",
"usageTitle": "Usage",
"runAllSteps": "Run: node i18ntk-autorun.js",
"configureSettingsFirst": "Config: i18ntk-config.json or CLI flags",
"runSpecificSteps": "Use --steps=1,3 or --list to show steps",
"showHelp": "--help for more info",
"examplesTitle": "Examples",
"configExample": "node i18ntk-autorun.js --ui-language=zh",
"stepsExample1": "node i18ntk-autorun.js --steps=analyze,validate",
"stepsExample2": "node i18ntk-autorun.js --list",
"customSettingsConfiguration": "Custom autorun settings",
"availableSteps": "Available steps",
"startingAutoRunWorkflow": "🚀 Starting Auto-Run Workflow...",
"workflowIncludesSteps": "Workflow includes {count} steps:",
"missingRequiredFile": "Missing required file: {file}",
"workflowStopped": "Workflow stopped due to a failure.",
"workflowCompleted": "🎉 Workflow completed!",
"successfulSteps": "Successful steps: {count}",
"failedSteps": "Failed steps: {count}",
"stepInitializeProject": "Initialize project",
"stepCheckUsage": "Check key usage",
"stepGenerateSummary": "Generate summary report",
"runInitializationFirst": "Please run initialization first.",
"initializationCheckPassed": "Initialization check passed.",
"runningStep": "Running step: {stepName}",
"commandLabel": "Command: {command}",
"stepCompletedWithTime": "Step '{stepName}' completed in {duration}ms.",
"stepCompleted": "Step '{stepName}' completed.",
"stepFailedWithError": "Step '{stepName}' failed with error: {error}",
"requiredStepFailed": "Required step failed. Stopping workflow.",
"optionalStepFailed": "Optional step failed. Continuing workflow.",
"stepRequired": "(Required)",
"stepOptional": "(Optional)",
"startingExecution": "Starting execution...",
"pressEnterToContinue": "Press Enter to continue...",
"runningSelectedSteps": "Running selected steps...",
"invalidStepNumber": "Invalid step number: {stepNum}",
"executionReport": "Execution Report:",
"requiredFailedSteps": "Required steps failed: {count}",
"stepDetails": "Step Details:",
"reportSavedTo": "Report saved to: {path}",
"overallStatusSuccess": "SUCCESS",
"overallStatusFailed": "FAILED",
"overallStatus": "Overall Status: {status}",
"pressEnterForDefaults": "Press Enter to use default settings for any prompt.",
"sourceDirPrompt": "Enter source directory (default: {default}):",
"sourceLangPrompt": "Enter source language (default: {default}):",
"targetLangsPrompt": "Enter target languages (comma-separated, default: {default}):",
"translationMarkerPrompt": "Enter translation marker (default: {default}):",
"outputDirPrompt": "Enter output directory for reports (default: {default}):",
"settingsUpdatedSuccessfully": "Settings updated successfully!",
"errorConfiguringSettings": "Error configuring settings: {error}",
"configurationComplete": "Configuration complete.",
"runAutoRunCommand": "Now you can run the auto-run command.",
"configurationFailed": "Configuration failed: {error}",
"noValidStepNumbers": "No valid step numbers provided.",
"autoRunFailed": "Auto-run failed: {error}",
"stepCompleteTranslations": "Complete Translations",
"stepAnalyzeSizing": "Analyze Sizing",
"stepCompletedIcon": "✅",
"stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Step '{stepName}' running...",
"stepFailedIcon": "❌",
"translationLoadWarning": "Warning: Could not load {lang} translations",
"configReadError": "Error reading {file}"
},
"analyze": {
"help_message": "I18n Translation Analyzer Usage: node i18ntk-analyze.js [options] Options: --source-dir <dir> Source directory to scan (default: ./src) --i18n-dir <dir> I18n directory (default: ./src/locales) --output-report Generate detailed report --output-dir <dir> Output directory for reports (default: ./reports) --help Show this help Examples: node i18ntk-analyze.js --output-report node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales node i18ntk-analyze.js --output-dir=./analysis --output-report",
"source_directory": "📁 Source directory: {sourceDir}",
"i18n_directory": "🌐 I18n directory: {i18nDir}",
"loading_translation_files": "📋 Loading translation files...",
"sourceDirectoryLabel": "📁 Source Directory: {sourceDir}",
"sourceLanguageLabel": "🌍 Source Language: {sourceLanguage}",
"strictModeLabel": "⚙️ Strict Mode: {mode}",
"found_translation_files_count": "✅ Found {count} translation files",
"analyzing_translations": "🔍 Analyzing translations...",
"analysis_completed_successfully": "🎉 Analysis completed successfully!",
"analysis_results": "📊 ANALYSIS RESULTS",
"language_analysis_stats": "{language}: {translatedKeys}/{totalKeys} ({percentage}% translated)",
"sample_missing_keys": "Sample missing keys:",
"missing_key": "- {key}",
"and_more_missing": "...and {count} more.",
"sample_unused_keys": "Sample unused keys:",
"unused_key": "- {key}",
"and_more_unused": "...and {count} more.",
"recommendations": "📋 RECOMMENDATIONS",
"add_missing_translations": "💡 Add missing translations to improve coverage.",
"remove_unused_translations": "💡 Remove unused translations to keep your project clean.",
"next_steps": "📋 NEXT STEPS",
"review_analysis_results": "1. Review the analysis results in the console or generated report.",
"run_with_output_report": "2. Run with --output-report for detailed report.",
"add_or_remove_translations": "3. Add missing translations or remove unused ones.",
"rerun_analysis": "4. Re-run analysis to verify improvements.",
"analysis_summary": "📊 ANALYSIS SUMMARY",
"source_files_scanned": "Source files scanned: {fileCount}",
"translation_files_checked": "Translation files checked: {translationFileCount}",
"total_keys": "Total keys: {totalKeys}",
"translated_keys": "Translated keys: {translatedKeys}",
"missing_keys": "Missing keys: {missingKeys}",
"unused_keys": "Unused keys: {unusedKeys}",
"translation_coverage": "Translation coverage: {coverage}%",
"analysis_passed_for_language": "✅ Analysis passed for {language}",
"analysis_failed_for_language": "❌ Analysis failed for {language} ({missingKeys} missing, {unusedKeys} unused)",
"starting": "🔍 Starting translation analysis...",
"foundLanguages": "📋 Found {count} languages to analyze: {languages}",
"analyzing": "🔄 Analyzing {language}...",
"reportTitle": "📊 TRANSLATION ANALYSIS REPORT",
"generated": "Generated: {timestamp}",
"status": "Status: {translated}/{total} keys ({percentage}% translated)",
"filesAnalyzed": "Files analyzed: {analyzed}/{total}",
"keysNeedingTranslation": "Keys needing translation: {count}",
"fileBreakdown": "📋 FILE BREAKDOWN",
"error": "Error",
"completed": "✅ Analysis completed for {language}",
"progress": "📊 Overall Progress: {translated}/{total} languages processed",
"reportSaved": "Report saved: {reportPath}",
"summary": "📊 ANALYSIS SUMMARY",
"finished": "✅ Analysis completed successfully!",
"statusFileMissing": "❌ Translation file missing",
"sourceKeys": "📊 Source keys: {count}",
"translation": "📊 Translation: {translated}/{total} ({percentage}%)",
"structure": "🗂️ Structure: {status}",
"consistent": "Consistent",
"inconsistent": "Inconsistent",
"missingKeys": "Missing keys: {count}",
"extraKeys": "Extra keys: {count}",
"issues": "⚠️ Issues found: {count}",
"issueType": {
"not_translated": "Not translated: {count}",
"empty_value": "Empty values: {count}",
"partial_translation": "Partial translations: {count}",
"format_mismatch": "Format mismatches: {count}",
"type_mismatch": "Type mismatches: {count}",
"structure_mismatch": "Structure mismatches: {count}",
"same_as_source": "Same as source: {count}"
},
"keysToTranslate": "📋 KEYS TO TRANSLATE",
"key": "Key",
"english": "English",
"needsTranslation": "NEEDS TRANSLATION",
"andMoreKeys": "...and {count} more keys.",
"noLanguages": "⚠️ No target languages found.",
"languageStats": "{language}: {percentage}% complete ({translated}/{total} keys)",
"invalidReportFilePath": "Invalid report file path",
"failedToWriteReportFile": "Failed to write report file securely"
},
"complete": {
"configLoadedSuccessfully": "Configuration loaded successfully",
"configLoadingFailed": "Configuration loading failed",
"sourceLanguageNotFound": "Source language directory not found: {sourceLanguage}",
"couldNotParseTarget": "Could not parse target file: {file}",
"couldNotParseSource": "Could not parse source file: {file}",
"reportGenerated": "Report generated: {path}",
"generateReportPrompt": "Would you like a report generated?",
"title": "🌍 I18NTK TRANSLATION COMPLETION",
"separator": "============================================================",
"sourceDir": "📁 Source directory: {sourceDir}",
"sourceLanguage": "🌐 Source language: {sourceLanguage}",
"dryRunMode": "🧪 Dry run mode - no changes will be made",
"languages": "🌍 Available languages: {languages}",
"addingMissingKeys": "➕ Adding missing keys to translation files...",
"processing": "🔄 Processing {language}...",
"addedKeys": "✅ Added {count} missing keys",
"noChangesNeeded": "✅ No changes needed for {language}",
"summaryTitle": "📊 COMPLETION SUMMARY",
"totalChanges": "📝 Total changes: {totalChanges}",
"languagesProcessed": "🌍 Languages processed: {languagesProcessed}",
"missingKeysAdded": "➕ Missing keys added: {missingKeysAdded}",
"nextStepsTitle": "📋 NEXT STEPS",
"nextStep1": "1. Run usage analysis:",
"nextStep2": "node i18ntk-usage.js --output-report",
"nextStep3": "2. Validate translations:",
"nextStep4": "node i18ntk-validate.js",
"nextStep5": "3. Analyze patterns:",
"nextStep6": "node i18ntk-analyze.js",
"allKeysAvailable": "🎉 All translation keys are now available!",
"runWithoutDryRun": "💡 Run without --dry-run to apply changes",
"deletingOldReport": "🗑️ Deleting old report...",
"generatingFreshAnalysis": "📊 Generating fresh usage analysis...",
"couldNotGenerate": "❌ Could not generate usage analysis",
"reportNotFound": "📋 Usage report not found. Using common keys...",
"foundMissingKeys": "📋 Found {count} missing keys from usage analysis",
"couldNotParse": "❌ Could not parse usage report. Using common keys...",
"errorDuringCompletion": "❌ Error during completion: {error}",
"fatalError": "❌ Fatal error: {error}",
"configurationValidationFailed": "Configuration validation failed: missing required fields"
},
"sizing": {
"separator": "================================================================================",
"lineSeparator": "--------------------------------------------------------------------------------",
"analysisStats": "{stats}",
"sourceDirectoryLabel": "📁 Source directory: {sourceDir}",
"sourceLanguageLabel": "🌍 Source language: {sourceLanguage}",
"strictModeLabel": "⚙️ Strict mode: {mode}",
"invalidSourceDirectoryError": "Invalid source directory path: {sourceDir}",
"sourceDirectoryNotFoundError": "Source directory not found: {sourceDir}",
"invalidOutputDirectoryError": "Invalid output directory path: {outputDir}",
"invalidReportFileError": "Invalid report file path",
"problematic_keys": "Problematic keys: {problematicKeys}",
"problematicKeysLabel": "Problematic keys: {problematicKeys}",
"long_translations": "Long translations: {longTranslations}",
"failedToSaveReportError": "Failed to save report securely",
"invalidCsvFileError": "Invalid CSV file path",
"failedToSaveCsvError": "Failed to save CSV report securely",
"fatalError": "❌ Sizing analysis failed: {error}",
"starting_i18n_sizing_analysis": "Starting i18n sizing analysis...",
"source_directory": "Source directory: {sourceDir}",
"found_languages": "Found languages: {languages}",
"analyzing_file_sizes": "Analyzing file sizes...",
"analyzing_translation_content": "Analyzing translation content...",
"generating_size_comparisons": "Generating size comparisons...",
"no_languages_found_for_comparison": "No languages found for comparison",
"sizing_analysis_results": "I18n Sizing Analysis Results",
"file_sizes_title": "File Sizes",
"file_sizes_header": "Language Size(KB) Lines Characters",
"file_size_row": "{lang} {sizeKB} {lines} {characters}",
"language_statistics_title": "Language Statistics",
"language_stats_header": "Language Keys Characters Avg Length Max Length Empty Long",
"language_stats_row": "{lang} {totalKeys} {totalCharacters} {averageKeyLength} {maxKeyLength} {emptyKeys} {longKeys}",
"size_variations_title": "Size Variations",
"size_variations_header": "Language Char Diff % Diff Problematic",
"size_variation_row": "{lang} {characterDifference} {percentageDifference}% {problematic}",
"problematic_yes": "Yes",
"problematic_no": "No",
"recommendations_title": "Recommendations",
"recommendation_item": "{index}. {recommendation}",
"problematic_key_detail": "{index}. Key: '{key}' - Variations: {variations}",
"generating_detailed_report": "Generating detailed report...",
"keysHaveSignificantSizeVariations": "keys have significant size variations",
"longTranslationsDetected": "${lang} has ${data.longKeys} translations longer than 100 characters - consider breaking them down",
"longer": "longer",
"shorter": "shorter",
"review_translations": "Consider reviewing {lang} translations - they are {percentageDifference}% {comparison} than baseline",
"report_saved_to": "Report saved to: {reportPath}",
"considerReviewingTranslations": "Consider reviewing ${lang} translations - they are ${data.percentageDifference}% longer than baseline",
"csv_report_saved_to": "CSV report saved to: {csvPath}",
"human_report_saved": "Readable report saved: {reportPath}",
"folder_summary_title": "Folder Summary",
"folder_summary_table_header": "Language Size(KB) Keys Avg Length Total Chars",
"folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}",
"language_comparison_title": "Language Comparison",
"language_comparison_row": "{lang}: {diff} chars ({percent}%) {status}",
"summary_stats": "📊 Summary: {totalLanguages} languages, {totalKeys} keys - Reports saved to {reportPath}",
"detailedKeysDescription": "Show detailed key-level analysis in console",
"too_many_keys_warning": "⚠️ Too many keys to display in console - check the detailed report file for full analysis",
"no_translation_files_found": "No translation files found",
"analysis_completed": "Analysis completed in {duration}ms",
"analysis_failed": "Analysis failed: {errorMessage}",
"starting_analysis": "Starting analysis...",
"found_files": "Found {count} files",
"failed_to_parse_language_error": "Failed to parse {language} translations: {errorMessage}",
"recommendations": {
"keys_have_significant_size_variations": "keys have significant size variations",
"consider_reviewing_translations": "Consider reviewing {lang} translations - they are {percentageDifference}% {comparison} than baseline",
"long_translations_detected": "{lang} has {longKeys} translations longer than {threshold} characters - consider breaking them down"
},
"detailed_key_analysis_title": "Detailed Key Analysis",
"key_analysis_detail": "{lang}: {length} chars ({status}) - {translation}",
"key_analysis_header": "Key: {key}",
"status_empty": "empty",
"status_long": "long",
"status_ok": "ok"
},
"usage": {
"help_message": "I18n Usage Analyzer Usage: node i18ntk-usage.js [options] Options: --source-dir <dir> Source directory to scan (default: ./src) --i18n-dir <dir> I18n directory (default: ./src/locales) --output-report Generate detailed report --output-dir <dir> Output directory for reports (default: ./reports) --help Show this help Examples: node i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analysis --output-report",
"source_directory_thissourcedir": "📁 Source directory: {sourceDir}",
"translationCompletenessTitle": "🌍 Translation Completeness:",
"i18n_directory_thisi18ndir": "🌐 I18n directory: {i18nDir}",
"failed_to_parse_filename_error": "⚠️ Failed to parse {fileName}: {errorMessage}",
"analyzing_source_files": "🔍 Analyzing source files...",
"found_files_in_source": "📂 Found {numFiles} files in source directory",
"found_thisusedkeyssize_unique_": "🎯 Found {usedKeysSize} unique used keys",
"total_key_usages_totalkeysfoun": "📊 Total key usages: {totalKeysFound}",
"loading_available_translation_": "📋 Loading available translation keys...",
"found_thisavailablekeyssize_av": "✅ Found {availableKeysSize} available keys",
"foundTranslationFiles": "✅ Found {count} translation files",
"errorReadingI18nDirectory": "⚠️ Error reading i18n directory: {error}",
"pressEnterToReturnToMenu": "📝 Press Enter to return to the main menu...",
"notTranslatedKeysTotal": "⚠️ Not translated keys: {total}",
"noSourceFilesFound": "⚠️ No source files found in the source directory.",
"reviewNotTranslatedKeys": "💡 Review not translated keys",
"analysisCompletedSuccessfully": "🎉 Analysis completed successfully!",
"detectedSourceDirectory": "Detected source directory: {sourceDir}",
"detectedI18nDirectory": "Detected i18n directory: {i18nDir}",
"fileInfo": "📄 {namespace}: {keys} keys",
"failedToAnalyzeUsage": "❌ Failed to analyze usage: {error}",
"failedToAnalyzeFile": "❌ Failed to analyze file: {error}",
"failedToExtractKeys": "❌ Failed to extract keys from {filePath}: {error}",
"analysisFailedError": "❌ Analysis failed: {error}",
"analyzerInitialized": "Analyzer initialized",
"analyzerInitFailed": "Analyzer initialization failed: {error}",
"argsParsed": "Arguments parsed",
"processedFiles": "Processed {processedFiles} of {totalFiles} files.",
"argsParseFailed": "Argument parsing failed: {error}",
"translationDiscoveryError": "Translation discovery error: {error}",
"fileTraversalError": "File traversal error: {error}",
"sourceEqualsI18nWarn": "{reason}. Usage analysis will not scan locale files as source code.",
"i18nEqualsSourceWarn": "⚠️ I18n directory and source directory are the same. This may cause issues with the analysis.",
"usageAnalysisFailed": "⚠️ Usage analysis failed: {error}",
"translationFileParseError": "⚠️ Translation file parse error: {error}",
"translationKeysLoadError": "⚠️ Translation keys load error: {error}",
"languageCompletenessStats": "🌐 {language}: {translated}/{total} ({completeness}% translated)",
"missingKeysCount": "⚠️ Missing keys: {count}",
"analyzingTranslationCompleteness": "Analyzing translation completeness...",
"unusedKeysCount": "Unused keys: {count}",
"usedKeysCount": "Used keys: {count}",
"availableKeysCount": "Available keys: {count}",
"analysisResults": "Analysis results:",
"i18nDirectoryNotFound": "⚠️ I18n directory not found. Please check the path.",
"sourceDirectoryNotFound": "⚠️ Source directory not found: {dir}",
"checkUsage": {
"title": "🔍 I18NTK USAGE ANALYSIS",
"analyzing_source_files": "🔍 Analyzing source files...",
"source_directory_thissourcedir": "📁 Source directory: {sourceDir}",
"i18n_directory_thisi18ndir": "📁 i18n directory: {i18nDir}",
"found_files_in_source": "✅ Found {numFiles} files in source directory",
"no_source_files_found": "⚠️ No source files found in the specified directory",
"processedFiles": "📊 Processed {processedFiles} of {totalFiles} files",
"failedToProcessFile": "❌ Failed to process",
"found_thisusedkeyssize_unique_": "🔍 Found {usedKeysSize} unique used keys",
"total_key_usages_totalkeysfoun": "📊 Total key usages: {totalKeysFound}",
"loading_available_translation_": "📂 Loading available translation keys...",
"found_thisavailablekeyssize_av": "✅ Found {availableKeysSize} available keys",
"message": "Analyzing translation key usage across your project...",
"usage_analysis_results": "📊 USAGE ANALYSIS RESULTS",
"source_files_scanned_thisfileu": "📁 Source files scanned: {fileUsageSize}",
"available_translation_keys_thi": "✅ Available translation keys: {availableKeysSize}",
"used_translation_keys_thisused": "🔍 Used translation keys: {usedKeysSize}",
"dynamic_keys_detected_dynamick": "⚡ Dynamic keys detected: {dynamicKeysLength}",
"unused_keys_unusedkeyslength": "🗑️ Unused keys: {unusedKeysLength}",
"missing_keys_missingkeyslength": "❌ Missing keys: {missingKeysLength}",
"translation_completeness_title": "📈 TRANSLATION COMPLETENESS",
"language_completeness_stats": "{language}: {translated}/{total} keys ({percentage}%)",
"n_sample_unused_keys": "🗑️ SAMPLE UNUSED KEYS (first 5):",
"key": "🔑 {key}",
"and_unusedkeyslength_5_more": "... and {count} more unused keys",
"n_sample_missing_keys": "❌ SAMPLE MISSING KEYS (first 5):",
"and_missingkeyslength_5_more": "... and {count} more missing keys",
"n_generating_detailed_report": "📊 Generating detailed report...",
"report_saved_reportpath": "📄 Report saved: {reportPath}",
"n_recommendations": "💡 RECOMMENDATIONS:",
"consider_removing_unused_trans": "🗑️ Consider removing unused translations to reduce bundle size",
"add_missing_translation_keys_t": "➕ Add missing translation keys to maintain consistency",
"review_dynamic_keys_manually_t": "🔍 Review dynamic keys manually (they may be valid)",
"all_translation_keys_are_prope": "✅ All translation keys are properly used!",
"n_next_steps": "🎯 NEXT STEPS:",
"2_check_the_detailed_report_fo": "2. Check the detailed report for specific issues",
"help_message": "I18n Usage Analyzer Usage: node i18ntk-usage.js [options] Options: --source-dir <dir> Source directory to scan (default: ./src) --i18n-dir <dir> I18n directory (default: ./src/locales) --output-report Generate detailed report --output-dir <dir> Output directory for reports (default: ./reports) --help Show this help Examples: node i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analysis --output-report",
"1_review_the_analysis_results": "1. Review the analysis results in the console or generated report.",
"2_run_with_outputreport_for_de": "2. Run with --output-report for detailed report.",
"3_remove_unused_keys_or_add_mi": "3. Remove unused keys or add missing keys to your source code.",
"4_rerun_analysis_to_verify_imp": "4. Re-run analysis to verify improvements.",
"noSourceFilesFound": "No source files found to analyze.",
"i18nDirectoryNotFound": "I18n directory not found: {i18nDir}",
"noTranslationLanguagesFound": "No translation languages found.",
"failedToAnalyzeFile": "Failed to analyze file {filePath}: {error}",
"failedToAnalyzeLanguage": "Failed to analyze language {language}: {error}",
"translationCompletenessAnalysisFailed": "Translation completeness analysis failed: {error}",
"n": "\\n"
},
"complete": {
"configLoadedSuccessfully": "Configuration loaded successfully",
"configLoadingFailed": "Configuration loading failed",
"title": "🌍 I18NTK TRANSLATION COMPLETION",
"separator": "============================================================",
"sourceDir": "📁 Source directory: {sourceDir}",
"sourceLanguage": "🌐 Source language: {sourceLanguage}",
"dryRunMode": "🧪 Dry run mode - no changes will be made",
"languages": "🌍 Available languages: {languages}",
"addingMissingKeys": "➕ Adding missing keys to translation files...",
"processing": "🔄 Processing {language}...",
"addedKeys": "✅ Added {count} missing keys",
"changeDetails": "📝 {file}: {key}",
"andMore": "...and {count} more",
"noChangesNeeded": "✅ No changes needed for {language}",
"summaryTitle": "📊 COMPLETION SUMMARY",
"totalChanges": "📝 Total changes: {totalChanges}",
"languagesProcessed": "🌍 Languages processed: {languagesProcessed}",
"missingKeysAdded": "➕ Missing keys added: {missingKeysAdded}",
"nextStepsTitle": "📋 NEXT STEPS",
"nextStep1": "1. Run usage analysis:",
"nextStep2": "node i18ntk-usage.js --output-report",
"nextStep3": "2. Validate translations:",
"nextStep4": "node i18ntk-validate.js",
"nextStep5": "3. Analyze patterns:",
"nextStep6": "node i18ntk-analyze.js",
"allKeysAvailable": "🎉 All translation keys are now available!",
"runWithoutDryRun": "💡 Run without --dry-run to apply changes",
"deletingOldReport": "🗑️ Deleting old report...",
"generatingFreshAnalysis": "📊 Generating fresh usage analysis...",
"couldNotGenerate": "❌ Could not generate usage analysis",
"reportNotFound": "📋 Usage report not found. Using common keys...",
"foundMissingKeys": "📋 Found {count} missing keys from usage analysis",
"couldNotParse": "❌ Could not parse usage report. Using common keys..."
},
"noTranslationLanguagesFound": "No Translation Languages Found",
"failedToAnalyzeLanguage": "Failed To Analyze Language",
"translationCompletenessAnalysisFailed": "Translation Completeness Analysis Failed",
"failedToProcessFile": "Failed to process file:",
"failedToSaveReport": "Failed to save usage report: {error}",
"i18nDirectoryDoesNotExist": "I18n directory does not exist: {dir}",
"reportSavedTo": "Usage report saved to: {reportPath}",
"sourceDirectoryDoesNotExist": "Source directory does not exist: {dir}",
"noSourceDirectoryConfigured": "(none configured)"
},
"validate": {
"help_message": "I18n Translation Validator Usage: node i18ntk-validate.js [options] Options: --source-dir <dir> Source directory to scan (default: ./src) --i18n-dir <dir> I18n directory (default: ./src/locales) --output-report Generate detailed report --output-dir <dir> Output directory for reports (default: ./reports) --help Show this help Examples: node i18ntk-validate.js --output-report node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales node i18ntk-validate.js --output-dir=./analysis --output-report",
"title": "🔍 I18n Translation Validator",
"message": "Starting validation process...",
"sourceDirectory": "📁 Source directory: {dir}",
"sourceLanguage": "🌍 Source language: {sourceLanguage}",
"strictMode": "⚙️ Strict mode: {mode}",
"noTargetLanguages": "No target languages configured; skipping target validation. Add languages via \"i18ntk init --languages=de,fr\".",
"validatingLanguages": "🌍 Validating languages: {langs}",
"validatingLanguage": "🔍 Validating language: {lang}",
"filesCount": "📄 Files: {count}",
"keysCount": "🔑 Keys: {count}",
"missingFilesCount": "📁 Missing files: {count}",
"syntaxErrorsCount": "❌ Syntax errors: {count}",
"translationPercentage": "🎯 Translation: {percentage}% ({translated}/{total} keys)",
"validationSummary": "📊 VALIDATION SUMMARY",
"validation_failed": "❌ Validation failed: {error}",
"totalErrors": "❌ Total errors: {count}",
"totalWarnings": "⚠️ Total warnings: {count}",
"errorsSection": "❌ ERRORS",
"warningsSection": "⚠️ WARNINGS",
"recommendationsSection": "💡 RECOMMENDATIONS",
"fixErrorsFirst": "1. Fix all errors first",
"resolveMissingFilesAndSyntaxErrors": "1. Resolve missing files and syntax errors",
"fixStructuralInconsistencies": "2. Fix structural inconsistencies",
"completeMissingTranslations": "3. Complete missing translations",
"rerunValidation": "4. Rerun validation to verify fixes",
"addressWarnings": "Address warnings to improve quality",
"reviewWarnings": "Review warnings and fix where appropriate",
"considerRunningWithStrict": "2. Consider running with --strict flag for stricter validation",
"allValidationsPassed": "🎉 All validations passed!",
"considerRunningUsageAnalysis": "Consider running usage analysis: node i18ntk-usage.js",
"deletedOldReport": "🗑️ Deleted old validation report",
"sourceDir": "📁 Source directory: {sourceDir}",
"i18nDir": "🌐 I18n directory: {i18nDir}",
"loadingTranslationFiles": "📋 Loading translation files...",
"foundTranslationFilesCount": "✅ Found {count} translation files",
"analyzingTranslations": "🔍 Analyzing translations...",
"validationCompletedSuccessfully": "🎉 Validation completed successfully!",
"validationErrorsFound": "⚠️ Validation errors found: {count}",
"validationWarningsFound": "⚠️ Validation warnings found: {count}",
"validationPassed": "✅ Validation passed with no errors",
"validationFailed": "Validation failed: {error}",
"startingValidationProcess": "🔍 Starting validation process...",
"validationProcessCompletedSuccessfully": "✅ Validation process completed successfully",
"stackTrace": "Stack trace: {stack}",
"authenticationFailed": "❌ Authentication failed. Access denied.",
"fatalValidationError": "❌ Fatal validation error: {error}",
"configAccess": "Accessing configuration for validation",
"configValidated": "Configuration validated successfully",
"configError": "Configuration error: {error}",
"validatorInit": "Initializing I18n validator",
"validatorInitialized": "I18n validator initialized successfully",
"validatorInitError": "Validator initialization error: {error}",
"argsParsing": "Parsing command line arguments",
"argsParsed": "Command line arguments parsed successfully",
"argsParseError": "Argument parsing error: {error}",
"languagesScan": "Scanning available languages",
"languagesFound": "Found {count} languages",
"languagesScanError": "Language scanning error: {error}",
"filesScan": "Found {count} files in {language}",
"filesScanError": "File scanning error: {error}",
"jsonValidated": "JSON syntax validated: {filePath}",
"jsonValidationError": "JSON validation error: {error}",
"languageValidation": "Validating language: {language}",
"languageValidationError": "Language validation error: {error}",
"fileDeleted": "File deleted",
"runStarted": "Starting validation run",
"runCompleted": "Validation run completed successfully",
"runError": "Validation run failed: {error}",
"scriptExecution": "Script execution",
"validationCompleted": "Validation completed",
"validationError": "Validation error: {error}",
"separator": "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
"languageHeader": "🌐 Language: {language}",
"validationResults": "📊 Validation Results",
"noErrors": "✅ No errors found",
"noWarnings": "✅ No warnings found",
"summaryHeader": "📋 OVERALL SUMMARY",
"progressIndicator": "⏳ Processing...",
"completedIndicator": "✅ Completed",
"errorIndicator": "❌ Error",
"warningIndicator": "⚠️ Warning",
"infoIndicator": "ℹ️ Info",
"sourceDirNotConfigured": "Source directory not configured",
"sourceLanguageNotConfigured": "Source language not configured",
"translationFunctionNotInitialized": "Translation function not properly initialized",
"sourceLanguageDirectoryNotFound": "Source language directory not found",
"specifiedLanguageNotFound": "Specified language not found",
"noJsonFilesFound": "No JSON files found in source directory: {sourceDir}",
"i18nDirectoryNotFound": "I18n directory not found: {i18nDir}",
"invalidDirectoryPaths": "Invalid directory paths detected",
"invalidSampleFilePath": "Invalid sample file path",
"failedToCreateSampleTranslationFile": "Failed to create sample translation file",
"invalidFilePathDetected": "Invalid file path detected",
"failedToWriteFile": "Failed to write file: {filePath}",
"invalidSourceDirectory": "Invalid source directory: {sourceDir}",
"invalidSourceLanguageDirectory": "Invalid source language directory: {sourceDir}"
},
"adminCli": {
"setupPinProtectionTitle": "🔐 Setting up Admin PIN Protection",
"setupPinProtectionDescription": "This will require a 4-6 digit PIN for administrative operations.",
"enablePinProtectionPrompt": "Do you want to enable admin PIN protection?",
"setupCancelled": "Admin PIN protection setup cancelled.",
"enterPinPrompt": "Enter a 4-6 digit PIN:",
"pinFormatError": "❌ PIN must be 4-6 digits. Please try again.",
"confirmPinPrompt": "Confirm PIN:",
"pinMismatchError": "❌ PINs do not match. Please try again.",
"pinProtectionEnabledSuccess": "✅ Admin PIN protection enabled successfully!",
"pinRecoveryWarning": "⚠️ Remember your PIN - it cannot be recovered if lost.",
"setupPinProtectionFailed": "❌ Failed to setup admin PIN protection.",
"errorSettingUpPin": "❌ Error setting up admin PIN: {message}",
"authRequiredForOperation": "🔐 Admin authentication required for: {operation}",
"invalidPinFormat": "❌ Invalid PIN format. PIN must be 4-6 digits.",
"authenticationSuccess": "✅ Authentication successful!",
"invalidPinAttemptsRemaining": "❌ Invalid PIN. {remaining} attempts remaining.",
"authenticationFailedAccessDenied": "❌ Authentication failed. Access denied.",
"authenticationError": "❌ Authentication error: {message}",
"pinProtectionNotEnabled": "Admin PIN protection is not currently enabled.",
"disablingPinProtectionTitle": "🔓 Disabling Admin PIN Protection",
"confirmDisablePinProtection": "Are you sure you want to disable admin PIN protection?",
"operationCancelled": "Operation cancelled.",
"pinProtectionDisabledSuccess": "✅ Admin PIN protection disabled.",
"disablePinProtectionFailed": "❌ Failed to disable admin PIN protection.",
"errorDisablingPinProtection": "❌ Error disabling admin protection: {message}",
"adminProtectionStatusTitle": "🔐 Admin Protection Status",
"statusEnabled": "Status: ✅ ENABLED",
"protectionDetails": "Protection: 4-6 digit PIN required for admin operations",
"lockoutDetails": "Lockout: 3 failed attempts = 15 minute lockout",
"statusDisabled": "Status: ❌ DISABLED",
"noAuthRequired": "Protection: No authentication required",
"unprotectedRisk": "Risk: Administrative operations are unprotected",
"errorCheckingAdminStatus": "❌ Error checking admin status: {message}",
"authRequired": "🔐 Admin authentication required.",
"invalidPin": "❌ Invalid PIN.",
"authSuccess": "✅ Authentication successful!",
"adminPinSetupCli": "admin_pin_setup_cli",
"adminAuthFailedCli": "admin_auth_failed_cli",
"adminAuthDisabledCli": "admin_auth_disabled_cli",
"protectedAccess": "Protected access: Admin authentication required for sensitive operations.",
"enterPin": "Enter admin PIN:",
"accessGranted": "Access granted."
},
"adminPin": {
"setup_title": "🔐 Admin PIN Setup",
"setup_separator": "============================================================",
"setup_description": "Create a 4-6 digit PIN for admin access to sensitive settings.",
"required_for_title": "This PIN will be required for:",
"required_for_1": "• Changing security settings",
"required_for_2": "• Modifying advanced configurations",
"required_for_3": "• Accessing debug tools",
"required_for_4": "• Resetting settings",
"setup_note": "💡 Note: You will see asterisks (*) as you type - these are just masking characters.",
"setup_digits_only": "Only numbers 0-9 are accepted as PIN digits.",
"invalid_pin_length": "❌ Invalid PIN. Must be 4-6 digits (numbers 0-9 only).",
"invalid_pin_example": "Example: 1234 or 567890",
"pins_do_not_match": "❌ PINs do not match.",
"setup_success": "✅ Admin PIN has been set successful