UNPKG

i18ntk

Version:

๐Ÿš€ The fastest i18n toolkit with 97% performance boost! Zero-dependency, enterprise-grade internationalization for React, Vue, Angular, Python, Java, PHP & more. Features PIN protection, auto framework detection, 7+ UI languages, and comprehensive transla

788 lines (787 loc) โ€ข 136 kB
{ "meta": { "version": "1.10.0", "updated": "2025-08-16" }, "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" }, "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." }, "scanner": { "help_message": "\nI18n Text Scanner\n\nUsage: node i18ntk-scanner.js [options]\n\nOptions:\n --source-dir <dir> Source directory to scan (default: ./src)\n --output <file> Output file for scan results (default: ./i18ntk-scanner-report.json)\n --framework <name> Framework to target (react, vue, angular, vanilla)\n --patterns <patterns> Custom regex patterns (comma-separated)\n --include-tests Include test files in scan\n --exclude-dirs <dirs> Directories to exclude (comma-separated)\n --help Show this help\n\nExamples:\n node i18ntk-scanner.js --source-dir=./src --framework=react\n node i18ntk-scanner.js --patterns 'console.log\\((.*?)\\)' --include-tests\n node i18ntk-scanner.js --output=./scan-results.json\n", "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):" } }, "fixer": { "help_message": "\nI18n Translation Fixer\n\nUsage: node i18ntk-fixer.js [options]\n\nOptions:\n --source-dir <dir> Source directory to scan (default: ./locales)\n --languages <langs> Comma separated list of languages to fix\n --markers <markers> Comma separated markers to treat as untranslated\n --no-backup Skip automatic backup creation\n --help Show this help\n\nExamples:\n node i18ntk-fixer.js --languages de,fr\n node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED\n node i18ntk-fixer.js --no-backup\n", "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": { "totalIssues": "Total issues: {total}", "missingKeys": "Missing keys: {missing}", "placeholderKeys": "Placeholder keys: {placeholder}", "languages": "Languages: {languages}" }, "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: " } }, "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": "\nI18n Translation Analyzer\n\nUsage: node i18ntk-analyze.js [options]\n\nOptions:\n --source-dir <dir> Source directory to scan (default: ./src)\n --i18n-dir <dir> I18n directory (default: ./src/locales)\n --output-report Generate detailed report\n --output-dir <dir> Output directory for reports (default: ./reports)\n --help Show this help\n\nExamples:\n node i18ntk-analyze.js --output-report\n node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-analyze.js --output-dir=./analysis --output-report\n", "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}\n", "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": "\nSample missing keys:", "missing_key": "- {key}", "and_more_missing": "...and {count} more.", "sample_unused_keys": "\nSample unused keys:", "unused_key": "- {key}", "and_more_unused": "...and {count} more.", "recommendations": "\n๐Ÿ“‹ RECOMMENDATIONS", "add_missing_translations": "๐Ÿ’ก Add missing translations to improve coverage.", "remove_unused_translations": "๐Ÿ’ก Remove unused translations to keep your project clean.", "next_steps": "\n๐Ÿ“‹ 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": "Human-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" } }, "usage": { "help_message": "\nI18n Usage Analyzer\n\nUsage: node i18ntk-usage.js [options]\n\nOptions:\n --source-dir <dir> Source directory to scan (default: ./src)\n --i18n-dir <dir> I18n directory (default: ./src/locales)\n --output-report Generate detailed report\n --output-dir <dir> Output directory for reports (default: ./reports)\n --help Show this help\n\nExamples:\n node i18ntk-usage.js --output-report\n node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-usage.js --output-dir=./analysis --output-report\n", "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": "โš ๏ธ Source directory and i18n directory are the same. This may cause issues with the analysis.", "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": "\n๐Ÿ—‘๏ธ SAMPLE UNUSED KEYS (first 5):", "key": " ๐Ÿ”‘ {key}", "and_unusedkeyslength_5_more": "... and {count} more unused keys", "n_sample_missing_keys": "\nโŒ SAMPLE MISSING KEYS (first 5):", "and_missingkeyslength_5_more": "... and {count} more missing keys", "n_generating_detailed_report": "\n๐Ÿ“Š Generating detailed report...", "report_saved_reportpath": "๐Ÿ“„ Report saved: {reportPath}", "n_recommendations": "\n๐Ÿ’ก 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": "\n๐ŸŽฏ NEXT STEPS:", "2_check_the_detailed_report_fo": " 2. Check the detailed report for specific issues", "help_message": "\nI18n Usage Analyzer\n\nUsage: node i18ntk-usage.js [options]\n\nOptions:\n --source-dir <dir> Source directory to scan (default: ./src)\n --i18n-dir <dir> I18n directory (default: ./src/locales)\n --output-report Generate detailed report\n --output-dir <dir> Output directory for reports (default: ./reports)\n --help Show this help\n\nExamples:\n node i18ntk-usage.js --output-report\n node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-usage.js --output-dir=./analysis --output-report\n", "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": "" }, "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" }, "validate": { "help_message": "\nI18n Translation Validator\n\nUsage: node i18ntk-validate.js [options]\n\nOptions:\n --source-dir <dir> Source directory to scan (default: ./src)\n --i18n-dir <dir> I18n directory (default: ./src/locales)\n --output-report Generate detailed report\n --output-dir <dir> Output directory for reports (default: ./reports)\n --help Show this help\n\nExamples:\n node i18ntk-validate.js --output-report\n node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-validate.js --output-dir=./analysis --output-report\n", "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}" }, "adminCli": { "setupPinProtectionTitle": "\n๐Ÿ” 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": "\n๐Ÿ” 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": "\n๐Ÿ”“ 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": "\n๐Ÿ” 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 successfully!", "setup_warning": "โš ๏ธ Keep this PIN secure. It cannot be recovered if lost.", "setup_error": "โŒ Error setting up PIN:", "session_expired": "\nโฐ Admin session expired due to inactivity.", "no_pin_set_setting_up": "โš ๏ธ