UNPKG

i18ntk

Version:

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

761 lines 187 kB
{ "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": "🔧 Инст