i18ntk
Version:
🚀 The fastest i18n toolkit with 97% performance boost! Zero-dependency, enterprise-grade internationalization for React, Vue, Angular, Python, Java, PHP & more. Features PIN protection, auto framework detection, 7+ UI languages, and comprehensive transla
761 lines • 187 kB
JSON
{
"meta": {
"version": "1.10.0",
"updated": "2025-08-16"
},
"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}",
"errors": {
"errors": "Ошибки:",
"genericError": "❌ Ошибка: {error}",
"initializationFailed": "❌ Инициализация не удалась: {error}",
"translationKeyNotFound": "❌ Ключ перевода не найден: {key}",
"sourceDirectoryNotFound": "❌ Исходная директория не найдена: {directory}",
"configLoadingFailed": "❌ Загрузка конфигурации не удалась",
"invalidSourceDirectory": "❌ Неверная исходная директория: {directory}",
"securityViolation": "⚠️ Нарушение безопасности обнаружено",
"authenticationFailed": "❌ Аутентификация не удалась",
"sourceEqualsI18nWarn": "⚠️ sourceDir equals i18nDir ({sourceDir}). Falling back to {fallback} for source scanning."
},
"errorGeneratingStatusSummary": "Ошибка генерации сводки статуса: {error}",
"errorRunningDebugTool": "Ошибка запуска инструмента отладки '{displayName}': {error}",
"errorReadingDebugLogs": "Ошибка чтения журналов отладки: {error}",
"errorAnalyzingLogFile": "Ошибка анализа файла журнала: {error}",
"errorAnalyzingTranslationKeys": "Ошибка анализа ключей перевода: {error}",
"errorAnalyzingTranslationCompleteness": "Ошибка анализа полноты перевода: {error}",
"analyzingTranslationCompleteness": "🔍 Анализ полноты перевода по всем языкам...",
"i18nDirectoryNotFound": "⚠️ i18n директория не найдена: {i18nDir}",
"translationCompletenessAnalysisFailed": "⚠️ Анализ полноты перевода не удался: {error}",
"failedToAnalyzeLanguage": "❌ Не удалось проанализировать язык {language}: {error}",
"errorReadingI18nDirectory": "❌ Чтение i18n директории не удалось: {error}",
"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": "🎛️ Начальные настройки CLI...",
"confirm": "Подтвердить"
},
"errors": {
"readlineClosed": "Поток ввода закрыт; работа в неинтерактивном режиме.",
"noPackageJson": "Файл package.json не найден. Невозможно автоматически определить фреймворк i18n.",
"noI18nDir": "Директория i18n не найдена в корне проекта.",
"noI18nConfig": "Файл конфигурации i18n не найден в корне проекта."
},
"fixer": {
"help_message": "\nI18n Исправление Переводов\n\nИспользование: node i18ntk-fixer.js [опции]\n\nОпции:\n --source-dir <dir> Исходный каталог для сканирования (по умолчанию: ./locales)\n --languages <langs> Список языков для исправления, разделенный запятыми\n --markers <markers> Список маркеров, которые считать непереведенными, разделенный запятыми\n --no-backup Пропустить автоматическое создание резервной копии\n --help Показать эту справку\n\nПримеры:\n node i18ntk-fixer.js --languages de,fr\n node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED\n node i18ntk-fixer.js --no-backup\n",
"starting": "🚀 Запуск исправления переводов для языков: {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": "д - Да, применить все исправления",
"optionNo": "н - Нет, отменить операцию",
"optionShow": "п - Показать подробные проблемы",
"choicePrompt": "Ваш выбор (д/н/п): ",
"nonInteractiveMode": "⚡ Обнаружен неинтерактивный режим - автоматическое применение исправлений...",
"reportGenerated": "📊 Сгенерирован отчет об исправлении: {path}",
"summary": {
"totalIssues": "Всего проблем: {total}",
"missingKeys": "Отсутствующие ключи: {missing}",
"placeholderKeys": "Ключи с маркерами: {placeholder}",
"languages": "Языки: {languages}"
},
"welcome": {
"title": "🎯 Добро пожаловать в инструмент исправления переводов!",
"description": "Этот инструмент поможет вам исправить сломанные переводы и маркеры в ваших языковых файлах."
},
"markerPrompt": {
"title": "🏷️ Настройка маркеров плейсхолдеров",
"description": "Введите маркеры, которые указывают на непереведенный текст (через запятую):",
"currentDefaults": "Маркеры по умолчанию: {markers}",
"input": "Маркеры (или Enter для использования по умолчанию): "
},
"languagePrompt": {
"title": "🌍 Выбор языков для исправления",
"available": "Доступные языки: {languages}",
"description": "Введите языки для исправления (через запятую) или Enter для всех:",
"input": "Языки: ",
"noLanguages": "Языки для исправления не найдены."
},
"directoryPrompt": {
"title": "📁 Выбор директории",
"current": "Текущая директория: {dir}",
"description": "Введите директорию с вашими языковыми файлами (или Enter для текущей директории):",
"input": "Директория: "
}
},
"autorun": {
"stepAnalyzeTranslations": "Анализ переводов",
"stepCompletedWithIcon": "✅ Шаг «{stepName}» завершён.",
"stepValidateTranslations": "Валидация переводов",
"stepRunning": "Шаг «{stepName}» выполняется...",
"separator": "==================================================",
"stepFailed": "Шаг «{stepName}» завершился с ошибкой.",
"errorLabel": "Ошибка: {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 — Показать справку",
"examplesTitle": "Примеры:",
"configExample": "node i18ntk-autorun.js --config",
"stepsExample1": "node i18ntk-autorun.js --steps 1,2,3",
"stepsExample2": "node i18ntk-autorun.js --all",
"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": "Теперь вы можете запустить команду auto-run.",
"configurationFailed": "Не удалось настроить: {error}",
"noValidStepNumbers": "Не указан ни один корректный номер шага.",
"autoRunFailed": "Auto-run завершился с ошибкой: {error}",
"stepCompleteTranslations": "Завершение переводов",
"stepAnalyzeSizing": "Анализ размеров",
"stepCompletedIcon": "✅",
"stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Выполнение шага «{stepName}»...",
"stepFailedIcon": "❌",
"translationLoadWarning": "Предупреждение: не удалось загрузить переводы {lang}",
"configReadError": "Ошибка чтения {file}"
},
"analyze": {
"help_message": "\nI18n Анализатор переводов\n\nИспользование: node i18ntk-analyze.js [опции]\n\nОпции:\n --source-dir <dir> Директория исходников для сканирования (по умолчанию: ./locales)\n --i18n-dir <dir> Директория I18n (по умолчанию: ./locales)\n --output-report Сгенерировать подробный отчёт\n --output-dir <dir> Директория для отчётов (по умолчанию: ./i18ntk-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": "Сбой загрузки конфигурации",
"sourceLanguageNotFound": "Исходный язык не найден",
"couldNotParseTarget": "Не удалось разобрать целевой язык",
"couldNotParseSource": "Не удалось разобрать исходный язык",
"reportGenerated": "Отчёт сгенерирован",
"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": " 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 символов — рассмотрите возможность их разбить",
"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": "Язык Размер(KB) Ключи Средняя длина Всего символов",
"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} символов — рассмотрите возможность их разбить"
}
},
"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}",
"errorReadingI18nDirectory": "⚠️ Чтение i18n директории не удалось: {error}",
"pressEnterToReturnToMenu": "📝 Нажмите Enter, чтобы вернуться в главное меню...",
"notTranslatedKeysTotal": "⚠️ Непереведённые ключи: {total}",
"noSourceFilesFound": "⚠️ В директории исходников не найдено файлов.",
"reviewNotTranslatedKeys": "💡 Проверьте непереведённые ключи",
"analysisCompletedSuccessfully": "🎉 Анализ успешно завершён!",
"detectedSourceDirectory": "Обнаружена директория исходников: {sourceDir}",
"detectedI18nDirectory": "Обнаружена директория I18n: {i18nDir}",
"fileInfo": " 📄 {namespace}: {keys} ключей",
"failedToAnalyzeUsage": "❌ Не удалось проанализировать использование: {error}",
"failedToAnalyzeFile": "❌ Не удалось проанализировать файл: {error}",
"failedToExtractKeys": "Не удалось извлечь ключи",
"analysisFailedError": "❌ Анализ не удался: {error}",
"analyzerInitialized": "Анализатор инициализирован",
"analyzerInitFailed": "Не удалось инициализировать анализатор: {error}",
"argsParsed": "Аргументы разобраны",
"processedFiles": "Обработано {processedFiles} из {totalFiles} файлов.",
"argsParseFailed": "Не удалось разобрать аргументы: {error}",
"translationDiscoveryError": "Ошибка обнаружения переводов: {error}",
"fileTraversalError": "⚠️ Ошибка обхода файлов: {error}",
"sourceEqualsI18nWarn": "⚠️ Source directory and i18n directory are the same. This may cause issues with the analysis.",
"i18nEqualsSourceWarn": "⚠️ I18n directory and source directory are the same. This may cause issues with the analysis.",
"usageAnalysisFailed": "⚠️ Анализ использования не удался: {error}",
"translationFileParseError": "⚠️ Ошибка парсинга файла перевода: {error}",
"translationKeysLoadError": "⚠️ Ошибка загрузки ключей перевода: {error}",
"languageCompletenessStats": "🌍 {language}: {translated}/{total} ({completeness}% переведено)",
"missingKeysCount": "⚠️ Отсутствующих ключей: {count}",
"analyzingTranslationCompleteness": "⚠️ Анализ полноты перевода...",
"unusedKeysCount": "Неиспользуемых ключей: {count}",
"usedKeysCount": "Используемых ключей: {count}",
"availableKeysCount": "Доступных ключей: {count}",
"analysisResults": "Результаты анализа:",
"i18nDirectoryNotFound": "⚠️ Директория I18n не найдена: {dir}",
"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": "❌ Обработка файла не удалась: {error}",
"found_thisusedkeyssize_unique_": "🎯 Обнаружено уникальных используемых ключей: {usedKeysSize}",
"total_key_usages_totalkeysfoun": "📊 Всего использований ключей: {totalKeysFound}",
"loading_available_translation_": "📋 Загрузка доступных ключей перевода...",
"found_thisavailablekeyssize_av": "✅ Найдено доступных ключей: {availableKeysSize}",
"message": "Анализ использования ключей i18n в проекте.",
"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} ({completeness}% переведено)",
"n_sample_unused_keys": "\nПример неиспользуемых ключей:",
"key": "- {key}",
"and_unusedkeyslength_5_more": "...и ещё {count}.",
"n_sample_missing_keys": "\n❌ ПРИМЕРЫ ОТСУТСТВУЮЩИХ КЛЮЧЕЙ (первые 5):",
"and_missingkeyslength_5_more": "... и еще {count} отсутствующих ключей",
"n_generating_detailed_report": "\n📊 Генерация подробного отчета...",
"report_saved_reportpath": "📄 Отчет сохранен: {reportPath}",
"n_recommendations": "\n📋 РЕКОМЕНДАЦИИ",
"consider_removing_unused_trans": "💡 Рассмотрите удаление неиспользуемых переводов для чистоты проекта.",
"add_missing_translation_keys_t": "➕ Добавьте отсутствующие переводы ключей для поддержки согласованности",
"review_dynamic_keys_manually_t": "🔍 Проверьте динамические ключи вручную (они могут быть валидными)",
"all_translation_keys_are_prope": "✅ Все переводы ключей используются правильно!",
"n_next_steps": "\n📋 ДАЛЬНЕЙШИЕ ШАГИ",
"2_check_the_detailed_report_fo": "2. Проверьте подробный отчет для конкретных проблем",
"help_message": "\nI18n Usage Analyzer\n\nUsage: node i18ntk-usage.js [options]\n\nOptions:\n --source-dir <dir> Source directory to scan (default: ./src)\n --i18n-dir <dir> I18n directory (default: ./src/locales)\n --output-report Generate detailed report\n --output-dir <dir> Output directory for reports (default: ./reports)\n --help Show this help\n\nExamples:\n node i18ntk-usage.js --output-report\n node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-usage.js --output-dir=./analysis --output-report\n",
"1_review_the_analysis_results": "1. Просмотрите результаты анализа в консоли или в отчёте.",
"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": " 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": "❌ Не удалось разобрать отчёт использования. Используется общие ключи..."
},
"noTranslationLanguagesFound": "🌍 Целевых языков не найдено",
"failedToAnalyzeLanguage": "❌ Не удалось проанализировать язык",
"translationCompletenessAnalysisFailed": "❌ Анализ полноты перевода не удался"
},
"validate": {
"help_message": "\nI18n Валидатор переводов\n\nИспользование: node i18ntk-validate.js [опции]\n\nОпции:\n --source-dir <dir> Директория исходников для сканирования (по умолчанию: ./locales)\n --i18n-dir <dir> Директория I18n (по умолчанию: ./locales)\n --output-report Сгенерировать подробный отчёт\n --output-dir <dir> Директория для отчётов (по умолчанию: ./i18ntk-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": "Целевые языки не настроены; пропуск проверки целевых языков. Добавьте языки через \"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": "Рассмотрите запуск анализа использования: 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": "####"
},
"debug": {
"title": "🔧 Инст