UNPKG

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
{ "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