UNPKG

i18ntk

Version:

i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.

764 lines 216 kB
{ "meta": { "version": "3.1.2", "updated": "07.05.2026" }, "common": { "welcome": "Добро пожаловать", "hello": "Привет", "goodbye": "До свидания", "yes": "Да", "no": "Нет", "save": "Сохранять", "cancel": "Отмена", "delete": "Удалить", "edit": "Редактировать", "loading": "Загрузка...", "offlineTitle": "Вы оффлайн", "offlineMessage": "Пожалуйста, проверьте подключение к Интернету", "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}", "errors": { "errors": "Ошибки:", "genericError": "❌ Ошибка: {error}", "initializationFailed": "❌ Ошибка инициализации: {error}", "initializationCancelled": "❌ Инициализация отменена пользователем.", "translationKeyNotFound": "Ключ перевода не найден: {key}", "sourceDirectoryNotFound": "Исходный каталог не найден: {directory}", "configLoadingFailed": "Загрузка конфигурации не удалась", "invalidSourceDirectory": "Неверный исходный каталог: {directory}", "securityViolation": "Обнаружено нарушение безопасности", "authenticationFailed": "Аутентификация не удалась", "sourceEqualsI18nWarn": "⚠️ sourceDir равен i18nDir ({sourceDir}). Возвращаясь к {fallback} для сканирования источника." }, "errorGeneratingStatusSummary": "Ошибка создания сводки статуса: {error}", "errorRunningDebugTool": "Ошибка запуска инструмента отладки '{displayName}': {error}", "errorReadingDebugLogs": "Ошибка чтения журналов отладки: {error}", "errorAnalyzingLogFile": "Ошибка анализа файла журнала: {error}", "errorAnalyzingTranslationKeys": "Ошибка анализа ключей перевода: {error}", "errorAnalyzingTranslationCompleteness": "Ошибка анализа полноты перевода: {error}", "analyzingTranslationCompleteness": "Анализ полноты перевода на всех языках...", "i18nDirectoryNotFound": "⚠️ Каталог i18n не найден: {i18nDir}", "translationCompletenessAnalysisFailed": "⚠️ Не удалось выполнить анализ полноты перевода: {error}", "failedToAnalyzeLanguage": "❌ Не удалось проанализировать язык {language}: {error}", "errorReadingI18nDirectory": "❌ Ошибка чтения каталога i18n:", "languageCompletenessTitle": "📈 ПОЛНОТА ПЕРЕВОДА ПО ЯЗЫКАМ", "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": "Завершено успешно!", "warnings": "Предупреждения:", "completedKeys": "Готовые ключи:", "missingKeys": "Недостающие ключи:", "partialKeys": "Частичные ключи:", "home": "Дом", "settings": "Настройки", "startingSettings": "🎛️ Запуск командной строки настроек...", "confirm": "Подтверждать", "errorExiting": "Ошибка при выходе." }, "errors": { "invalidOption": "❌ Неверный вариант: {option}. Пожалуйста, попробуйте еще раз.", "readlineClosed": "Входной поток закрыт; работает в неинтерактивном режиме.", "noPackageJson": "Пакет package.json не найден. Невозможно автоматически обнаружить платформу i18n.", "noI18nDir": "В корне проекта не найден каталог i18n.", "noI18nConfig": "В корне проекта не найден файл конфигурации i18n.", "errorReadingDebugLogs": "Ошибка чтения журналов отладки: {error}" }, "scanner": { "help_message": "Использование сканера текста I18n: узел i18ntk-scanner.js [параметры] Параметры: --source-dir <dir> Исходный каталог для сканирования (по умолчанию: ./src) --output <file> Выходной файл результатов сканирования (по умолчанию: ./i18ntk-scanner-report.json) --framework <name> Целевая платформа (реагировать, vue, angular, vanilla) --patterns <patterns> Пользовательские шаблоны регулярных выражений (через запятую) --include-tests Включить тестовые файлы в сканирование --exclude-dirs <dirs> Каталоги для исключения (через запятую) --help Показать эту справку Примеры: node i18ntk-scanner.js --source-dir=./src --framework=react node i18ntk-scanner.js --patterns 'console.log\\((.*?)\\)' --include-tests node i18ntk-scanner.js --output=./scan-results.json", "help_options": { "source_dir": "Исходный каталог для сканирования на наличие проблем i18n", "output_dir": "Каталог для отчетов и результатов сканирования", "framework": "Целевая платформа (реагировать, vue, angular, vanilla)", "patterns": "Пользовательские шаблоны регулярных выражений для обнаружения текста", "exclude": "Шаблоны файлов, которые следует исключить из сканирования", "output_report": "Создать подробный отчет о сканировании", "min_length": "Минимальная длина текста, которую следует учитывать при переводе", "max_length": "Максимальная длина текста, которую следует учитывать при переводе", "include_tests": "Включите тестовые файлы в процесс сканирования" }, "starting": "🔍 Запуск сканера текста для фреймворка: {framework}", "sourceDirectory": "📁 Каталог сканирования: {sourceDir}", "frameworkDetected": "🎯 Обнаруженные рамки: {framework}", "scanningFiles": "📊 Сканирование {fileCount} файлы...", "foundTexts": "📝 Найден {textCount} тексты требующие перевода", "generatingReport": "📊 Формируем подробный отчет...", "reportSaved": "💾 Отчет о сканировании сохранен в: {reportPath}", "noTextsFound": "✅ Не найдено жестко закодированных английских текстов.", "scanComplete": "🎉 Сканирование успешно завершено!", "analysisTitle": "🔍 СКАН-АНАЛИЗ ПЕРЕВОДА", "fileSummary": "📄 {file}: {count} найдены тексты", "textLocation": "📍 Линия {line}: {text}", "foundText": "Найденный {count} потенциальные экземпляры жестко запрограммированного текста", "context": "📝 Контекст: {context}", "severity": "⚠️ Тяжесть: {severity}", "recommendation": "💡Рекомендация: {recommendation}", "welcome": { "title": "🎯 Добро пожаловать в Сканер текста!", "description": "Этот инструмент сканирует исходный код на предмет жестко закодированного текста на английском языке, который может нуждаться в переводе." }, "frameworkPrompt": { "title": "🎯 Выберите фреймворк", "available": "Доступные фреймворки: React, Vue, Angular, Vanilla.", "description": "Введите тип платформы (или нажмите Enter для автоматического определения):", "input": "Рамки:" }, "directoryPrompt": { "title": "📁 Выберите исходный каталог", "current": "Текущий каталог: {dir}", "description": "Введите каталог для сканирования (или нажмите Enter для текущего):", "input": "Каталог:" }, "options": { "includeTests": "Включить тестовые файлы?", "excludeDirs": "Каталоги для исключения (через запятую):", "customPatterns": "Пользовательские шаблоны для сканирования (регулярное выражение):" }, "reportGenerated": "Создан отчет о сканировании: {path}" }, "fixer": { "help_message": "I18n Translation Fixer Использование: узел i18ntk-fixer.js [параметры] Параметры: --source-dir <dir> Исходный каталог для сканирования (по умолчанию: ./locales) --languages <langs> Список языков, разделенных запятыми, которые нужно исправить --markers <markers> Маркеры, разделенные запятыми, которые следует рассматривать как непереведенные --no-backup Пропустить автоматическое создание резервной копии --help Показать эту справку Примеры: node i18ntk-fixer.js --languages ​​de,fr node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED node i18ntk-fixer.js --no-backup", "starting": "🚀 Начинаем исправление перевода для языков: {languages}", "sourceDirectory": "📁 Исходный каталог: {sourceDir}", "sourceLanguage": "🔤 Исходный язык: {sourceLanguage}", "markers": "🏷️ Маркеры для исправления: {markers}", "scanningLanguage": "📊 Сканирование {language}...", "noLanguages": "❌Не указаны языки для исправления.", "allComplete": "🎉Все переводы уже готовы!", "fullReportSaved": "📊 Полный отчет сохранен в: {reportPath}", "reviewReport": "Прежде чем продолжить, ознакомьтесь с отчетом.", "backupCreated": "💾 Резервная копия успешно создана.", "applyingFixes": "🔄 Внесение исправлений...", "fixingComplete": "✅ Исправление перевода завершено!", "operationCancelled": "❌ Операция отменена пользователем.", "analysisTitle": "🔍 АНАЛИЗ ИСПРАВЛЕНИЯ ПЕРЕВОДА", "analysisSeparator": "===============================================", "totalIssues": "Всего найдено проблем: {totalIssues}", "missingTranslations": "Недостающие переводы: {missing}", "placeholderTranslations": "Переводы заполнителей: {placeholder}", "noIssues": "✅Проблем не обнаружено. Все переводы завершены.", "detailedIssues": "📋 ПОДРОБНЫЕ ВОПРОСЫ:", "detailedSeparator": "--------------------------------------------------", "filePath": "📄 {file} → {path}", "missingKey": "❌ОТСУТСТВУЕТ: {source} → {new}", "placeholderKey": "⚠️ ЗАМЕСИТЕЛЬ: \"{target}\" → \"{new}\"", "moreIssues": "... и {count} больше проблем. Проверьте файл отчета для получения полной информации.", "confirmationTitle": "🤔 Хотите продолжить исправления?", "confirmationOptions": "Параметры:", "optionYes": "y - Да, применить все исправления", "optionNo": "n - Нет, отменить операцию", "optionShow": "s – Показать подробные проблемы", "choicePrompt": "Ваш выбор (да/нет/ы):", "nonInteractiveMode": "⚡ Обнаружен неинтерактивный режим — исправления применяются автоматически...", "reportGenerated": "📊 Создан отчет Fixer: {path}", "summary": "Краткое описание фиксера:", "welcome": { "title": "🎯 Добро пожаловать в Fixer Translation!", "description": "Этот инструмент поможет вам исправить неправильные переводы и заполнители в файлах локали." }, "markerPrompt": { "title": "🏷️ Настройте маркеры-заполнители", "description": "Введите маркеры, обозначающие непереведенный текст (через запятую):", "currentDefaults": "Маркеры по умолчанию: {markers}", "input": "Маркеры (или нажмите Enter для значений по умолчанию):" }, "languagePrompt": { "title": "🌍 Выберите языки для исправления", "available": "Доступные языки: {languages}", "description": "Введите языки, которые нужно исправить (через запятую) или нажмите Enter для всех:", "input": "Языки:", "noLanguages": "Языки, которые можно исправить, не найдены." }, "directoryPrompt": { "title": "📁 Выберите каталог", "current": "Текущий каталог: {dir}", "description": "Введите каталог, содержащий файлы вашей локали (или нажмите Enter для текущего):", "input": "Каталог:" }, "backupLocation": "Местоположение резервной копии: {dir}", "completed": "Исправление завершено.", "creatingBackup": "Создание резервной копии в {dir}...", "dryRunMode": "Режим сухого хода: {mode}", "error": "Исправление не удалось: {error}", "fixing": "Исправление {language}...", "foundLanguages": "Найденный {count} языки: {languages}", "languageFixed": "{language}: зафиксированный {fixed} ключ(и), пропущен {skipped}.", "running": "Запуск средства исправления перевода...", "totalFixed": "Всего фиксировано: {count}" }, "autorun": { "stepAnalyzeTranslations": "Анализ переводов", "stepCompletedWithIcon": "✅ Выполнено: {stepName}", "stepValidateTranslations": "Проверка переводов", "stepRunning": "▶️ Шаг {stepNumber}/{totalSteps}: {stepName}", "separator": "===============================================", "stepFailed": "❌ Не удалось: {stepName}", "errorLabel": "Ошибка", "autoRunScriptTitle": "🧪 Автоматический запуск рабочего процесса", "usageTitle": "Использование", "runAllSteps": "Запустить: узел i18ntk-autorun.js", "configureSettingsFirst": "Конфигурация: i18ntk-config.json или флаги CLI.", "runSpecificSteps": "Используйте --steps=1,3 или --list, чтобы показать шаги.", "showHelp": "--help для получения дополнительной информации", "examplesTitle": "Примеры", "configExample": "узел i18ntk-autorun.js --ui-language=zh", "stepsExample1": "узел i18ntk-autorun.js --steps=анализировать,проверить", "stepsExample2": "узел i18ntk-autorun.js --list", "customSettingsConfiguration": "Пользовательские настройки автозапуска", "availableSteps": "Доступные шаги", "startingAutoRunWorkflow": "🚀 Запуск автоматического запуска рабочего процесса...", "workflowIncludesSteps": "Рабочий процесс включает в себя {count} шаги:", "missingRequiredFile": "Отсутствует необходимый файл: {file}", "workflowStopped": "Рабочий процесс остановлен из-за сбоя.", "workflowCompleted": "🎉Рабочий процесс завершен!", "successfulSteps": "Успешные шаги: {count}", "failedSteps": "Неудачные шаги: {count}", "stepInitializeProject": "Инициализировать проект", "stepCheckUsage": "Проверьте использование ключа", "stepGenerateSummary": "Создать сводный отчет", "runInitializationFirst": "Пожалуйста, сначала запустите инициализацию.", "initializationCheckPassed": "Проверка инициализации пройдена.", "runningStep": "Шаг бега: {stepName}", "commandLabel": "Команда: {command}", "stepCompletedWithTime": "Шаг '{stepName}' завершено в {duration}РС.", "stepCompleted": "Шаг '{stepName}' завершенный.", "stepFailedWithError": "Шаг '{stepName}'не удалось с ошибкой: {error}", "requiredStepFailed": "Не удалось выполнить требуемый шаг. Остановка рабочего процесса.", "optionalStepFailed": "Необязательный шаг не выполнен. Продолжающийся рабочий процесс.", "stepRequired": "(Необходимый)", "stepOptional": "(Необязательный)", "startingExecution": "Начинаем выполнение...", "pressEnterToContinue": "Нажмите Enter, чтобы продолжить...", "runningSelectedSteps": "Выполнение выбранных шагов...", "invalidStepNumber": "Неверный номер шага: {stepNum}", "executionReport": "Отчет о выполнении:", "requiredFailedSteps": "Не удалось выполнить необходимые шаги: {count}", "stepDetails": "Детали шага:", "reportSavedTo": "Отчет сохранен в: {path}", "overallStatusSuccess": "УСПЕХ", "overallStatusFailed": "НЕУСПЕШНЫЙ", "overallStatus": "Общий статус: {status}", "pressEnterForDefaults": "Нажмите Enter, чтобы использовать настройки по умолчанию для любого запроса.", "sourceDirPrompt": "Введите исходный каталог (по умолчанию: {default}):", "sourceLangPrompt": "Введите исходный язык (по умолчанию: {default}):", "targetLangsPrompt": "Введите целевые языки (через запятую, по умолчанию: {default}):", "translationMarkerPrompt": "Введите маркер перевода (по умолчанию: {default}):", "outputDirPrompt": "Введите выходной каталог для отчетов (по умолчанию: {default}):", "settingsUpdatedSuccessfully": "Настройки успешно обновлены!", "errorConfiguringSettings": "Ошибка настройки параметров: {error}", "configurationComplete": "Конфигурация завершена.", "runAutoRunCommand": "Теперь вы можете запустить команду автозапуска.", "configurationFailed": "Конфигурация не удалась: {error}", "noValidStepNumbers": "Не указаны допустимые номера шагов.", "autoRunFailed": "Не удалось выполнить автозапуск: {error}", "stepCompleteTranslations": "Полные переводы", "stepAnalyzeSizing": "Анализ размеров", "stepCompletedIcon": "✅", "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Шаг '{stepName}' бег...", "stepFailedIcon": "❌", "translationLoadWarning": "Предупреждение: не удалось загрузить {lang} переводы", "configReadError": "Ошибка чтения {file}" }, "analyze": { "help_message": "Использование анализатора перевода I18n: узел i18ntk-analyze.js [параметры] Параметры: --source-dir <dir> Исходный каталог для сканирования (по умолчанию: ./src) --i18n-dir <dir> Каталог I18n (по умолчанию: ./src/locales) --output-report Создать подробный отчет --output-dir <dir> Выходной каталог для отчетов (по умолчанию: ./reports) --help Показать эту справку Примеры: node i18ntk-analyze.js --output-report node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales node i18ntk-analyze.js --output-dir=./anaанализ --output-report", "source_directory": "📁 Исходный каталог: {sourceDir}", "i18n_directory": "🌐 Каталог I18n: {i18nDir}", "loading_translation_files": "📋 Загрузка файлов перевода...", "sourceDirectoryLabel": "📁 Каталог исходников: {sourceDir}", "sourceLanguageLabel": "🌍Исходный язык: {sourceLanguage}", "strictModeLabel": "⚙️ Строгий режим: {mode}", "found_translation_files_count": "✅ Найден {count} файлы перевода", "analyzing_translations": "🔍Анализ переводов...", "analysis_completed_successfully": "🎉Анализ успешно завершен!", "analysis_results": "📊 РЕЗУЛЬТАТЫ АНАЛИЗА", "language_analysis_stats": "{language}: {translatedKeys}/{totalKeys} ({percentage}% переведено)", "sample_missing_keys": "Пример отсутствующих ключей:", "missing_key": "- {key}", "and_more_missing": "...и {count} более.", "sample_unused_keys": "Пример неиспользуемых ключей:", "unused_key": "- {key}", "and_more_unused": "...и {count} более.", "recommendations": "📋 РЕКОМЕНДАЦИИ", "add_missing_translations": "💡 Добавьте недостающие переводы, чтобы улучшить охват.", "remove_unused_translations": "💡 Удалите неиспользуемые переводы, чтобы сохранить ваш проект в чистоте.", "next_steps": "📋 ДАЛЬНЕЙШИЕ ШАГИ", "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": "Загрузка конфигурации не удалась", "sourceLanguageNotFound": "Каталог исходного языка не найден: {sourceLanguage}", "couldNotParseTarget": "Не удалось проанализировать целевой файл: {file}", "couldNotParseSource": "Не удалось разобрать исходный файл: {file}", "reportGenerated": "Отчет создан: {path}", "generateReportPrompt": "Хотите, чтобы был создан отчет?", "title": "🌍 ЗАВЕРШЕНИЕ ПЕРЕВОДА I18NTK", "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": "узел i18ntk-usage.js --output-report", "nextStep3": "2. Проверка перевода:", "nextStep4": "узел i18ntk-validate.js", "nextStep5": "3. Анализируйте закономерности:", "nextStep6": "узел 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": "Язык Char Diff % Diff Проблема", "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 символов – рассмотрите возможность их разделения", "longer": "дольше", "shorter": "короче", "review_translations": "Рассмотрите возможность просмотра {lang} переводы - они есть {percentageDifference}% {comparison} чем базовый уровень", "report_saved_to": "Отчет сохранен в: {reportPath}", "considerReviewingTranslations": "Рассмотрите возможность просмотра ${lang} переводы – они на ${data.percentageDifference} % длиннее базового уровня.", "csv_report_saved_to": "Отчет в формате CSV сохранен в: {csvPath}", "human_report_saved": "Читаемый отчет сохранен: {reportPath}", "folder_summary_title": "Сводка папки", "folder_summary_table_header": "Язык Размер (КБ) Ключи Средняя длина Всего символов", "folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}", "language_comparison_title": "Сравнение языков", "language_comparison_row": "{lang}: {diff} символы ({percent}%) {status}", "summary_stats": "📊Резюме: {totalLanguages} языки, {totalKeys} клавиши — отчеты сохраняются в {reportPath}", "detailedKeysDescription": "Показать подробный анализ на уровне ключей в консоли", "too_many_keys_warning": "⚠️ Слишком много ключей для отображения в консоли — для полного анализа проверьте файл подробного отчета.", "no_translation_files_found": "Файлы перевода не найдены", "analysis_completed": "Анализ завершен в {duration}РС", "analysis_failed": "Анализ не удался: {errorMessage}", "starting_analysis": "Начинаю анализ...", "found_files": "Найденный {count} файлы", "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} персонажи - подумайте о том, чтобы разбить их" }, "detailed_key_analysis_title": "Детальный ключевой анализ", "key_analysis_detail": "{lang}: {length} символы ({status}) - {translation}", "key_analysis_header": "Ключ: {key}", "status_empty": "пустой", "status_long": "длинный", "status_ok": "хорошо" }, "usage": { "help_message": "Использование анализатора использования I18n: узел i18ntk-usage.js [параметры] Параметры: --source-dir <dir> Исходный каталог для сканирования (по умолчанию: ./src) --i18n-dir <dir> Каталог I18n (по умолчанию: ./src/locales) --output-report Создать подробный отчет --output-dir <dir> Выходной каталог для отчетов (по умолчанию: ./reports) --help Показать эту справку Примеры: node i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analysis --output-report", "source_directory_thissourcedir": "📁 Исходный каталог: {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} файлы перевода", "errorReadingI18nDirectory": "⚠️ Ошибка чтения каталога i18n: {error}", "pressEnterToReturnToMenu": "📝 Нажмите Enter, чтобы вернуться в главное меню...", "notTranslatedKeysTotal": "⚠️ Не переведенные ключи: {total}", "noSourceFilesFound": "⚠️ В исходном каталоге не найдено исходных файлов.", "reviewNotTranslatedKeys": "💡 Просмотр не переведенных ключей", "analysisCompletedSuccessfully": "🎉Анализ успешно завершен!", "detectedSourceDirectory": "Обнаружен исходный каталог: {sourceDir}", "detectedI18nDirectory": "Обнаружен каталог i18n: {i18nDir}", "fileInfo": "📄 {namespace}: {keys} ключи", "failedToAnalyzeUsage": "❌ Не удалось проанализировать использование: {error}", "failedToAnalyzeFile": "❌ Не удалось проанализировать файл: {error}", "failedToExtractKeys": "❌ Не удалось извлечь ключи из {filePath}: {error}", "analysisFailedError": "❌ Анализ не удался: {error}", "analyzerInitialized": "Анализатор инициализирован", "analyzerInitFailed": "Инициализация анализатора не удалась: {error}", "argsParsed": "Аргументы проанализированы", "processedFiles": "Обработано {processedFiles} из {totalFiles} файлы.", "argsParseFailed": "Разбор аргументов не удался: {error}", "translationDiscoveryError": "Ошибка обнаружения перевода: {error}", "fileTraversalError": "Ошибка обхода файла: {error}", "sourceEqualsI18nWarn": "{reason}. Анализ использования не будет сканировать файлы локали как исходный код.", "i18nEqualsSourceWarn": "⚠️ Каталог I18n и исходный каталог совпадают. Это может вызвать проблемы с анализом.", "usageAnalysisFailed": "⚠️ Анализ использования не удался: {error}", "translationFileParseError": "⚠️ Ошибка разбора файла перевода: {error}", "translationKeysLoadError": "⚠️ Ошибка загрузки ключей перевода: {error}", "languageCompletenessStats": "🌐 {language}: {translated}/{total} ({completeness}% переведено)", "missingKeysCount": "⚠️ Недостающие ключи: {count}", "analyzingTranslationCompleteness": "Анализ полноты перевода...", "unusedKeysCount": "Неиспользуемые ключи: {count}", "usedKeysCount": "Используемые ключи: {count}", "availableKeysCount": "Доступные ключи: {count}", "analysisResults": "Результаты анализа:", "i18nDirectoryNotFound": "⚠️ Каталог I18n не найден. Пожалуйста, проверьте путь.", "sourceDirectoryNotFound": "⚠️ Исходный каталог не найден: {dir}", "checkUsage": { "title": "🔍 АНАЛИЗ ИСПОЛЬЗОВАНИЯ I18NTK", "analyzing_source_files": "🔍 Анализ исходных файлов...", "source_directory_thissourcedir": "📁 Исходный каталог: {sourceDir}", "i18n_directory_thisi18ndir": "📁 каталог i18n: {i18nDir}", "found_files_in_source": "✅ Найден {numFiles} файлы в исходном каталоге", "no_source_files_found": "⚠️ В указанном каталоге не найдены исходные файлы.", "processedFiles": "📊 Обработано {processedFiles} из {totalFiles} файлы", "failedToProcessFile": "❌ Не удалось обработать", "found_thisusedkeyssize_unique_": "🔍 Найден {usedKeysSize} уникальные используемые ключи", "total_key_usages_totalkeysfoun": "📊 Общее количество использований ключей: {totalKeysFound}", "loading_available_translation_": "📂 Загрузка доступных ключей перевода...", "found_thisavailablekeyssize_av": "✅ Найден {availableKeysSize} доступные ключи", "message": "Анализ использования ключа перевода в вашем проекте...", "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}", "translation_completeness_title": "📈 ПОЛНОТА ПЕРЕВОДА", "language_completeness_stats": "{language}: {translated}/{total} ключи ({percentage}%)", "n_sample_unused_keys": "🗑️ ПРИМЕР НЕИСПОЛЬЗУЕМЫХ КЛЮЧЕЙ (первые 5):", "key": "🔑 {key}", "and_unusedkeyslength_5_more": "... и {count} больше неиспользуемых ключей", "n_sample_missing_keys": "❌ ПРИМЕР ОТСУТСТВУЮЩИХ КЛЮЧЕЙ (первые 5):", "and_missingkeyslength_5_more": "... и {count} еще недостающие ключи", "n_generating_detailed_report": "📊 Формируем подробный отчет...", "report_saved_reportpath": "📄 Отчет сохранен: {reportPath}", "n_recommendations": "💡РЕКОМЕНДАЦИИ:", "consider_removing_unused_trans": "🗑️ Рассмотрите возможность удаления неиспользуемых переводов, чтобы уменьшить размер пакета.", "add_missing_translation_keys_t": "➕ Добавьте недостающие ключи перевода для обеспечения единообразия.", "review_dynamic_keys_manually_t": "🔍 Проверьте динамические ключи вручную (они могут быть действительными)", "all_translation_keys_are_prope": "✅ Все ключи перевода используются правильно!", "n_next_steps": "🎯 СЛЕДУЮЩИЕ ШАГИ:", "2_check_the_detailed_report_fo": "2. Проверьте подробный отчет на наличие конкретных проблем.", "help_message": "Использование анализатора использования I18n: узел i18ntk-usage.js [параметры] Параметры: --source-dir <dir> Исходный каталог для сканирования (по умолчанию: ./src) --i18n-dir <dir> Каталог I18n (по умолчанию: ./src/locales) --output-report Создать подробный отчет --output-dir <dir> Выходной каталог для отчетов (по умолчанию: ./reports) --help Показать эту справку Примеры: node i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analysis --output-report", "1_review_the_analysis_results": "1. Просмотрите результаты анализа в консоли или созданном отчете.", "2_run_with_outputreport_for_de": "2. Запустите --output-report для получения подробного отчета.", "3_remove_unused_keys_or_add_mi": "3. Удалите неиспользуемые ключи или добавьте недостающие ключи в исходный код.", "4_rerun_analysis_to_verify_imp": "4. Повторно проведите анализ для проверки улучшений.", "noSourceFilesFound": "Исходные файлы для анализа не найдены.", "i18nDirectoryNotFound": "Каталог I18n не найден: {i18nDir}", "noTranslationLanguagesFound": "Языки перевода не найдены.", "failedToAnalyzeFile": "Не удалось проанализировать файл {filePath}: {error}", "failedToAnalyzeLanguage": "Не удалось проанализировать язык {language}: {error}", "translationCompletenessAnalysisFailed": "Не удалось выполнить анализ полноты перевода: {error}", "n": "\\п" }, "complete": { "configLoadedSuccessfully": "Конфигурация успешно загружена", "configLoadingFailed": "Загрузка конфигурации не удалась", "title": "🌍 ЗАВЕРШЕНИЕ ПЕРЕВОДА I18NTK", "separator": "=========================================================", "sourceDir": "📁 Исходный каталог: {sourceDir}", "sourceLanguage": "🌐 Исходный язык: {sourceLanguage}", "dryRunMode": "🧪 Режим пробного запуска — никаких изменений вноситься не будет.", "languages": "🌍Доступные языки: {languages}", "addingMissingKeys": "➕ Добавление недостающих ключей в файлы перевода...", "processing": "🔄Обработка {language}...", "addedKeys": "✅ Добавлено {count} недостающие ключи", "changeDetails": "📝 {file}: {key}", "andMore": "...и {count} более", "noChangesNeeded": "✅ Никаких изменений не требуется {language}", "summaryTitle": "📊 РЕЗЮМЕ ЗАВЕРШЕНИЯ", "totalChanges": "📝 Всего изменений: {totalChanges}", "languagesProcessed": "🌍 Обработанные языки: {languagesProcessed}", "missingKeysAdded": "➕ Добавлены недостающие клавиши: {missingKeysAdded}", "nextStepsTitle": "📋 ДАЛЬНЕЙШИЕ ШАГИ", "nextStep1": "1. Запустите анализ использования:", "nextStep2": "узел i18ntk-usage.js --output-report", "nextStep3": "2. Проверка перевода:", "nextStep4": "узел i18ntk-validate.js", "nextStep5": "3. Анализируйте закономерности:", "nextStep6": "узел i18ntk-analyze.js", "allKeysAvailable": "🎉 Все ключи перевода теперь доступны!", "runWithoutDryRun": "💡 Запустите без --dry-run, чтобы применить изменения.", "deletingOldReport": "🗑️ Удаление старого отчета...", "generatingFreshAnalysis": "📊 Создание свежего анализа использования...", "couldNotGenerate": "❌ Не удалось создать анализ использования.", "reportNotFound": "📋 Отчет об использовании не найден. Использование общих ключей...", "foundMissingKeys": "📋 Найден {count} недостающие ключи из анализа использования", "couldNotParse": "❌ Не удалось проанализировать отчет об использовании. Использование общих ключей..." }, "noTranslationLanguagesFound": "Языки перевода не найдены", "failedToAnalyzeLanguage": "Не удалось проанализировать язык", "translationCompletenessAnalysisFailed": "Анализ полноты перевода не удался", "failedToProcessFile": "Не удалось обработать файл:", "failedToSaveReport": "Не удалось сохранить отчет об использовании: {error}", "i18nDirectoryDoesNotExist": "Каталог I18n не существует: {dir}", "reportSavedTo": "Отчет об использовании сохранен в: {reportPath}", "sourceDirectoryDoesNotExist": "Исходный каталог не существует: {dir}", "noSourceDirectoryConfigured": "(ничего не настроено)" }, "validate": { "help_message": "Использование средства проверки перевода I18n: узел i18ntk-validate.js [опции] Параметры: --source-dir <dir> Исходный каталог для сканирования (по умолчанию: ./src) --i18n-dir <dir> Каталог I18n (по умолчанию: ./src/locales) --output-report Создать подробный отчет --output-dir <dir> Выходной каталог для отчетов (по умолчанию: ./reports) --help Показать эту справку Примеры: node i18ntk-validate.js --output-report node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales node i18ntk-validate.js --output-dir=./analysis --output-report", "title": "🔍 Валидатор перевода I18n", "message": "Начинаем процесс проверки...", "sourceDirectory": "📁 Исходный каталог: {dir}", "sourceLanguage": "🌍Исходный язык: {sourceLanguage}", "strictMode": "⚙️ Строгий режим: {mode}", "noTargetLanguages": "Целевые языки не настроены; пропуск проверки цели. Добавьте языки через «i18ntk init --languages=de,fr».", "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": "Рассмотрите возможность проведения анализа использования: узел 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": "Найденный {count} файлы в {language}", "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}", "invalidSourceDirectory": "Неверный исходный каталог: {sourceDir}", "invalidSourceLanguageDirectory": "Неверный каталог исходного языка: {sourceDir}" }, "adminCli": { "setupPinProtectionTitle": "🔐 Настройка защиты PIN-кодом администратора", "setupPinProtectionDescription": "Для административных операций потребуется 4–6-значный PIN-код.", "enablePinProtectionPrompt": "Хотите включить защиту PIN-кодом администратора?", "setupCancelled": "Настройка защиты PIN-кодом администратора отменена.", "enterPinPrompt": "Введите 4-6-значный PIN-код:", "pinFormatError": "❌ПИН-код должен состоять из 4-6 цифр. Пожалуйста, попробуйте еще раз.", "confirmPinPrompt": "Подтвердите PIN-код:", "pinMismatchError": "❌ ПИН-коды не совпадают. Пожалуйста, попробуйте еще раз.", "pinProtectionEnabledSuccess": "✅ Защита PIN-кодом администратора успешно включена!", "pinRecoveryWarning": "⚠️ Запомните свой ПИН-код — в случае утери его невозможно восстановить.", "setupPinProtectionFailed": "❌ Не удалось настроить защиту PIN-кодом администратора.", "errorSettingUpPin": "❌ Ошибка при настройке PIN-кода администратора: {message}", "authRequiredForOperation": "🔐 Аутентификация администратора необходима для: {operation}", "invalidPinFormat": "❌ Неверный формат PIN-кода. PIN-код должен состоять из 4–6 цифр.", "authenticationSuccess": "✅ Аутентификация прошла успешно!", "invalidPinAttemptsRemaining": "❌ Неверный PIN-код. {remaining} попыток осталось.", "authenticationFailedAccessDenied": "❌ Не удалось выполнить аутентификацию. Доступ зап