UNPKG

i18ntk

Version:

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

794 lines 131 kB
{ "meta": { "version": "1.5.3", "consolidated": "2025-08-06T14:36:37.512Z", "sourceFiles": 256 }, "common": { "welcome": "Добро пожаловать", "hello": "Привет", "goodbye": "Пока", "yes": "Да", "no": "Нет", "save": "Сохранить", "cancel": "Отмена", "delete": "Удалить", "edit": "Редактировать", "loading": "Загрузка...", "offlineTitle": "В offline", "offlineMessage": "Вы находитесь в offline", "tryReconnect": "Попытка переподключения", "logout": "Выход", "login": "Войти", "amount": "Сумма", "success": "Успех", "error": "Ошибка", "warning": "Предупреждение", "info": "Информация:", "debug": "Отладка", "progress": "Прогресс:", "remaining": "Осталось:", "total": "Всего:", "completed": "7. Успешно завершено!", "missing": "Отсутствует", "partial": "Частично", "sameAsSource": "Такие же как источник:", "formatMismatch": "Несоответствие формата:", "typeMismatch": "Несоответствие типа:", "structureMismatch": "Несоответствие структуры:", "invalidOption": "Неверная опция", "separator": "==================================================", "initializationFailed": "❌ Ошибка инициализации: {error}", "stackTrace": "Трассировка стека: {stack}", "pressEnterToContinue": "Нажмите Enter для продолжения...", "pressEnterToReturn": "Нажмите Enter для возврата в главное меню...", "stepCompleted": "Шаг '{stepName}' завершен.", "stepFailed": "Шаг '{stepName}' не удался.", "runningStep": "Выполнение шага: {stepName}", "command": "Команда: {command}", "startingWorkflow": "Запуск рабочего процесса...", "workflowCompleted": "Рабочий процесс завершен.", "checkReports": "Проверьте отчеты для получения подробностей.", "errorExecutingCommand": "Ошибка выполнения команды: {error}", "genericError": "❌ Ошибка: {{error}}", "errorGeneratingStatusSummary": "Ошибка генерации сводки статуса: {error}", "errorRunningDebugTool": "Ошибка запуска инструмента отладки '{displayName}': {error}", "errorReadingDebugLogs": "Ошибка чтения журналов отладки: {error}", "errorAnalyzingLogFile": "Ошибка анализа файла журнала: {error}", "errorAnalyzingTranslationKeys": "Ошибка анализа ключей перевода: {error}", "errorAnalyzingTranslationCompleteness": "Ошибка анализа полноты перевода: {error}", "errorAnalyzingTranslationFormat": "Ошибка анализа формата перевода: {error}", "errorAnalyzingTranslationType": "Ошибка анализа типа перевода: {error}", "errorAnalyzingTranslationStructure": "Ошибка анализа структуры перевода: {error}", "errorAnalyzingTranslationFormatMismatch": "Ошибка анализа несоответствия формата перевода: {error}", "errorAnalyzingTranslationTypeMismatch": "Ошибка анализа несоответствия типа перевода: {error}", "errorAnalyzingTranslationStructureMismatch": "Ошибка анализа несоответствия структуры перевода: {error}", "errorAnalyzingTranslationSameAsSource": "Ошибка анализа перевода совпадающего с источником: {error}", "title": "Статус", "nextStep1": "1. Проверить анализ использования:", "nextStep2": "2. Проверить переводы:", "nextStep3": "3. Проанализировать полноту:", "nextStep4": "4. Завершить отсутствующие переводы:", "nextStep5": "5. Сгенерировать сводный отчет:", "nextStep6": "6. Проверить и завершить переводы:", "generating": "Генерация сводного отчета...", "review": "Проверка переводов...", "finalizing": "Завершение переводов...", "finalized": "Успешно завершено!", "errors": "Ошибки:", "warnings": "Предупреждения:", "completedKeys": "Завершенные ключи:", "missingKeys": "Отсутствующие ключи:", "partialKeys": "Частичные ключи:" }, "analyze": { "help_message": "\nI18n Анализатор переводов\n\nИспользование: node i18ntk-analyze.js [опции]\n\nОпции:\n --source-dir <dir> Директория исходников для сканирования (по умолчанию: ./src)\n --i18n-dir <dir> Директория I18n (по умолчанию: ./src/locales)\n --output-report Сгенерировать подробный отчёт\n --output-dir <dir> Директория для отчётов (по умолчанию: ./reports)\n --help Показать справку\n\nПримеры:\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": "📁 Директория исходников: {sourceDir}", "i18n_directory": "🌐 Директория I18n: {i18nDir}", "loading_translation_files": "📋 Загрузка файлов переводов...", "sourceDirectoryLabel": "📁 Директория исходников: {{sourceDir}}", "sourceLanguageLabel": "🌍 Исходный язык: {{sourceLanguage}}", "strictModeLabel": "⚙️ Режим строгого контроля: {{mode}}\n", "found_translation_files_count": "✅ Найдено файлов переводов: {count}", "analyzing_translations": "🔍 Анализ переводов...", "analysis_completed_successfully": "🎉 Анализ успешно завершён!", "analysis_results": "📊 РЕЗУЛЬТАТЫ АНАЛИЗА", "language_analysis_stats": " {language}: {translatedKeys}/{totalKeys} ({percentage}% переведено)", "sample_missing_keys": "\nПример отсутствующих ключей:", "missing_key": "- {key}", "and_more_missing": "...и ещё {count}.", "sample_unused_keys": "\nПример неиспользуемых ключей:", "unused_key": "- {key}", "and_more_unused": "...и ещё {count}.", "recommendations": "\n📋 РЕКОМЕНДАЦИИ", "add_missing_translations": "💡 Добавьте недостающие переводы для повышения покрытия.", "remove_unused_translations": "💡 Удалите неиспользуемые переводы для чистоты проекта.", "next_steps": "\n📋 ДАЛЬНЕЙШИЕ ШАГИ", "review_analysis_results": "1. Просмотрите результаты анализа в консоли или в сгенерированном отчёте.", "run_with_output_report": "2. Запустите с --output-report для подробного отчёта.", "add_or_remove_translations": "3. Добавьте недостающие переводы или удалите неиспользуемые.", "rerun_analysis": "4. Повторно запустите анализ для проверки изменений.", "analysis_summary": "📊 ИТОГ АНАЛИЗА", "source_files_scanned": "Просканировано файлов исходников: {fileCount}", "translation_files_checked": "Проверено файлов переводов: {translationFileCount}", "total_keys": "Всего ключей: {totalKeys}", "translated_keys": "Переведено ключей: {translatedKeys}", "missing_keys": "Отсутствующих ключей: {missingKeys}", "unused_keys": "Неиспользуемых ключей: {unusedKeys}", "translation_coverage": "Покрытие переводов: {coverage}%", "analysis_passed_for_language": "✅ Анализ пройден для {language}", "analysis_failed_for_language": "❌ Анализ не пройден для {language} ({missingKeys} отсутствует, {unusedKeys} не используется)", "starting": "🔍 Запуск анализа переводов...", "foundLanguages": "📋 Найдено языков для анализа: {count}: {languages}", "analyzing": "🔄 Анализируется {language}...", "reportTitle": "📊 ОТЧЁТ ОБ АНАЛИЗЕ ПЕРЕВОДОВ", "generated": "Сгенерировано: {timestamp}", "status": "Статус: {translated}/{total} ключей ({percentage}% переведено)", "filesAnalyzed": "Просмотрено файлов: {analyzed}/{total}", "keysNeedingTranslation": "Ключей, требующих перевода: {count}", "fileBreakdown": "📋 РАЗБИВКА ПО ФАЙЛАМ", "error": "Ошибка", "completed": "✅ Анализ завершён для {language}", "progress": "📊 Общий прогресс: обработано {translated}/{total} языков", "reportSaved": " Отчёт сохранён: {reportPath}", "summary": "📊 СВОДКА АНАЛИЗА", "finished": "✅ Анализ успешно завершён!", "statusFileMissing": "❌ Файл перевода отсутствует", "sourceKeys": "📊 Исходных ключей: {count}", "translation": "📊 Перевод: {translated}/{total} ({percentage}%)", "structure": "🗂️ Структура: {status}", "consistent": "Согласовано", "inconsistent": "Несогласовано", "missingKeys": "Отсутствующих ключей: {count}", "extraKeys": "Лишних ключей: {count}", "issues": "⚠️ Найдено проблем: {count}", "issueType": { "not_translated": "Не переведено: {count}", "empty_value": "Пустые значения: {count}", "partial_translation": "Частичные переводы: {count}", "format_mismatch": "Несоответствия формата: {count}", "type_mismatch": "Несоответствия типа: {count}", "structure_mismatch": "Несоответствия структуры: {count}", "same_as_source": "Совпадает с исходником: {count}" }, "keysToTranslate": "📋 КЛЮЧИ ДЛЯ ПЕРЕВОДА", "key": "Ключ", "english": "Английский", "needsTranslation": "ТРЕБУЕТ ПЕРЕВОДА", "andMoreKeys": "...и ещё {count} ключей.", "noLanguages": "⚠️ Целевые языки не найдены.", "languageStats": "{language}: {percentage}% готово ({translated}/{total} ключей)", "invalidReportFilePath": "Неверный путь к файлу отчёта", "failedToWriteReportFile": "Не удалось безопасно записать файл отчёта" }, "complete": { "configLoadedSuccessfully": "Конфигурация успешно загружена", "configLoadingFailed": "Сбой загрузки конфигурации", "title": "🌍 ЗАВЕРШЕНИЕ I18N ПЕРЕВОДА", "separator": "============================================================", "sourceDir": "📁 Директория исходников: {sourceDir}", "sourceLanguage": "🌐 Исходный язык: {sourceLanguage}", "dryRunMode": "🧪 Режим тестового запуска — без изменений", "languages": "🌍 Доступные языки: {languages}", "addingMissingKeys": "➕ Добавление отсутствующих ключей в файлы переводов...", "processing": "🔄 Обработка {language}...", "addedKeys": "✅ Добавлено {count} отсутствующих ключей", "noChangesNeeded": "✅ Для {language} изменений не требуется", "summaryTitle": "📊 ИТОГОВАЯ СВОДКА", "totalChanges": "📝 Всего изменений: {totalChanges}", "languagesProcessed": "🌍 Обработано языков: {languagesProcessed}", "missingKeysAdded": "➕ Добавлено недостающих ключей: {missingKeysAdded}", "nextStepsTitle": "📋 ДАЛЬНЕЙШИЕ ШАГИ", "nextStep1": "1. Запустите анализ использования:", "nextStep2": " node i18ntk-usage.js --output-report", "nextStep3": "2. Проверьте переводы:", "nextStep4": " node i18ntk-validate.js", "nextStep5": "3. Проанализируйте шаблоны:", "nextStep6": " node i18ntk-analyze.js", "allKeysAvailable": "🎉 Все ключи перевода теперь доступны!", "runWithoutDryRun": "💡 Запустите без --dry-run для применения изменений", "deletingOldReport": "🗑️ Удаление старого отчёта...", "generatingFreshAnalysis": "📊 Генерация нового анализа использования...", "couldNotGenerate": "❌ Не удалось сгенерировать анализ использования", "reportNotFound": "📋 Отчёт об использовании не найден. Используются общие ключи...", "foundMissingKeys": "📋 Найдено {count} отсутствующих ключей по результатам анализа использования", "couldNotParse": "❌ Не удалось разобрать отчёт об использовании. Используются общие ключи...", "errorDuringCompletion": "❌ Ошибка во время завершения: {error}", "fatalError": "❌ Фатальная ошибка: {error}", "configurationValidationFailed": "Сбой проверки конфигурации: отсутствуют обязательные поля" }, "sizing": { "separator": "================================================================================", "lineSeparator": "--------------------------------------------------------------------------------", "analysisStats": "{{stats}}", "sourceDirectoryLabel": "📁 Директория исходников: {{sourceDir}}", "sourceLanguageLabel": "🌍 Исходный язык: {{sourceLanguage}}", "strictModeLabel": "⚙️ Режим строгого контроля: {{mode}}", "invalidSourceDirectoryError": "Недопустимый путь к директории исходников: {{sourceDir}}", "sourceDirectoryNotFoundError": "Директория исходников не найдена: {{sourceDir}}", "invalidOutputDirectoryError": "Недопустимый путь к директории вывода: {{outputDir}}", "invalidReportFileError": "Недопустимый путь к файлу отчёта", "problematic_keys": "Проблемные ключи: {problematicKeys}", "problematicKeysLabel": "Проблемные ключи: {problematicKeys}", "long_translations": "Длинные переводы: {longTranslations}", "failedToSaveReportError": "Не удалось безопасно сохранить отчёт", "invalidCsvFileError": "Недопустимый путь к CSV-файлу", "failedToSaveCsvError": "Не удалось безопасно сохранить CSV-отчёт", "fatalError": "❌ Анализ размеров не удался: {{error}}", "starting_i18n_sizing_analysis": "Запуск анализа размеров i18n...", "source_directory": "Директория исходников: {{sourceDir}}", "found_languages": "Найдены языки: {{languages}}", "analyzing_file_sizes": "Анализ размеров файлов...", "analyzing_translation_content": "Анализ содержимого переводов...", "generating_size_comparisons": "Генерация сравнений размеров...", "no_languages_found_for_comparison": "Языки для сравнения не найдены", "sizing_analysis_results": "Результаты анализа размеров i18n", "file_sizes_title": "Размеры файлов", "file_sizes_header": "Язык Размер(КБ) Строки Символы", "file_size_row": "{{lang}} {{sizeKB}} {{lines}} {{characters}}", "language_statistics_title": "Статистика по языкам", "language_stats_header": "Язык Ключей Символов Ср. длина Макс. длина Пустые Длинные", "language_stats_row": "{{lang}} {{totalKeys}} {{totalCharacters}} {{averageKeyLength}} {{maxKeyLength}} {{emptyKeys}} {{longKeys}}", "size_variations_title": "Вариации размеров", "size_variations_header": "Язык Разн. симв. % Разн. Проблемные", "size_variation_row": "{{lang}} {{characterDifference}} {{percentageDifference}}% {{problematic}}", "problematic_yes": "Да", "problematic_no": "Нет", "recommendations_title": "Рекомендации", "recommendation_item": "{{index}}. {{recommendation}}", "problematic_key_detail": " {{index}}. Ключ: '{{key}}' — Вариации: {{variations}}", "generating_detailed_report": "Генерация подробного отчёта...", "keysHaveSignificantSizeVariations": "ключи имеют значительные вариации в размерах", "longTranslationsDetected": "{{lang}} содержит {{data.longKeys}} переводов длиной более 100 символов — рассмотрите возможность их разбить", "report_saved_to": "Отчёт сохранён в: {{reportPath}}", "considerReviewingTranslations": "Рассмотрите возможность пересмотра переводов {{lang}} — они на {{data.percentageDifference}}% длиннее базового", "csv_report_saved_to": "CSV-отчёт сохранён в: {{csvPath}}", "no_translation_files_found": "Файлы переводов не найдены", "analysis_completed": "Анализ завершён за {{duration}}мс", "analysis_failed": "Анализ не удался: {{errorMessage}}", "failed_to_parse_language_error": "Не удалось разобрать переводы {{language}}: {{errorMessage}}", "recommendations": { "keys_have_significant_size_variations": "ключи имеют значительные вариации в размерах", "consider_reviewing_translations": "Рассмотрите возможность пересмотра переводов {{lang}} — они на {{percentageDifference}}% {{comparison}} базового", "long_translations_detected": "{{lang}} содержит {{longKeys}} переводов длиной более {{threshold}} символов — рассмотрите возможность их разбить", "hardcodedTexts": { "keysHaveSignificantSizeVariations": "ключи имеют значительные вариации в размерах", "considerReviewingTranslations": "Рассмотрите возможность пересмотра переводов {{lang}} — они на {{percentageDifference}}% {{comparison}} базового", "longTranslationsDetected": "{{lang}} содержит {{longKeys}} переводов длиной более {{threshold}} символов — рассмотрите возможность их разбить" } } }, "usage": { "help_message": "\nI18n Анализатор использования\n\nИспользование: node i18ntk-usage.js [опции]\n\nОпции:\n --source-dir <dir> Директория исходников для сканирования (по умолчанию: ./src)\n --i18n-dir <dir> Директория I18n (по умолчанию: ./src/locales)\n --output-report Сгенерировать подробный отчёт\n --output-dir <dir> Директория для отчётов (по умолчанию: ./reports)\n --help Показать справку\n\nПримеры:\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": "📁 Директория исходников: {sourceDir}", "translationCompletenessTitle": "🌍 Полнота перевода:", "i18n_directory_thisi18ndir": "🌐 Директория I18n: {i18nDir}", "failed_to_parse_filename_error": "⚠️ Не удалось разобрать {fileName}: {errorMessage}", "analyzing_source_files": "🔍 Анализ исходных файлов...", "found_files_in_source": "📂 Найдено файлов в директории исходников: {numFiles}", "found_thisusedkeyssize_unique_": "🎯 Обнаружено уникальных используемых ключей: {usedKeysSize}", "total_key_usages_totalkeysfoun": "📊 Всего использований ключей: {totalKeysFound}", "loading_available_translation_": "📋 Загрузка доступных ключей перевода...", "found_thisavailablekeyssize_av": "✅ Найдено доступных ключей: {availableKeysSize}", "foundTranslationFiles": "✅ Найдено файлов переводов: {count}", "pressEnterToReturnToMenu": "📝 Нажмите Enter, чтобы вернуться в главное меню...", "notTranslatedKeysTotal": "⚠️ Непереведённые ключи: {total}", "noSourceFilesFound": "⚠️ В директории исходников не найдено файлов.", "reviewNotTranslatedKeys": "💡 Проверьте непереведённые ключи", "analysisCompletedSuccessfully": "🎉 Анализ успешно завершён!", "detectedSourceDirectory": "Обнаружена директория исходников: {{sourceDir}}", "detectedI18nDirectory": "Обнаружена директория I18n: {i18nDir}", "fileInfo": " 📄 {namespace}: {keys} ключей", "failedToAnalyzeUsage": "❌ Не удалось проанализировать использование: {error}", "failedToAnalyzeFile": "❌ Не удалось проанализировать файл: {error}", "analyzerInitialized": "Анализатор инициализирован", "analyzerInitFailed": "Не удалось инициализировать анализатор: {error}", "argsParsed": "Аргументы разобраны", "argsParseFailed": "Не удалось разобрать аргументы: {error}", "translationDiscoveryError": "Ошибка обнаружения переводов: {error}", "fileTraversalError": "Ошибка обхода файлов: {error}", "usageAnalysisFailed": "Анализ использования не удался: {error}", "translationFileParseError": "Ошибка парсинга файла перевода: {error}", "translationKeysLoadError": "Ошибка загрузки ключей перевода: {error}", "languageCompletenessStats": "{language}: {translated}/{total} ({completeness}% переведено)", "missingKeysCount": "Отсутствующих ключей: {count}", "analyzingTranslationCompleteness": "Анализ полноты перевода...", "unusedKeysCount": "Неиспользуемых ключей: {count}", "usedKeysCount": "Используемых ключей: {count}", "availableKeysCount": "Доступных ключей: {count}", "analysisResults": "Результаты анализа:", "checkUsage": { "title": "🔍 АНАЛИЗ ИСПОЛЬЗОВАНИЯ I18N", "message": "Анализ использования ключей i18n в проекте.", "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": "📁 Директория исходников: {sourceDir}", "i18n_directory_thisi18ndir": "🌐 Директория I18n: {i18nDir}", "loading_available_translation_": "📋 Загрузка доступных ключей перевода...", "found_thisavailablekeyssize_av": "✅ Найдено доступных ключей: {availableKeysSize}", "analyzing_source_files": "🔍 Анализ исходных файлов...", "found_files_in_source": "📂 Найдено файлов в директории исходников: {numFiles}", "found_thisusedkeyssize_unique_": "🎯 Обнаружено уникальных используемых ключей: {usedKeysSize}", "total_key_usages_totalkeysfoun": "📊 Всего использований ключей: {totalKeysFound}", "translation_completeness_title": "📊 ПОЛНОТА ПЕРЕВОДА", "language_completeness_stats": " {language}: {translated}/{total} ({completeness}% переведено)", "n_sample_unused_keys": "\nПример неиспользуемых ключей:", "key": "- {key}", "and_unusedkeyslength_5_more": "...и ещё {count}.", "n_recommendations": "\n📋 РЕКОМЕНДАЦИИ", "consider_removing_unused_trans": "💡 Рассмотрите удаление неиспользуемых переводов для чистоты проекта.", "n_next_steps": "\n📋 ДАЛЬНЕЙШИЕ ШАГИ", "1_review_the_analysis_results": "1. Просмотрите результаты анализа в консоли или в отчёте.", "2_run_with_outputreport_for_de": "2. Запустите с --output-report для подробного отчёта.", "3_remove_unused_keys_or_add_mi": "3. Удалите неиспользуемые ключи или добавьте недостающие в код.", "4_rerun_analysis_to_verify_imp": "4. Повторно запустите анализ для проверки изменений.", "usage_analysis_results": "📊 РЕЗУЛЬТАТЫ АНАЛИЗА ИСПОЛЬЗОВАНИЯ", "source_files_scanned_thisfileu": "Просканировано файлов: {fileUsageSize}", "available_translation_keys_thi": "Доступных ключей перевода: {availableKeysSize}", "used_translation_keys_thisused": "Используемых ключей перевода: {usedKeysSize}", "dynamic_keys_detected_dynamick": "Обнаружено динамических ключей: {dynamicKeysLength}", "unused_keys_unusedkeyslength": "Неиспользуемых ключей: {unusedKeysLength}", "missing_keys_missingkeyslength": "Отсутствующих ключей: {missingKeysLength}", "noSourceFilesFound": "Нет файлов для анализа.", "processedFiles": "Обработано {processedFiles} из {totalFiles} файлов.", "i18nDirectoryNotFound": "Директория I18n не найдена: {i18nDir}", "noTranslationLanguagesFound": "Целевые языки не найдены.", "failedToAnalyzeFile": "Не удалось проанализировать файл {filePath}: {error}", "failedToAnalyzeLanguage": "Не удалось проанализировать язык {language}: {error}", "translationCompletenessAnalysisFailed": "Анализ полноты перевода не удался: {error}", "n": "" }, "complete": { "configLoadedSuccessfully": "Configuration loaded successfully", "configLoadingFailed": "Configuration loading failed", "title": "🌍 I18N 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..." } }, "validate": { "help_message": "\nI18n Валидатор переводов\n\nИспользование: node i18ntk-validate.js [опции]\n\nОпции:\n --source-dir <dir> Директория исходников для сканирования (по умолчанию: ./src)\n --i18n-dir <dir> Директория I18n (по умолчанию: ./src/locales)\n --output-report Сгенерировать подробный отчёт\n --output-dir <dir> Директория для отчётов (по умолчанию: ./reports)\n --help Показать справку\n\nПримеры:\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 Валидатор переводов", "message": "Запуск процесса валидации...", "sourceDirectory": "📁 Директория исходников: {dir}", "sourceLanguage": "🌍 Исходный язык: {sourceLanguage}", "strictMode": "⚙️ Режим строгой проверки: {mode}", "noTargetLanguages": "⚠️ Не найдено целевых языков для проверки", "validatingLanguages": "🌍 Проверка языков: {langs}", "validatingLanguage": "🔍 Проверка языка: {lang}", "filesCount": "📄 Файлов: {count}", "keysCount": "🔑 Ключей: {count}", "missingFilesCount": "📁 Отсутствующих файлов: {count}", "syntaxErrorsCount": "❌ Синтаксических ошибок: {count}", "translationPercentage": "🎯 Перевод: {percentage}% ({translated}/{total} ключей)", "validationSummary": "📊 СВОДКА ВАЛИДАЦИИ", "validation_failed": "❌ Валидация не пройдена: {error}", "totalErrors": "❌ Всего ошибок: {count}", "totalWarnings": "⚠️ Всего предупреждений: {count}", "errorsSection": "❌ ОШИБКИ", "warningsSection": "⚠️ ПРЕДУПРЕЖДЕНИЯ", "recommendationsSection": "💡 РЕКОМЕНДАЦИИ", "fixErrorsFirst": "1. Сначала исправьте все ошибки", "resolveMissingFilesAndSyntaxErrors": "1. Устраните отсутствующие файлы и синтаксические ошибки", "fixStructuralInconsistencies": "2. Исправьте структурные несоответствия", "completeMissingTranslations": "3. Завершите недостающие переводы", "rerunValidation": "4. Повторно запустите валидацию для проверки исправлений", "addressWarnings": "Устраните предупреждения для повышения качества", "reviewWarnings": "Просмотрите предупреждения и исправьте по необходимости", "considerRunningWithStrict": "2. Рассмотрите запуск с флагом --strict для более строгой проверки", "allValidationsPassed": "🎉 Все проверки пройдены!", "considerRunningUsageAnalysis": "Рассмотрите запуск анализа использования: node i18ntk-usage.js", "deletedOldReport": "🗑️ Старый отчёт валидации удалён", "sourceDir": "📁 Директория исходников: {sourceDir}", "i18nDir": "🌐 Директория I18n: {i18nDir}", "loadingTranslationFiles": "📋 Загрузка файлов перевода...", "foundTranslationFilesCount": "✅ Найдено файлов переводов: {count}", "analyzingTranslations": "🔍 Анализ переводов...", "validationCompletedSuccessfully": "🎉 Валидация успешно завершена!", "validationErrorsFound": "⚠️ Найдено ошибок валидации: {count}", "validationWarningsFound": "⚠️ Найдено предупреждений валидации: {count}", "validationPassed": "✅ Валидация пройдена без ошибок", "validationFailed": "Валидация не пройдена: {error}", "startingValidationProcess": "🔍 Запуск процесса валидации...", "validationProcessCompletedSuccessfully": "✅ Процесс валидации успешно завершён", "stackTrace": "Трассировка стека: {{stack}}", "authenticationFailed": "❌ Аутентификация не удалась. Доступ запрещён.", "fatalValidationError": "❌ Фатальная ошибка валидации: {{error}}", "configAccess": "Доступ к конфигурации для валидации", "configValidated": "Конфигурация успешно проверена", "configError": "Ошибка конфигурации: {error}", "validatorInit": "Инициализация валидатора I18n", "validatorInitialized": "Валидатор I18n успешно инициализирован", "validatorInitError": "Ошибка инициализации валидатора: {error}", "argsParsing": "Парсинг аргументов командной строки", "argsParsed": "Аргументы командной строки разобраны успешно", "argsParseError": "Ошибка разбора аргументов: {error}", "languagesScan": "Сканирование доступных языков", "languagesFound": "Найдено языков: {count}", "languagesScanError": "Ошибка сканирования языков: {error}", "filesScan": "Найдено файлов в {language}: {count}", "filesScanError": "Ошибка сканирования файлов: {error}", "jsonValidated": "Синтаксис JSON проверен: {filePath}", "jsonValidationError": "Ошибка валидации JSON: {error}", "languageValidation": "Проверка языка: {language}", "languageValidationError": "Ошибка проверки языка: {error}", "fileDeleted": "Файл удалён", "runStarted": "Запуск валидации", "runCompleted": "Валидация успешно завершена", "runError": "Запуск валидации не удался: {error}", "scriptExecution": "Выполнение скрипта", "validationCompleted": "Валидация завершена", "validationError": "Ошибка валидации: {error}", "separator": "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", "languageHeader": "🌐 Язык: {language}", "validationResults": "📊 Результаты валидации", "noErrors": "✅ Ошибок не найдено", "noWarnings": "✅ Предупреждений не найдено", "summaryHeader": "📋 ОБЩАЯ СВОДКА", "progressIndicator": "⏳ В процессе...", "completedIndicator": "✅ Завершено", "errorIndicator": "❌ Ошибка", "warningIndicator": "⚠️ Предупреждение", "infoIndicator": "ℹ️ Информация", "sourceDirNotConfigured": "Директория исходников не настроена", "sourceLanguageNotConfigured": "Исходный язык не настроен", "translationFunctionNotInitialized": "Функция перевода не инициализирована", "sourceLanguageDirectoryNotFound": "Директория исходного языка не найдена", "specifiedLanguageNotFound": "Указанный язык не найден", "noJsonFilesFound": "JSON-файлы не найдены в директории исходников: {sourceDir}", "i18nDirectoryNotFound": "Директория I18n не найдена: {i18nDir}", "invalidDirectoryPaths": "Обнаружены недопустимые пути", "invalidSampleFilePath": "Недопустимый путь к примерному файлу", "failedToCreateSampleTranslationFile": "Не удалось создать примерный файл перевода", "invalidFilePathDetected": "Обнаружен недопустимый путь к файлу", "failedToWriteFile": "Не удалось записать файл: {filePath}" }, "adminCli": { "setupPinProtectionTitle": "\n🔐 Настройка защиты админ-PIN", "setupPinProtectionDescription": "Это потребует 4–6-значный PIN для административных операций.", "enablePinProtectionPrompt": "Вы хотите включить защиту админ-PIN?", "setupCancelled": "Настройка защиты админ-PIN отменена.", "enterPinPrompt": "Введите 4–6-значный PIN: ", "pinFormatError": "❌ PIN должен состоять из 4–6 цифр. Пожалуйста, попробуйте снова.", "confirmPinPrompt": "Подтвердите PIN: ", "pinMismatchError": "❌ PIN не совпадают. Пожалуйста, попробуйте снова.", "pinProtectionEnabledSuccess": "✅ Защита админ-PIN успешно включена!", "pinRecoveryWarning": "⚠️ Запомните ваш PIN — восстановлению он не подлежит.", "setupPinProtectionFailed": "❌ Не удалось настроить защиту админ-PIN.", "errorSettingUpPin": "❌ Ошибка при настройке PIN: {message}", "authRequiredForOperation": "\n🔐 Требуется аутентификация админа для: {operation}", "invalidPinFormat": "❌ Неверный формат PIN. PIN должен содержать 4–6 цифр.", "authenticationSuccess": "✅ Аутентификация прошла успешно!", "invalidPinAttemptsRemaining": "❌ Неверный PIN. Осталось попыток: {remaining}.", "authenticationFailedAccessDenied": "❌ Аутентификация не удалась. Доступ запрещён.", "authenticationError": "❌ Ошибка аутентификации: {message}", "pinProtectionNotEnabled": "Защита админ-PIN в данный момент не включена.", "disablingPinProtectionTitle": "\n🔓 Отключение защиты админ-PIN", "confirmDisablePinProtection": "Вы уверены, что хотите отключить защиту админ-PIN?", "operationCancelled": "Операция отменена.", "pinProtectionDisabledSuccess": "✅ Защита админ-PIN отключена.", "disablePinProtectionFailed": "❌ Не удалось отключить защиту админ-PIN.", "errorDisablingPinProtection": "❌ Ошибка при отключении защиты: {message}", "adminProtectionStatusTitle": "\n🔐 Статус защиты админа", "statusEnabled": "Статус: ✅ ВКЛЮЧЕНО", "protectionDetails": "Защита: для админ-операций требуется PIN (4–6 цифр)", "lockoutDetails": "Блокировка: 3 неудачные попытки = 15-минутная блокировка", "statusDisabled": "Статус: ❌ ОТКЛЮЧЕНО", "noAuthRequired": "Защита: аутентификация не требуется", "unprotectedRisk": "Риск: административные операции не защищены", "errorCheckingAdminStatus": "❌ Ошибка при проверке статуса админа: {message}", "authRequired": "🔐 Требуется аутентификация админа.", "invalidPin": "❌ Неверный PIN.", "authSuccess": "✅ Аутентификация прошла успешно!", "adminPinSetupCli": "admin_pin_setup_cli", "adminAuthFailedCli": "admin_auth_failed_cli", "adminAuthDisabledCli": "admin_auth_disabled_cli", "protectedAccess": "Доступ защищён: для чувствительных операций требуется аутентификация админа.", "enterPin": "Введите админ-PIN: ", "accessGranted": "Доступ разрешён." }, "adminPin": { "setup_title": "🔐 Настройка админ-PIN", "setup_separator": "============================================================", "setup_description": "Создайте 4–6-значный PIN для доступа к чувствительным настройкам.", "required_for_title": "Этот PIN будет требоваться для:", "required_for_1": " • Изменения настроек безопасности", "required_for_2": " • Изменения расширенных конфигураций", "required_for_3": " • Доступа к инструментам отладки", "required_for_4": " • Сброса настроек", "setup_note": "💡 При вводе будут показываться звездочки (*).", "setup_digits_only": " Допускаются только цифры 0–9.", "invalid_pin_length": "❌ Неверный PIN. Должен содержать 4–6 цифр.", "invalid_pin_example": " Пример: 1234 или 567890", "pins_do_not_match": "❌ PIN не совпадают.", "setup_success": "✅ Админ-PIN успешно установлен!", "setup_warning": "⚠️ Храните PIN в безопасности. Восстановлению он не подлежит.", "setup_error": "❌ Ошибка при настройке PIN:", "session_expired": "\n⏰ Сессия админа истекла из-за бездействия.", "no_pin_set_setting_up": "⚠️ PIN не установлен. Настройка PIN...", "no_pin_configured_access_denied": "⚠️ PIN не настроен. Доступ запрещён.", "use_admin_settings_to_set_pin": "💡 Настройте PIN в админ-настройках.", "locked_out": "🔒 Доступ заблокирован из-за слишком большого числа неудачных попыток.", "wait_before_retry": "Пожалуйста, подождите 5 минут перед повторной попыткой.", "access_granted": "✅ Доступ к админ-настройкам разрешён.", "incorrect_pin": "❌ Неверный PIN. Осталось попыток: {attempts}.", "verify_pin_error": "❌ Ошибка при проверке PIN:", "already_configured": "✅ Админ-PIN уже настроен.", "optional_setup_title": "\n🔐 Настройка админ-PIN (опционально)", "optional_setup_description": "Защита админ-PIN обеспечивает безопасность для:", "setup_prompt": "Хотите настроить админ-PIN? (y/N): ", "skipping_setup": "⏭️ Пропуск настройки PIN. Настроить можно позже.", "setup_prompt_error": "❌ Ошибка при запросе настройки PIN:", "protectedAccess": "Доступ защищён: для чувствительных операций требуется аутентификация.", "enterPin": "Введите админ-PIN: ", "accessGranted": "Доступ разрешён.", "invalidPin": "❌ Неверный PIN. Пожалуйста, попробуйте снова.", "weak_pin_warning": "⚠️ ВНИМАНИЕ: PIN выглядит слишком простым.", "weak_pin_suggestion": "💡 Рекомендуется использовать более сложный PIN.", "use_anyway_prompt": "Введите «yes», чтобы использовать его, или нажмите Enter для выбора другого PIN: ", "enter_new_pin": "Введите новый админ-PIN (4–6 цифр): ", "confirm_pin": "Подтвердите админ-PIN: ", "not_set": "Не задан", "pin_display_mask": "####" }, "autorun": { "missingRequiredFile": "Отсутствует обязательный файл: {file}", "runInitializationFirst": "Сначала выполните инициализацию.", "initializationCheckPassed": "Проверка инициализации пройдена.", "runningStep": "Выполняется шаг: {stepName}", "commandLabel": "Команда: {command}", "stepRunning": "Шаг «{stepName}» выполняется...", "stepCompletedWithTime": "Шаг «{stepName}» выполнен за {duration} мс.", "stepCompleted": "Шаг «{stepName}» завершён.", "stepFailed": "Шаг «{stepName}» завершился с ошибкой.", "errorLabel": "Ошибка: {error}", "stepFailedWithError": "Шаг «{stepName}» завершился ошибкой: {error}", "requiredStepFailed": "Обязательный шаг не выполнен. Остановка.", "optionalStepFailed": "Необязательный шаг не выполнен. Продолжаем.", "startingAutoRunWorkflow": "Запуск автоматического выполнения...", "workflowIncludesSteps": "Рабочий процесс включает {count} шагов:", "stepRequired": "(Обязательно)", "stepOptional": "(Опционально)", "startingExecution": "Начало выполнения...", "workflowStopped": "Рабочий процесс остановлен.", "workflowCompleted": "Рабочий процесс завершён.", "pressEnterToContinue": "Нажмите Enter, чтобы продолжить...", "runningSelectedSteps": "Выполнение выбранных шагов...", "invalidStepNumber": "Недопустимый номер шага: {stepNum}", "executionReport": "Отчёт о выполнении:", "successfulSteps": "Успешных шагов: {count}", "failedSteps": "Шагов с ошибками: {count}", "requiredFailedSteps": "Неудачных обязательных шагов: {count}", "stepDetails": "Детали шага:", "errorDetails": "Ошибка: {error}", "reportSavedTo": "Отчёт сохранён в: {path}", "overallStatusSuccess": "УСПЕШНО", "overallStatusFailed": "НЕИСПОЛЬНО", "overallStatus": "Общий статус: {status}", "customSettingsConfiguration": "Настройка пользовательских параметров", "pressEnterForDefaults": "Нажмите Enter для значений по умолчанию.", "sourceDirPrompt": "Директория исходников (по умолчанию: {default}): ", "sourceLangPrompt": "Исходный язык (по умолчанию: {default}): ", "targetLangsPrompt": "Языки перевода (через запятую, по умолчанию: {default}): ", "translationMarkerPrompt": "Маркер перевода (по умолчанию: {default}): ", "outputDirPrompt": "Директория для отчётов (по умолчанию: {default}): ", "settingsUpdatedSuccessfully": "Настройки успешно обновлены!", "errorConfiguringSettings": "Ошибка настройки параметров: {error}", "autoRunScriptTitle": "Скрипт Auto-Run", "usageTitle": "Использование:", "runAllSteps": "node i18ntk-autorun.js --all — Запустить все шаги из i18ntk-config.json", "configureSettingsFirst": "node i18ntk-autorun.js --config — Настроить параметры рабочего процесса", "runSpecificSteps": "node i18ntk-autorun.js --steps <номера> — Запустить указанные шаги (например, --steps 1,3,5)", "showHelp": "node i18ntk-autorun.js --help — Показать справку", "availableSteps": "Доступные шаги:", "examplesTitle": "Примеры:", "configExample": "node i18ntk-autorun.js --config", "stepsExample1": "node i18ntk-autorun.js --steps 1,2,3", "stepsExample2": "node i18ntk-autorun.js --all", "configurationComplete": "Настройка завершена.", "runAutoRunCommand": "Теперь вы можете запустить команду auto-run.", "configurationFailed": "Не удалось настроить: {error}", "noValidStepNumbers": "Не указан ни один корректный номер шага.", "autoRunFailed": "Auto-run завершился с ошибкой: {error}", "stepInitializeProject": "Инициализация проекта", "stepAnalyzeTranslations": "Анализ переводов", "stepValidateTranslations": "Валидация переводов", "stepCheckUsage": "Анализ использования", "stepCompleteTranslations": "Завершение переводов", "stepAnalyzeSizing": "Анализ размеров", "stepGenerateSummary": "Генерация итогового отчёта...", "stepCompletedIcon": "✅", "stepCompletedWithIcon": "✅ Шаг «{stepName}» завершён.", "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Выполнение шага «{stepName}»...", "stepFailedIcon": "❌", "translationLoadWarning": "Предупреждение: не удалось загрузить переводы {lang}", "configReadError": "Ошибка чтения {file}", "separator": "==================================================" }, "debug": { "title": "🔧 Инструменты отладки", "separator": "============================================================", "mainDebuggerSystemDiagnostics": "1. Системная диагностика", "_consoleTranslationsCheck": "// 2. Проверка переводов в консоли", "_exportMissingKeys": "// 3. Экспорт отсутствующих ключей перевода", "_replaceHardcodedConsole": "// 4. Заменить жёстко прописанные строки в консоли", "_consoleKeyChecker": "// 5. Проверка ключей консоли", "debugLogs": "2. Логи отладки", "backToMainMenu": "0. Вернуться в главное меню", "selectOption": "Выберите инструмент отладки: ", "runningDebugTool": "Запуск {displayName}...", "debugToolNotFound": "❌ Инструмент отладки не найден: {toolName}", "recentDebugLogs": "📄 Последние логи отладки", "noDebugLogsFound": "❌ Логи отладки не найдены.", "debugLogsDirectoryNotFound": "❌ Директория с логами отладки не найдена.", "selectLogPrompt": "Выберите файл лога для просмотра (1-{count}): ", "invalidChoiceSelectRange": "Неверный выбор. Пожалуйста, выберите из доступного диапазона.", "contentOf": "📄 Содержание {filename}:", "pressEnterToContinue": "Нажмите Enter, чтобы продолжить..." }, "detect_language_mismatches": { "tool_title": "🔍 Инструмент обнаружения несовпадений языков", "separator": "=====================================\n", "analyzing_file": "📄 Анализ {language}.json...", "error_analyzing_file": "❌ Ошибка при анализе {filename}: {errorMessage}", "results_title": "📊 РЕЗУЛЬТАТЫ ОБНАРУЖЕНИЯ НЕСОВПАДЕНИЙ ЯЗЫКОВ", "results_separator": "========================================\n", "summary_title": "📋 ИТОГИ:", "total_files_analyzed": " Файлов проанализировано: {totalFiles}", "files_with_mismatches": " Файлов с несовпадениями: {filesWithMismatches}", "total_mismatches_found": " Всего найдено несовпадений: {totalMismatches}\n", "no_mismatches_found": "✅ Несовпадений не найдено! Все переводы соответствуют своим языкам.\n", "detailed_results_title": "🔍 ПОДРОБНЫЕ РЕЗУЛЬТАТЫ:\n", "file_mismatch_header": "📄 {filename} ({language})", "mismatches_count": " Найдено несовпадений: {count}:\n", "mismatch_details": " {index}. Ключ: {key}", "mismatch_value": " Значение: \"{value}\"", "mismatch_issue": " Проблема: {description}", "recommendations_title": "💡 РЕКОМЕНДАЦИИ:\n", "recommendation_1": "1. Проверьте и переведите все записи, отмеченные [TRANSLATE]", "recommendation_2": "2. Замените языковые префиксы (например, [DE], [FR]) на правильные переводы", "recommendation_3": "3. Переведите английский текст на соответствующий целевой язык", "recommendation_4": "4. Используйте эквиваленты на родном языке для всего текста, отображаемого пользователю", "recommendation_5": "5. Запустите этот инструмент снова после исправлений, чтобы проверить результаты\n", "detailed_report_saved": "📄 Подробный отчёт сохранён: {reportPath}\n", "error_saving_report": "❌ Ошибка при сохранении отчёта: {errorMessage}\n", "auto_fix_mode": "🔧 Режим автоисправления {dryRun}", "auto_fix_separator": "=====================================\n", "fixed_file": "✅ Исправлен {filename}", "auto_fix_summary_title": "\n📊 Итоги автоисправления:", "total_fixes_applied": " Всего применено исправлений: {count}", "preview_fixes_title": "\n🔍 Предпросмотр исправлений:", "fix_details": " {file}: {key}\n Старое: \"{old}\"\n Новое: \"{new}\"\n", "more_fixes": " ... и ещё {count} исправлений\n", "run_with_apply_fixes": "💡 Запустите с --apply для применения этих исправлений\n", "error_general": "❌ Ошибка:", "mainDebuggerSystemDiagnostics": "Системная диагностика", "exportMissingKeys": "Экспорт отсутствующих ключей", "replaceHardcodedConsole": "Замена жёстко прописанных строк", "consoleKeyChecker": "Проверка ключей консоли", "debugLogs": "Логи отладки", "backToMainMenu": "Вернуться в главное меню", "invalidChoiceSelectRange": "❌ Неверный выбор. Пожалуйста, выберите номер из отображаемого диапазона.", "runningDebugTool": "Запуск инструмента: {displayName}", "debugToolNotFound": "Инструмент '{toolName}' не найден.", "recentDebugLogs": "Последние логи отладки", "noDebugLogsFound": "Логи отладки не найдены.", "logEntry": "Запись лога: {timestamp} – {message}", "debugLogsDirectoryNotFound": "Директория логов отладки не найдена." }, "help": { "title": "📊 СПРАВКА ПО УПРАВЛЕНИЮ I18N\n\n", "usage": "Использование: node i18ntk-manage.js [опции]\n", "interactiveMode": "\n💡 Используйте: node i18ntk-manage.js --command=<команда> для прямого выполнения\n", "showHelp": "\n📖 Используйте: node i18ntk-manage.js --help для просмотра доступных команд\n", "availableCommands": "\n📖 Доступные команды:\n", "initProject": "🚀 Инициализировать новые языки", "analyzeTranslations": "🔍 Анализ переводов", "validateTranslations": "✅ Валидация переводов", "checkUsage": "📊 Проверка использования ключей", "initCommand": " init - Инициализировать новые языки", "analyzeCommand": " analyze - Анализ переводов", "validateCommand": " validate - Валидация переводов", "usageCommand": " usage - Проверка использования ключей", "sizingCommand": " sizing - Анализ размеров", "completeCommand": " complete - Завершение переводов (100% покрытия)", "summaryCommand": " summary - Показать статус проекта", "debugCommand": " debug - Отладка проблем перевода", "menu": { "title": "\n🌐 МЕНЮ УПРАВЛЕНИЯ I18N\n", "description": "Интерактивное меню для управления интернационализацией\n", "exit": "\n🚪 Выход" }, "commands": { "init": "\n init - Инициализировать новые языки", "analyze": " analyze - Анализ переводов", "validate": " validate - Валидация переводов", "usage": " usage - Проверка использования ключей", "sizing": " sizing - Анализ размеров", "complete": " complete - Завершение переводов (100% покрытия)", "summary": " summary - Показать статус проекта", "debug": " debug - Отладка проблем перевода" }, "options": { "sourceDir": "\n --source-dir <dir> Директория исходников для анализа", "output": " --output <file> Файл для вывода отчёта", "verbose": " --verbose, -v Подробный вывод", "keepReports": " --keep-reports Сохранить существующие отчёты", "deleteReports": " --delete-reports Удалить существующие отчёты", "help": " --help, -h Показать справку" }, "examples": { "title": "\nПримеры:\n", "example1": " node i18ntk-manage.js", "example2": " node i18ntk-manage.js --source-dir ./locales", "example3": " node i18ntk-manage.js --output summary-report.txt", "example4": " node i18ntk-manage.js --verbose", "example5": " node i18ntk-manage.js --source-dir ./locales --output report.json" }, "features": { "initProject": "🚀 Инициализировать новые языки", "analyzeTranslations": "🔍 Анализ переводов", "validateTranslations": "✅ Валидация переводов", "checkUsage": "📊 Проверка использования ключей", "completeTranslations": "🎯 Завершение переводов (100% покрытия)", "showSizing": "📏 Анализ размеров", "runWorkflow": "🔄 Запуск полного процесса", "showStatus": "📋 Показать статус проекта", "deleteReports": "🗑️ Удалить все отчёты", "changeLanguage": "🌍 Сменить язык интерфейса", "settings": "⚙️ Настройки", "showHelp": "❓ Справка", "debugTools": "🔧 Инструменты отладки" }, "messages": { "selectOption": "Выберите опцию:", "invalidOption": "❌ Неверная опция. Пожалуйста, попробуйте снова.", "operationCompleted": "✅ Операция успешно завершена!", "pressEnter": "Нажмите Enter для продолжения...", "goodbye": "👋 До свидания!", "unknownCommand": "Неизвестная команда: {{command}}", "nonInteractive": "⚠️ Обнаружен неинтерактивный режим. Меню отображается только для справки." }, "i18n_helper": { "translation_file_not_found": "Файл перевода не найден: {translationFile}", "error_loading_translations": "Ошибка загрузки переводов: {errorMessage}", "translation_not_found": "Перевод для ключа не найден: {key}", "translation_key_not_string": "Значение ключа перевода не является строкой: {key}", "error_reading_locales_directory": "Ошибка чтения директории локалей: {errorMessage}" } }, "init": { "initializationTitle": "🚀 Набор инструментов i18n — Инициализация проекта", "sourceDirectoryLabel": "📁 Директория исходников: {dir}", "sourceLanguageLabel": "🌍 Исходный язык: {language}", "detectedI18nFrameworks": "🔍 Обнаружены фреймворки i18n: {frameworks}", "existingDirectoriesFound": "📁 Найдены существующие директории переводов:", "useExistingDirectoryPrompt": "Вы хотите использовать существующую директорию? (y/n)", "autoDetectedI18nDirectory": "📂 Автоопределённая директория i18n: {directory}", "initializingProject": "⚙️ Инициализация конфигурации проекта...", "c