Files
CyberStrikeAI/web/static/i18n/ru-RU.json
T

5100 lines
366 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"lang": {
"zhCN": "中文",
"enUS": "English",
"ruRU": "Русский"
},
"mobile": {
"openNav": "Открыть меню навигации",
"closeNav": "Закрыть меню навигации",
"moreActions": "Другие действия",
"searchMenu": "Поиск меню…",
"noMatch": "Совпадений нет",
"backToTop": "Наверх",
"chatList": "Список чатов",
"closeChatList": "Закрыть список чатов",
"mainNav": "Основная навигация",
"switchTheme": "Сменить тему",
"themeNow": "Тема: {{name}}",
"switchLanguage": "Сменить язык",
"refreshPage": "Обновить страницу",
"fullscreen": "Полный экран",
"fullscreenUnsupported": "Браузер не поддерживает полноэкранный режим",
"conversations": "Чаты",
"newChat": "Новый чат",
"chatModuleMissing": "Модуль чата ещё не загружен"
},
"common": {
"ok": "ОК",
"cancel": "Отмена",
"refresh": "Обновить",
"close": "Закрыть",
"edit": "Изменить",
"delete": "Удалить",
"remove": "Убрать",
"save": "Сохранить",
"loading": "Загрузка…",
"search": "Поиск",
"clearSearch": "Очистить поиск",
"noData": "Нет данных",
"confirm": "Подтвердить",
"copy": "Копировать",
"copied": "Скопировано",
"copyFailed": "Не удалось скопировать",
"view": "Открыть",
"actions": "Действия",
"loadFailed": "Ошибка загрузки",
"loadMore": "Загрузить ещё",
"untitled": "Без названия",
"justNow": "Только что",
"minutesAgo": "{{n}} мин назад",
"hoursAgo": "{{n}} ч назад",
"daysAgo": "{{n}} дн. назад"
},
"header": {
"title": "CyberStrikeAI",
"apiDocs": "Документация API",
"github": "GitHub",
"logout": "Выйти",
"language": "Язык интерфейса",
"backToDashboard": "К обзору",
"userMenu": "Меню пользователя",
"userMenuFor": "Меню пользователя: {{name}}",
"currentUser": "Текущий пользователь",
"unknownUser": "Неизвестный пользователь",
"scopeAll": "Все ресурсы",
"scopeAssigned": "Назначенные ресурсы",
"scopeOwn": "Свои ресурсы",
"scopeUnknown": "Неизвестная область",
"rolesCount": "Ролей: {{count}}",
"permissionsCount": "Прав: {{count}}",
"version": "Текущая версия",
"toggleSidebar": "Свернуть или развернуть боковую панель"
},
"theme": {
"system": "Системная",
"light": "Светлая",
"dark": "Тёмная",
"titleSystem": "Сейчас: системная тема. Нажмите, чтобы переключить на светлую.",
"titleLight": "Сейчас: светлая тема. Нажмите, чтобы переключить на тёмную.",
"titleDark": "Сейчас: тёмная тема. Нажмите, чтобы переключить на системную.",
"toggle": "Сменить тему"
},
"notifications": {
"title": "Уведомления",
"empty": "Нет новых событий",
"markAllRead": "Прочитать все",
"markSingleRead": "Прочитано",
"itemDefaultTitle": "Уведомление"
},
"login": {
"showPassword": "Показать пароль",
"hidePassword": "Скрыть пароль",
"title": "Вход в CyberStrikeAI",
"titlePrefix": "Вход в",
"subtitle": "Войдите с учётной записью платформы. Администратор по умолчанию — admin.",
"usernameLabel": "Имя пользователя",
"usernamePlaceholder": "admin",
"passwordLabel": "Пароль",
"passwordPlaceholder": "Введите пароль",
"submit": "Войти"
},
"update": {
"title": "Обновление в один клик",
"intro": "Эта страница изменяет саму установку, которая отвечает на ваши запросы: она подтягивает свежий коммит ветки по умолчанию репозитория-источника (по умолчанию — официальный репозиторий), пересобирает бинарный файл и подменяет его. Ваши roles/skills/tools и конфигурация не перезаписываются.",
"loading": "Чтение состояния этой установки",
"loadFailed": "Не удалось прочитать состояние установки: {{reason}}",
"installTitle": "Эта установка",
"remoteTitle": "Сравнение с источником обновлений",
"applyTitle": "Обновление в один клик",
"jobTitle": "Ход обновления",
"rollbackTitle": "Откат",
"root": "Каталог установки",
"branch": "Локальная ветка",
"commit": "Текущий коммит",
"committedAt": "Дата коммита",
"subject": "Заголовок коммита",
"gitTree": "git-рабочее дерево",
"notGitTree": "Не git-рабочее дерево",
"toolchainFound": "Инструментарий Go на месте",
"toolchainMissing": "Нет инструментария Go",
"toolchainMissingHint": "Команда go не найдена: обновление сможет только перенести исходники, для сборки нужна другая машина",
"binaryPresent": "Бинарный файл на месте",
"binaryMissing": "Бинарный файл отсутствует",
"rollbackPresent": "Точка отката есть",
"rollbackMissing": "Точки отката нет",
"notChecked": "Источник обновлений ещё не проверялся. При открытии страницы запускается одна автоматическая проверка (по одной за сессию); нажмите «Проверить обновления», чтобы спросить ещё раз.",
"checkBtn": "Проверить обновления",
"checking": "Проверка источника обновлений...",
"checkFailed": "Проверка не удалась: {{reason}}",
"applyFailed": "Не удалось запустить обновление: {{reason}}",
"rollbackFailed": "Откат не удался: {{reason}}",
"behindCount": "Отставание на {{n}} коммитов",
"aheadCount": "Локально на {{n}} коммитов впереди",
"upToDate": "Всё актуально: локальный {{commit}} совпадает с источником обновлений",
"remoteHead": "Вершина источника",
"remoteSubject": "Заголовок коммита источника",
"incomingTitle": "Входящие коммиты",
"incomingTruncated": "Всего новых коммитов: {{total}}; показаны только первые {{shown}}",
"applyBtn": "Обновить сейчас",
"jobRunningHint": "Обновление уже выполняется; его ход показан ниже.",
"noToolchainWarn": "Здесь нет инструментария Go: исходники будут обновлены, но бинарный файл не заменится; соберите его извне и перезапустите службу.",
"rollbackPendingHint": "Предыдущий откат не завершён. Нажмите «Откатить», чтобы закончить восстановление перед обновлением.",
"buildPendingHint": "Прошлое обновление перенесло исходники, но не заменило бинарный файл (сборка не удалась или тогда не было инструментария Go): нажмите «Обновить», чтобы завершить эту сборку.",
"blockedNotGitTree": "Этот каталог не является git-рабочим деревом, автоматическое обновление невозможно.",
"blockedJobRunning": "Обновление уже выполняется; дождитесь его завершения.",
"blockedLocalEdits": "{{n}} файлов исходного кода изменены локально, и обновление не будет их перезаписывать: сначала закоммитьте или отмените изменения.",
"blockedDiverged": "Локальная история впереди на {{ahead}} коммитов и отстаёт на {{behind}}: это слияние, а не загрузка, разберитесь вручную.",
"blockedNoUpdate": "В источнике обновлений нет ничего новее этой машины (нажмите «Проверить обновления», если ещё не смотрели).",
"restartChoiceLabel": "Завершить процесс после обновления (вернуть его сможет только внешний супервизор, например systemd или run.sh; если ничего не супервизит — запустите сами)",
"restartNotWired": "При этом запуске хук перезапуска не предоставлен: перезапустите службу сами после обновления.",
"confirmRestartYes": "Выбрано: процесс завершится после успешного обновления, и вернуть его сможет только внешний супервизор (systemd, run.sh, ...).",
"confirmRestartNo": "Не выбрано: процесс продолжит работать со старым бинарным файлом, пока вы сами его не перезапустите.",
"confirmApply": "Сейчас будет выполнено: обновление из {{repo}} до {{target}} ({{n}} новых коммитов, эта машина на {{commit}}) -> пересборка бинарного файла -> резервная копия и замена старого.",
"confirmBuildPending": "Сейчас будет выполнено: сборка недостающего бинарного файла для уже установленных исходников (эта машина на {{commit}}) -> пересборка -> резервная копия и замена старого бинарного файла.",
"applyAccepted": "Обновление запущено (задача {{id}}); ход обновляется каждые 1,5 секунды.",
"localChangesTitle": "Локальные изменения",
"localChangesHint": "Файлы, помеченные как локальное содержимое, сохраняются как есть; файлы, помеченные как исходный код продукта, блокируют автоматическое обновление.",
"noLocalChanges": "Рабочее дерево чистое: ни один отслеживаемый файл не изменён и не удалён.",
"colPath": "Файл",
"colChangeStatus": "Состояние",
"colOwner": "Владелец",
"keptFile": "Локальное содержимое (сохраняется при обновлении)",
"productSource": "Исходный код продукта (блокирует обновление)",
"noJob": "Обновление ещё не запускалось",
"noSteps": "Задача ещё не выдала ни одной строки о ходе выполнения",
"pollingHint": "Ход читается каждые {{sec}} секунд",
"stateRunning": "Выполняется",
"stateSucceeded": "Успешно",
"stateFailed": "Не удалось",
"stateUnknown": "Неизвестное состояние",
"restartRequested": "Запрошено завершение после выполнения",
"jobPollFailed": "Не удалось прочитать ход выполнения: {{reason}}",
"jobDoneToast": "Обновление завершено",
"buildDoneToast": "Сборка завершена",
"jobFailedToast": "Обновление не удалось",
"needsRestartToast": "Бинарный файл заменён; он вступит в силу после перезапуска",
"restartBanner": "Обновлено до {{commit}}, но процесс всё ещё работает на старой сборке (бинарник на диске собран {{builtAt}}). Изменения вступят в силу после перезапуска.",
"restartBannerNoCommit": "Бинарник на диске заменён (собран {{builtAt}}), но процесс всё ещё работает на старой сборке; изменения вступят в силу после перезапуска.",
"restartNowBtn": "Перезапустить сейчас",
"restartNowConfirm": "Процесс службы завершится; при наличии супервизора (systemd/launchd) новая версия поднимется через несколько секунд, и страница обновится сама. Без супервизора служба останется остановленной. Перезапустить сейчас?",
"restartRequestedToast": "Перезапуск запрошен: супервизор поднимет службу, страница восстановится сама",
"restartFailed": "Не удалось запросить перезапуск: {{reason}}",
"restartOverlayTitle": "Перезапуск службы…",
"restartOverlayBody": "Страница обновится сама, как только новый процесс начнёт отвечать (сессия будет сброшена — потребуется войти заново).",
"restartOverlaySlowRunning": "Служба по-прежнему отвечает старым процессом — перезапуск, похоже, не произошёл. Нажмите кнопку ниже, чтобы увидеть текущее состояние.",
"restartOverlaySlowDown": "Служба не вернулась. Если её ничто не супервизит (systemd/launchd), она не запустится сама — запустите её и обновите страницу.",
"restartOverlayRefresh": "Обновить страницу",
"failureNoMessage": "Сервер не передал сообщение об ошибке",
"resultTitle": "Результат обновления",
"resultFrom": "От",
"resultTo": "До",
"resultCommits": "Принято коммитов",
"resultFiles": "Затронуто файлов",
"resultDuration": "Длительность",
"resultBackup": "Каталог резервных копий",
"keptTitle": "Сохранённые файлы локального содержимого",
"nothingKept": "Ни один файл локального содержимого не пришлось откладывать",
"binarySwapped": "Бинарный файл заменён",
"binaryNotSwapped": "Бинарный файл не изменён",
"restartNeeded": "Для запуска новой версии нужен перезапуск",
"restartNotNeeded": "Перезапуск не требуется",
"failureTitle": "Почему не удалось",
"noRollback": "Точки отката нет: она появляется только после выполненного обновления",
"rollbackTarget": "Цель отката: {{commit}} (где это дерево было до последнего обновления)",
"rollbackBtn": "Откатить обновление",
"confirmRollback": "Откатиться до {{commit}}? Исходники вернутся к состоянию до того обновления, а прежний бинарный файл будет восстановлен.",
"rollbackDone": "Откат выполнен до {{commit}}",
"sourceTitle": "Источник обновления",
"sourceFromConfig": "Источник обновлений настроен в config.yaml.",
"sourceIsDefault": "Источник обновлений не настроен: используется официальный репозиторий {{repo}}.",
"sourceUrl": "Репозиторий-источник",
"sourceBranch": "Ветка по умолчанию источника",
"sourceUrlLabel": "Адрес репозитория-источника",
"sourceRepoHint": "Оставьте пустым, чтобы использовать официальный репозиторий; укажите свой форк или зеркало, чтобы следовать за ним.",
"sourceSaveBtn": "Сохранить источник",
"sourceSaveOk": "Источник обновления сохранён",
"sourceSaveFailed": "Не удалось сохранить источник обновления: {{reason}}",
"adoptHint": "Этот каталог ещё не git-рабочее дерево. После подключения к источнику обновлений он станет обычной установкой с обновлением в один клик.",
"adoptPreviewBtn": "Предпросмотр и подключение",
"adoptIncoming": "Файлов в целевой ветке",
"adoptOverwrittenTotal": "Будут заменены целевой версией",
"adoptProtectedTotal": "Содержимое оператора (сохраняется)",
"adoptCommit": "Целевой коммит",
"adoptOverwrittenTitle": "Локальные файлы, которые будут заменены",
"adoptProtectedTitle": "Содержимое оператора, которое сохранится",
"adoptBackupNote": "Все заменённые файлы сохраняются в .update-backup/<отметка времени>/overwritten/ и могут быть восстановлены оттуда.",
"adoptConfirmBtn": "Подключить",
"adoptConfirmText": "Подключение заменит {{overwritten}} локальных файлов целевыми версиями (всего {{incoming}} файлов; {{protectedFiles}} файлов оператора сохраняются). Продолжить?",
"adoptAccepted": "Подключение запущено (задача {{id}}); ход обновляется каждые 1,5 секунды.",
"adoptFailed": "Не удалось подключить: {{reason}}",
"adoptedNoPreviousCommit": "Это результат подключения: до него git-истории не было, поэтому откатываться не к чему; первый откат запишет следующее обновление.",
"resultOverwrittenTitle": "Заменённые локальные файлы (копии в overwritten/)",
"rollbackItems": "Файлы, которые не были откачены"
},
"nav": {
"security": "Безопасность",
"toolGuard": "Блокировка вызовов",
"dashboard": "Обзор",
"chat": "Чат",
"assets": "Управление активами",
"assetOverview": "Обзор активов",
"assetLibrary": "Библиотека активов",
"infoCollect": "Разведка",
"tasks": "Задачи",
"projects": "Проекты",
"vulnerabilities": "Уязвимости",
"webshell": "Управление WebShell",
"chatFiles": "Управление файлами",
"mcp": "MCP",
"mcpMonitor": "Монитор MCP",
"mcpManagement": "Управление MCP",
"knowledge": "Знания",
"knowledgeRetrievalLogs": "История извлечения",
"knowledgeManagement": "Управление базой знаний",
"skills": "Навыки",
"skillsMonitor": "Монитор навыков",
"skillsManagement": "Управление навыками",
"agents": "Агенты",
"agentsManagement": "Управление агентами",
"roles": "Роли",
"rolesManagement": "Управление ролями",
"workflows": "Сценарии",
"settings": "Системные настройки",
"hitl": "Одобрение человеком",
"c2": "C2",
"c2Listeners": "Слушатели",
"c2Sessions": "Сессии",
"c2Tasks": "Задачи",
"c2Payloads": "Полезная нагрузка",
"c2Events": "События",
"c2Profiles": "Профили трафика",
"platformRbac": "Доступ к платформе"
},
"navGroups": {
"workbench": "Рабочая область",
"operations": "Операции безопасности",
"capabilities": "Возможности",
"administration": "Администрирование"
},
"dashboard": {
"title": "Обзор",
"refresh": "Обновить",
"refreshData": "Обновить данные",
"runningTasks": "Задачи в работе",
"runningConversations": "Диалоги в работе",
"vulnTotal": "Всего уязвимостей",
"toolCalls": "Вызовы инструментов",
"successRate": "Успешность инструментов",
"tokenUsage": "Расход токенов",
"tokenUsageSub": "За 7 дней {{calls}} вызовов · сегодня {{today}}",
"noTokenUsageYet": "Расхода пока нет",
"clickToViewTasks": "Открыть задачи",
"clickToViewChat": "Открыть диалоги",
"clickToViewVuln": "Открыть уязвимости",
"clickToViewMCP": "Открыть монитор MCP",
"accessOverviewTitle": "Обзор доступа",
"accessTabsAria": "C2 и WebShell",
"c2OverviewTitle": "Обзор C2",
"c2GoManage": "Открыть C2 →",
"webshellGoManage": "Открыть WebShell →",
"webshellConnections": "Активные подключения",
"webshellClickConnections": "К подключениям",
"c2ListenersRunning": "Слушатели работают",
"c2SessionsOnline": "Сессии онлайн",
"c2TasksPending": "Задачи в ожидании и в очереди",
"c2ClickListeners": "К слушателям",
"c2ClickSessions": "К сессиям",
"c2ClickTasks": "К задачам",
"severityDistribution": "Критичность уязвимостей",
"severityCritical": "Критическая",
"severityHigh": "Высокая",
"severityMedium": "Средняя",
"severityLow": "Низкая",
"severityInfo": "Инфо",
"totalVulns": "Всего уязвимостей",
"riskLevel": "Уровень риска",
"riskScore": "Взвешенный балл риска",
"riskSafe": "Безопасно",
"riskLow": "Низкий",
"riskMedium": "Средний",
"riskHigh": "Высокий",
"riskSevere": "Критический",
"latestFound": "Последние находки",
"noneYet": "Пока нет",
"runOverview": "Обзор запусков",
"batchQueues": "Пакетные очереди",
"pending": "В ожидании",
"executing": "Выполняется",
"completed": "Завершено",
"toolInvocations": "Вызовы инструментов",
"callsUnit": "вызовов",
"toolsUnit": "инструментов",
"knowledgeLabel": "База знаний",
"knowledgeItems": "элементов",
"categoriesUnit": "категорий",
"skillsLabel": "Навыки",
"skillUnit": "Навыки",
"quickLinks": "Быстрые ссылки",
"toolsExecCount": "Выполнения инструментов",
"ctaTitle": "Начните проверку безопасности",
"ctaSub": "Опишите цель в чате — ИИ поможет со сканированием и анализом уязвимостей",
"goToChat": "Перейти в чат",
"noTasks": "Нет задач",
"totalCount": "Всего {{count}}",
"notEnabled": "Отключено",
"enabled": "Включено",
"toConfigure": "Настроить",
"toUse": "Использовать",
"active": "Активно",
"highFreq": "Частые",
"noCallData": "Нет данных о вызовах",
"severityClickHint": "Нажмите, чтобы открыть",
"lastUpdated": "Обновлено",
"viewAll": "Все →",
"recentVulns": "Недавние уязвимости",
"recentFacts": "Недавние факты",
"noVulnYet": "Нет недавних уязвимостей",
"noFactsYet": "Нет недавних фактов",
"noFactsDesc": "В диалогах проекта агент записывает цели, находки и цепочки атак",
"createFirstProjectBtn": "Создать первый проект",
"factProjectMeta": "{{project}} · {{key}}",
"factsAcrossProjects_one": "{{count}} активный проект · {{facts}} фактов",
"factsAcrossProjects_other": "{{count}} активных проектов · {{facts}} фактов",
"capabilities": "Возможности",
"mcpTools": "Инструменты MCP",
"rolesLabel": "Роли",
"agentsLabel": "Агенты",
"webshellLabel": "WebShell",
"pendingCountLabel": "{{count}} в ожидании",
"highCountLabel": "Высоких {{count}}",
"toolsCountLabel_one": "{{count}} инструмент",
"toolsCountLabel_other": "{{count}} инструментов",
"failedNCalls_one": "{{count}} ошибка",
"failedNCalls_other": "{{count}} ошибок",
"noCompletedYet": "Завершённых результатов пока нет",
"noCallYet": "Вызовов пока нет",
"allClear": "Новых рисков нет",
"allIdle": "Система простаивает",
"executingNow": "Выполняется",
"healthyStatus": "В норме",
"normalStatus": "В целом в порядке",
"degradedStatus": "Требует внимания",
"alertTitle": "Обратите внимание",
"alertWarningTitle": "Требует внимания",
"alertDangerTitle": "Нужно действие",
"alertCriticalReason_one": "{{count}} открытая критическая уязвимость — проверьте сразу",
"alertCriticalReason_other": "{{count}} открытых критических уязвимостей — проверьте сразу",
"alertFailedReason_one": "Низкая успешность инструментов ({{count}} неудачный вызов) — проверьте монитор MCP",
"alertFailedReason_other": "Низкая успешность инструментов ({{count}} неудачных вызовов) — проверьте монитор MCP",
"alertHitlReason_one": "{{count}} запрос HITL ожидает одобрения — агент ждёт вашего решения",
"alertHitlReason_other": "{{count}} запросов HITL ожидают одобрения — агент ждёт вашего решения",
"alertMcpDownReason_one": "{{count}} внешний сервер MCP не работает — связанные инструменты недоступны",
"alertMcpDownReason_other": "{{count}} внешних серверов MCP не работают — связанные инструменты недоступны",
"alertDismiss": "Скрыть (в этой сессии)",
"openHighCountLabel": "Открытых высоких {{count}}",
"allHandled": "Высокая критичность обработана",
"viewVulns": "Открыть уязвимости",
"viewMonitor": "Открыть монитор",
"viewHitl": "Одобрить",
"viewMcpManagement": "Управление MCP",
"statusOpen": "Открыта",
"statusConfirmed": "Подтверждена",
"statusFixed": "Исправлена",
"statusFalsePositive": "Ложное срабатывание",
"statusIgnored": "Игнорируется",
"statusFilter": "Фильтр по статусу",
"allStatuses": "Все статусы",
"fixRate": "Доля исправленных",
"dataStale": "Данные могли устареть — обновите",
"recommendedActions": "Рекомендуемые действия",
"recommendedActionsHint": "По текущему состоянию",
"recoFixCritical_one": "Исправить {{count}} открытую критическую уязвимость",
"recoFixCritical_other": "Исправить {{count}} открытых критических уязвимостей",
"recoFixCriticalDesc": "Критические уязвимости устраняйте в первую очередь",
"recoApproveHitl_one": "Одобрить {{count}} запрос HITL",
"recoApproveHitl_other": "Одобрить {{count}} запросов HITL",
"recoApproveHitlDesc": "Агенту нужно ваше решение, чтобы продолжить",
"recoRestartMcp_one": "Проверить {{count}} остановленный внешний MCP",
"recoRestartMcp_other": "Проверить {{count}} остановленных внешних MCP",
"recoRestartMcpDesc": "Связанные инструменты недоступны, пока MCP не восстановится",
"recoCheckMonitor_one": "Разобрать {{count}} неудачный вызов инструмента",
"recoCheckMonitor_other": "Разобрать {{count}} неудачных вызовов инструментов",
"recoCheckMonitorDesc": "Подробности ошибок — в мониторе MCP",
"recoSetupMcp": "Настроить первый инструмент MCP",
"recoSetupMcpDesc": "Установите сервер MCP, чтобы агент мог вызывать эти возможности",
"recoStartScan": "Запустить сканирование из чата",
"recoStartScanDesc": "Опишите цель в чате — ИИ поможет выполнить проверку",
"recentEvents": "Недавние события",
"eventUntitled": "Событие",
"externalMcpServers": "Внешний MCP",
"mcpAllRunning": "Все работают",
"mcpPartialDown_one": "{{count}} остановлен",
"mcpPartialDown_other": "{{count}} остановлено",
"mcpAllDown": "Все остановлены",
"noVulnDesc": "Здесь недавние записи. Новые появятся, когда обнаружение в чате завершится",
"startScanBtn": "В чат для сканирования",
"factsAcrossProjects": "{{count}} активных проектов · {{facts}} фактов",
"toolsCountLabel": "{{count}} инструментов",
"failedNCalls": "{{count}} ошибок",
"alertCriticalReason": "{{count}} открытых критических уязвимостей — рекомендуется устранить сразу",
"alertFailedReason": "Низкая успешность инструментов ({{count}} ошибок) — проверьте монитор MCP",
"alertHitlReason": "{{count}} запросов HITL ожидают одобрения — агент ждёт вашего решения",
"alertMcpDownReason": "Не запущено внешних серверов MCP: {{count}}. Связанные инструменты недоступны",
"recoFixCritical": "Исправить открытые критические уязвимости: {{count}}",
"recoApproveHitl": "Одобрить запросы HITL: {{count}}",
"recoRestartMcp": "Проверить не запущенные внешние MCP: {{count}}",
"recoCheckMonitor": "Разобрать неудачные вызовы инструментов: {{count}}",
"mcpPartialDown": "Не запущено: {{count}}"
},
"projects": {
"title": "Проекты",
"showArchived": "Показывать архив",
"newProjectCta": "+ Новый проект",
"projectList": "Список проектов",
"searchProjectsPlaceholder": "Поиск проектов…",
"paginationShow": "Показано {{start}}-{{end}} из {{total}}",
"paginationRange": "{{start}}-{{end}}/{{total}}",
"paginationTotal": "Всего {{total}}",
"paginationPage": "{{page}}/{{total}}",
"paginationPerPage": "На странице",
"paginationPrev": "Назад",
"paginationNext": "Далее",
"selectOrCreateTitle": "Выберите или создайте проект",
"selectOrCreateHint": "У проекта общая доска фактов для диалогов; цель, среда, аутентификация и другие факты автоматически добавляются в привязанные диалоги.",
"createFirstProject": "Создать первый проект",
"defaultProjectName": "Проект",
"statusActive": "Активен",
"statusArchived": "В архиве",
"vulnerabilityManagement": "Управление уязвимостями",
"addFactCta": "+ Добавить факт",
"tabFacts": "Доска фактов",
"tabGraph": "Путь атаки",
"tabAssets": "Библиотека активов",
"tabConversations": "Привязанные диалоги",
"tabVulns": "Связанные уязвимости",
"tabSettings": "Настройки",
"boundAssetsHint": "Показаны только активы, привязанные к этому проекту. Нажмите цель, чтобы открыть подробности.",
"noBoundAssets": "К этому проекту не привязаны активы",
"assetCount": "{{count}} активов",
"factToolbarHint": "В индекс входят только ключ и краткое содержание (что, где и как проверить). Цепочку атаки и POC помещайте в тело; воспроизведение — через get_project_fact.",
"graphToolbarHint": "Стрелки совпадают с сохранёнными связями фактов (источник → цель). Слои узлов: цель → инфраструктура → находка → эксплуатация. Пунктир — предварительные связи.",
"graphView": "Вид",
"graphViewPath": "Путь атаки",
"graphViewFull": "Весь граф",
"graphSearchSr": "Поиск узлов",
"graphSearchPlaceholder": "Поиск узлов…",
"graphRefresh": "Обновить",
"graphCenter": "Центр",
"graphEmpty": "Данных графа пока нет. Добавьте связи у фактов находок и эксплуатации (discovered_on → target/*), чтобы построить путь.",
"graphEmptyTitle": "Соберите путь атаки",
"graphEmptyStep1": "Добавьте факты целей: домены, конечные точки, область",
"graphEmptyStep2": "Зафиксируйте находки и эксплуатацию со связями между фактами",
"graphEmptyStep3": "Добавляйте связи в режиме «Соединить» или при правке фактов",
"graphEmptyCta": "Добавить первый факт",
"graphStats": "Узлы: {{nodes}} | Рёбра: {{edges}}",
"graphStatsNodes": "Узлы",
"graphStatsEdges": "Рёбра",
"graphLegendNodes": "Узлы",
"graphLegendEdges": "Рёбра",
"graphLegendNodeTarget": "Цель",
"graphLegendNodeInfra": "Инфра",
"graphLegendNodeFinding": "Находка",
"graphLegendNodeVuln": "Уязвимость",
"graphLegendNodeExploit": "Эксплойт",
"graphLegendNodeMissing": "Отсутствует",
"graphLegendDiscovered": "discovered_on",
"graphLegendLeads": "leads_to",
"graphLegendExploits": "exploits",
"graphLegendTentative": "Предварительно (пунктир)",
"factLinksLabel": "Связи (откуда → этот факт)",
"factBodyRelationsHint": "Укажите отношения, например discovered_on, в поле связей ниже, чтобы создать рёбра графа.",
"factLinksPlaceholder": "discovered_on: target/primary_domain\nexploits: exploit/upload-rce",
"factLinksHint": "По одной строке: тип: source_fact_key (источник → этот факт). Частые типы: discovered_on, depends_on, leads_to, enables, exploits. При сохранении все связи заменяются.",
"factIncomingLinksLabel": "Входящие связи (только чтение)",
"factIncomingLinksHint": "Берутся из исходящих связей исходных фактов. Например, discovered_on находки к target/* видна как входящая у цели; исходящие связи правятся у исходного факта.",
"factIncomingLinksEmpty": "Нет входящих связей",
"graphEdgeFromSelf": "От этого узла",
"graphEdgeToSelf": "К этому узлу",
"linksColumn": "Связи",
"linkCountsTitle": "Число исходящих и входящих рёбер",
"graphConnect": "Соединить",
"graphConnectActive": "Соединение…",
"graphConnectPickTarget": "Источник {{source}} выбран — нажмите узел-цель",
"graphEdgeTypePrompt": "Тип ребра (discovered_on / leads_to / depends_on / enables / exploits)",
"graphConnectFailed": "Не удалось создать ребро",
"graphConnectSuccess": "Ребро создано",
"graphEdgesTitle": "Связи",
"graphEdgesHint": "Направление стрелки совпадает с базой и окном правки (источник → цель). Нажмите ребро, чтобы выделить его.",
"graphEdgesEmpty": "Связей пока нет",
"graphEdgeOutgoing": "Исходящая",
"graphEdgeIncoming": "Входящая",
"graphEdgeSynthetic": "Создано из связи факта; чтобы убрать, измените факт",
"confirmDeleteGraphEdge": "Удалить эту связь?",
"graphEdgeDeleteFailed": "Не удалось удалить ребро",
"graphEdgeDeleteSuccess": "Ребро удалено",
"graphDeleteEdge": "Удалить",
"viewVulnerability": "Открыть уязвимость",
"graphVulnSidebarHint": "Узел связанной уязвимости. Кнопка ниже открывает её в управлении уязвимостями.",
"promoteAttackChain": "Перенести цепочку",
"promoteAttackChainTitle": "Перенести цепочку атаки диалога в факты проекта",
"confirmPromoteAttackChain": "Перенести цепочку атаки этого диалога в проект? Факты и рёбра будут созданы или обновлены.",
"promoteAttackChainFailed": "Не удалось перенести",
"promoteAttackChainSuccess": "Перенесено: новых {{facts_created}} / обновлено {{facts_updated}} / рёбер {{edges_created}}",
"searchFactsSr": "Поиск фактов",
"searchFactsPlaceholder": "Ключ, краткое содержание, тело…",
"category": "Категория",
"all": "Все",
"confidence": "Достоверность",
"confidenceConfirmed": "Подтверждено",
"confidenceTentative": "Предварительно",
"confidenceDeprecated": "Устарело",
"displayOptions": "Отображение",
"sparseOnly": "Только неполные",
"hideDeprecated": "Скрыть устаревшие",
"summary": "Кратко",
"updated": "Обновлено",
"boundConversationsHint": "Диалоги, привязанные к этому проекту. Нажмите, чтобы открыть.",
"titleLabel": "Название",
"projectVulnSummaryHint": "Сводка уязвимостей этого проекта",
"searchVulnsSr": "Поиск уязвимостей",
"searchVulnsPlaceholder": "Название, описание, тип, цель…",
"noMatchingVulns": "Нет подходящих уязвимостей. Измените фильтры.",
"viewInVulnerabilityManagement": "Открыть в управлении уязвимостями",
"severity": "Критичность",
"status": "Статус",
"modalNewTitle": "Новый проект",
"modalNewSubtitle": "После создания привяжите диалоги — доска фактов будет общей",
"modalEditTitle": "Изменить проект",
"modalEditSubtitle": "Обновите название и описание проекта",
"projectName": "Название проекта",
"projectNamePlaceholder": "например, веб-тест заказчика А",
"projectDescription": "Описание проекта",
"projectDescriptionPlaceholder": "Заметки о заказчике и задаче, совместная работа…",
"createProject": "Создать проект",
"newProject": "Новый проект",
"chatSelectorButton": "После привязки проекта доска фактов общая для диалогов",
"selectProject": "Выбрать проект",
"noProject": "Без проекта",
"factBodyEnvTitle": "Факт среды",
"factBodyHasDetail": "Есть подробности",
"factBodySparseTitle": "Нет структуры цепочки атаки или POC",
"factBodySparse": "Неполно",
"factBodyReproducibleTitle": "Есть структура для воспроизведения",
"factBodyReproducible": "Воспроизводимо",
"factHintAttackSparse": "Факт цепочки атаки: заполните тело полностью (шаги, HTTP или команда, доказательства из ответа). Не ограничивайтесь выводом. Можно вставить шаблон цепочки атаки.",
"factHintAttackReady": "Факт цепочки атаки: тело нужно для воспроизведения при аудите. Сохраняйте исходные запрос и ответ и пошаговый ход.",
"factHintEnv": "Факт среды: укажите в теле источник доказательств. Для находок и эксплуатации используйте категорию finding, chain, exploit или poc.",
"confirmOverwriteBodyTemplate": "Заменить текущее тело шаблоном?",
"loadProjectsFailed": "Не удалось загрузить проекты",
"restoreTitle": "Восстановить как предварительный и вернуть в индекс доски",
"restore": "Восстановить",
"deprecateTitle": "Пометить как устаревший",
"deprecate": "Пометить устаревшим",
"editTitle": "Изменить поля",
"viewBodyTitle": "Показать тело целиком",
"details": "Подробности",
"deleteForeverTitle": "Удалить безвозвратно",
"noProjects": "Нет проектов",
"noMatchingProjects": "Нет подходящих проектов",
"pinned": "Закреплён",
"archived": "В архиве",
"statsFacts": "{{count}} фактов",
"statsVulns": "{{count}} уязвимостей",
"statsConversations": "{{count}} диалогов",
"statsSparse": "{{count}} неполных",
"projectNotFound": "Проект не найден",
"updatedPrefix": "Обновлено {{time}}",
"descExpand": "Показать всё",
"descCollapse": "Свернуть",
"descriptionLengthHint": "Только для команды: агент это не читает. Кратко, не более 4000 символов. Всё, что должен знать агент, помещайте на доску фактов.",
"noMatchingFacts": "Нет подходящих фактов. Измените фильтры.",
"noFacts": "Фактов пока нет. Нажмите «Добавить факт» или дайте агенту записать их.",
"relatedVulnIdTitle": "ID связанной уязвимости",
"noBoundConversations": "Привязанных диалогов пока нет. Выберите этот проект в диалоге, чтобы привязать.",
"untitledConversation": "Диалог без названия",
"open": "Открыть",
"unbindProjectTitle": "Отвязать проект",
"unbind": "Отвязать",
"unbindAssetConfirm": "Отвязать «{{target}}» от этого проекта? Актив не будет удалён.",
"unbindAssetDone": "Актив отвязан от проекта",
"confirmUnbindConversation": "Отвязать этот диалог от текущего проекта?",
"unbindFailed": "Не удалось отвязать",
"factMetaCategory": "Категория: {{value}}",
"factMetaConfidence": "Достоверность: {{value}}",
"factMetaUpdated": "Обновлено: {{time}}",
"factMetaRelatedVuln": "Связанная уязвимость: {{value}}",
"factMetaSourceConversation": "Исходный диалог: {{value}}",
"factMetaHasPrevious": "Есть предыдущая версия",
"emptyBody": "(пустое тело)",
"factSparseWarn": "Этот факт относится к цепочке атаки или эксплуатации, но в теле нет структуры для воспроизведения (шаги, HTTP или команда, запрос и ответ). Дополните его для воспроизведения при аудите.",
"factPreviousMeta": "В архиве с {{time}} · Кратко: {{summary}} · Достоверность: {{confidence}}",
"loadVulnerabilityListFailed": "Не удалось загрузить список уязвимостей",
"noVulnerabilitiesInProject": "В этом проекте пока нет уязвимостей. Создайте запись или дайте агенту зафиксировать её.",
"promptLinkFactToVuln": "Введите номер, чтобы связать факт «{{factKey}}»:\n\n{{lines}}",
"invalidIndex": "Неверный номер",
"linkFailed": "Не удалось связать",
"linkSuccess": "Уязвимость связана",
"promptConversationIdForVulnCreate": "Чтобы создать уязвимость, нужен ID диалога (можно исходного):",
"cancelledNoConversationId": "Отменено: не указан conversation_id",
"createVulnerabilityFailed": "Не удалось создать уязвимость",
"createVulnerabilityAndLinkSuccess": "Уязвимость создана и связана: {{value}}",
"confirmDeprecateFact": "Пометить факт {{factKey}} как устаревший?",
"operationFailed": "Операция не выполнена",
"confirmRestoreFact": "Восстановить факт {{factKey}}? Он снова попадёт в индекс доски со статусом «предварительный».",
"noVulnerabilityRecords": "В этом проекте нет записей об уязвимостях",
"viewRelatedFactsTitle": "Связанные факты",
"facts": "Факты",
"loadRelatedFactsFailed": "Не удалось загрузить связанные факты",
"noFactsForVulnerability": "У этой уязвимости пока нет связанных фактов. Свяжите её или создайте черновик из подробностей факта.",
"promptChooseFactByIndex": "С этой уязвимостью связано фактов: {{count}}. Введите номер для просмотра:\n{{lines}}",
"enterProjectName": "Введите название проекта",
"writePermissionDenied": "Эта учётная запись только для чтения: создавать и изменять проекты нельзя",
"saveFailed": "Не удалось сохранить",
"invalidJson": "Некорректный формат JSON",
"scopeNoteAuthorizedWebOnly": "Разрешено только тестирование уровня веб-приложения",
"invalidScopeJson": "Некорректный JSON области. Исправьте его или нажмите «Форматировать».",
"saved": "Сохранено",
"confirmArchiveProject": "После архивации проект по умолчанию скрыт из активного списка. Продолжить?",
"confirmRestoreProjectActive": "Вернуть в активные?",
"confirmDeleteProject": "Удалить этот проект? Факты будут удалены, диалоги отвязаны.",
"deleteFailed": "Не удалось удалить",
"addFact": "Добавить факт",
"saveFact": "Сохранить факт",
"editFact": "Изменить факт",
"saveChanges": "Сохранить",
"customCategoryOption": "{{value}} (своё)",
"selectProjectFirst": "Сначала выберите проект",
"loadFactFailed": "Не удалось загрузить факт",
"factKeySummaryRequired": "Нужны fact_key и краткое содержание",
"confirmSaveSparseFact": "Этот факт относится к цепочке атаки или эксплуатации, но в теле нет структуры для воспроизведения (шаги, HTTP или команда, запрос и ответ).\nВсё равно сохранить? Сначала лучше вставить шаблон цепочки атаки и заполнить POC.",
"confirmDeleteFact": "Удалить этот факт?",
"notUpdatedYet": "Ещё не обновлялось",
"clearStaleProjectBindingFailed": "Не удалось сбросить устаревшую привязку к проекту",
"noProjectDescription": "Нет привязки к проекту",
"noProjectsClickCreate": "Проектов пока нет. Нажмите «Новый проект» ниже.",
"sharedFactBoard": "Общая доска фактов",
"loadFailedRetry": "Не удалось загрузить, повторите позже",
"projectBound": "Проект привязан",
"projectUnbound": "Проект отвязан",
"updateProjectBindingFailed": "Не удалось обновить привязку к проекту",
"basicInfoTitle": "Основные сведения",
"basicInfoHint": "Название и описание видны в сведениях о проекте",
"settingsIntroTitle": "Настройки проекта",
"settingsIntroHint": "Метаданные проекта и граница полномочий агента. После сохранения сразу действуют для привязанных диалогов.",
"pinProject": "Закрепить проект (первым в списке)",
"pinProjectAction": "Закрепить проект",
"unpinProjectAction": "Открепить проект",
"pinFact": "Закрепить факт (выше в списке и в индексе доски)",
"editDescriptionPlaceholder": "Заметки о заказчике и задаче, контакты, совместная работа…",
"scopeTitle": "Область тестирования",
"scopeHint": "JSON границы полномочий агента и целевых активов",
"formatJson": "Форматировать",
"example": "Пример",
"scopeJsonLabel": "JSON области",
"scopeFootnote": "Доступны targets, exclude, notes и другие поля. Пусто — без ограничения области.",
"dangerZoneTitle": "Опасная зона",
"dangerZoneHint": "Архивные проекты скрыты, пока не включено «Показывать архив». Удаление безвозвратно стирает все факты.",
"archiveRestore": "Архив и восстановление",
"archiveProject": "В архив",
"editProject": "Изменить",
"renameProject": "Переименовать",
"restoreProjectActive": "Вернуть в активные",
"projectActions": "Действия с проектом",
"deleteProject": "Удалить проект",
"saveChangesHint": "Нажмите «Сохранить», чтобы отправить изменения на сервер",
"saveSettings": "Сохранить",
"factModalSubtitle": "Краткое содержание попадает в индекс доски. В теле — цепочка атаки и POC для воспроизведения при аудите, отдельно от записей уязвимостей.",
"relatedVulnIdLabel": "ID связанной уязвимости",
"optional": "Необязательно",
"factDetails": "Подробности факта",
"previousVersion": "Предыдущая версия",
"currentVersion": "Текущая версия",
"linkVulnerability": "Связать уязвимость",
"createVulnerabilityDraft": "Создать черновик уязвимости",
"generatedFromFact": "Создано из факта проекта {{factKey}}"
},
"chat": {
"toolExecBlocked": "Инструмент {{name}} заблокирован",
"newChat": "Новый диалог",
"newTask": "Новая задача",
"toggleConversationPanel": "Свернуть или развернуть список диалогов",
"searchHistory": "Поиск по истории...",
"projectFolders": "Проекты",
"projectFoldersLoadMoreRemaining": "Загрузить ещё, осталось проектов: {{count}}",
"projectPreviewLabel": "Сведения о проекте",
"projectPreviewStats": "{{total}} задач · открыто {{active}}",
"projectPreviewNoDescription": "Нет описания проекта",
"projectPreviewScope": "Область тестирования: {{scope}}",
"projectPreviewEdit": "Изменить проект",
"conversationPreviewJustNow": "Только что",
"conversationPreviewMinutes": "{{count}} мин",
"conversationPreviewHours": "{{count}} ч",
"conversationPreviewDays": "{{count}} дн.",
"conversationPreviewDateTime": "{{year}}-{{month}}-{{day}} {{hour}}:{{minute}}",
"conversationPreviewNoProject": "Без проекта",
"conversationPreviewDefaultMode": "По умолчанию",
"conversationPreviewUnread": "Непросмотренное обновление",
"conversationPreviewViewed": "Просмотрено",
"conversationPreviewConversation": "Диалог",
"returnToLatest": "К последнему сообщению",
"returnToLatestProcessDetail": "К последней итерации",
"taskProgressStep": "Шаг {{current}} из {{total}}",
"taskProgressOpen": "Ход задачи",
"taskProgressDetails": "Подробности хода задачи",
"taskProgressUnnamed": "Задача без названия",
"completedUnread": "Завершено, не просмотрено",
"newConversationInProject": "Новый диалог в этом проекте",
"newUnassignedConversation": "Новый диалог без проекта",
"conversationActions": "Действия с диалогом",
"renameConversationPrompt": "Введите новое название:",
"renameConversationTitle": "Переименовать диалог",
"renameConversationSubtitle": "Название обновится в папках проектов и в недавних диалогах",
"conversationTitleLabel": "Название диалога",
"conversationTitlePlaceholder": "Введите название диалога",
"recentConversations": "Недавние диалоги",
"toggleRecentConversations": "Развернуть или свернуть недавние диалоги",
"filterByProject": "Фильтр по проекту",
"filterAllProjects": "Все проекты",
"filterUnboundProjects": "Без привязки",
"filterProjectSearch": "Поиск проектов…",
"filterProjectSearchEmpty": "Нет подходящих проектов",
"filterProjectSearchHint": "Введите текст для поиска проектов",
"filterProjectSearchMore": "Введите текст, чтобы найти ещё проекты",
"filterProjectSearchLoading": "Поиск…",
"filterProjectSearchFailed": "Не удалось загрузить проекты. Повторите попытку.",
"projectConversationsTitle": "{{name}} · Диалоги",
"unboundConversationsTitle": "Диалоги без привязки",
"noProjectConversations": "В этом проекте нет диалогов",
"noUnboundConversations": "Нет диалогов без привязки",
"sortConversations": "Сортировка",
"sortByCreatedAt": "Время создания",
"sortByUpdatedAt": "Время изменения",
"batchManage": "Массовые действия",
"paginationShow": "Показано {{start}}-{{end}} из {{total}}",
"paginationRange": "{{start}}-{{end}}/{{total}}",
"paginationTotal": "Всего {{total}}",
"paginationPage": "{{page}}/{{total}}",
"paginationPerPage": "На странице",
"paginationPrev": "Назад",
"paginationNext": "Далее",
"attackChain": "Цепочка атаки",
"viewAttackChain": "Открыть цепочку атаки",
"selectRole": "Выбрать роль",
"defaultRole": "По умолчанию",
"inputPlaceholder": "Цель или команда… @ выбор инструментов",
"selectFile": "Выбрать файл",
"uploadFile": "Загрузить файл (несколько или перетаскивание)",
"readingAttachmentsDetail": "Чтение вложения {{current}}/{{total}} · {{name}} · {{percent}}%",
"uploadingAttachmentsDetail": "Загрузка вложений · готово {{done}}/{{total}} · всего {{percent}}%",
"waitingAttachmentsUpload": "Ожидание завершения загрузки вложений…",
"attachmentsUploadIncomplete": "Часть вложений не загрузилась. Удалите неудачные или выберите файлы снова перед отправкой.",
"attachmentUploading": "Загрузка…",
"attachmentUploadFailed": "Ошибка",
"attachmentUploadAlert": "Не удалось загрузить: {{name}}",
"send": "Отправить",
"loadingTools": "Загрузка инструментов...",
"noMatchTools": "Нет подходящих инструментов",
"penetrationTestDetail": "Ход выполнения задачи",
"expandDetail": "Развернуть подробности",
"turnElapsedRunning": "Обработка {{duration}}",
"turnElapsedComplete": "Заняло {{duration}}",
"turnElapsedCancelled": "Прервано · заняло {{duration}}",
"turnElapsedTimeout": "Тайм-аут · заняло {{duration}}",
"turnElapsedFailed": "Сбой · заняло {{duration}}",
"turnDurationSeconds": "{{seconds}} с",
"turnDurationMinutes": "{{minutes}} мин {{seconds}} с",
"turnDurationHours": "{{hours}} ч {{minutes}} мин",
"turnProcessAria": "{{state}}; развернуть или свернуть подробности выполнения",
"turnTokenUsageLabel": "{{tokens}} токенов",
"turnTokenUsageTitle": "Расход токенов: {{total}} (ввод {{prompt}}, вывод {{completion}}, кэш {{cached}}, рассуждение {{reasoning}}, вызовов {{calls}})",
"turnNumber": "Ход {{number}}",
"turnPending": "Обработка…",
"expandDetailLazyHint": "Развернуть подробности (итерации загружаются по щелчку)",
"loadingEarlierDetails": "Загрузка более ранних записей…",
"loadingLaterDetails": "Загрузка более новых записей…",
"viewToolDetail": "Подробнее",
"collapseToolDetail": "Свернуть",
"liveTimelinePruned": "Свёрнуты первые {{count}} записей живого хода. Полную запись можно смотреть постранично после завершения задачи.",
"liveTimelinePrunedSingleRound": "раунд main-agent {{n}}",
"liveTimelinePrunedRoundRange": "раунды main-agent {{from}}–{{to}}",
"toolExecutionsCount": "{{n}} запусков инструментов",
"collapseToolExecutions": "Свернуть запуски инструментов",
"toolExecutionDetailPending": "Подробности выполнения инструмента ещё не синхронизированы. Повторите попытку чуть позже.",
"noProcessDetail": "Нет подробностей хода (выполнение слишком быстрое или нет подробных событий)",
"copyMessageTitle": "Копировать сообщение",
"deleteTurnTitle": "Удалить этот ход",
"deleteTurnConfirm": "Удалить весь ход (сообщение пользователя и ответ ассистента)? Это нельзя отменить. Следующий ответ будет опираться только на оставшиеся сообщения; сохранённые снимки контекста будут очищены.",
"deleteTurnFailed": "Не удалось удалить ход",
"noHistoryConversations": "Истории диалогов пока нет",
"deleteConversationConfirm": "Удалить этот диалог? Сообщения не восстановить, но записанные уязвимости останутся в библиотеке уязвимостей.",
"renameFailed": "Не удалось переименовать",
"downloadConversationFailed": "Не удалось скачать диалог",
"viewAttackChainSelectConv": "Выберите диалог, чтобы открыть цепочку атаки",
"viewAttackChainCurrentConv": "Цепочка атаки текущего диалога",
"executeFailed": "Сбой выполнения",
"callOpenAIFailed": "Не удалось вызвать OpenAI",
"systemReadyMessage": "Система готова. Введите требования к проверке — система сама выполнит соответствующие тесты безопасности.",
"projectWelcomeMessage": "Текущий проект: {{project}}. Введите требования к проверке — система выполнит соответствующие тесты безопасности.",
"noProjectWelcomeMessage": "Проект не выбран. Введите требования к проверке — система выполнит соответствующие тесты безопасности.",
"projectWelcomeTitlePrefix": "Что проверить в ",
"projectWelcomeTitleSuffix": "?",
"noProjectWelcomeTitle": "Что проверить?",
"welcomeSubtitle": "Введите требования к проверке — система сама выполнит соответствующие тесты безопасности.",
"callNumber": "Вызов №{{n}}",
"iterationRound": "Итерация {{n}}",
"einoOrchestratorRound": "Оркестратор · раунд {{n}}",
"einoPlanExecuteRound": "Plan-Execute · раунд {{n}} · {{phase}}",
"planExecuteStreamPlanner": "Вывод планирования",
"planExecuteStreamExecutor": "Вывод выполнения",
"planExecuteStreamReplanning": "Вывод перепланирования",
"planExecuteStreamPhase": "Вывод фазы",
"einoSubAgentStep": "Субагент {{agent}} · шаг {{n}}",
"aiThinking": "Размышление ИИ",
"reasoningChain": "Ход рассуждения",
"planning": "Планирование",
"assistantStreamPhase": "Ответ ассистента",
"toolCallsDetected": "Обнаружено вызовов инструментов: {{count}}",
"callTool": "Вызов инструмента: {{name}} ({{index}}/{{total}})",
"toolExecComplete": "Инструмент {{name}} выполнен",
"toolExecFailed": "Сбой инструмента {{name}}",
"knowledgeRetrieval": "Поиск в базе знаний",
"knowledgeRetrievalTag": "Поиск в базе знаний",
"error": "Ошибка",
"streamNetworkErrorHint": "Соединение потеряно ({{detail}}). Длительная задача может ещё выполняться на сервере; проверьте выполняемые задачи сверху или обновите этот диалог позже.",
"streamEndedWithoutDone": "Соединение закрыто до сигнала завершения. Задача может ещё выполняться на сервере; проверьте выполняемые задачи сверху или обновите этот диалог.",
"taskCancelled": "Задача отменена",
"userInterruptContinueTitle": "⏸️ Прерывание пользователем и продолжение",
"unknownTool": "Неизвестный инструмент",
"einoAgentReplyTitle": "Ответ субагента",
"einoStreamErrorTitle": "⚠️ Поток Eino прерван ({{agent}})",
"einoStreamErrorMessage": "Не удалось прочитать поток; система повторит попытку или завершит работу согласно политике.",
"einoRunRetryTitle": "🔁 Повтор при временной ошибке",
"einoModelRetryTitle": "🔁 Повтор вызова модели",
"einoModelFailoverTitle": "🔀 Переключение на резервную модель",
"einoUsageSummaryTitle": "Сводка расхода токенов",
"einoUsageModelCalls": "Вызовы модели",
"einoUsagePromptTokens": "Токены запроса",
"einoUsageCompletionTokens": "Токены ответа",
"einoUsageTotalTokens": "Всего токенов",
"einoUsageCachedTokens": "Токены кэша",
"einoUsageReasoningTokens": "Токены рассуждения",
"einoEmptyResponseContinueTitle": "🔁 Автопродолжение (нет текста ассистента)",
"einoEmptyResponseContinueMessage": "Сессия завершилась без текста ассистента; продолжение по трассировке…",
"einoRunRetryPlan": "Повтор: попытка {{attempt}}/{{maxAttempts}}, ожидание {{backoffSec}} с",
"einoRunRetryReasonKind": "Тип причины",
"einoRunRetryErrorDetail": "Сведения об ошибке",
"einoRunRetryKind_rate_limit": "Превышен лимит запросов",
"einoRunRetryKind_retryable_http": "Повторяемая ошибка HTTP",
"einoRunRetryKind_upstream_server": "Ошибка вышестоящего сервера",
"einoRunRetryKind_http_error": "Ошибка HTTP",
"einoRunRetryKind_upstream_busy": "Вышестоящий сервис занят",
"einoRunRetryKind_network": "Сбой сетевого соединения",
"einoRunRetryKind_stream": "Сбой чтения потока",
"einoRunRetryKind_transient": "Временный сбой",
"iterationLimitReachedTitle": "⛔ Достигнут предел итераций",
"iterationLimitReachedMessage": "Достигнуто максимальное число итераций; автоматические итерации остановлены.",
"einoPendingOrphanedTitle": "🧹 Сверка вызовов инструментов",
"einoPendingOrphanedMessage": "Незакрытых вызовов инструментов: {{count}}. Они помечены как неуспешные и закрыты автоматически.",
"noDescription": "Нет описания",
"noResponseData": "Нет данных ответа",
"loading": "Загрузка...",
"loadFailed": "Не удалось загрузить: {{message}}",
"noAttackChainData": "Нет данных цепочки атаки",
"copyFailedManual": "Не удалось скопировать. Выделите текст и скопируйте вручную.",
"searching": "Поиск...",
"loadFailedRetry": "Не удалось загрузить, повторите попытку",
"dataFormatError": "Ошибка формата данных",
"progressInProgress": "Тест на проникновение выполняется...",
"executionFailed": "Сбой выполнения",
"penetrationTestComplete": "Тест на проникновение завершён",
"yesterday": "Вчера",
"historyGroupToday": "Сегодня",
"historyGroupLast7Days": "Последние 7 дней",
"historyGroupEarlier": "Ранее",
"agentModeSelectAria": "Выбор режима выполнения диалога",
"agentModePanelTitle": "Режим диалога",
"agentModeEinoSingle": "Eino, один агент (ADK)",
"agentModeEinoSingleHint": "Eino ChatModelAgent + Runner с инструментами MCP (/api/eino-agent)",
"agentModeDeep": "Deep (DeepAgent)",
"agentModeDeepHint": "Eino DeepAgent для сложных проверок безопасности, многоэтапного делегирования задач и синтеза",
"agentModePlanExecuteLabel": "Plan-Execute",
"agentModePlanExecuteHint": "План → выполнение → перепланирование (один исполнитель с инструментами)",
"agentModeSupervisorLabel": "Supervisor (маршрутизация к экспертам)",
"agentModeSupervisorHint": "Маршрутизация к экспертам: передача между несколькими специализированными субагентами",
"agentModeSingle": "Один агент",
"agentModeMulti": "Несколько агентов",
"agentModeSingleHint": "Один агент Eino ADK для диалога и вызова инструментов",
"agentModeMultiHint": "Готовая оркестрация Eino: Deep для сложных задач, Plan-Execute для структурированных циклов, Supervisor для маршрутизации к экспертам",
"reasoningModeLabel": "Рассуждение модели",
"reasoningEffortLabel": "Уровень рассуждения",
"reasoningModeDefault": "Как в системе",
"reasoningModeOff": "Выкл.",
"reasoningModeOn": "Вкл.",
"reasoningModeAuto": "Авто",
"reasoningEffortUnset": "Не задано",
"reasoningCompactLabel": "Рассуждение",
"reasoningCompactAria": "Открыть параметры рассуждения модели",
"reasoningPanelTitle": "Рассуждение модели",
"reasoningPanelHint": "Только для запросов Eino с одним агентом и с несколькими; совмещается со значениями по умолчанию в настройках.",
"sessionSettingsTitle": "Настройки сессии",
"sessionSettingsAria": "Открыть настройки сессии",
"sessionSettingsHint": "Параметры контроля человеком действуют только на следующие сообщения.",
"sessionShortcutAuditAgent": "Проверка агентом",
"modelSettingsAria": "Выбор канала ИИ, модели и параметров рассуждения",
"systemModelPickerTitle": "Выбор системной модели",
"systemModelField": "Модель",
"systemModelLoading": "Загрузка списка моделей…",
"systemModelLoaded": "Загружено моделей: {count}",
"systemModelCurrent": "Текущая",
"systemModelSaving": "Сохранение…",
"systemModelSaved": "Сохранено автоматически",
"reasoningSessionUpdated": "Рассуждение сессии обновлено",
"systemModelLoadFailed": "Не удалось получить модели",
"systemModelSaveFailed": "Не удалось сохранить модель",
"systemModelApplyFailed": "Не удалось применить модель",
"systemModelNeedApiKey": "Сначала укажите ключ API в системных настройках",
"systemModelRetry": "Повторить",
"sessionShortcutHuman": "Одобрение человеком",
"aiChannelLabel": "Канал ИИ",
"aiChannelDefault": "Канал по умолчанию",
"aiChannelDefaultShort": "Канал по умолчанию",
"reasoningSummaryFollow": "Система",
"reasoningSummaryDash": "—",
"agentModeOrchPlanExecute": "Plan-Exec",
"agentModeOrchSupervisor": "Supervisor",
"hitlTitle": "Контроль человеком",
"hitlCardSubtitle": "Одобрения и белый список",
"hitlReviewerLabel": "Проверяющий",
"hitlReviewerHuman": "Одобрение человеком",
"hitlReviewerAgent": "Агент аудита",
"hitlReviewerHint": "В любой момент переключайтесь между человеком и агентом аудита: правила и белый список те же. Выбор можно задать заранее, даже если HITL выключен.",
"hitlConfigTitle": "Параметры совместного режима",
"hitlModeLabel": "Режим",
"hitlModeOff": "Выкл.",
"hitlModeApproval": "Одобрение",
"hitlModeReviewEdit": "Проверка и правка",
"hitlSensitiveTools": "Чувствительные инструменты (через запятую)",
"hitlWhitelistTools": "Белый список инструментов (без одобрения, через запятую)",
"hitlWhitelistPlaceholder": "например, read_file, grep или по одному инструменту в строке (объединяется с глобальным белым списком в конфигурации)",
"hitlWhitelistHint": "Через запятую или с новой строки; показывается вместе с глобальным белым списком из конфигурации.",
"hitlApply": "Применить",
"hitlApplyOkSync": "Настройки HITL сохранены и переданы на сервер.",
"hitlApplyOkDefaultConfig": "Настройки HITL по умолчанию записаны в config.yaml и включены.",
"hitlApplyOkWhitelistYaml": "Белый список инструментов добавлен в config.yaml и действует. Настройки сессии сохраняются автоматически.",
"hitlApplyOkLocal": "Сохранено в этом браузере.",
"hitlApplyFail": "Не удалось синхронизировать с сервером",
"hitlTimeoutLabel": "Лимит ожидания одобрения",
"hitlTimeoutOneMinute": "1 минута",
"hitlTimeoutFiveMinutes": "5 минут",
"hitlTimeoutTenMinutes": "10 минут",
"hitlTimeoutUnlimited": "Без ограничения",
"hitlTimeoutHint": "Запросы без ответа автоматически отклоняются по истечении времени; на карточках одобрения виден отсчёт.",
"hitlStatusOff": "Контроль человеком: выкл.",
"rolePanelTitle": "Выбор роли"
},
"toolGuard": {
"invalidTestResponse": "Сервер вернул некорректный результат проверки",
"fieldTooLong": "Имена правил — до 200 байт UTF-8; шаблоны и сообщения — до 4096 байт UTF-8 каждое. Сократите текст и повторите.",
"tooManyRules": "Можно задать не более 100 правил блокировки.",
"title": "Блокировка вызовов",
"description": "Проверять имена и аргументы инструментов MCP до выполнения и останавливать совпавшие вызовы. Одобрения HITL и белые списки инструментов эти проверки не обходят.",
"reset": "Отменить изменения",
"save": "Сохранить и применить",
"policyTitle": "Политика блокировки",
"enableHint": "Проверка рисков до выполнения инструмента. Сохраните, чтобы применить изменения.",
"enabled": "Включить блокировку вызовов",
"scopeHint": "Правила проверяют только видимый текст вызова. Они не определяют владельца IP, цели перенаправлений и содержимое файлов, которое читают инструменты. Правила для доменов не покрывают каждый косвенный доступ.",
"rulesTitle": "Правила блокировки",
"rulesHint": "Включённые правила проверяются по порядку; первое совпадение задаёт сообщение блокировки. Шаблоны используют синтаксис RE2 и проверяются сервером при сохранении или тесте.",
"addRule": "Добавить правило",
"addDialogTitle": "Добавить правило блокировки",
"addDialogHint": "Настройте правило и проверьте его на примерах аргументов, прежде чем добавлять в список.",
"addToList": "Добавить в список",
"addToListHint": "После добавления правила выберите «Сохранить и применить» вверху страницы, чтобы активировать его.",
"cancelAdd": "Отмена",
"closeDialog": "Закрыть диалог добавления правила",
"singleTestTitle": "Проверить это правило",
"closeRuleTest": "Скрыть проверку правила",
"singleTestHint": "Проверьте текущий черновик отдельно до сохранения. Инструменты не выполняются.",
"testing": "Проверка…",
"testReadyHint": "Нажмите «Проверить совпадение», чтобы увидеть результат здесь.",
"testResultLabel": "Результат проверки",
"testChanged": "Содержимое изменилось. Запустите проверку снова.",
"ruleAdded": "Правило добавлено в список. Сохраните, чтобы применить его.",
"addingRule": "Проверка правила…",
"addFailed": "Не удалось добавить правило",
"messageHint": "В сообщениях доступны {match} (совпавший текст), {tool} (имя инструмента) и {rule} (имя правила).",
"testTitle": "Проверить все правила",
"testHint": "Проверяет текущую конфигурацию страницы, включая несохранённые изменения. Инструменты не выполняются.",
"test": "Проверить совпадение",
"testTool": "Имя инструмента",
"testArguments": "Аргументы инструмента (объект JSON)",
"loading": "Обработка…",
"unsaved": "Есть несохранённые изменения",
"savedState": "Синхронизировано с сервером",
"emptyRules": "Правил пока нет. Добавьте и сохраните правило, чтобы включить его проверки.",
"rule": "Правило",
"ruleEnabled": "Включено",
"deleteRule": "Удалить",
"ruleName": "Имя правила",
"pattern": "Шаблон (RE2)",
"message": "Сообщение блокировки",
"requestFailed": "Запрос не выполнен",
"invalidResponse": "Сервер вернул некорректную конфигурацию",
"loadFailed": "Не удалось загрузить конфигурацию блокировки",
"loadFirst": "Сначала загрузите конфигурацию блокировки",
"requiredFields": "Укажите имя и шаблон для каждого правила",
"saveSuccess": "Конфигурация блокировки вызовов сохранена. Дальнейшие вызовы инструментов будут использовать новую конфигурацию.",
"saveConflict": "Конфигурация перехвата вызовов изменена другим пользователем. Ваши изменения не сохранены. Обновите страницу и повторите попытку.",
"versionRequired": "Отсутствует версия конфигурации перехвата вызовов. Обновите страницу и повторите попытку.",
"saveFailed": "Не удалось сохранить",
"defaultMessage": "Обнаружено {match}. Правило «{rule}» заблокировало этот вызов. Проверьте цель и операцию, прежде чем повторять.",
"blocked": "Правило совпало: этот вызов будет заблокирован",
"notBlocked": "Ни одно включённое правило не совпало",
"disabledResult": "Блокировка вызовов выключена: эта конфигурация не будет блокировать вызовы",
"matchedRule": "Совпавшее правило",
"matchedText": "Совпавший текст",
"matchedMessage": "Возвращённое сообщение блокировки",
"toolRequired": "Укажите имя инструмента для проверки",
"invalidArguments": "Аргументы инструмента должны быть корректным объектом JSON",
"testFailed": "Проверка не удалась",
"listHint": "Выберите правило, чтобы просмотреть или изменить. Правила проверяются в порядке списка.",
"helpTitle": "Синтаксис правил и область совпадения",
"testSummary": "Проверить общую блокировку с текущим порядком и состоянием правил",
"unnamedRule": "Правило без названия",
"expandRule": "Развернуть правило",
"collapseRule": "Свернуть правило",
"ruleOn": "Включено",
"ruleOff": "Отключено",
"ruleModified": "Изменено",
"ruleNew": "Новое",
"defaultPreview": "При совпадении используется сообщение блокировки по умолчанию",
"protectionOn": "Блокировка вызовов включена",
"protectionOff": "Блокировка вызовов выключена",
"ruleCount": "Включено правил: {{enabled}} из {{total}}",
"closeEditor": "Закрыть редактор",
"testEntry": "Проверить все правила",
"validateRule": "Проверить это правило",
"testAll": "Проверить все правила",
"testScopeAll": "Все правила",
"testScopeSingle": "Одно правило: {{name}}",
"testSingleHint": "Проверяет только это правило, без глобального переключателя и переключателей правил. Не сохраняет и не выполняет инструменты.",
"testAllHint": "Проверяет все правила в текущем порядке и с текущим состоянием. Не сохраняет и не выполняет инструменты.",
"singleMatched": "Это правило совпало",
"singleNotMatched": "Это правило не совпало",
"singleResultHint": "Это проверка одного правила. Фактическая блокировка также зависит от глобального переключателя, включённых правил и порядка совпадения."
},
"hitl": {
"pageTitle": "Одобрения HITL",
"pageReviewerLabel": "Текущий проверяющий",
"auditEngineLabel": "Движок одобрения",
"auditEngineOpenAI": "Протокол OpenAI",
"auditEngineJev": "TypeSafe Jev",
"colAuditEngine": "Движок одобрения",
"pageReviewerHint": "Действует для выбранного диалога. Без диалога сохраняется в config.yaml как значение по умолчанию для новых чатов. Применяется сразу.",
"pageReviewerSaved": "Проверяющий сохранён.",
"whitelistLabel": "Белый список инструментов (без одобрения)",
"whitelistHint": "По одному в строке или через запятую. Сохраняется в глобальный белый список config.yaml и применяется сразу (синхронизация с панелью чата).",
"whitelistSaved": "Белый список сохранён.",
"whitelistSaveFailed": "Не удалось сохранить белый список",
"strategyLabel": "Стратегия аудита (запрос)",
"strategyHint": "Инструменты из белого списка не требуют одобрения. Остальные оценивает модель по этому запросу, если выбран агент аудита.",
"strategyTabApproval": "Режим одобрения",
"strategyTabReviewEdit": "Режим проверки и правки",
"strategyHintApproval": "Инструменты из белого списка не требуют одобрения. В режиме одобрения агент аудита только одобряет или отклоняет.",
"strategyHintJev": "Активен TypeSafe Jev: текст стратегии ниже оценивается как структурированные вопросы. Встроенные правила для опасных действий остаются жёстким порогом. Jev не переписывает аргументы.",
"strategyHintReviewEdit": "В режиме проверки и правки агент аудита может сузить параметры через editedArguments перед одобрением. Отклоните запрос, если параметры нельзя безопасно поправить.",
"strategyReset": "Сбросить",
"strategySaved": "Стратегия аудита сохранена.",
"strategySaveFailed": "Не удалось сохранить стратегию аудита",
"tabPending": "Ожидают",
"tabLogs": "Журнал аудита",
"tabStrategy": "Стратегия аудита",
"tabWhitelist": "Белый список",
"pendingTitle": "Ожидают одобрения",
"auditReviewing": "Идёт автоматическая проверка",
"auditReviewEditing": "Автопроверка и правка",
"auditReviewExplanation": "Агент проверки рассматривает запрос по заданной стратегии. Выполнение начнётся только после одобрения.",
"auditApproved": "Агент аудита одобрил",
"auditEditedApproved": "Агент аудита изменил параметры и одобрил",
"auditRejected": "Агент аудита отклонил",
"waitingHumanApproval": "Ожидает одобрения",
"waitingHumanReview": "Ожидает проверки",
"humanApprovalExplanation": "Этот вызов инструмента нужно подтвердить перед запуском.",
"humanReviewExplanation": "Проверьте параметры и при необходимости измените их перед разрешением.",
"humanApproved": "Разрешено один раз",
"humanEditedApproved": "Параметры изменены и разрешены",
"humanRejected": "Отклонено при проверке",
"viewEditedArgs": "Изменённые параметры",
"reviewArgs": "Параметры (JSON)",
"commentOptional": "Комментарий (необязательно)",
"commentPlaceholder": "например, разрешить команду только для чтения",
"reject": "Отклонить",
"allowOnce": "Разрешить один раз",
"saveEditedAndAllow": "Сохранить правки и разрешить",
"waitingApprovalShort": "Ожидает одобрения",
"waitingApprovalCount": "Ожидают одобрения: {{count}}",
"approvalUrgencyUnlimited": "Срок одобрения не ограничен",
"approvalUrgencyMoreThanThree": "Ближайший срок — более 3 минут",
"approvalUrgencyMoreThanFive": "Ближайший срок — более 5 минут",
"approvalUrgencyThreeToFive": "Ближайший срок — через 3–5 минут",
"approvalUrgencyOneToThree": "Ближайший срок — через 1–3 минуты",
"approvalUrgencyWithinOne": "Ближайший срок — менее 1 минуты",
"requestGeneric": "Разрешить CyberStrikeAI вызвать {{tool}}?",
"requestVisitUrl": "Разрешить CyberStrikeAI открыть {{url}}?",
"requestVisitLongUrl": "Разрешить CyberStrikeAI открыть этот адрес?",
"requestModifyLongPath": "Разрешить CyberStrikeAI изменить этот файл?",
"requestBrowser": "Разрешить CyberStrikeAI использовать браузер?",
"requestCommand": "Разрешить CyberStrikeAI выполнить эту команду?",
"requestFile": "Разрешить CyberStrikeAI изменить {{path}}?",
"requestFiles": "Разрешить CyberStrikeAI изменить файлы?",
"toolTerminal": "Терминал",
"toolFiles": "Файлы",
"viewRequestDetails": "Подробности запроса",
"editRequestDetails": "Просмотр или правка параметров запроса",
"addApprovalComment": "Комментарий к одобрению (необязательно)",
"timeoutAutoReject": "По истечении отклоняется автоматически",
"timeoutUnlimited": "Без ограничения по времени",
"expiredAutoRejected": "Время истекло, идёт автоматическое отклонение…",
"taskClosedApprovalUnavailable": "Задача завершена, одобрение недоступно",
"taskInterrupted": "Задача прервана",
"interruptedApprovalCancelled": "Задача прервана, одобрение отменено",
"expiredRejected": "Время одобрения истекло, запрос отклонён",
"searchLabel": "Поиск",
"searchPlaceholder": "Инструмент, диалог, полезная нагрузка, комментарий…",
"searchApply": "Найти",
"filterDecision": "Решение",
"filterDecidedBy": "Проверяющий",
"filterAll": "Все",
"decisionApprove": "Одобрить",
"decisionReject": "Отклонить",
"reviewerHuman": "Человек",
"reviewerAgent": "Агент аудита",
"reviewerSystem": "Система",
"reviewerManual": "Вручную",
"logCreate": "Новая запись",
"logModalTitle": "Запись аудита",
"logModalEdit": "Изменить запись аудита",
"fieldConversation": "ID диалога",
"fieldTool": "Имя инструмента",
"fieldComment": "Комментарий",
"fieldPayload": "Полезная нагрузка (JSON)",
"fieldUserMessage": "Сообщение пользователя",
"fieldThinking": "Размышление",
"fieldReasoning": "Цепочка рассуждений",
"fieldPlanning": "План",
"colId": "ID",
"colTool": "Инструмент",
"colConversation": "Диалог",
"colDecision": "Решение",
"colDecidedBy": "Проверяющий",
"colContext": "Контекст",
"colTime": "Время",
"colActions": "Действия",
"viewDetail": "Подробнее",
"logModalView": "Подробности записи аудита",
"fieldExecutionResult": "Результат выполнения",
"executionSuccess": "успех",
"executionFailed": "ошибка",
"edit": "Изменить",
"delete": "Удалить",
"logsEmpty": "Нет записей аудита",
"logsEmptyHint": "Записи создаются автоматически при одобрении или отклонении запросов HITL.",
"pageInfo": "Всего {{total}}",
"prevPage": "Назад",
"nextPage": "Далее",
"conversationRequired": "Укажите ID диалога",
"toolRequired": "Укажите имя инструмента",
"saveFailed": "Не удалось сохранить",
"deleteConfirm": "Удалить эту запись аудита?",
"deleteFailed": "Не удалось удалить",
"retentionHint": "Записи аудита хранятся {{days}} дн., затем удаляются автоматически.",
"selectedCount": "Выбрано: {{count}}",
"selectAll": "Выбрать все",
"deselectAll": "Снять выбор",
"batchDelete": "Удалить выбранные",
"batchDeleteConfirm": "Удалить выбранные записи аудита ({{count}})? Это действие нельзя отменить.",
"batchDeleteSuccess": "Удалено записей аудита: {{count}}",
"batchDeleteFailed": "Не удалось удалить выбранные",
"clearAll": "Очистить всё",
"clearAllConfirm": "Очистить записи аудита по текущим фильтрам ({{count}})? Это действие нельзя отменить.",
"clearAllConfirmNoFilter": "Фильтры не заданы. Будут удалены все записи аудита ({{count}}). Это действие нельзя отменить. Продолжить?",
"clearAllSuccess": "Очищено записей: {{count}}",
"clearAllFailed": "Не удалось очистить",
"selectLogsFirst": "Сначала выберите записи для удаления",
"loading": "Загрузка...",
"emptyState": "Нет запросов на одобрение",
"dismiss": "Скрыть",
"conversationLabel": "Диалог:",
"reviewEditHelp": "Режим проверки и правки: укажите объект JSON, чтобы переопределить аргументы инструмента. Пример: {\"command\":\"ls -la\"}",
"approvalHelp": "Режим одобрения: только одобрить или отклонить, правка аргументов отключена.",
"commentHelp": "Комментарий (необязательно): кратко укажите причину.",
"approve": "Одобрить",
"loadFailed": "Не удалось загрузить",
"invalidJson": "Некорректные аргументы JSON",
"submitFailedPrefix": "Не удалось отправить:"
},
"progress": {
"callingAI": "Вызов модели ИИ...",
"callingTool": "Вызов инструмента: {{name}}",
"lastIterSummary": "Последняя итерация: сводка и следующие шаги...",
"summaryDone": "Сводка готова",
"generatingFinalReply": "Формирование итогового ответа...",
"maxIterSummary": "Достигнут предел итераций, формируется сводка...",
"analyzingRequestShort": "Анализ запроса...",
"analyzingRequestPlanning": "Анализ запроса и план стратегии проверки...",
"startingEinoDeepAgent": "Запуск Eino DeepAgent...",
"startingEinoMultiAgent": "Запуск многоагентного режима Eino...",
"einoAgent": "Агент Eino: {{name}}",
"peAgentPlanner": "Планировщик",
"peAgentExecutor": "Исполнитель",
"peAgentReplanning": "Перепланировщик"
},
"timeline": {
"blocked": "Заблокировано",
"params": "Параметры:",
"executionResult": "Результат выполнения:",
"executionId": "ID выполнения:",
"noResult": "Нет результата",
"running": "Выполняется...",
"backgroundRunning": "Выполняется в фоне",
"completed": "Завершено",
"execFailed": "Выполнение не удалось",
"resultMissing": "Запись результата отсутствует",
"toolSucceeded": "Успешно",
"toolFailed": "Ошибка"
},
"tasks": {
"statusEndedWithFailures": "Завершено (ошибок: {{count}})",
"finishedProgressHint": "Прогресс учитывает завершённые задачи, включая ошибки и отмены, а не долю успешных задач.",
"title": "Управление задачами",
"stopTask": "Остановить задачу",
"interruptModalTitle": "Прервать текущий шаг",
"interruptReasonLabel": "Примечание к прерыванию",
"interruptModalHint": "Если инструмент выполняется: как «Остановить инструмент» в мониторе MCP — останавливается только этот вызов, выполнение продолжается; примечание можно добавить к результату инструмента (USER INTERRUPT NOTE). Если инструмент не выполняется (модель только думает или передаёт поток): «Прервать и продолжить» тоже работает — текущий вывод ставится на паузу, примечание добавляется в контекст, и выполнение возобновляется автоматически; на шкале прогресса появляется запись «Прерывание пользователя и продолжение». Используйте это вместо полной остановки, если нужно только скорректировать ход; «Остановить полностью» завершает всю задачу.",
"interruptReasonPlaceholder": "например, инструмент слишком медленный — пропустить и кратко изложить…",
"interruptReasonRequired": "Введите короткое примечание, чтобы модель могла продолжить с его учётом.",
"interruptSubmitting": "Отправка...",
"interruptConfirmContinue": "Прервать и продолжить",
"interruptHardStop": "Остановить полностью",
"interruptModalClose": "Закрыть",
"userInterruptTimelineTitle": "Примечание пользователя (продолжение)",
"collapseDetail": "Свернуть подробности",
"newTask": "Новая задача",
"autoRefresh": "Автообновление",
"historyHint": "Подсказка: доступна история завершённых задач. Включите «Показать историю», чтобы открыть её.",
"statusRunning": "Выполняется",
"statusCleanupUnconfirmed": "Удалённая отмена не подтверждена",
"statusCleaning": "Очистка",
"statusCleanupFailed": "Очистка не удалась (повтор)",
"statusCancelling": "Отмена",
"statusFailed": "Ошибка",
"statusTimeout": "Тайм-аут",
"statusCancelled": "Отменено",
"statusCompleted": "Завершено",
"historyBadge": "История",
"duration": "Длительность",
"completedAt": "Завершено",
"startedAt": "Начато",
"clickToCopy": "Нажмите, чтобы скопировать",
"unnamedTask": "Задача без названия",
"unknown": "Неизвестно",
"unknownTime": "Время неизвестно",
"clearHistoryConfirm": "Очистить всю историю задач?",
"cancelTaskFailed": "Не удалось отменить задачу",
"cancelFailed": "Не удалось отменить",
"taskInfoNotSynced": "Данные задачи ещё не синхронизированы, повторите позже.",
"loadActiveTasksFailed": "Не удалось загрузить активные задачи",
"cannotGetTaskStatus": "Не удалось получить статус задачи",
"copiedToast": "Скопировано",
"cancelling": "Отмена...",
"enterTaskPrompt": "Введите хотя бы одну задачу",
"noValidTask": "Нет допустимых задач",
"createBatchQueueFailed": "Не удалось создать очередь пакетных задач",
"noBatchQueues": "Сейчас нет очередей пакетных задач",
"recentCompletedTasks": "Недавно завершённые задачи (за 24 часа)",
"clearHistory": "Очистить историю",
"cancelTask": "Отменить задачу",
"viewConversation": "Открыть диалог",
"viewVulnerabilities": "Открыть уязвимости",
"viewVulnerabilitiesQueueTitle": "Открыть уязвимости: управление с фильтром по этой очереди",
"runSingleTask": "Запустить задачу",
"confirmRunSingleTask": "Запустить только эту задачу? После завершения очередь будет приостановлена и не перейдёт к остальным ожидающим.",
"runSingleTaskFailed": "Не удалось запустить задачу",
"runSingleTaskUnavailable": "Недоступно, пока выполняется очередь или задача",
"runSingleTaskUnavailableSelf": "Эта задача выполняется",
"runSingleTaskUnavailableQueue": "Очередь выполняется; приостановите её, чтобы запустить другую задачу отдельно",
"conversationIdLabel": "ID диалога",
"statusPending": "Ожидает",
"statusPaused": "Пауза",
"statusCronCycleIdle": "Раунд завершён · цикл по расписанию",
"statusCronRunning": "Выполняется · очередь cron",
"cronNextRunLine": "Следующий запуск: {{time}}",
"cronRoundDoneProgressHint": "Очередь cron: подзадачи завершены; следующий раунд начнётся по расписанию",
"cronRunningProgressHint": "Текущий раунд выполняется; следующий полный цикл — по cron и времени следующего запуска",
"cronPendingScheduled": "Запланировано cron · далее {{time}}",
"cronPendingProgressNote": "Запустится по расписанию или нажмите «Старт», чтобы выполнить раунд сейчас",
"cronRecurringCallout": "Очереди cron начинают новый раунд в каждое запланированное время. Отключите «Разрешить автозапуск cron», чтобы остановить цикл.",
"confirmCancelTasks": "Отменить выбранные задачи ({{n}})?",
"batchCancelResultPartial": "Пакетная отмена: успешно {{success}}, с ошибкой {{fail}}",
"batchCancelResultSuccess": "Отменено задач: {{n}}",
"taskCount": "Задач: {{count}}",
"queueIdLabel": "ID очереди",
"createdTimeLabel": "Создано",
"totalLabel": "Всего",
"pendingLabel": "Ожидает",
"runningLabel": "Выполняется",
"completedLabel": "Завершено",
"failedLabel": "Ошибка",
"cancelledLabel": "Отменено",
"loadingTasks": "Загрузка...",
"loadFailedRetry": "Ошибка загрузки",
"loadTaskListFailed": "Не удалось загрузить список задач",
"getQueueDetailFailed": "Не удалось загрузить сведения об очереди",
"startBatchQueueFailed": "Не удалось запустить пакетную очередь",
"pauseQueueFailed": "Не удалось приостановить очередь",
"pauseQueueConfirm": "Приостановить эту пакетную очередь? Текущая задача будет остановлена; остальные останутся в ожидании.",
"deleteQueueConfirm": "Удалить эту пакетную очередь? Это нельзя отменить.",
"deleteQueueFailed": "Не удалось удалить пакетную очередь",
"rerunQueueConfirm": "Перезапустить эту пакетную очередь? Все задачи будут сброшены в ожидание и выполнены заново.",
"rerunQueueFailed": "Не удалось перезапустить пакетную очередь",
"batchQueueTitle": "Очередь пакетных задач",
"batchQueueUntitled": "Очередь без названия",
"resumeExecute": "Продолжить",
"taskIncomplete": "Данные задачи неполные",
"cannotGetTaskMessageInput": "Не удалось получить текст задачи",
"taskMessageRequired": "Укажите текст задачи",
"saveTaskFailed": "Не удалось сохранить задачу",
"queueInfoMissing": "Сведения об очереди не найдены",
"addTaskFailed": "Не удалось добавить задачу",
"confirmDeleteTask": "Удалить эту задачу?\n\nЗадача: {{message}}\n\nЭто нельзя отменить.",
"deleteTaskFailed": "Не удалось удалить задачу",
"paginationShow": "Показано {{start}}–{{end}} из {{total}}",
"paginationPerPage": "На странице",
"paginationFirst": "Первая",
"paginationPrev": "Назад",
"paginationNext": "Далее",
"paginationLast": "Последняя",
"paginationPage": "Стр. {{current}} / {{total}}",
"deleteQueue": "Удалить очередь",
"retry": "Повторить",
"noMatchingTasks": "Нет подходящих задач",
"updateTaskFailed": "Не удалось обновить задачу",
"durationSeconds": "с",
"durationMinutes": "мин",
"durationHours": "ч"
},
"infoCollect": {
"enterFofaQuery": "Введите синтаксис запроса FOFA",
"querying": "Запрос...",
"queryFailed": "Запрос не выполнен",
"enterNaturalLanguage": "Введите описание на естественном языке",
"cancelParse": "Отменить разбор",
"clickToCancelParse": "Нажмите, чтобы отменить разбор ИИ",
"parseToFofa": "Разобрать естественный язык в запрос FOFA",
"parseResultEmpty": "Результат разбора пуст: добавьте или измените запрос FOFA во всплывающем окне",
"queryPlaceholder": "например, app=\"Apache\" && country=\"CN\"",
"selectAll": "Выбрать все или ничего",
"selectRow": "Выбрать строку",
"copyTarget": "Копировать цель",
"sendToChat": "Отправить в чат (можно править; Ctrl/Cmd+щелчок — отправить сразу)",
"noTargetToCopy": "Нет цели для копирования",
"targetCopied": "Цель скопирована",
"manualCopyHint": "Не удалось скопировать, скопируйте вручную: ",
"cannotInferTarget": "Не удалось определить цель сканирования по строке (в полях нужны host/ip/port/domain)",
"noSendMessage": "sendMessage() не найдена, обновите страницу и повторите",
"filledToInput": "Подставлено в поле чата, отредактируйте и отправьте",
"noExportResult": "Нет результатов для экспорта",
"xlsxNotLoaded": "Библиотека XLSX не загружена, обновите страницу и повторите",
"noResults": "Нет результатов",
"selectRowsFirst": "Сначала выберите строки для сканирования",
"noScanTarget": "По выбранному не удалось определить цели сканирования (в полях нужны host/ip/port/domain)",
"batchScanFailed": "Пакетное сканирование не удалось",
"batchQueueCreated": "Очередь пакетного сканирования создана",
"field": "Поле",
"cellValueLength": "Символов: {{count}}",
"parsePending": "Разбор ИИ...",
"parsePendingClickCancel": "Разбор ИИ... (нажмите кнопку, чтобы отменить)",
"parseSlow": "Разбор ИИ занимает больше времени, обработка продолжается…",
"parseDone": "Разбор ИИ завершён",
"parseCancelled": "Разбор ИИ отменён",
"parseFailed": "Разбор ИИ не удался: ",
"parseResultTitle": "Результат разбора ИИ",
"naturalLanguageLabel": "Естественный язык",
"fofaQueryEditable": "Запрос FOFA (можно править)",
"confirmBeforeQuery": "Перед запуском проверьте синтаксис и область запроса.",
"reminder": "Напоминание",
"explanation": "Пояснение",
"actions": "Действия",
"batchScanTitle": "Пакетное сканирование FOFA",
"queueCreatedSkipped": "Очередь создана (пропущено строк: {{n}}, нет цели)",
"createQueueFailed": "Не удалось создать пакетную очередь",
"loading": "Загрузка...",
"none": "Нет",
"truncated": "обрезано",
"resultsMeta": "Всего {{total}} · на странице {{count}} · page={{page}} · size={{size}}",
"providerReturnedFewer": "Поставщик вернул строк {{count}}/{{expected}}",
"parseModalCancel": "Отмена",
"parseModalApply": "Подставить в запрос",
"parseModalApplyRun": "Подставить и выполнить"
},
"assets": {
"countryExample": "Китай",
"provinceExample": "Пекин",
"cityExample": "Пекин",
"exportIP": "IP-адрес",
"exportVulnerabilityCount": "Количество уязвимостей",
"overviewTitle": "Обзор активов",
"libraryTitle": "Библиотека активов",
"viewLibrary": "Открыть библиотеку активов",
"totalAssets": "Всего активов",
"totalAssetsHint": "Активы на постоянном мониторинге",
"ipCount": "IP-адреса",
"domainCount": "Домены",
"portCount": "Порты",
"recentCount": "Обнаружено за 7 дней",
"recentWindow": "7 дней",
"recentShare": "{{percent}}% всех текущих активов",
"protocolDistribution": "Распределение протоколов",
"protocolDistributionHint": "Состав экспозиции по выявленным службам",
"protocolKinds": "{{count}} протоколов",
"topProtocol": "Основной протокол",
"topProtocolShare": "Доля основного протокола",
"protocolComposition": "Состав протоколов",
"protocolRank": "Место",
"protocolName": "Протокол",
"assetRatio": "Доля активов",
"assetAmount": "Количество",
"ratio": "Доля",
"assetCountUnit": "{{count}} активов",
"postureChanges": "Изменения состояния",
"postureChangesHint": "Динамика активов и рисков за выбранный период",
"periodSelection": "Период",
"days7": "7 дней",
"days30": "30 дней",
"days90": "90 дней",
"assetTrend": "Динамика активов",
"assetTrendHint": "Новые обнаружения и неактивные активы",
"addedAssets": "Добавленные активы",
"inactiveAssets": "Неактивные активы",
"riskTrend": "Динамика выявления рисков",
"riskTrendHint": "Новые уязвимости и находки критического и высокого уровня",
"discoveredRisks": "Новые уязвимости",
"highRisks": "Критические и высокие",
"scanCoverage": "Охват сканированием",
"scanCoverageHint": "Активы без сканирования или с просроченной проверкой",
"overallCoverage": "Общий охват",
"scannedAssets": "Просканированные активы",
"scannedAssetsHint": "Просканированы хотя бы раз",
"recentlyScanned": "Охвачено за 30 дней",
"neverScanned": "Без сканирования",
"neverScannedHint": "В приоритете на сканирование",
"staleScans": "Не сканировались 30+ дней",
"staleScansHint": "Результаты сканирования могут устареть",
"coverageOfTotal": "{{percent}}% всех активов",
"coverageMeta": "{{scanned}} / {{total}} охвачено",
"addAsset": "+ Добавить актив",
"bulkImport": "Массовый импорт",
"bulkImportTitle": "Массовый импорт активов",
"bulkImportSubtitle": "Заполните шаблон, загрузите файл и проверьте результат перед импортом",
"downloadTemplate": "Скачать шаблон",
"downloadTemplateHint": "Рекомендуется XLSX; CSV удобен для выгрузки из других систем",
"downloadXlsx": "Скачать шаблон XLSX",
"downloadCsv": "Скачать шаблон CSV",
"uploadFile": "Загрузить файл",
"uploadFileHint": "Поддерживаются .xlsx и .csv, до 100 000 строк и 100 МБ",
"chooseOrDropFile": "Выберите файл или перетащите его сюда",
"fileNotSelected": "Файл не выбран",
"dataPreview": "Предпросмотр данных",
"rowNumber": "Строка",
"validationResult": "Проверка",
"validationPassed": "Допустимо",
"importValidRows": "Импортировать допустимые строки",
"importValidRowsCount": "Импортировать допустимые строки: {{count}}",
"importPreviewSummary": "{{total}} строк: {{valid}} допустимых, {{invalid}} требуют внимания",
"importBackendRowError": "Строка Excel {{row}} (отправленный допустимый актив №{{index}}): {{message}}",
"previewLimited": "Показаны первые 100 строк; будут обработаны все {{count}} строк",
"fileTypeInvalid": "Поддерживаются только файлы .xlsx и .csv",
"fileTooLarge": "Размер файла не должен превышать 100 МБ",
"spreadsheetUnavailable": "Не удалось загрузить компонент таблиц; обновите страницу и повторите",
"fileParseFailed": "Не удалось разобрать файл; убедитесь, что он корректен и не повреждён",
"fileHasNoData": "В файле нет строк для импорта",
"headerInvalid": "Столбцы шаблона не распознаны; используйте скачанный шаблон",
"tooManyRows": "Число строк не должно превышать {{count}}",
"importTargetRequired": "Не указан адрес цели",
"importStatusInvalid": "Статус должен быть active или inactive",
"importProjectNotFound": "Проект не существует или недоступен: {{project}}",
"importTagsInvalid": "Не больше 30 тегов, до 64 символов в каждом",
"importFieldTooLong": "Поле {{field}} слишком длинное",
"duplicateFileRow": "Дублирует строку {{row}}",
"bulkImportDone": "Импорт завершён: создано {{created}}, обновлено {{updated}}, пропущено {{skipped}}",
"templateGuideTitle": "Инструкция по массовому импорту активов",
"templateGuideRequired": "Обязательно: target либо хотя бы одно из host / ip / domain",
"templateGuideTarget": "Примеры target: https://example.com:443, example.com, 1.1.1.1:22",
"templateGuideProject": "project — имя или ID существующего проекта; пустое значение означает без проекта",
"templateGuideTags": "Теги через запятую, не больше 30",
"templateGuideStatus": "status принимает active / inactive, по умолчанию active",
"templateGuideLimit": "Вводите данные на листе Assets; до 100 000 строк",
"instructionsSheet": "Инструкция",
"addAssetTitle": "Добавить актив",
"editAssetTitle": "Изменить актив",
"editorSubtitle": "Укажите одну цель; остальные сведения разберутся автоматически или их можно добавить позже",
"assetAddress": "Адрес актива",
"assetAddressHint": "Принимается любая непустая цель; распознанные URL, домены, IP и порты разбираются автоматически",
"targetWhitespace": "Адрес актива не может содержать пробелы",
"targetInvalid": "Введите корректный URL, домен или IP-адрес",
"hostInvalid": "Полный URL некорректен или содержит учётные данные",
"ipInvalid": "Некорректный IP-адрес",
"domainInvalid": "Некорректный домен",
"protocolInvalid": "Некорректный протокол",
"portInvalid": "Порт должен быть от 1 до 65535",
"connectionInfo": "Подключение",
"connectionInfoHint": "Разбирается из адреса актива автоматически; при необходимости измените",
"fingerprintInfo": "Идентификация",
"fingerprintInfoHint": "Добавьте отпечатки страницы и службы, чтобы упростить поиск",
"locationAndStatus": "Местоположение и статус",
"locationAndStatusHint": "Укажите расположение актива и текущую доступность",
"hostUrl": "Полный URL / хост",
"pageTitle": "Заголовок страницы",
"serverProduct": "Служба / продукт",
"tagsPlaceholder": "Enter или запятая, чтобы добавить",
"tagsHint": "Классификация по среде, бизнесу или владельцу",
"removeTag": "Удалить тег {{tag}}",
"addAssetAction": "Добавить актив",
"discardChanges": "Отменить несохранённые изменения?",
"createdSuccessfully": "Актив добавлен",
"updatedSuccessfully": "Актив обновлён",
"duplicateMerged": "Актив уже существовал; сведения безопасно объединены",
"assetSkipped": "Актив не сохранён; возможно, он существует без права на изменение",
"searchPlaceholder": "Поиск по хосту, IP, домену, заголовку, службе или тегу",
"allStatuses": "Все статусы",
"allProjects": "Все проекты",
"unboundProject": "Не привязан",
"project": "Проект",
"archived": "В архиве",
"statusActive": "Активен",
"statusInactive": "Неактивен",
"target": "Цель",
"service": "Служба",
"title": "Заголовок / отпечаток",
"location": "Местоположение",
"country": "Страна / регион",
"province": "Регион / штат",
"city": "Город",
"source": "Источник",
"lastSeen": "Последняя активность",
"status": "Статус",
"domain": "Домен",
"port": "Порт",
"protocol": "Протокол",
"server": "Отпечаток сервера",
"tags": "Теги (через запятую)",
"tagsLabel": "Теги",
"detailTitle": "Сведения об активе",
"sourceQuery": "Исходный запрос",
"firstSeen": "Первое обнаружение",
"totalMeta": "{{count}} активов",
"targetRequired": "Введите адрес актива",
"loadFailed": "Не удалось загрузить активы",
"saveFailed": "Не удалось сохранить актив",
"saved": "Актив сохранён",
"deleteConfirm": "Удалить этот актив?",
"deleteFailed": "Не удалось удалить актив",
"importSelected": "Импортировать выбранное",
"importOne": "Добавить в библиотеку активов",
"selectFirst": "Сначала выберите результаты для импорта",
"noValidImportTarget": "Ни у одного выбранного результата нет допустимой цели актива",
"importFailed": "Не удалось импортировать активы",
"importDone": "Создано {{created}}, обновлено {{updated}}",
"importDoneWithInvalid": "Создано {{created}}, обновлено {{updated}}, пропущено результатов без допустимых целей: {{invalid}}",
"selectPage": "Выбрать эту страницу",
"selectAsset": "Выбрать актив",
"selectedCount": "Выбрано: {{count}}",
"clearSelection": "Снять выбор",
"selectAllResults": "Выбрать все {{count}}",
"allResultsSelected": "Выбраны все подходящие активы: {{count}}",
"bindProject": "Привязать проект",
"bindProjectTitle": "Привязать проект",
"chooseProject": "Выберите проект",
"selectProjectRequired": "Выберите проект для привязки",
"bindProjectCount": "Обновить активы: {{count}}",
"bindProjectHint": "Все выбранные активы будут привязаны к этому проекту.",
"confirmBinding": "Подтвердить",
"bindProjectDone": "Привязано активов: {{count}}",
"bindProjectFailed": "Не удалось привязать проект",
"sendToChat": "Отправить в чат",
"sendToChatShort": "Скан",
"createScanTask": "Создать задачи сканирования",
"scanTitle": "Сканировать активы",
"scanAssetCount": "{{count}} активов",
"userPrompt": "Запрос пользователя",
"promptHint": "Подстановки: {{asset_id}}, {{target}}, {{host}}, {{ip}}, {{domain}}, {{port}}. В режиме задач создаётся одна задача на актив.",
"executeNow": "Запустить сразу после создания",
"confirmSend": "Отправить",
"confirmCreate": "Создать задачи",
"scanCompletionInstruction": "После достижения указанной цели прекратите проверки и сообщите полученные результаты. Вызовите complete_asset_scan(id={{asset_id}}), чтобы записать время проверки актива и связанные результаты. Эта запись не расширяет область проверки.",
"defaultScanPrompt": "Выполните авторизованное сканирование безопасности {{target}} (ID актива: {{asset_id}}). Сохраните подтверждённые находки через record_vulnerability, затем вызовите complete_asset_scan(id={{asset_id}}), чтобы обновить время последнего сканирования и число связанных уязвимостей.",
"selectAssetsFirst": "Сначала выберите активы",
"promptRequired": "Введите запрос пользователя",
"scanSubmitFailed": "Не удалось отправить сканирование",
"scanTaskLinkFailed": "Задачи созданы, но привязка к активам не удалась",
"scanConversationTitle": "Сканирование активов: {{targets}}",
"scanQueueTitle": "Пакетное сканирование активов",
"lastScan": "Последнее сканирование",
"relatedVulnerabilities": "Связанные находки",
"riskLevel": "Риск",
"riskCritical": "Критический",
"riskHigh": "Высокий",
"riskMedium": "Средний",
"riskLow": "Низкий",
"riskInfo": "Инфо",
"riskNormal": "Норма",
"riskUnassessed": "Не оценён",
"advancedFilters": "Расширенные фильтры",
"resetFilters": "Сбросить",
"allRisks": "Все уровни риска",
"minVulnerabilityCount": "Минимум находок",
"scanState": "Статус сканирования",
"allScanStates": "Все",
"neverScannedFilter": "Без сканирования",
"overdue30": "Не сканировались 30 дней",
"overdue60": "Не сканировались 60 дней",
"overdue90": "Не сканировались 90 дней",
"scannedFilter": "Просканированы",
"responsiblePerson": "Владелец",
"department": "Подразделение",
"ownership": "Владение",
"unassigned": "Не назначен",
"businessSystem": "Бизнес-система",
"environment": "Среда",
"criticality": "Критичность",
"allEnvironments": "Все среды",
"environmentProduction": "Продакшен",
"environmentStaging": "Стейджинг",
"environmentTesting": "Тестирование",
"environmentDevelopment": "Разработка",
"environmentOther": "Другое",
"allCriticalities": "Все уровни критичности",
"criticalityCritical": "Критически важная",
"criticalityHigh": "Высокая",
"criticalityMedium": "Средняя",
"criticalityLow": "Низкая",
"firstSeenStart": "Первое обнаружение с",
"firstSeenEnd": "Первое обнаружение по",
"lastSeenStart": "Последняя активность с",
"lastSeenEnd": "Последняя активность по",
"sort": "Сортировка",
"sortLastSeenDesc": "Последняя активность (сначала новые)",
"sortLastScanAsc": "Наиболее просроченное сканирование",
"sortLastScanDesc": "Недавно сканированные",
"sortRiskDesc": "Риск (по убыванию)",
"sortVulnerabilityDesc": "Находки (сначала больше)",
"sortFirstSeenDesc": "Первое обнаружение (сначала новые)",
"sortHostAsc": "Имя цели",
"sortPortAsc": "Порт",
"savedViews": "Сохранённые представления",
"saveCurrentView": "Сохранить текущее представление",
"deleteView": "Удалить представление",
"bulkEdit": "Массовое изменение",
"moreActions": "Ещё",
"export": "Экспорт",
"exportCsv": "Экспорт CSV",
"exportXlsx": "Экспорт XLSX",
"mergeDuplicates": "Объединить дубликаты",
"mergeRequiresMultiple": "Выберите не менее двух дублирующихся активов",
"batchDelete": "Массовое удаление…",
"responsibilityBusiness": "Владение и бизнес-контекст",
"responsibilityBusinessHint": "Владение и бизнес-приоритет определяют операции и ранжирование рисков"
},
"vulnerability": {
"title": "Управление уязвимостями",
"addVuln": "Добавить уязвимость",
"editVuln": "Изменить уязвимость",
"loadFailed": "Не удалось загрузить уязвимости",
"deleteConfirm": "Удалить эту уязвимость?"
},
"webshell": {
"title": "Управление WebShell",
"addConnection": "Добавить подключение",
"connections": "Подключения",
"noConnections": "Нет подключений. Нажмите «Добавить подключение».",
"selectOrAdd": "Выберите подключение в списке или добавьте новое подключение WebShell.",
"url": "URL оболочки",
"urlPlaceholder": "http(s)://target.com/shell.php",
"password": "Пароль / ключ",
"passwordPlaceholder": "например, пароль подключения IceSword/AntSword",
"method": "Метод запроса",
"methodPost": "POST",
"methodGet": "GET",
"type": "Тип оболочки",
"typePhp": "PHP",
"typeAsp": "ASP",
"typeAspx": "ASPX",
"typeJsp": "JSP",
"typeCustom": "Свой",
"cmdParam": "Имя параметра команды",
"cmdParamPlaceholder": "Пусто — cmd; например xxx для xxx=command",
"encoding": "Кодировка ответа",
"encodingAuto": "Авто",
"encodingUtf8": "UTF-8",
"encodingGbk": "GBK (упрощённый китайский, Windows)",
"encodingGb18030": "GB18030",
"encodingHint": "Если на цели с упрощённым китайским Windows вывод искажён, выберите GBK или GB18030.",
"os": "ОС цели",
"osAuto": "Авто (по типу оболочки)",
"osLinux": "Linux / Unix",
"osWindows": "Windows",
"osHint": "Задаёт команды файлового менеджера и загрузки: Linux или Windows. Для PHP/JSP на Windows выберите Windows.",
"remark": "Примечание",
"remarkPlaceholder": "Понятное имя подключения",
"deleteConfirm": "Удалить это подключение?",
"editConnection": "Изменить",
"editConnectionTitle": "Изменить подключение",
"tabTerminal": "Виртуальный терминал",
"tabFileManager": "Файловый менеджер",
"tabAiAssistant": "ИИ-помощник",
"tabDbManager": "База данных",
"tabMemo": "Заметки",
"dbType": "Тип базы данных",
"dbHost": "Хост",
"dbPort": "Порт",
"dbUsername": "Пользователь",
"dbPassword": "Пароль",
"dbName": "Имя базы",
"dbSqlitePath": "Путь к файлу SQLite",
"dbSqlPlaceholder": "Введите SQL, например SELECT version();",
"dbRunSql": "Выполнить SQL",
"dbTest": "Проверить подключение",
"dbOutput": "Вывод",
"dbNoConn": "Сначала выберите подключение WebShell",
"dbSqlRequired": "Введите SQL",
"dbRunning": "Команда базы выполняется, подождите",
"dbCliHint": "Если команда не найдена, сначала установите на цели mysql, psql, sqlite3 или sqlcmd",
"dbExecFailed": "Не удалось выполнить команду базы",
"dbSchema": "Схема базы",
"dbLoadSchema": "Загрузить схему",
"dbNoSchema": "Схемы пока нет. Нажмите «Загрузить схему»",
"dbSelectTableHint": "Нажмите таблицу, чтобы раскрыть столбцы и собрать SQL",
"dbNoColumns": "Нет данных о столбцах",
"dbResultTable": "Таблица результатов",
"dbClearSql": "Очистить SQL",
"dbTemplateSql": "Шаблон SQL",
"dbRows": "строк",
"dbColumns": "столбцов",
"dbSchemaFailed": "Не удалось загрузить схему",
"dbSchemaLoaded": "Схема загружена",
"dbAddProfile": "Добавить подключение",
"dbExecSuccess": "SQL выполнен",
"dbNoOutput": "Выполнено (нет вывода)",
"dbRenameProfile": "Переименовать",
"dbDeleteProfile": "Удалить подключение",
"dbDeleteProfileConfirm": "Удалить этот профиль подключения к базе?",
"dbProfileNamePrompt": "Введите имя профиля",
"dbProfiles": "Подключения к базам",
"aiSystemReadyMessage": "Система готова. Опишите, что нужно проверить, — система выполнит соответствующие тесты безопасности.",
"aiNewConversation": "Новый диалог",
"aiPreviousConversation": "Предыдущий диалог",
"aiDeleteConversation": "Удалить диалог",
"aiDeleteConversationConfirm": "Удалить этот диалог?",
"aiPlaceholder": "например, список файлов в текущем каталоге",
"aiSend": "Отправить",
"aiMemo": "Заметки",
"aiMemoPlaceholder": "Ключевые команды, идеи проверок и шаги воспроизведения...",
"aiMemoClear": "Очистить",
"aiMemoSaving": "Сохранение...",
"aiMemoSaved": "Сохранено локально",
"quickCommands": "Быстрые команды",
"downloadFile": "Скачать",
"terminalWelcome": "Виртуальный терминал WebShell — введите команду и нажмите Enter (Ctrl+L очищает)",
"filePath": "Текущий путь",
"listDir": "Список каталога",
"readFile": "Читать",
"editFile": "Изменить",
"deleteFile": "Удалить",
"saveFile": "Сохранить",
"cancelEdit": "Отмена",
"parentDir": "Родительский каталог",
"execError": "Ошибка выполнения",
"testConnectivity": "Проверить связь",
"testSuccess": "Связь есть, оболочка доступна",
"testFailed": "Проверка связи не удалась",
"testNoExpectedOutput": "Оболочка ответила, но ожидаемый вывод не найден. Проверьте пароль и имя параметра команды.",
"clearScreen": "Очистить",
"copyTerminalLog": "Копировать журнал",
"terminalIdle": "Ожидание",
"terminalRunning": "Выполняется",
"terminalCopyOk": "Журнал скопирован",
"terminalCopyFail": "Не удалось скопировать",
"terminalNewWindow": "Новый терминал",
"terminalWindowPrefix": "Терминал",
"running": "Выполняется…",
"waitFinish": "Дождитесь завершения текущей команды",
"newDir": "Новый каталог",
"rename": "Переименовать",
"upload": "Загрузить",
"newFile": "Новый файл",
"filterPlaceholder": "Фильтр по имени",
"batchDelete": "Удалить выбранные",
"batchDownload": "Скачать выбранные",
"refresh": "Обновить",
"selectAll": "Выбрать все",
"searchPlaceholder": "Поиск подключений...",
"noMatchConnections": "Нет подходящих подключений",
"breadcrumbHome": "Корень",
"dirTree": "Дерево каталогов",
"back": "Назад",
"moreActions": "Ещё",
"batchProbe": "Пакетная проверка",
"probeRunning": "Проверка",
"probeOnline": "В сети",
"probeOffline": "Не в сети",
"probeNoConnections": "Нет подключений для проверки",
"colModifiedAt": "Изменён",
"colPerms": "Права",
"colOwner": "Владелец",
"colGroup": "Группа",
"colType": "Тип",
"dbProfileName": "Имя подключения"
},
"mcp": {
"monitorTitle": "Монитор состояния MCP",
"execStats": "Статистика выполнения",
"latestExecutions": "Последние выполнения",
"toolSearch": "Поиск инструментов",
"toolSearchPlaceholder": "Имя инструмента...",
"statusFilter": "Фильтр статуса",
"filterAll": "Все",
"filterEnabled": "Включено",
"filterDisabled": "Отключено",
"selectedCount": "Выбрано: {{count}}",
"selectAll": "Выбрать все",
"deselectAll": "Снять выбор",
"deleteSelected": "Удалить выбранные",
"deleteExecConfirm": "Удалить эту запись выполнения?",
"batchDeleteFailed": "Пакетное удаление не удалось",
"managementTitle": "Управление MCP",
"addExternal": "Добавить внешний MCP",
"toolConfig": "Конфигурация инструментов MCP",
"saveToolConfig": "Сохранить конфигурацию",
"alwaysVisibleLabel": "Закреплено",
"alwaysVisibleHint": "Всегда показывать в результатах поиска инструментов",
"alwaysVisibleBuiltinLabel": "Встроенное по умолчанию",
"alwaysVisibleBuiltinHint": "Встроенный инструмент сервера закреплён по умолчанию, отключить его нельзя",
"externalConfig": "Конфигурация внешнего MCP",
"loadingTools": "Загрузка инструментов...",
"loadToolsTimeout": "Тайм-аут загрузки инструментов. Внешний MCP может отвечать медленно. Нажмите «Обновить», чтобы повторить, или проверьте подключение.",
"loadToolsFailed": "Не удалось загрузить инструменты",
"noTools": "Нет инструментов",
"externalBadge": "Внешний",
"externalFrom": "Внешний ({{name}})",
"externalToolFrom": "Внешний MCP — источник: {{name}}",
"clickToViewTools": "Нажмите, чтобы открыть инструменты {{name}}",
"filterBySource": "Источник: {{name}}",
"clearSourceFilter": "Сбросить фильтр источника",
"noDescription": "Нет описания",
"paginationInfo": "{{start}}–{{end}} из {{total}} инструментов",
"perPage": "На странице:",
"firstPage": "Первая",
"prevPage": "Назад",
"nextPage": "Далее",
"lastPage": "Последняя",
"pageInfo": "Стр. {{page}} из {{total}}",
"currentPageEnabled": "Включено на этой странице",
"totalEnabled": "Всего включено",
"toolsConfigSaved": "Конфигурация инструментов сохранена",
"saveToolsConfigFailed": "Не удалось сохранить конфигурацию инструментов",
"getConfigFailed": "Не удалось получить конфигурацию",
"noExternalMCP": "Внешний MCP не настроен",
"clickToAddExternal": "Нажмите «Добавить внешний MCP», чтобы настроить",
"connected": "Подключено",
"connecting": "Подключение...",
"connectionFailed": "Ошибка подключения",
"disabled": "Отключено",
"disconnected": "Нет связи",
"stopConnection": "Остановить подключение",
"startConnection": "Запустить подключение",
"stop": "Стоп",
"start": "Старт",
"editConfig": "Изменить конфигурацию",
"deleteConfig": "Удалить конфигурацию",
"transportMode": "Транспорт",
"toolCount": "Число инструментов",
"description": "Описание",
"timeout": "Тайм-аут",
"command": "Команда",
"addExternalMCP": "Добавить внешний MCP",
"editExternalMCP": "Изменить внешний MCP",
"jsonEmpty": "JSON не может быть пустым",
"jsonError": "Ошибка формата JSON",
"configMustBeObject": "Ошибка конфигурации: нужен объект JSON, где ключ — имя",
"configNeedOne": "Ошибка конфигурации: нужен хотя бы один элемент",
"configNameEmpty": "Ошибка конфигурации: имя не может быть пустым",
"configMustBeObj": "Ошибка конфигурации: «{{name}}» должен быть объектом",
"configNeedCommand": "Ошибка конфигурации: «{{name}}» требует command (stdio) или url (http/sse)",
"configStdioNeedCommand": "Ошибка конфигурации: «{{name}}» в режиме stdio требует command",
"configHttpNeedUrl": "Ошибка конфигурации: «{{name}}» в режиме http требует url",
"configSseNeedUrl": "Ошибка конфигурации: «{{name}}» в режиме sse требует url",
"configEditMustContainName": "Ошибка конфигурации: в режиме правки JSON должен содержать имя «{{name}}»",
"saveSuccess": "Сохранено",
"deleteSuccess": "Удалено",
"deleteExternalConfirm": "Удалить внешний MCP «{{name}}»?",
"operationFailed": "Операция не выполнена",
"connectionFailedCheck": "Ошибка подключения. Проверьте конфигурацию и сеть.",
"connectionTimeout": "Тайм-аут подключения. Проверьте конфигурацию и сеть.",
"totalCount": "Всего",
"enabledCount": "Включено",
"disabledCount": "Отключено",
"connectedCount": "Подключено",
"toolsCountValue": "🔧 Инструментов: {{count}}",
"connectionErrorLabel": "Ошибка подключения:",
"secondsUnit": "с",
"urlLabel": "URL",
"loadExternalMCPFailed": "Ошибка загрузки"
},
"settings": {
"title": "Системные настройки",
"nav": {
"basic": "Основные",
"hitl": "Человек в контуре",
"knowledge": "База знаний",
"c2": "C2",
"robots": "Боты",
"terminal": "Терминал",
"security": "Безопасность",
"rbac": "Права платформы",
"audit": "Журнал аудита",
"storage": "Очистка хранилища",
"update": "Обновление в один клик",
"infocollect": "Управление активами"
},
"infocollect": {
"title": "Управление активами"
},
"hitl": {
"title": "Человек в контуре",
"approvalTitle": "Одобрение",
"defaultReviewer": "Проверяющий по умолчанию",
"defaultReviewerHint": "Используется, если диалог не выбран, и для новых диалогов. Панель чата может задать другое значение.",
"auditModelTitle": "Модель агента аудита",
"auditBackend": "Движок одобрения",
"auditBackendHint": "Одно из двух: модель чата, совместимая с OpenAI, возвращает JSON по запросу, либо TypeSafe Jev принимает структурированное решение разрешить или запретить (без правки аргументов).",
"auditBackendOpenAI": "Модель, совместимая с OpenAI",
"auditBackendTypeSafe": "TypeSafe Jev",
"auditModelReuseMain": "Как у основной модели",
"auditModelBaseUrlPlaceholder": "Пусто — основной Base URL",
"auditModelApiKeyPlaceholder": "Пусто — основной API Key",
"auditModelName": "Модель одобрения",
"auditModelNamePlaceholder": "Пусто — основная модель; лучше компактная",
"auditModelHint": "Только для одобрений агента аудита. Ручное одобрение модель не вызывает.",
"auditModelTypeSafeHint": "Jev использует TypeSafe System One, а не протокол OpenAI. API-ключ обязателен и не берётся из основной модели. Пустое имя модели — jev-latest. В режиме проверки и правки Jev только разрешает или запрещает и не переписывает аргументы.",
"auditModelTypeSafeBaseUrlPlaceholder": "Пусто — https://api.typesafe.ai",
"auditModelTypeSafeApiKeyPlaceholder": "API-ключ TypeSafe (обязателен, не из основной модели)",
"auditModelTypeSafeNamePlaceholder": "Пусто — jev-latest",
"testAuditModel": "Проверить модель аудита",
"testTypeSafeFillRequired": "Сначала укажите API-ключ TypeSafe",
"retentionDays": "Срок хранения закрытых записей аудита, дни",
"retentionDaysHint": "0 — хранить бессрочно; пусто — 90 дней.",
"toolWhitelist": "Белый список инструментов без одобрения",
"toolWhitelistPlaceholder": "read_file, list_dir, glob",
"toolWhitelistHint": "По одному в строке или через запятую. Инструменты из списка не требуют одобрения.",
"auditAgentTitle": "Стратегия агента аудита",
"auditPromptApproval": "Запрос для режима одобрения",
"auditPromptHint": "Пусто — стратегия сервера по умолчанию.",
"auditPromptTypeSafeHint": "Сейчас выбран TypeSafe Jev: свой текст стратегии оценивается как структурированные вопросы. Встроенные правила для опасных действий остаются жёстким порогом. Jev не переписывает аргументы.",
"auditPromptReviewEdit": "Запрос для режима проверки и правки",
"auditPromptReviewEditHint": "В режиме проверки и правки можно одобрить с суженными editedArguments."
},
"knowledge": {
"title": "База знаний"
},
"c2": {
"title": "C2",
"sectionTitle": "Встроенный C2",
"enableLabel": "Включить встроенный C2 (слушатели, сессии, полезные нагрузки, инструменты MCP)",
"enableHint": "Если выключено, слушатели не запускаются и инструменты MCP для C2 не регистрируются, панель C2 скрыта. Удобно для локального чата и базы знаний. Нажмите «Применить», чтобы сохранить."
},
"robots": {
"title": "Настройки ботов",
"description": "Настройте ботов WeChat (iLink), WeCom, DingTalk и Lark, чтобы общаться с CyberStrikeAI с телефона, не открывая веб-интерфейс.",
"managerTitle": "Управление ботами",
"managerDesc": "Сначала выберите тип бота, затем заполните только поля этой платформы.",
"newBot": "Новый бот",
"configure": "Настроить",
"statusNotConfigured": "Не настроен",
"statusConfigured": "Настроен",
"statusEnabled": "Включён",
"emptyTitle": "Выберите бота для настройки",
"emptyDesc": "Выберите платформу выше или создайте бота кнопкой «Новый бот».",
"createTitle": "Новый бот",
"createDesc": "Выберите тип бота для его настройки. В этой версии одна встроенная конфигурация на платформу.",
"wechat": {
"title": "WeChat / iLink",
"subtitle": "Привяжите личный WeChat по QR-коду и общайтесь с CyberStrikeAI с телефона",
"statusIdle": "Не привязан",
"statusBound": "Подключён",
"statusScanning": "Привязка…",
"step1": "Создать QR",
"step2": "Сканировать в WeChat",
"step3": "Подтвердить",
"enabled": "Включить бота WeChat",
"bindButton": "Создать QR-код и привязать",
"bindHint": "Отсканируйте в WeChat для подтверждения. Настройки сохраняются автоматически.",
"qrLoading": "Создание QR-кода…",
"verifyCodeLabel": "Код на телефоне (только если запросит WeChat)",
"rebindButton": "Привязать снова",
"boundBotId": "ID привязанного бота: ",
"verifyCodeSubmit": "Отправить",
"advanced": "Дополнительно",
"baseUrl": "Базовый URL API",
"botType": "Тип бота",
"botAgent": "Агент бота",
"ilinkBotId": "ID бота iLink (после привязки)",
"boundSuccess": "Привязка выполнена. Бот WeChat включён.",
"alreadyBound": "Этот аккаунт WeChat уже привязан.",
"openLink": "QR не виден? Откройте ссылку в WeChat на телефоне"
},
"wecom": {
"title": "WeCom",
"subtitle": "HTTP-callback для ботов внутренних приложений",
"enabled": "Включить бота WeCom",
"token": "Token",
"tokenPlaceholder": "Token",
"encodingAesKey": "EncodingAESKey",
"encodingAesKeyPlaceholder": "EncodingAESKey (пусто — без шифрования)",
"corpId": "CorpID",
"corpIdPlaceholder": "Corp ID",
"secret": "Secret",
"secretPlaceholder": "App Secret",
"agentId": "AgentID",
"agentIdPlaceholder": "App AgentId"
},
"dingtalk": {
"title": "DingTalk",
"subtitle": "Бот внутреннего приложения, подключение Stream",
"enabled": "Включить бота DingTalk",
"clientIdLabel": "Client ID (AppKey)",
"clientIdPlaceholder": "App Key DingTalk",
"clientSecretLabel": "Client Secret",
"clientSecretPlaceholder": "App Secret DingTalk",
"streamHint": "Включите возможности бота и настройте потоковый доступ на открытой платформе."
},
"lark": {
"title": "Lark",
"subtitle": "Корпоративный бот для личных чатов и упоминаний в группах",
"enabled": "Включить бота Lark",
"appIdLabel": "App ID",
"appIdPlaceholder": "App ID Lark/Feishu",
"appSecretLabel": "App Secret",
"appSecretPlaceholder": "App Secret Lark/Feishu",
"verifyTokenLabel": "Verify Token (необязательно)",
"verifyTokenPlaceholder": "Verification Token подписки на события"
},
"telegram": {
"title": "Telegram",
"subtitle": "Long polling Bot API; личный чат и @ в группе",
"enabled": "Включить бота Telegram",
"botToken": "Токен бота",
"botTokenHint": "Приём через long poll getUpdates; публичный URL callback не нужен",
"botUsername": "Имя пользователя бота (необязательно)",
"allowGroup": "Групповой чат (отвечать только на @)"
},
"slack": {
"title": "Slack",
"subtitle": "Socket Mode; публичный URL callback не нужен",
"enabled": "Включить бота Slack",
"botToken": "Токен бота (xoxb-)",
"appToken": "Токен приложения (xapp-)",
"appTokenHint": "Для Socket Mode нужна область connections:write"
},
"discord": {
"title": "Discord",
"subtitle": "Gateway WebSocket; личные сообщения и @ на сервере",
"enabled": "Включить бота Discord",
"botToken": "Токен бота",
"botTokenHint": "Создайте бота в Developer Portal и включите Message Content Intent",
"allowGuild": "Каналы сервера (отвечать только на @)"
},
"qq": {
"title": "Бот QQ",
"subtitle": "WebSocket открытой платформы QQ; C2C и @ в группе",
"enabled": "Включить бота QQ",
"appId": "App ID",
"clientSecret": "Client Secret",
"secretHint": "С открытой платформы ботов QQ. Перед публикацией используйте песочницу",
"sandbox": "Песочница"
}
},
"apply": {
"button": "Применить конфигурацию",
"loadFailed": "Не удалось загрузить конфигурацию",
"fillRequired": "Заполните все обязательные поля (отмечены *)",
"applyFailed": "Не удалось применить конфигурацию",
"applySuccess": "Конфигурация применена"
},
"security": {
"changePassword": "Сменить пароль",
"fillPasswordHint": "Укажите текущий и новый пароль. Новый пароль — не короче 8 символов и должен совпасть при повторе.",
"changePasswordFailed": "Не удалось сменить пароль",
"passwordUpdated": "Пароль обновлён. Войдите снова с новым паролем."
}
},
"auth": {
"sessionExpired": "Сессия истекла, войдите снова",
"unauthorized": "Нет авторизации",
"forbidden": "Недостаточно прав",
"requestFailed": "Запрос не выполнен",
"enterPassword": "Введите пароль",
"usernameRequired": "Введите имя пользователя длиной не более 64 символов",
"loginFailedCheck": "Вход не выполнен, проверьте имя пользователя или пароль",
"loginFailedRetry": "Вход не выполнен, повторите позже",
"loggedOut": "Вы вышли"
},
"knowledge": {
"title": "Управление базой знаний",
"retrievalLogs": "История извлечения",
"totalItems": "Всего элементов",
"categories": "Категории",
"addKnowledge": "Добавить знание",
"buildIndex": "Построить индекс",
"buildIndexConfirm": "Построить векторы для элементов базы знаний, которые ещё не проиндексированы?",
"rebuildIndexFull": "Полная пересборка",
"rebuildIndexFullConfirm": "Переиндексировать все элементы базы знаний? Это может занять время.",
"deleteItemConfirm": "Удалить этот элемент базы знаний?",
"notEnabledTitle": "База знаний не включена",
"notEnabledHint": "Включите извлечение из базы знаний в системных настройках.",
"goToSettings": "К настройкам"
},
"roles": {
"title": "Управление ролями",
"createRole": "Создать роль",
"searchPlaceholder": "Поиск ролей...",
"deleteConfirm": "Удалить эту роль?",
"loadFailed": "Не удалось загрузить роли",
"noDescription": "Нет описания",
"defaultRoleDescription": "Роль по умолчанию, без дополнительного пользовательского промпта, использует MCP по умолчанию",
"noMatchingRoles": "Нет подходящих ролей",
"noRoles": "Нет ролей",
"enabled": "Включено",
"disabled": "Отключено",
"noDescriptionShort": "Нет описания"
},
"skills": {
"title": "Управление навыками",
"monitorTitle": "Монитор навыков",
"createSkill": "Создать навык",
"callStats": "Статистика вызовов",
"addSkill": "Добавить навык",
"editSkill": "Изменить навык",
"loadListFailed": "Не удалось загрузить список навыков",
"noSkills": "Нет навыков. Нажмите «Создать навык», чтобы добавить первый.",
"noMatch": "Нет подходящих навыков",
"searchFailed": "Поиск не удался",
"refreshed": "Обновлено",
"loadDetailFailed": "Не удалось загрузить сведения о навыке",
"viewFailed": "Не удалось открыть навык",
"saving": "Сохранение...",
"saveFailed": "Не удалось сохранить навык",
"deleteFailed": "Не удалось удалить навык",
"loadStatsFailed": "Не удалось загрузить данные монитора навыков",
"clearStatsConfirm": "Очистить всю статистику навыков? Это нельзя отменить.",
"statsCleared": "Статистика навыков очищена",
"clearStatsFailed": "Не удалось очистить статистику",
"noDescription": "Нет описания",
"viewSkillTitle": "Навык: {{name}}",
"descriptionLabel": "Описание:",
"pathLabel": "Путь:",
"modTimeLabel": "Изменён:",
"contentLabel": "Содержимое:",
"cardVersion": "v{{version}}",
"cardScripts": "Скриптов: {{count}}",
"cardFiles": "Файлов: {{count}}",
"versionLabel": "Версия:",
"scriptsHeading": "Скрипты:",
"summaryHint": "(сводка — при необходимости загрузите полный текст)",
"loadFullBody": "Загрузить полный текст",
"loadFullFailed": "Не удалось загрузить полный текст навыка",
"nameRequired": "Укажите имя навыка",
"contentRequired": "Укажите содержимое навыка",
"nameInvalid": "Только строчные буквы, цифры и дефисы (правила имён Agent Skills)",
"descriptionRequired": "Нужно описание (записывается во front matter SKILL.md)",
"saveSuccess": "Навык обновлён",
"createdSuccess": "Навык создан",
"deleteConfirm": "Удалить навык «{{name}}»? Это нельзя отменить.",
"deleteConfirmWithRoles": "Удалить навык «{{name}}»?\n\n⚠️ Этот навык сейчас привязан к ролям ({{count}}):\n{{roles}}\n\nПосле удаления система автоматически уберёт этот навык из этих ролей.\n\nЭто нельзя отменить. Продолжить?",
"deleteSuccess": "Навык удалён",
"deleteSuccessWithRoles": "Навык удалён и автоматически убран из ролей ({{count}}): {{roles}}",
"loadFailedShort": "Ошибка загрузки",
"totalSkillsCount": "Всего навыков",
"totalCallsCount": "Всего вызовов",
"successfulCalls": "Успешные вызовы",
"failedCalls": "Неуспешные вызовы",
"successRate": "Доля успеха",
"skillName": "Имя навыка",
"totalCalls": "Всего вызовов",
"success": "Успех",
"failure": "Ошибка",
"lastCallTime": "Время последнего вызова",
"noCallRecords": "Записей вызовов навыков пока нет",
"loadStatsErrorShort": "Не удалось загрузить статистику",
"loadCallStatsError": "Не удалось загрузить статистику вызовов"
},
"apiDocs": {
"pageTitle": "Документация API - CyberStrikeAI",
"title": "Документация API",
"subtitle": "Документация API платформы CyberStrikeAI с проверкой запросов",
"authTitle": "Аутентификация API",
"authAllNeedToken": "Для всех конечных точек API нужна аутентификация по токену.",
"authGetToken": "1. Получение токена:",
"authGetTokenDesc": "После входа в интерфейсе токен сохраняется автоматически. Его также можно получить так:",
"authUseToken": "2. Использование токена:",
"authUseTokenDesc": "Добавьте заголовок Authorization:",
"authTip": "💡 Страница сама подставит токен текущего входа; вводить его не нужно.",
"tokenDetected": "✓ Токен найден — конечные точки API можно проверить сразу",
"tokenNotDetected": "⚠ Токен не найден — сначала войдите в интерфейсе и обновите страницу. При проверке добавьте в заголовок запроса Authorization: Bearer token",
"sidebarGroupTitle": "Группы API",
"allApis": "Все API",
"loading": "Загрузка...",
"loadingDesc": "Загрузка документации API",
"errorLoginRequired": "Чтобы открыть документацию API, сначала войдите в интерфейсе и обновите страницу.",
"errorLoadSpec": "Не удалось загрузить спецификацию API: ",
"errorLoadFailed": "Не удалось загрузить документацию API: ",
"errorSpecInvalid": "Недопустимый формат спецификации API",
"loadFailed": "Ошибка загрузки",
"backToLogin": "Ко входу",
"noApis": "Нет API",
"noEndpointsInGroup": "В этой группе нет конечных точек API",
"sectionDescription": "Описание",
"viewDetailDesc": "Показать подробности",
"hideDetailDesc": "Скрыть подробности",
"noDescription": "Нет описания",
"sectionParams": "Параметры",
"paramName": "Параметр",
"type": "Тип",
"description": "Описание",
"required": "Обязательный",
"optional": "Необязательный",
"sectionRequestBody": "Тело запроса",
"example": "Пример",
"exampleJson": "Пример JSON:",
"sectionResponse": "Ответ",
"testSection": "Проверка",
"requestBodyJson": "Тело запроса (JSON)",
"queryParams": "Параметры запроса:",
"sendRequest": "Отправить запрос",
"copyCurl": "Копировать cURL",
"clearResult": "Очистить результат",
"copyCurlTitle": "Копировать команду cURL",
"clearResultTitle": "Очистить результат проверки",
"sendingRequest": "Отправка запроса...",
"errorPathParamRequired": "Параметр пути {{name}} обязателен",
"errorQueryParamRequired": "Параметр запроса {{name}} обязателен",
"errorTokenRequired": "Токен не найден. Войдите в интерфейсе и обновите страницу или добавьте в заголовок запроса Authorization: Bearer your_token",
"errorJsonInvalid": "Недопустимый JSON в теле запроса: ",
"requestFailed": "Запрос не выполнен: ",
"copied": "Скопировано",
"curlCopied": "Команда curl скопирована в буфер обмена.",
"copyFailedManual": "Не удалось скопировать, скопируйте вручную:\n\n",
"curlGenFailed": "Не удалось сформировать команду cURL: ",
"requestBodyPlaceholder": "Введите тело запроса в формате JSON",
"tags": {
"auth": "Аутентификация",
"conversationManagement": "Управление диалогами",
"conversationInteraction": "Взаимодействие с диалогом",
"batchTasks": "Пакетные задачи",
"vulnerabilityManagement": "Управление уязвимостями",
"roleManagement": "Управление ролями",
"skillsManagement": "Управление навыками",
"monitoring": "Мониторинг",
"configManagement": "Управление конфигурацией",
"externalMCPManagement": "Управление внешними MCP",
"attackChain": "Цепочка атаки",
"knowledgeBase": "База знаний",
"mcp": "MCP",
"fofaRecon": "Разведка FOFA",
"terminal": "Терминал",
"webshellManagement": "Управление WebShell",
"chatUploads": "Загрузки чата",
"robotIntegration": "Интеграция роботов",
"markdownAgents": "Агенты Markdown",
"projectManagement": "Управление проектами",
"assetManagement": "Управление активами"
},
"summary": {
"login": "Вход пользователя",
"logout": "Выход пользователя",
"changePassword": "Сменить пароль",
"validateToken": "Проверить токен",
"createConversation": "Создать диалог",
"listConversations": "Список диалогов",
"getConversationDetail": "Получить сведения о диалоге",
"updateConversation": "Обновить диалог",
"deleteConversation": "Удалить диалог",
"getConversationResult": "Получить результат диалога",
"sendMessageNonStream": "Отправить сообщение и получить ответ ИИ (без потока)",
"sendMessageStream": "Отправить сообщение и получить ответ ИИ (поток)",
"cancelTask": "Отменить задачу",
"listRunningTasks": "Список выполняемых задач",
"listCompletedTasks": "Список завершённых задач",
"createBatchQueue": "Создать очередь пакетных задач",
"listBatchQueues": "Список очередей пакетных задач",
"getBatchQueue": "Получить очередь пакетных задач",
"deleteBatchQueue": "Удалить очередь пакетных задач",
"startBatchQueue": "Запустить очередь пакетных задач",
"pauseBatchQueue": "Приостановить очередь пакетных задач",
"addTaskToQueue": "Добавить задачу в очередь",
"sqlInjectionScan": "Сканирование на SQL-инъекции",
"portScan": "Сканирование портов",
"updateBatchTask": "Обновить пакетную задачу",
"deleteBatchTask": "Удалить пакетную задачу",
"listVulnerabilities": "Список уязвимостей",
"createVulnerability": "Создать уязвимость",
"getVulnerabilityStats": "Получить статистику уязвимостей",
"getVulnerability": "Получить уязвимость",
"updateVulnerability": "Обновить уязвимость",
"deleteVulnerability": "Удалить уязвимость",
"listRoles": "Список ролей",
"createRole": "Создать роль",
"getRole": "Получить роль",
"updateRole": "Обновить роль",
"deleteRole": "Удалить роль",
"getAvailableSkills": "Получить список доступных навыков",
"listSkills": "Список навыков",
"createSkill": "Создать навык",
"getSkillStats": "Получить статистику навыка",
"clearSkillStats": "Очистить статистику навыка",
"getSkill": "Получить навык",
"updateSkill": "Обновить навык",
"deleteSkill": "Удалить навык",
"getBoundRoles": "Получить привязанные роли",
"clearSkillStatsAlt": "Очистить статистику навыка",
"getMonitorInfo": "Получить данные мониторинга",
"getExecutionRecords": "Получить записи выполнения",
"deleteExecutionRecord": "Удалить запись выполнения",
"batchDeleteExecutionRecords": "Удалить записи выполнения пакетом",
"getStats": "Получить статистику",
"getConfig": "Получить конфигурацию",
"updateConfig": "Обновить конфигурацию",
"getToolConfig": "Получить конфигурацию инструмента",
"applyConfig": "Применить конфигурацию",
"listExternalMCP": "Список внешних MCP",
"getExternalMCPStats": "Получить статистику внешних MCP",
"getExternalMCP": "Получить внешний MCP",
"addOrUpdateExternalMCP": "Добавить или обновить внешний MCP",
"stdioModeConfig": "Конфигурация режима stdio",
"sseModeConfig": "Конфигурация режима SSE",
"deleteExternalMCP": "Удалить внешний MCP",
"startExternalMCP": "Запустить внешний MCP",
"stopExternalMCP": "Остановить внешний MCP",
"getAttackChain": "Получить цепочку атаки",
"regenerateAttackChain": "Пересоздать цепочку атаки",
"pinConversation": "Закрепить диалог",
"getCategories": "Получить категории",
"listKnowledgeItems": "Список записей базы знаний",
"createKnowledgeItem": "Создать запись базы знаний",
"getKnowledgeItem": "Получить запись базы знаний",
"updateKnowledgeItem": "Обновить запись базы знаний",
"deleteKnowledgeItem": "Удалить запись базы знаний",
"getIndexStatus": "Получить статус индекса",
"startKnowledgeIndex": "Построить индекс",
"scanKnowledgeBase": "Сканировать базу знаний",
"searchKnowledgeBase": "Искать в базе знаний",
"basicSearch": "Базовый поиск",
"searchByRiskType": "Поиск по типу риска",
"getRetrievalLogs": "Получить журналы извлечения",
"deleteRetrievalLog": "Удалить запись извлечения",
"mcpEndpoint": "Конечная точка MCP",
"listAllTools": "Список всех инструментов",
"invokeTool": "Вызвать инструмент",
"initConnection": "Инициализировать подключение",
"successResponse": "Успешный ответ",
"errorResponse": "Ответ с ошибкой",
"deleteConversationTurn": "Удалить реплику диалога",
"getMessageProcessDetails": "Получить сведения об обработке сообщения",
"rerunBatchQueue": "Повторить очередь пакетных задач",
"updateBatchQueueMetadata": "Обновить метаданные очереди",
"updateBatchQueueSchedule": "Обновить расписание очереди",
"setBatchQueueScheduleEnabled": "Переключить автозапуск по cron",
"fofaSearch": "Поиск FOFA",
"fofaParse": "Преобразовать естественный язык в синтаксис FOFA",
"testOpenAI": "Проверить подключение к API OpenAI",
"terminalRun": "Выполнить команду терминала",
"terminalRunStream": "Выполнить команду терминала (поток)",
"terminalWS": "Терминал WebSocket",
"listWebshellConnections": "Список подключений WebShell",
"createWebshellConnection": "Создать подключение WebShell",
"updateWebshellConnection": "Обновить подключение WebShell",
"deleteWebshellConnection": "Удалить подключение WebShell",
"getWebshellConnectionState": "Получить состояние подключения",
"saveWebshellConnectionState": "Сохранить состояние подключения",
"getWebshellAIHistory": "Получить историю чата ИИ",
"listWebshellAIConversations": "Список диалогов ИИ",
"webshellExec": "Выполнить команду WebShell",
"webshellFileOp": "Файловая операция WebShell",
"listChatUploads": "Список загрузок",
"exportChatUploads": "Экспортировать загрузки",
"uploadChatFile": "Загрузить файл",
"deleteChatUpload": "Удалить загрузку",
"downloadChatUpload": "Скачать загрузку",
"getChatUploadContent": "Получить текстовое содержимое файла",
"putChatUploadContent": "Записать текстовое содержимое файла",
"mkdirChatUpload": "Создать каталог загрузки",
"renameChatUpload": "Переименовать загрузку",
"wecomCallbackVerify": "Проверка обратного вызова WeCom",
"wecomCallbackMessage": "Обратный вызов сообщения WeCom",
"dingtalkCallback": "Обратный вызов сообщения DingTalk",
"larkCallback": "Обратный вызов сообщения Lark",
"testRobot": "Проверить обработку сообщения робота",
"listMarkdownAgents": "Список агентов Markdown",
"createMarkdownAgent": "Создать агента Markdown",
"getMarkdownAgent": "Получить сведения об агенте Markdown",
"updateMarkdownAgent": "Обновить агента Markdown",
"deleteMarkdownAgent": "Удалить агента Markdown",
"listSkillPackageFiles": "Список файлов пакета навыка",
"getSkillPackageFile": "Получить содержимое файла пакета навыка",
"putSkillPackageFile": "Записать файл пакета навыка",
"batchGetToolNames": "Получить имена инструментов пакетом",
"getKnowledgeStats": "Получить статистику базы знаний",
"listProjects": "Список проектов",
"createProject": "Создать проект",
"getProject": "Получить проект",
"updateProject": "Обновить проект",
"deleteProject": "Удалить проект",
"listProjectFacts": "Список фактов или факт по ключу",
"upsertProjectFact": "Создать или обновить факт",
"getProjectFactGraph": "Получить граф пути атаки по фактам проекта",
"listProjectFactEdges": "Список всех связей фактов проекта",
"createProjectFactEdge": "Добавить связь факта",
"deleteProjectFactEdge": "Удалить связь факта",
"promoteAttackChainToProject": "Перенести цепочку атаки диалога в граф фактов проекта",
"importAssets": "Массово импортировать активы"
},
"response": {
"getSuccess": "Успешно",
"unauthorized": "Не авторизован",
"unauthorizedToken": "Не авторизован, нужен действительный токен",
"createSuccess": "Успешно создано",
"badRequest": "Некорректный запрос",
"conversationNotFound": "Диалог не найден",
"conversationOrResultNotFound": "Диалог или результат не найден",
"badRequestTaskEmpty": "Некорректный запрос (например, задача пуста)",
"badRequestConfig": "Некорректный запрос (например, недопустимая конфигурация или нет обязательных полей)",
"badRequestQueryEmpty": "Некорректный запрос (например, запрос пуст)",
"methodNotAllowed": "Метод не поддерживается (только POST)",
"loginSuccess": "Вход выполнен",
"invalidPassword": "Неверный пароль",
"logoutSuccess": "Выход выполнен",
"passwordChanged": "Пароль изменён",
"tokenValid": "Токен действителен",
"tokenInvalid": "Токен недействителен или истёк",
"conversationCreated": "Диалог создан",
"internalError": "Внутренняя ошибка сервера",
"updateSuccess": "Успешно обновлено",
"deleteSuccess": "Успешно удалено",
"queueNotFound": "Очередь не найдена",
"startSuccess": "Успешно запущено",
"pauseSuccess": "Успешно приостановлено",
"addSuccess": "Успешно добавлено",
"taskNotFound": "Задача не найдена",
"cancelSubmitted": "Запрос на отмену отправлен",
"noRunningTask": "Нет выполняемой задачи",
"messageSent": "Сообщение отправлено, ответ ИИ получен",
"streamResponse": "Потоковый ответ (Server-Sent Events)",
"badRequestOrDeleteFailed": "Некорректный запрос или удаление не выполнено",
"paramError": "Недопустимые параметры",
"onlyCompletedOrCancelledCanRerun": "Повторить можно только завершённые или отменённые очереди",
"badRequestOrQueueRunning": "Некорректный запрос или очередь выполняется",
"setSuccess": "Успешно задано",
"searchSuccess": "Поиск выполнен",
"parseSuccess": "Разбор выполнен",
"testResult": "Результат проверки",
"executionDone": "Выполнение завершено",
"sseEventStream": "Поток событий SSE",
"wsEstablished": "Соединение WebSocket установлено",
"fileDownload": "Скачивание файла",
"fileNotFound": "Файл не найден",
"writeSuccess": "Успешно записано",
"renameSuccess": "Успешно переименовано",
"wecomVerifySuccess": "Проверка выполнена, возвращён расшифрованный echostr",
"processSuccess": "Успешно обработано",
"agentNotFound": "Агент не найден",
"saveSuccess": "Успешно сохранено",
"operationResult": "Результат операции",
"executionResult": "Результат выполнения",
"connectionNotFound": "Подключение не найдено",
"projectList": "Список проектов",
"projectDetail": "Сведения о проекте",
"projectFactList": "Список фактов или один факт (может включать link_counts / outgoing_links)",
"success": "Успешно",
"factGraphNodesEdges": "узлы + связи",
"edgeList": "Список связей",
"edgeCreated": "Связь создана",
"promoteAttackChainResult": "Результат переноса (факты/связи/граф)",
"assetImportCompleted": "Импорт завершён",
"assetImportValidationFailed": "Не пройдена проверка числа активов или полей",
"assetImportForbidden": "Нет права asset:write или доступа к указанному проекту",
"assetImportTransactionFailed": "Транзакция импорта не выполнена"
}
},
"mcpMonitor": {
"toolRowNoCompletedAriaLabel": "{{name}}, вызовов: {{total}}, завершённых результатов нет; открыть записи выполнения",
"rateExcludesBlocked": "Доля успеха учитывает успешные и неуспешные вызовы, без заблокированных и остановленных",
"timelineBlockedLegend": "Заблокировано",
"blockedCount": "Заблокировано {{n}}",
"statusBlocked": "Заблокировано",
"deselectAll": "Снять выбор",
"statusPending": "Ожидает",
"statusQueued": "В очереди",
"statusSuccess": "Успешно",
"statusCompleted": "Завершено",
"statusRunning": "Выполняется",
"statusFailed": "Ошибка",
"statusHardTimeout": "Тайм-аут",
"statusCancelled": "Отменено",
"statusOrphaned": "Осиротевший",
"terminateExecution": "Остановить",
"loading": "Загрузка...",
"noStatsData": "Нет статистики",
"noExecutions": "Нет записей выполнения",
"emptyHint": "Записи появятся здесь после вызова инструментов MCP в чате или задачах",
"noRecordsWithFilter": "Нет записей по текущему фильтру",
"paginationInfo": "Показано {{start}}–{{end}} из {{total}}",
"perPageLabel": "На странице",
"firstPage": "Первая",
"prevPage": "Назад",
"nextPage": "Далее",
"lastPage": "Последняя",
"pageInfo": "Стр. {{page}} из {{total}}",
"loadStatsError": "Не удалось загрузить статистику",
"loadExecutionsError": "Не удалось загрузить записи выполнения",
"totalCalls": "Всего вызовов",
"successFailed": "Успешно {{success}} / ошибок {{failed}}",
"successRate": "Доля успеха",
"statsFromAllTools": "По всем вызовам инструментов",
"lastCall": "Последний вызов",
"lastRefreshTime": "Обновлено",
"noCallsYet": "Вызовов ещё нет",
"noCompletedYet": "Завершённых результатов ещё нет",
"unknownTool": "Неизвестный инструмент",
"successFailedRate": "Успешно {{success}} / ошибок {{failed}} · доля успеха {{rate}}%",
"topToolsTitle": "Топ-{{n}} инструментов по вызовам",
"toolRankingTitle": "Рейтинг вызовов инструментов",
"toolStatsTitle": "Статистика инструментов",
"toolStatsHint": "Нажмите сегмент или строку, чтобы отфильтровать записи ниже; наведите курсор для подсветки",
"scopeCumulative": "За всё время",
"scopeTimeline": "Период тренда",
"filterActive": "Фильтр: {{tool}}",
"kpiScopeNote": "Итоги за всё время",
"columnCalls": "Вызовы",
"columnShare": "Доля",
"columnSuccessRate": "Доля успеха",
"rankingSummary": "Топ-{{n}} {{pct}}% · всего вызовов {{total}}",
"barVolumeLegend": "Длина столбца: относительный объём вызовов; зелёный/красный: доля успеха и ошибок",
"clickToFilterTool": "Нажмите строку, чтобы отфильтровать записи ниже",
"toolRowAriaLabel": "{{name}}, вызовов: {{total}}, доля успеха {{rate}}%. Нажмите, чтобы отфильтровать записи.",
"successRateAria": "Доля успеха {{rate}}%",
"filterByToolTitle": "Фильтр: {{tool}}",
"clearToolFilter": "Сбросить фильтр инструмента",
"successCount": "Успешно {{n}}",
"failedCount": "Ошибок {{n}}",
"neutralCount": "Остановлено {{n}}",
"rateHealthy": "Работает стабильно",
"rateWarning": "Есть ошибки",
"rateCritical": "Высокая доля ошибок",
"statsSubtitle": "Обновлено {{time}} · инструментов: {{count}}",
"retentionHint": "Записи выполнения хранятся {{days}} дн., затем удаляются автоматически.",
"timelineTitle": "Тренд вызовов",
"timelineHint": "Все инструменты вместе (без разбивки)",
"timelineRange24h": "24 ч",
"timelineRange7d": "7 дн.",
"timelineRange30d": "30 дн.",
"timelineSummary": "Вызовов за период: {{total}} · пик {{peak}}",
"timelineSparseHint": "Большинство интервалов пусты; пик {{peak}} вызовов в {{peakTime}}",
"timelineNoData": "За этот период вызовов нет",
"timelineLoading": "Загрузка тренда…",
"timelineEmptyHint": "Смените период или вызовите инструменты MCP в чате или задачах",
"timelineLoadError": "Не удалось загрузить тренд вызовов",
"timelineTotalLegend": "Всего вызовов",
"timelineFailedLegend": "Ошибки",
"timelineTooltip": "{{time}}: вызовов {{total}} (ошибок {{failed}}, заблокировано {{blocked}})",
"distTitle": "Распределение вызовов",
"distLegend": "Площадь сектора — доля всех вызовов",
"distClickHint": "Нажмите сегмент, чтобы отфильтровать записи",
"distHeaderHint": "Всего вызовов: {{n}}",
"distSegmentAria": "{{name}}, {{pct}}% вызовов, {{calls}} раз",
"distOthersNoFilter": "Остальные инструменты нельзя отфильтровать по отдельности",
"distTotalCalls": "Всего вызовов: {{n}}",
"distTop6Share": "Доля топ-{{n}} от всех вызовов",
"distOthers": "Другие инструменты",
"distCallsUnit": "Вызовов: {{n}}",
"riskTitle": "Оповещения об ошибках",
"riskNone": "Недавних ошибок нет",
"riskItem": "{{name}}: ошибок {{failed}} / {{total}}",
"selectedToolTitle": "Активный фильтр",
"selectedToolEmpty": "Выберите инструмент слева, чтобы отфильтровать записи ниже",
"selectedToolStats": "Вызовов {{total}} · успешно {{success}} · ошибок {{failed}} · доля успеха {{rate}}%",
"columnTool": "Инструмент",
"columnStatus": "Статус",
"columnStartTime": "Начало",
"columnDuration": "Длительность",
"columnActions": "Действия",
"viewDetail": "Подробнее",
"delete": "Удалить",
"deleteExecTitle": "Удалить эту запись выполнения",
"deleteExecConfirmSingle": "Удалить эту запись выполнения? Это нельзя отменить.",
"deleteExecFailed": "Не удалось удалить запись выполнения",
"execDeleted": "Запись выполнения удалена",
"selectExecFirst": "Сначала выберите записи выполнения для удаления",
"batchDeleteConfirm": "Удалить выбранные записи выполнения ({{count}})? Это нельзя отменить.",
"batchDeleteSuccess": "Удалено записей выполнения: {{count}}",
"unknown": "Неизвестно",
"durationSeconds": "{{n}} с",
"durationMinutes": "{{minutes}} мин {{seconds}} с",
"durationMinutesOnly": "{{minutes}} мин",
"durationHours": "{{hours}} ч {{minutes}} мин",
"durationHoursOnly": "{{hours}} ч"
},
"knowledgePage": {
"totalContent": "Всего содержимого",
"categoryFilter": "Фильтр категории",
"all": "Все",
"searchPlaceholder": "Поиск в базе знаний...",
"loading": "Загрузка..."
},
"retrievalLogs": {
"totalRetrievals": "Всего извлечений",
"successRetrievals": "Успешно",
"successRate": "Доля успеха",
"retrievedItems": "Получено элементов",
"conversationId": "ID диалога",
"messageId": "ID сообщения",
"filter": "Фильтр",
"optionalConversation": "Необязательно: фильтр по диалогу",
"optionalMessage": "Необязательно: фильтр по сообщению",
"loading": "Загрузка...",
"noRecords": "Записей извлечения пока нет",
"noQuery": "Нет текста запроса",
"itemsUnit": "эл.",
"hasResults": "Есть результаты",
"noResults": "Нет результатов",
"clickToCopy": "Нажмите, чтобы скопировать",
"retrievalResult": "Результат извлечения",
"foundCount": "Найдено связанных элементов базы знаний: {{count}}",
"foundUnknown": "Найдены связанные знания (число неизвестно)",
"noMatch": "Нет подходящих элементов базы знаний",
"retrievedItemsLabel": "Полученные элементы базы знаний:",
"viewDetails": "Подробнее",
"loadError": "Не удалось загрузить журналы извлечения",
"detailError": "Не удалось получить сведения об извлечении",
"deleteError": "Не удалось удалить запись журнала извлечения",
"detailsTitle": "Сведения об извлечении",
"queryInfo": "Сведения о запросе",
"queryContent": "Текст запроса:",
"retrievalInfo": "Сведения об извлечении",
"riskType": "Тип риска",
"retrievalTime": "Время извлечения",
"noItemDetails": "Сведения об элементе базы знаний не найдены",
"noContentPreview": "Нет предпросмотра содержимого",
"untitled": "Без названия",
"uncategorized": "Без категории",
"relatedInfo": "Связанные сведения",
"itemsCount": "Элементов базы знаний: {{count}}",
"deleteConfirm": "Удалить эту запись извлечения?"
},
"infoCollectPage": {
"title": "Разведка",
"reset": "Сбросить",
"confirm": "ОК",
"fofaQuerySyntax": "Синтаксис запроса FOFA",
"naturalLanguage": "Естественный язык (ИИ разбирает в FOFA)",
"returnCount": "Число результатов",
"pageNum": "Страница",
"returnFields": "Поля ответа (через запятую)",
"queryResults": "Результаты запроса",
"selectedRows": "Выбрано: {{count}}",
"selectedRowsZero": "Выбрано: 0",
"columns": "Столбцы",
"exportCsv": "Экспорт CSV",
"exportJson": "Экспорт JSON",
"exportXlsx": "Экспорт XLSX",
"batchScan": "Пакетное сканирование",
"showColumns": "Показать столбцы",
"columnsPanelAll": "Выбрать все",
"columnsPanelNone": "Снять выбор",
"columnsPanelClose": "Закрыть",
"formHint": "Синтаксис запросов — в документации FOFA; поддерживаются && / || / ().",
"parseBtn": "Разбор ИИ",
"parseHint": "Результат откроется во всплывающем окне для правки перед запросом.",
"minFields": "Минимум полей",
"webCommon": "Веб, обычный",
"intelEnhanced": "Расширенная разведка",
"presetApache": "Apache + Китай",
"presetLogin": "Страница входа + Китай",
"presetDomain": "По домену",
"presetIp": "По IP",
"queryPresetsAria": "Пресеты запросов FOFA",
"fieldsPresetsAria": "Пресеты полей FOFA",
"resultsToolbarAria": "Панель результатов",
"fillExample": "Подставить пример",
"parseBtnTitle": "Разобрать естественный язык в запрос FOFA",
"minFieldsTitle": "Для быстрого экспорта",
"webCommonTitle": "Для просмотра и фильтрации",
"intelEnhancedTitle": "Больше отпечатков и разведданных",
"fullLabel": "full",
"nlPlaceholder": "например, сайты Apache в штате Миссури, США, в заголовке есть Home",
"showHideColumns": "Показать или скрыть столбцы",
"exportCsvTitle": "Экспортировать результаты в CSV (UTF-8)",
"exportJsonTitle": "Экспортировать результаты в JSON",
"exportXlsxTitle": "Экспортировать результаты в Excel",
"batchScanTitle": "Создать очередь пакетных задач из выбранных строк"
},
"chatFilesPage": {
"title": "Управление файлами",
"intro": "Здесь появляются файлы, загруженные в чате. Перетащите файлы в список ниже или нажмите «Загрузить», чтобы выбрать файлы (можно несколько). Нажмите «Копировать путь», чтобы скопировать абсолютный путь на сервере и вставить его в диалог — модель сможет сослаться на файл.",
"export": "Экспортировать текущие результаты",
"exportStarted": "Начат экспорт текущих файлов",
"exportEmpty": "Нет файлов для экспорта",
"upload": "Загрузить",
"conversationFilter": "ID диалога",
"conversationPlaceholder": "Пусто — все",
"projectFilter": "ID проекта",
"projectPlaceholder": "Пусто — все",
"searchName": "Имя файла",
"searchNamePlaceholder": "Фильтр по имени файла",
"sourceFilter": "Источник",
"sourceAll": "Все",
"sourceUpload": "Загрузки из чата",
"sourceReduction": "Результаты инструментов",
"sourceWorkspace": "Файлы рабочей области",
"sourceConversationArtifact": "Артефакты диалога",
"groupBy": "Группировать",
"groupNone": "Нет (плоский список)",
"groupByDate": "По дате",
"groupByConversation": "По диалогу",
"groupByProject": "По проекту",
"groupByFolder": "По папке (навигация по пути)",
"projectUnbound": "Проект не привязан",
"paginationInfo": "Показано {{start}}–{{end}} из {{total}} файлов",
"paginationPage": "Стр. {{page}} из {{totalPages}}",
"pageSize": "На странице",
"prevPage": "Назад",
"nextPage": "Далее",
"browseRoot": "Файлы",
"treeUploadsRoot": "Загрузки из чата",
"treeReductionRoot": "Результаты инструментов",
"treeWorkspaceRoot": "Файлы рабочей области",
"treeArtifactsRoot": "Артефакты диалога",
"browseUp": "Вверх",
"enterFolderTitle": "Открыть папку",
"copyFolderPathTitle": "Копировать путь папки",
"folderPathCopied": "Путь папки скопирован — вставьте в чат при необходимости",
"folderEmpty": "Эта папка пуста",
"confirmDeleteFolder": "Удалить эту папку и всё её содержимое? Это нельзя отменить.",
"folderRemovedStale": "Этой папки больше нет на сервере; список обновлён.",
"deleteFolderTitle": "Удалить папку",
"uploadToFolderTitle": "Загрузить файл в эту папку",
"newFolderButton": "Новая папка",
"newFolderTitle": "Новая папка",
"newFolderLocation": "Расположение",
"newFolderNameLabel": "Имя папки",
"newFolderNamePlaceholder": "Только имя, без косых черт",
"mkdirOk": "Папка создана",
"mkdirExists": "Файл или папка с таким именем уже есть",
"mkdirInvalidName": "Недопустимое имя: не может быть пустым, содержать / или \\, а также быть . или ..",
"colSubPath": "Подпапка",
"folderRoot": "(корень)",
"groupCount": "Файлов: {{count}}",
"convManual": "Ручная загрузка",
"convNew": "Новый чат",
"colDate": "Дата",
"colConversation": "Диалог",
"colName": "Имя",
"colSize": "Размер",
"colModified": "Изменён",
"colActions": "Действия",
"copyPath": "Копировать путь",
"copyPathTitle": "Копировать абсолютный путь на сервере; вставьте в чат, чтобы сослаться на этот файл",
"pathCopied": "Путь скопирован — вставьте его в чат",
"uploadOkHint": "Загружено. Нажмите «Копировать путь», чтобы скопировать абсолютный путь.",
"uploadingFile": "Загрузка {{name}} · {{percent}}%",
"moreActions": "Ещё: открыть чат, изменить, переименовать, удалить",
"download": "Скачать",
"edit": "Изменить",
"rename": "Переименовать",
"openChat": "Открыть чат",
"confirmDelete": "Удалить этот файл?",
"editTitle": "Изменить файл",
"renameTitle": "Переименовать",
"renameCurrentFile": "Текущий файл",
"newFileName": "Новое имя файла",
"empty": "Загрузок из чата пока нет",
"errorLoad": "Не удалось загрузить",
"editBinaryHint": "Двоичные файлы (изображения, архивы и т. п.) нельзя править здесь как текст. Скачайте и откройте локально.",
"editUnavailable": "Н/Д",
"editTooLarge": "Файл больше 2 МБ, править его здесь нельзя. Скачайте и измените локально.",
"errorGeneric": "Что-то пошло не так. Повторите попытку."
},
"vulnerabilityPage": {
"alertTitle": "Оповещения робота об уязвимостях",
"alertDescription": "Отправлять новые уязвимости роботам, привязанным к этой учётной записи, с фильтром по серьёзности.",
"alertHint": "Отправлять новые уязвимости не ниже выбранной серьёзности на привязанные учётные записи роботов.",
"alertConfiguredNotBound": "{{platforms}} включено, но эта веб-учётная запись не привязана к получателю.",
"alertNoBinding": "Нет включённого и привязанного робота для исходящих сообщений. Настройки всё равно сохранены.",
"alertBindAction": "Привязать учётную запись получателя",
"alertMinimum": "Минимальная серьёзность",
"alertEnabled": "Включить оповещения",
"alertSaved": "Настройки оповещений об уязвимостях сохранены",
"alertSaveFailed": "Не удалось сохранить настройки оповещений об уязвимостях",
"statTotal": "Всего",
"statClickAll": "Показать все (сбросить фильтр серьёзности)",
"statClickFilter": "Нажмите, чтобы фильтровать по этой серьёзности; ещё раз — чтобы сбросить",
"advancedFilters": "Расширенные фильтры",
"moreFilters": "Ещё фильтры",
"applyFilters": "Применить",
"clearAdvanced": "Очистить",
"clearAll": "Сбросить всё",
"activeFilters": "Активные фильтры",
"chipRemove": "Убрать",
"filter": "Фильтр",
"clear": "Очистить",
"vulnId": "ID уязвимости",
"conversationId": "ID диалога",
"taskOrQueueId": "ID задачи / очереди",
"filterTaskOrQueue": "Фильтр по ID задачи или очереди",
"conversationTag": "Метка диалога",
"filterConversationTag": "Фильтр по метке диалога",
"taskTag": "Метка задачи",
"filterTaskTag": "Фильтр по метке задачи",
"severity": "Серьёзность",
"status": "Статус",
"statusOpen": "Открыта",
"statusConfirmed": "Подтверждена",
"statusFixed": "Исправлена",
"statusFalsePositive": "Ложное срабатывание",
"statusIgnored": "Проигнорирована",
"statusChangeLabel": "Изменить статус",
"statusUpdateFailed": "Не удалось обновить статус",
"searchVulnId": "Поиск по ID уязвимости",
"searchKeyword": "Поиск по названию, описанию, типу, цели…",
"searchKeywordShort": "Ключевое слово",
"filterExactId": "Точный ID уязвимости",
"filterEnterHint": "Нажмите Enter для фильтра",
"filterConversation": "Фильтр по диалогу",
"loading": "Загрузка...",
"loadListFailed": "Не удалось загрузить",
"noRecords": "Нет записей об уязвимостях",
"batchExport": "Пакетный экспорт",
"batchDelete": "Пакетное удаление",
"batchDeleteNoResults": "Нет уязвимостей по текущим фильтрам для удаления",
"batchDeleteConfirm": "Удалить записи об уязвимостях по текущим фильтрам ({{count}})? Это нельзя отменить.",
"batchDeleteConfirmAll": "Фильтры не заданы. Будут удалены все записи об уязвимостях ({{count}}). Это нельзя отменить. Продолжить?",
"batchDeleteSuccess": "Удалено записей об уязвимостях: {{count}}",
"batchDeleteFailed": "Пакетное удаление не удалось",
"downloadMarkdownTitle": "Скачать Markdown",
"exportNoResults": "Нет уязвимостей по текущим фильтрам",
"exportStarted": "Начата загрузка файлов: {{count}}",
"exportFailed": "Экспорт не удался",
"saveRequiredFields": "Заполните название, описание, серьёзность, тип, цель, шаги воспроизведения, доказательства/POC, влияние и меры устранения",
"saveFailed": "Не удалось сохранить",
"fetchFailed": "Не удалось получить уязвимость",
"deleteFailed": "Не удалось удалить",
"detailVulnId": "ID уязвимости",
"detailType": "Тип",
"detailTarget": "Цель",
"detailProject": "Проект",
"projectUnbound": "Без проекта",
"allProjects": "Все проекты",
"filterByProject": "Фильтр по проекту",
"projectBindHint": "После привязки агенты смогут видеть эту находку в области проекта.",
"projectBindFailed": "Не удалось обновить привязку к проекту",
"projectBindOk": "Привязка к проекту обновлена",
"detailConversationId": "ID диалога",
"openConversation": "Открыть диалог",
"detailTaskId": "ID задачи",
"detailTaskQueueId": "ID очереди задач",
"detailConversationTag": "Метка диалога",
"detailTaskTag": "Метка задачи",
"detailPreconditions": "Предусловия",
"detailReproductionSteps": "Шаги воспроизведения",
"detailEvidence": "Доказательства / POC",
"detailImpact": "Влияние",
"detailRecommendation": "Устранение",
"detailRetestNotes": "Метод повторной проверки",
"detailRetestLog": "Журнал повторных проверок",
"downloadOkTitle": "Скачано",
"exportFailedMessage": "Экспорт не удался",
"downloadFailed": "Загрузка не удалась"
},
"tasksPage": {
"statusFilter": "Фильтр статуса",
"statusPending": "Ожидает",
"statusPaused": "Пауза",
"statusCancelled": "Отменено",
"searchQueuePlaceholder": "Поиск по ID очереди, названию или времени создания",
"searchKeywordPlaceholder": "Введите ключевое слово..."
},
"skillsPage": {
"clearStats": "Очистить статистику",
"clearStatsTitle": "Очистить всю статистику",
"skillsCallStats": "Статистика вызовов навыков",
"searchPlaceholder": "Поиск навыков...",
"overviewTotal": "Навыки",
"overviewCurrent": "Эта страница",
"overviewFiles": "Файлы",
"overviewScripts": "Скрипты",
"loading": "Загрузка...",
"paginationShow": "Показано {{start}}–{{end}} из {{total}}",
"perPageLabel": "На странице",
"firstPage": "Первая",
"prevPage": "Назад",
"pageOf": "Стр. {{current}} / {{total}}",
"nextPage": "Далее",
"lastPage": "Последняя"
},
"agentsPage": {
"title": "Управление агентами",
"create": "Новый агент",
"hint": "Агенты — файлы .md в agents_dir (front matter и тело как системный промпт). Оркестратор — координатор Deep и не показывается как подагент задачи.",
"dirLabel": "Каталог",
"loading": "Загрузка...",
"empty": "Подагентов Markdown пока нет. Нажмите «Новый агент», чтобы создать.",
"noDesc": "Нет описания",
"loadFailed": "Не удалось загрузить список",
"loadOneFailed": "Не удалось загрузить агента",
"createTitle": "Новый агент",
"editTitle": "Изменить агента",
"filename": "Имя файла (.md)",
"filenamePlaceholder": "например, code-reviewer.md",
"fieldRole": "Тип",
"roleSub": "Подагент",
"roleOrchestrator": "Оркестратор (Deep)",
"roleHint": "Оркестраторы зависят от режима: Deep → orchestrator.md (или один .md с kind: orchestrator); plan_execute → orchestrator-plan-execute.md; supervisor → orchestrator-supervisor.md. Не больше одного каждого вида. Пустое тело заменяется на multi_agent.orchestrator_instruction / orchestrator_instruction_plan_execute / orchestrator_instruction_supervisor или встроенные значения по умолчанию (PE/SV не используют orchestrator_instruction режима Deep).",
"badgeOrchestrator": "Оркестратор",
"badgeSub": "Подагент",
"filenameInvalid": "Имя файла должно заканчиваться на .md и содержать только буквы, цифры и ._-",
"fieldId": "ID агента (необязательно; если пусто — из имени)",
"fieldName": "Отображаемое имя",
"namePlaceholder": "Code Reviewer",
"fieldDesc": "Описание",
"descPlaceholder": "Когда оркестратору следует делегировать этому агенту",
"fieldTools": "Инструменты (через запятую; те же ключи, что у инструментов роли)",
"fieldBindRole": "Привязать роль (необязательно)",
"fieldMaxIter": "Макс. итераций (0 = из настроек → agent.max_iterations)",
"fieldInstruction": "Системный промпт (тело Markdown)",
"instructionPlaceholder": "Вы специализированный агент...",
"nameRequired": "Укажите отображаемое имя",
"instructionRequired": "Укажите тело системного промпта",
"saveOk": "Сохранено",
"createOk": "Создано",
"saveFailed": "Не удалось сохранить",
"deleteConfirm": "Удалить {{name}}?",
"deleteOk": "Удалено",
"deleteFailed": "Не удалось удалить"
},
"settingsBasic": {
"basicTitle": "Основные настройки",
"openaiConfig": "Настройки канала ИИ",
"aiChannelCurrent": "Текущий канал",
"aiChannelSave": "Сохранить изменения",
"aiChannelSetDefault": "Сделать основным",
"aiChannelNew": "Новый",
"aiChannelCopy": "Копировать",
"aiChannelDelete": "Удалить",
"aiChannelHint": "Переключайте сохранённые каналы в списке. Сохранение записывает ai.channels; канал по умолчанию используется в новых чатах и задачах без явного канала.",
"aiChannelSavedList": "Сохранённые каналы",
"aiChannelListAria": "Список каналов ИИ",
"aiChannelEditing": "Редактирование",
"aiChannelFormContext": "Редактируется выбранный канал",
"aiChannelFormContextHint": "Сохранение формы обновляет настройки этого канала.",
"aiChannelBulkProbe": "Проверить все",
"aiChannelBulkProbeTitle": "Проверить доступность всех заполненных каналов",
"aiChannelSelectAria": "Выбрать {name}",
"aiChannelDefaultBadge": "По умолчанию",
"aiChannelReady": "Готов",
"aiChannelReadyWithLatency": "Готов{latency}",
"aiChannelComplete": "Заполнен",
"aiChannelDraft": "Не заполнен",
"aiChannelDefaultMeta": "Канал по умолчанию",
"aiChannelCustomMeta": "Пользовательский канал",
"aiChannelOpenAICompat": "Совместим с OpenAI",
"aiChannelModelMissing": "Нет модели",
"aiChannelName": "Имя канала",
"aiChannelConnectionSection": "Подключение",
"aiChannelConnectionHint": "Сначала укажите провайдера, конечную точку, ключ и модель. Проверка подключения использует эти значения.",
"aiChannelModelSection": "Модель и лимиты",
"aiChannelModelHint": "Имя модели задаёт маршрутизацию. Лимиты токенов ограничивают контекст и один ответ.",
"aiChannelLimitsSection": "Лимиты",
"aiChannelLimitsHint": "Лимиты токенов ограничивают окно контекста и один ответ.",
"aiChannelUntitled": "Новый канал",
"aiChannelDeleteConfirm": "Удалить канал ИИ «{name}»?",
"aiChannelSaved": "Канал сохранён",
"aiChannelDefaultSaved": "Канал по умолчанию сохранён",
"aiChannelCount": "Сохранено каналов: {count}",
"aiChannelSaving": "Сохранение канала...",
"aiChannelNewUnsaved": "Новый канал ещё не сохранён. Заполните его и нажмите «Сохранить изменения».",
"aiChannelCopyUnsaved": "Копия канала ещё не сохранена. Проверьте её и нажмите «Сохранить изменения».",
"aiChannelDeleted": "Канал удалён",
"aiChannelProbeNoComplete": "Нет заполненного канала для проверки. Сначала укажите базовый URL, ключ API и модель.",
"aiChannelProbing": "Проверка каналов: {count}...",
"aiChannelProbeDone": "Проверка завершена: готово {ok}/{total}",
"apiProvider": "Провайдер API",
"providerOpenAI": "OpenAI / API, совместимый с OpenAI",
"providerClaude": "Claude (Anthropic Messages API)",
"visionProviderReuseOpenAI": "Использовать канал ИИ по умолчанию",
"fofaConfig": "Настройки FOFA",
"fofaConfigHint": "Для обнаружения и импорта активов; достаточно ключа API.",
"agentConfig": "Настройки агента",
"knowledgeConfig": "Настройки базы знаний",
"baseUrl": "Базовый URL",
"apiKey": "Ключ API",
"model": "Модель",
"openaiBaseUrlPlaceholder": "https://api.openai.com/v1",
"openaiApiKeyPlaceholder": "Введите ключ API OpenAI",
"modelPlaceholder": "gpt-4",
"fetchModels": "Загрузить список",
"modelsListFetching": "Загрузка списка моделей...",
"modelsListSelectPlaceholder": "Выберите модель",
"modelsListSuccess": "Загружено моделей: {count} — выберите в списке справа или введите в поле",
"modelsListFailed": "Не удалось загрузить список моделей",
"modelsListNeedApiKey": "Сначала введите ключ API",
"modelsListClaudeHint": "Claude не поддерживает автозагрузку списка моделей; введите имя модели вручную",
"maxTotalTokens": "Макс. токенов контекста",
"maxTotalTokensPlaceholder": "120000",
"maxTotalTokensHint": "Общий лимит для сжатия памяти и построения цепочки атаки. По умолчанию: 120000",
"maxCompletionTokens": "Макс. токенов ответа",
"maxCompletionTokensPlaceholder": "32768",
"maxCompletionTokensHint": "Максимум токенов одного ответа модели. По умолчанию: 32768",
"openaiReasoningTitle": "Настройки рассуждения",
"openaiReasoningHint": "Настройки рассуждения этого канала ИИ по умолчанию; настройки сессии чата могут их переопределить.",
"openaiReasoningProfile": "Профиль передачи",
"openaiReasoningAllowClient": "Разрешить странице чата переопределять параметры рассуждения",
"fofaBaseUrlPlaceholder": "https://fofa.info/api/v1/search/all (необязательно)",
"fofaBaseUrlHint": "Оставьте пустым для значения по умолчанию.",
"fofaApiKeyPlaceholder": "Введите ключ API FOFA",
"fofaApiKeyHint": "Хранится только в конфигурации сервера (config.yaml).",
"maxIterations": "Макс. итераций",
"iterationsPlaceholder": "30",
"toolWaitTimeoutSeconds": "Ожидание инструмента, с",
"toolWaitTimeoutSecondsHint": "Лимит ожидания инструментов за ход. По его достижении агент получает execution_id, а исполнитель продолжает работу; для продолжения ожидания вызовите wait_tool_execution. 0 — ждать до завершения.",
"externalMcpConcurrencyServer": "Лимит параллелизма на MCP",
"externalMcpConcurrencyServerHint": "Одновременные запуски инструментов на внешний сервер MCP. 0 — значение по умолчанию 2; -1 снимает лимит.",
"externalMcpConcurrencyTotal": "Общий параллелизм внешних MCP",
"externalMcpConcurrencyTotalHint": "Всего одновременных запусков инструментов внешних MCP. 0 — значение по умолчанию 16; -1 снимает лимит.",
"externalMcpCircuitThreshold": "Порог сбоев размыкания MCP",
"externalMcpCircuitThresholdHint": "Временно размыкает цепь после стольких подряд сбоев одного сервера MCP. 0 — значение по умолчанию 3; -1 отключает размыкание.",
"externalMcpCircuitCooldown": "Пауза размыкания MCP, с",
"externalMcpCircuitCooldownHint": "Сколько сервер остаётся в разомкнутом состоянии. 0 — 60 секунд по умолчанию.",
"enableMultiAgent": "Включить мультиагент Eino",
"enableMultiAgentHint": "После включения на странице чата доступен мультиагентный режим; субагенты задаются в multi_agent.sub_agents или каталоге agents/. Оркестрация настраивается ниже.",
"multiAgentOrchestration": "Оркестрация мультиагента",
"multiAgentOrchestrationHint": "deep = DeepAgent + task; plan_execute = plan / execute / replan; supervisor = маршрутизация экспертов (transfer, отдельные сценарии). Применяется после сохранения и применения.",
"multiAgentOrchDeep": "deep — DeepAgent (субагенты task)",
"multiAgentOrchPlanExecute": "plan_execute — plan / execute / replan",
"multiAgentOrchSupervisor": "supervisor — маршрутизация экспертов (transfer)",
"multiAgentPeLoop": "Лимит внешнего цикла plan_execute",
"multiAgentPeLoopPlaceholder": "0 — значение Eino по умолчанию (10)",
"multiAgentPeLoopHint": "Только для plan_execute; максимум циклов execute↔replan.",
"multiAgentRobotMode": "Режим диалога ботов по умолчанию",
"multiAgentRobotModeHint": "Режим выполнения сообщений ботов WeCom / DingTalk / Lark. Deep / Plan-Execute / Supervisor требуют включённого мультиагента.",
"agentAdvanced": "Дополнительные настройки",
"einoModelRetryMaxRetries": "Лимит встроенных повторов модели Eino",
"einoModelRetryMaxRetriesHint": "Встроенные попытки ModelRetry у ChatModelAgent. 0 — значение сервера по умолчанию 4. Покрывает 429/5xx, сетевые сбои и пустой ответ модели.",
"einoModelRetryMaxBackoffSec": "Макс. пауза встроенного повтора Eino, с",
"einoModelRetryMaxBackoffSecHint": "Верхняя граница экспоненциальной паузы встроенного повтора модели. 0 — 30 секунд по умолчанию.",
"einoModelFailoverChannels": "Каналы переключения модели Eino",
"einoModelFailoverChannelsPlaceholder": "backup-openai\nbackup-claude",
"einoModelFailoverChannelsHint": "Когда основной канал исчерпает встроенные повторы, переключение идёт по этим ID из ai.channels по порядку. По одному в строке; запятые тоже допустимы.",
"einoModelFailoverMaxRetries": "Лимит переключений модели Eino",
"einoModelFailoverMaxRetriesHint": "0 — перебрать все настроенные резервные каналы. Положительное значение ограничивает число попыток.",
"userLedgerMaxRunes": "Общий лимит символов журнала ввода",
"userLedgerMaxRunesHint": "Общий лимит исходного журнала ввода пользователя, добавляемого после сжатия; 0 — значение сервера по умолчанию. Исходные сообщения в БД не обрезаются.",
"userLedgerEntryMaxRunes": "Лимит символов ввода на сообщение",
"userLedgerEntryMaxRunesHint": "Видимый модели лимит каждого сообщения пользователя в журнале; 0 — значение сервера по умолчанию и не влияет на оригиналы в БД.",
"latestUserMaxRunes": "Лимит символов последнего ввода",
"latestUserMaxRunesHint": "Рабочий лимит текущего сообщения пользователя для модели; слишком длинный ввод сохраняется, а в контекст попадает только предпросмотр. 0 — значение сервера по умолчанию.",
"latestUserHeadRunes": "Начало предпросмотра последнего ввода",
"latestUserHeadRunesHint": "Символы начала слишком длинного текущего ввода, видимые модели.",
"latestUserTailRunes": "Конец предпросмотра последнего ввода",
"latestUserTailRunesHint": "Символы конца слишком длинного текущего ввода, видимые модели.",
"multiAgentBatchUse": "Мультиагент для пакетных очередей задач",
"multiAgentBatchUseHint": "Если включено, каждая подзадача очереди в управлении задачами выполняется через Eino DeepAgent (нужен мультиагент).",
"enableKnowledge": "Включить поиск по базе знаний",
"knowledgeBasePath": "Путь к базе знаний",
"knowledgeBasePathPlaceholder": "knowledge_base",
"knowledgeBasePathHint": "Относительно каталога файла конфигурации",
"embeddingConfig": "Настройки эмбеддингов",
"provider": "Провайдер",
"embeddingBaseUrlPlaceholder": "Оставьте пустым, чтобы использовать base_url OpenAI",
"embeddingApiKeyPlaceholder": "Оставьте пустым, чтобы использовать api_key OpenAI",
"modelName": "Имя модели",
"embeddingModelPlaceholder": "text-embedding-v4",
"retrievalConfig": "Настройки поиска",
"topK": "Результатов Top-K",
"topKPlaceholder": "5",
"topKHint": "Сколько результатов Top-K возвращать",
"similarityThreshold": "Порог сходства",
"similarityPlaceholder": "0.7",
"similarityHint": "Результаты ниже этого значения отбрасываются (0–1)",
"subIndexFilter": "Фильтр подиндекса (необязательно)",
"subIndexFilterPlaceholder": "например prod; должен совпадать с тегом sub_indexes индексации",
"subIndexFilterHint": "Пусто — без фильтра. Если задано, остаются строки, у которых sub_indexes содержит этот тег (старые строки с пустым sub_indexes тоже подходят).",
"ragPipelineHeader": "Конвейер RAG (MultiQuery + Rerank)",
"ragPipelineHint": "MultiQuery и rerank всегда включены: переформулировка запроса LLM → предварительная выборка и слияние векторов → HTTP rerank → дедупликация и обрезка по бюджету.",
"multiQueryMaxQueries": "Лимит вариантов переформулировки MultiQuery",
"multiQueryMaxQueriesPlaceholder": "4",
"multiQueryMaxQueriesHint": "Максимум вариантов поиска от LLM, включая перефразирование исходного запроса. Рекомендуется 3–4, максимум 8.",
"rerankProvider": "Провайдер Rerank",
"rerankProviderAuto": "Авто (определять по базовому URL)",
"rerankProviderCohere": "API, совместимый с Cohere",
"rerankProviderHint": "DashScope использует gte-rerank; другие совместимые конечные точки — /v1/rerank. Оставьте пустым, чтобы определить по базовому URL ниже.",
"rerankModel": "Модель Rerank (необязательно)",
"rerankModelPlaceholder": "Пусто: DashScope→gte-rerank, Cohere→rerank-multilingual-v3.0",
"rerankBaseUrl": "Базовый URL Rerank (необязательно)",
"rerankBaseUrlPlaceholder": "Оставьте пустым, чтобы использовать base_url эмбеддингов / OpenAI",
"rerankApiKey": "Ключ API Rerank (необязательно)",
"rerankApiKeyPlaceholder": "Оставьте пустым, чтобы использовать api_key эмбеддингов / OpenAI",
"rerankApiKeyHint": "При сбое rerank сохраняется порядок слияния; поиск продолжает работать.",
"postRetrieveHeader": "После поиска (дедупликация / бюджет)",
"postRetrieveDedupeAuto": "Результаты всегда дедуплицируются по нормализованному тексту (пробелы в теле схлопываются). Настройка не нужна.",
"prefetchTopK": "Кандидаты предварительной выборки (векторный этап)",
"prefetchTopKPlaceholder": "20",
"prefetchTopKHint": "Векторные кандидаты на вариант MultiQuery; 0 — встроенное max(top_k×4, 20) (максимум 200).",
"maxContextChars": "Макс. возвращаемых символов (Unicode)",
"maxContextCharsPlaceholder": "0",
"maxContextCharsHint": "0 — без ограничения; целые фрагменты сохраняются по рангу, пока не превышен бюджет.",
"maxContextTokens": "Макс. возвращаемых токенов",
"maxContextTokensPlaceholder": "0",
"maxContextTokensHint": "0 — без ограничения; оценка tiktoken (имя модели эмбеддингов, иначе cl100k_base).",
"indexConfig": "Настройки индекса",
"chunkStrategy": "Стратегия фрагментации",
"chunkStrategyMarkdownRecursive": "Заголовки Markdown, затем рекурсивно (рекомендуется)",
"chunkStrategyRecursive": "Только рекурсивно",
"chunkStrategyHint": "Как в конвейерах Eino: заголовки Markdown и рекурсия для документов; для обычного текста достаточно рекурсии.",
"requestTimeoutSeconds": "Таймаут HTTP эмбеддингов (секунды)",
"requestTimeoutPlaceholder": "120",
"requestTimeoutHint": "0 — таймаут HTTP-клиента эмбеддингов по умолчанию 120 с.",
"batchSize": "Размер пакета эмбеддингов",
"batchSizePlaceholder": "64",
"batchSizeHint": "Максимум текстов в одном запросе эмбеддингов (индексатор SQLite так же группирует запись).",
"preferSourceFile": "При индексации предпочитать файл на диске (Eino FileLoader)",
"preferSourceFileHint": "Если включено, содержимое берётся из file_path; при ошибке загрузки используется содержимое БД.",
"subIndexes": "Подиндексы Eino (через запятую)",
"subIndexesPlaceholder": "например prod, knowledge",
"subIndexesHint": "Передаётся в indexer.WithSubIndexes; сохраняется в столбце sub_indexes.",
"chunkSize": "Размер фрагмента",
"chunkSizePlaceholder": "512",
"chunkSizeHint": "Максимум токенов во фрагменте (по умолчанию 512)",
"chunkOverlap": "Перекрытие фрагментов",
"chunkOverlapPlaceholder": "50",
"chunkOverlapHint": "Перекрытие фрагментов в токенах (по умолчанию 50)",
"maxChunksPerItem": "Макс. фрагментов на элемент",
"maxChunksPlaceholder": "0",
"maxChunksHint": "Максимум фрагментов на элемент базы знаний (0 — без лимита)",
"maxRpm": "Макс. RPM",
"maxRpmPlaceholder": "0",
"maxRpmHint": "Максимум запросов в минуту (0 — без лимита)",
"rateLimitDelay": "Пауза ограничения (мс)",
"rateLimitPlaceholder": "300",
"rateLimitHint": "Пауза между запросами (мс); 0 — без лимита",
"maxRetries": "Макс. повторов",
"maxRetriesPlaceholder": "3",
"maxRetriesHint": "Повторы при ограничении частоты или ошибке сервера",
"retryDelay": "Пауза повтора (мс)",
"retryDelayPlaceholder": "1000",
"retryDelayHint": "Пауза между повторами (мс)",
"visionConfig": "Анализ изображений (analyze_image)",
"visionEnabled": "Включить инструмент анализа изображений analyze_image",
"visionEnabledHint": "При включении регистрируется инструмент MCP; изображения уходят только в один вызов VL; в контексте агента остаются текстовые сводки. Чтобы применить, сохраните и примените.",
"visionBaseUrlPlaceholder": "Оставьте пустым, чтобы использовать базовый URL OpenAI",
"visionApiKeyPlaceholder": "Оставьте пустым, чтобы использовать ключ API OpenAI",
"visionModel": "Модель анализа изображений",
"visionModelPlaceholder": "qwen-vl-max",
"visionModelRequired": "При включённом анализе изображений нужно имя модели",
"visionAdvanced": "Дополнительно: предобработка и лимиты",
"visionMaxImageBytes": "Макс. размер исходного файла (байт)",
"visionMaxDimension": "Макс. пикселей по длинной стороне",
"visionJpegQuality": "Качество JPEG",
"visionMaxPayloadBytes": "Макс. размер полезной нагрузки API (байт)",
"visionSkipPreprocessBytes": "Без обработки ниже (байт)",
"visionSkipPreprocessHint": "0 — всегда сжимать в JPEG; также должны соблюдаться лимиты длинной стороны и полезной нагрузки.",
"visionDetail": "Детализация изображения",
"visionTimeout": "Таймаут (секунды)",
"visionTestFillRequired": "Укажите модель анализа изображений и убедитесь, что ключ API доступен (или используется OpenAI)",
"testConnection": "Проверить подключение",
"testFillRequired": "Сначала укажите базовый URL, ключ API и модель",
"testing": "Проверка подключения...",
"testSuccess": "Подключение успешно",
"testFailed": "Подключение не удалось",
"testError": "Ошибка проверки",
"testErrorInvalidApiKey": "Ключ API недействителен или не авторизован. Проверьте правильность ключа.",
"testErrorUnauthorized": "Аутентификация не удалась. Проверьте ключ API.",
"testErrorForbidden": "Запрос отклонён. Проверьте права учётной записи или доступ к модели.",
"testErrorModelUnavailable": "Модель недоступна или имя модели указано неверно.",
"testErrorBaseUrl": "Базовый URL недоступен. Проверьте правильность конечной точки."
},
"settingsTerminal": {
"title": "Терминал",
"description": "Запуск команд на сервере для сопровождения и отладки. Команды выполняются на сервере; избегайте конфиденциальных и разрушительных операций.",
"terminalTab": "Терминал {{n}}",
"welcomeLine": "Терминал CyberStrikeAI — реальная сессия оболочки; вводите команды напрямую. Ctrl+L очищает экран",
"sessionClosed": "[Сессия закрыта]",
"connectionError": "[Ошибка подключения терминала]",
"connectFailed": "[Не удалось подключиться к службе терминала: {{msg}}]",
"closeTabTitle": "Закрыть",
"containerClickTitle": "Нажмите здесь, затем вводите команды",
"xtermNotLoaded": "Не удалось загрузить xterm.js. Обновите страницу или проверьте сеть.",
"close": "×",
"newTerminal": "+"
},
"settingsStorage": {
"title": "Очистка хранилища",
"subtitle": "Просмотр и освобождение места, занятого рабочими файлами: каталоги агента, обрезанный вывод инструментов, артефакты C2, вложения диалогов. Удаление необратимо — сначала сделайте предпросмотр.",
"diskUsed": "Занято на диске",
"runtimeTotal": "Рабочие данные",
"reclaimable": "Можно освободить",
"inodes": "Использование inode",
"inodesHint": "Сканирование может исчерпать inode большим числом мелких файлов",
"refresh": "Пересканировать",
"preview": "Предпросмотр",
"cleanNow": "Очистить",
"colCategory": "Категория",
"colRoot": "Каталог",
"colUnits": "Объекты",
"colSize": "Размер",
"colReclaimable": "Можно освободить",
"colRetention": "Хранить, дней",
"colEnabled": "Включено",
"loading": "Загрузка...",
"policyTitle": "Автоматическая очистка",
"autoClean": "Включить очистку по расписанию",
"intervalMinutes": "Интервал (минуты)",
"orphanGraceDays": "Льгота для осиротевших каталогов (дни)",
"activeGraceHours": "Защита активных сессий (часы)",
"policyHint": "Срок 0 отключает очистку по возрасту, но каталоги уже удалённых диалогов всё равно освобождаются. Сессии с недавней активностью не трогаются. Автоочистка по умолчанию выключена, поэтому обновление само ничего не удаляет.",
"save": "Сохранить политику",
"loadMetaFailed": "Не удалось загрузить политику очистки",
"loadStatusFailed": "Не удалось загрузить данные о месте",
"cleanupFailed": "Запрос очистки не выполнен",
"unavailable": "Недоступно",
"free": "свободно",
"itemsUnit": "объектов",
"daysUnit": "дн.",
"noCategories": "Нет категорий для очистки",
"orphanSuffix": "включая осиротевшие",
"skippedActive": "пропущены активные",
"defaultRetention": "По умолчанию",
"unused": "Не используется",
"scannedAt": "Сканирование",
"previewTitle": "Предпросмотр (ничего не удалено)",
"cleanDone": "Очистка завершена",
"nothingToClean": "Сейчас нет файлов, подходящих под политику очистки.",
"skippedActiveNote": "Пропущены сессии с недавней активностью: ",
"failed": "Операция не выполнена",
"confirmClean": "Будет безвозвратно удалено около {size} ({count} объектов) рабочих файлов. Сначала выполните «Предпросмотр». Продолжить?",
"saveFailed": "Не удалось сохранить",
"saved": "Политика очистки сохранена",
"cat.workspace": "Рабочий каталог агента",
"catHint.workspace": "Загрузки и результаты сканирования агента (tmp/workspace), отдельно для проекта и диалога.",
"cat.reduction": "Обрезанный вывод инструментов",
"catHint.reduction": "Файлы усечённого вывода слишком больших инструментов (tmp/reduction): один файл на запуск, данные производные.",
"cat.conversation_artifacts": "Артефакты диалогов",
"catHint.conversation_artifacts": "Транскрипты суммаризации и журнал слишком длинного ввода (data/conversation_artifacts).",
"cat.plantask": "Доски планов",
"catHint.plantask": "Доски планов мультиагента Eino (skills/.eino/plantask), данные производные.",
"cat.c2_artifacts": "Артефакты C2",
"catHint.c2_artifacts": "Снимки экрана C2, загрузки, переданные файлы и сгенерированные payload (tmp/c2). Очистка payload делает их ссылки недействительными.",
"cat.chat_uploads": "Вложения диалогов",
"catHint.chat_uploads": "Файлы, загруженные в диалогах (chat_uploads/<дата>/<диалог>).",
"cat.workflow_checkpoints": "Контрольные точки сценариев",
"catHint.workflow_checkpoints": "Контрольные точки запусков сценариев (data/workflow-checkpoints), нужны только для продолжения прерванного запуска.",
"cat.diagnostic_logs": "Диагностические журналы",
"catHint.diagnostic_logs": "Журналы диагностики с ротацией по дням (log/diagnostic-*.log)."
},
"settingsAudit": {
"title": "Журнал аудита",
"description": "Действия администратора платформы (вход, конфигурация, удаления). Не записывает содержимое чата, отдельные команды терминала и WebShell и вызовы инструментов.",
"filterCategory": "Категория",
"filterAction": "Действие",
"filterEvent": "Тип события",
"filterAllCategories": "Все категории",
"filterAllActions": "Все действия",
"filterCascadeHint": "Выберите категорию, чтобы фильтровать по действию",
"filterResult": "Результат",
"pageSize": "На странице",
"statTotal": "Всего по фильтру",
"statSuccess": "Успешно",
"statFailures": "Ошибки",
"statRecent7d": "За 7 дней",
"retentionHint": "Записи аудита хранятся {{days}} дн., затем удаляются автоматически.",
"disabledHint": "Ведение аудита отключено: новые действия не записываются.",
"filterSince": "С",
"filterUntil": "По",
"filterTimeZone": "Часовой пояс: {{tz}} (фильтр по локальному времени браузера)",
"datetimePlaceholder": "Выберите дату и время",
"timePresets": "Быстрый период",
"preset15m": "15 минут",
"preset1h": "1 час",
"preset24h": "24 часа",
"preset7d": "7 дней",
"presetToday": "Сегодня",
"pickerHour": "Час",
"pickerMinute": "Мин",
"pickerClear": "Очистить",
"pickerToday": "Сегодня",
"pickerConfirm": "ОК",
"filterQuery": "Ключевое слово",
"filterQueryPlaceholder": "Сообщение / ID ресурса / действие",
"colTime": "Время",
"colMessage": "Сообщение",
"colCategory": "Категория",
"colAction": "Действие",
"colResult": "Результат",
"colIp": "IP",
"colResource": "ID ресурса",
"cat": {
"auth": "Авторизация",
"config": "Конфигурация",
"terminal": "Терминал",
"c2": "C2",
"webshell": "WebShell",
"knowledge": "База знаний",
"conversation": "Диалог",
"vulnerability": "Уязвимость",
"asset": "Актив",
"externalMcp": "Внешний MCP",
"task": "Задачи",
"tool": "Инструменты",
"file": "Файлы",
"hitl": "HITL",
"role": "Роли",
"skill": "Навыки",
"agent": "Субагенты"
},
"act": {
"login": "Вход",
"logout": "Выход",
"login_failed": "Неудачный вход",
"password_change": "Смена пароля",
"change_password": "Сменить пароль",
"apply": "Применить конфигурацию",
"update": "Обновить",
"exec": "Выполнение в терминале",
"exec_stream": "Поток терминала",
"listener_create": "Создать слушатель",
"listener_delete": "Удалить слушатель",
"listener_start": "Запустить слушатель",
"listener_stop": "Остановить слушатель",
"session_delete": "Удалить сессию",
"task_create": "Создать задачу",
"task_cancel": "Отменить задачу",
"task_delete": "Удалить задачу",
"connection_create": "Создать подключение",
"connection_delete": "Удалить подключение",
"item_delete": "Удалить элемент базы знаний",
"index_build": "Построить индекс базы знаний",
"index_rebuild_full": "Полная пересборка индекса базы знаний",
"delete": "Удалить",
"delete_turn": "Удалить ход",
"create": "Создать",
"upsert": "Обновить внешний MCP",
"create_queue": "Создать пакетную очередь",
"start_queue": "Запустить пакетную очередь",
"delete_queue": "Удалить пакетную очередь",
"pause_queue": "Приостановить пакетную очередь",
"rerun_queue": "Повторить пакетную очередь",
"delete_batch_task": "Удалить подзадачу пакета",
"execution_delete": "Удалить выполнение",
"execution_delete_batch": "Удалить выполнения пакетом",
"upload": "Загрузить",
"decision": "Решение HITL",
"markdown_create": "Создать субагента",
"markdown_update": "Обновить субагента",
"markdown_delete": "Удалить субагента"
},
"openResource": "Открыть связанный ресурс",
"openResourceChat": "Открыть связанный ресурс (чат)",
"resourceIdLabel": "ID ресурса",
"resourceRemoved": "(ресурса больше нет)",
"filterAll": "Все",
"filterBtn": "Фильтр",
"resetBtn": "Сбросить",
"exportBtn": "Экспорт",
"exportJson": "Экспорт JSON",
"export": "Экспорт JSON",
"exportCsv": "Экспорт CSV",
"exportDone": "Экспорт завершён",
"loading": "Загрузка...",
"empty": "Нет записей аудита",
"result": {
"success": "успех",
"failure": "ошибка"
},
"msg": {
"auth": {
"login": "Вход выполнен",
"login_failed": "Вход не выполнен: неверный пароль",
"logout": "Выход выполнен",
"change_password": "Пароль входа изменён",
"change_password_failed": "Не удалось сменить пароль: текущий пароль неверен"
},
"config": {
"apply": "Конфигурация применена",
"update": "Конфигурация в памяти обновлена",
"apply_fail_kb_init": "Не удалось применить конфигурацию: инициализация базы знаний",
"apply_fail_kb_reinit": "Не удалось применить конфигурацию: повторная инициализация базы знаний",
"apply_fail_c2": "Не удалось применить конфигурацию: C2"
},
"conversation": {
"create": "Диалог создан",
"delete": "Диалог удалён",
"delete_turn": "Ход диалога удалён"
},
"c2": {
"listener_create": "Слушатель C2 создан",
"listener_delete": "Слушатель C2 удалён",
"listener_start": "Слушатель C2 запущен",
"listener_stop": "Слушатель C2 остановлен",
"session_delete": "Сессия C2 удалена",
"task_create": "Задача C2 создана",
"task_cancel": "Задача C2 отменена",
"task_delete": "Задачи C2 удалены (пакет)"
},
"webshell": {
"connection_create": "Подключение WebShell создано",
"connection_delete": "Подключение WebShell удалено"
},
"knowledge": {
"item_delete": "Элемент базы знаний удалён",
"index_build": "Индекс базы знаний построен",
"index_rebuild_full": "Индекс базы знаний полностью пересобран"
},
"vulnerability": {
"create": "Запись об уязвимости создана",
"update": "Запись об уязвимости обновлена",
"delete": "Запись об уязвимости удалена",
"delete_batch": "Записи об уязвимостях удалены (пакет)"
},
"external_mcp": {
"upsert": "Конфигурация внешнего MCP обновлена",
"delete": "Конфигурация внешнего MCP удалена"
},
"task": {
"create_queue": "Пакетная очередь задач создана",
"start_queue": "Пакетная очередь задач запущена",
"delete_queue": "Пакетная очередь задач удалена",
"pause_queue": "Пакетная очередь задач приостановлена",
"rerun_queue": "Пакетная очередь задач повторена",
"delete_batch_task": "Подзадача пакета удалена"
},
"tool": {
"execution_delete": "Запись выполнения инструмента удалена",
"execution_delete_batch": "Записи выполнения инструментов удалены (пакет)"
},
"file": {
"upload": "Вложение чата загружено",
"delete": "Вложение чата удалено"
},
"hitl": {
"decision": "Решение об одобрении HITL"
},
"role": {
"create": "Роль создана",
"update": "Роль обновлена",
"delete": "Роль удалена"
},
"skill": {
"create": "Навык создан",
"update": "Навык обновлён",
"delete": "Навык удалён"
},
"agent": {
"markdown_create": "Субагент Markdown создан",
"markdown_update": "Субагент Markdown обновлён",
"markdown_delete": "Субагент Markdown удалён"
}
},
"paginationShow": "{{start}}-{{end}} из {{total}}",
"detailTitle": "Подробности аудита",
"detailTime": "Время",
"detailCategory": "Категория",
"detailResult": "Результат",
"detailMessage": "Сообщение",
"detailSession": "Сессия"
},
"settingsSecurity": {
"currentRequired": "Введите текущий пароль",
"newTooShort": "Новый пароль должен содержать не менее 8 символов",
"confirmMismatch": "Новые пароли не совпадают",
"changePasswordTitle": "Сменить пароль",
"changePasswordDesc": "После смены пароля войдите снова с новым паролем.",
"currentPassword": "Текущий пароль",
"currentPasswordPlaceholder": "Введите текущий пароль",
"newPassword": "Новый пароль",
"newPasswordPlaceholder": "Новый пароль (не менее 8 символов)",
"confirmPassword": "Подтвердите новый пароль",
"confirmPasswordPlaceholder": "Введите новый пароль ещё раз",
"clear": "Очистить",
"changePasswordBtn": "Сменить пароль"
},
"settingsRobotsExtra": {
"botCommandsTitle": "Команды бота",
"botCommandsEntryDesc": "Команды робота для личности, авторизации, диалогов, ролей, режимов, проектов и диагностики безопасности.",
"viewAllCommands": "Все команды",
"botCommandsDesc": "В чате можно отправлять следующие команды (поддерживаются китайский и английский):",
"botCmdCategoryGeneral": "Общие",
"botCmdCategoryIdentity": "Личность и авторизация",
"botCmdCategoryConversation": "Диалог",
"botCmdCategoryRole": "Роль",
"botCmdCategoryMode": "Режим",
"botCmdCategoryDiagnostics": "Диагностика и безопасность",
"botCmdCategoryProject": "Проект",
"botCmdHelp": "Показать эту справку",
"botCmdIdentity": "Показать отправителя платформы, режим авторизации и действующую личность RBAC",
"botCmdBindUser": "Привязать эту личность платформы к пользователю RBAC (только режим привязки пользователя)",
"botCmdUnbindUser": "Снять привязку этой личности платформы (только режим привязки пользователя; нужно подтверждение)",
"botAuthHint": "Режим служебной учётной записи не принимает команды привязки и отвязки; принимаются только отправители из настроенного списка.",
"botCmdList": "Список диалогов",
"botCmdSwitch": "Перейти к диалогу",
"botCmdNew": "Начать новый диалог",
"botCmdClear": "Очистить контекст",
"botCmdStatus": "Показать текущий диалог, режим, роль и проект",
"botCmdTask": "Показать статус текущей задачи и прошедшее время",
"botCmdRename": "Переименовать текущий диалог",
"botCmdPermissions": "Показать действующие бизнес-права",
"botCmdDoctor": "Проверить состояние ключевой конфигурации",
"botCmdConfirmation": "Подтвердить или отменить рискованное действие",
"botCmdStop": "Остановить выполняемую задачу",
"botCmdRoles": "Список ролей",
"botCmdRole": "Сменить роль",
"botCmdModes": "Список режимов диалога и текущий выбор",
"botCmdMode": "Сменить режим диалога",
"botCmdDelete": "Удалить диалог (нужно подтверждение)",
"botCmdVersion": "Показать версию",
"botCmdProjects": "Список проектов",
"botCmdNewProject": "Создать проект и привязать текущий диалог",
"botCmdBindProject": "Привязать текущий диалог к проекту",
"botCmdUnbindProject": "Отвязать проект от текущего диалога",
"botCommandsFooter": "Иначе текст отправляется ИИ с текущими правами RBAC привязанного пользователя или служебной учётной записи."
},
"mcpDetailModal": {
"blockReason": "Причина блокировки",
"title": "Сведения о вызове инструмента",
"execInfo": "Сведения о выполнении",
"tool": "Инструмент",
"status": "Статус",
"statusPending": "Ожидает",
"statusRunning": "Выполняется",
"statusCompleted": "Завершено",
"statusFailed": "Ошибка",
"statusCancelled": "Отменено",
"unknown": "Неизвестно",
"getDetailFailed": "Не удалось получить сведения",
"runningNoResponseYet": "Вывода пока нет; инструмент может ещё выполняться. Если он завис, нажмите «Остановить инструмент» ниже — остановится только этот вызов.",
"abortTitle": "Управление выполнением",
"abortHint": "Останавливает только этот вызов инструмента. Диалог или многошаговая задача продолжаются (в отличие от остановки всей задачи).",
"abortBtn": "Остановить инструмент",
"abortConfirm": "Остановить этот вызов инструмента? Диалог или итеративная задача не будут отменены.",
"abortSuccess": "Запрошена отмена; статус обновится, когда инструмент вернёт результат.",
"abortFailed": "Не удалось остановить инструмент",
"abortNoteModalTitle": "Остановить инструмент с примечанием",
"abortNoteModalHint": "Необязательно: почему вы остановили вызов или как модели продолжать. Модель сначала видит вывод инструмента, затем помеченный блок (USER INTERRUPT NOTE — это не сырой вывод инструмента), затем ваш текст. Оставьте пустым для обычной остановки.",
"abortNoteLabel": "Примечание (необязательно)",
"abortNotePlaceholder": "например, вывода достаточно — не ждать и продолжить…",
"abortNoteSubmit": "Остановить инструмент",
"abortNoteClose": "Отмена",
"execSuccessNoContent": "Выполнение успешно, отображаемого содержимого нет.",
"time": "Время",
"executionId": "ID выполнения",
"requestParams": "Параметры запроса",
"copyJson": "Копировать JSON",
"responseResult": "Ответ",
"copyContent": "Копировать содержимое",
"correctInfo": "Верные сведения",
"rawResponse": "Исходный ответ",
"errorInfo": "Сведения об ошибке",
"copyError": "Копировать ошибку",
"contentTruncated": "… (показано не полностью; полный файл — read_file по пути в persisted-output)"
},
"attackChainModal": {
"title": "Цепочка атаки",
"regenerate": "Сформировать заново",
"regenerateTitle": "Сформировать цепочку атаки заново (включая последний диалог)",
"exportPng": "Экспорт PNG",
"exportSvg": "Экспорт SVG",
"refreshTitle": "Обновить текущую цепочку атаки",
"nodesEdges": "Узлы: {{nodes}} | Рёбра: {{edges}}",
"searchPlaceholder": "Поиск узлов...",
"allTypes": "Все типы",
"target": "Цель",
"action": "Действие",
"vulnerability": "Уязвимость",
"allRisks": "Все риски",
"highRisk": "Высокий (80–100)",
"mediumHighRisk": "Повышенный (60–79)",
"mediumRisk": "Средний (40–59)",
"lowRisk": "Низкий (0–39)",
"resetFilter": "Сбросить фильтр",
"loading": "Загрузка...",
"riskLevel": "Уровень риска",
"lineMeaning": "Значение линий",
"blueLine": "Синяя: действие обнаруживает уязвимость",
"redLine": "Красная: даёт возможность или вносит вклад",
"grayLine": "Серая: логический порядок",
"nodeDetails": "Сведения об узле",
"closeDetails": "Закрыть сведения"
},
"externalMcpModal": {
"configJson": "JSON конфигурации",
"formatLabel": "Формат:",
"formatDesc": "Объект JSON; ключ = имя конфигурации, значение = конфигурация. Состояние задаётся кнопками «Старт» и «Стоп». Поддерживается синтаксис переменных окружения ${VAR} и ${VAR:-default}.",
"configExample": "Пример конфигурации:",
"stdioMode": "Режим stdio:",
"httpMode": "Режим HTTP:",
"sseMode": "Режим SSE:",
"placeholder": "{\n \"my-server\": {\n \"command\": \"python3\",\n \"args\": [\"${HOME}/mcp/server.py\"],\n \"env\": { \"API_KEY\": \"${API_KEY}\" },\n \"timeout\": 300\n }\n}",
"exampleStdio": "{\n \"my-server\": {\n \"command\": \"python3\",\n \"args\": [\"${HOME}/mcp/server.py\"],\n \"env\": { \"API_KEY\": \"${API_KEY}\", \"LOG_LEVEL\": \"${LOG_LEVEL:-INFO}\" },\n \"timeout\": 300\n }\n}",
"exampleHttp": "{\n \"remote-mcp\": {\n \"type\": \"http\",\n \"url\": \"https://mcp.example.com/mcp\",\n \"headers\": { \"Authorization\": \"Bearer ${MCP_TOKEN}\" }\n }\n}",
"exampleSse": "{\n \"sse-mcp\": {\n \"type\": \"sse\",\n \"url\": \"http://127.0.0.1:8081/mcp/sse\"\n }\n}",
"exampleDescription": "Пример описания",
"formatJson": "Форматировать JSON",
"loadExample": "Загрузить пример"
},
"skillModal": {
"addSkill": "Добавить навык",
"editSkill": "Изменить навык",
"skillName": "Имя навыка",
"skillNamePlaceholder": "например, sql-injection-testing",
"skillNameHint": "Строчные буквы, цифры, дефисы (имя Agent Skills)",
"description": "Описание",
"descriptionPlaceholder": "Краткое описание",
"descriptionHint": "Соответствует полю description в YAML файла SKILL.md (при создании и правке SKILL.md)",
"packageFiles": "Файлы пакета",
"packageFilesHint": "Нажмите файл, чтобы изменить; папки — только подписи, их нельзя открыть",
"folderHint": "Папка (не редактируется)",
"clickToEdit": "Нажмите, чтобы изменить этот файл",
"editingFile": "Редактирование",
"newFile": "Новый файл",
"newFilePlaceholder": "Относительный путь, например FORMS.md или scripts/extra.sh",
"newFilePathRequired": "Укажите путь нового файла",
"newFilePathInvalid": "Недопустимый путь (без .. и абсолютных путей)",
"noPackageFiles": "Файлы не указаны",
"unsavedSwitch": "Есть несохранённые изменения. Всё равно переключить файл?",
"saveDescriptionFirst": "Сохраните описание в SKILL.md перед переходом к другому файлу",
"contentLabel": "Содержимое",
"contentPlaceholder": "Измените выбранный файл…",
"contentPlaceholderAdd": "Только тело SKILL.md (front matter создаётся автоматически)…",
"bodyHintEdit": "Для SKILL.md это только тело (без заголовка ---); при сохранении оно объединяется с именем и описанием в стандартный SKILL.md.",
"contentHintAdd": "Создаёт стандартный SKILL.md (YAML front matter и тело). Папки открытых навыков можно класть в skills/ как есть.",
"contentHint": "См. формат Claude Agent Skills"
},
"knowledgeItemModal": {
"addKnowledge": "Добавить знание",
"editKnowledge": "Изменить знание",
"category": "Категория (тип риска)",
"categoryPlaceholder": "например, SQL-инъекция",
"title": "Название",
"titlePlaceholder": "Название элемента базы знаний",
"contentLabel": "Содержимое (Markdown)",
"contentPlaceholder": "Введите содержимое в Markdown..."
},
"batchManageModal": {
"title": "Управление диалогами · всего {{count}}",
"searchPlaceholder": "Поиск в истории",
"conversationName": "Название диалога",
"project": "Проект",
"noProject": "Без проекта",
"unknownProject": "Неизвестный проект",
"filterByProject": "Фильтр по проекту",
"lastTime": "Последняя активность",
"action": "Действие",
"selectAll": "Выбрать все",
"deleteSelected": "Удалить выбранные",
"confirmDeleteNone": "Выберите хотя бы один диалог для удаления",
"confirmDeleteN": "Удалить выбранные диалоги ({{count}})? Сообщения чата восстановить нельзя, но записанные уязвимости останутся в библиотеке уязвимостей.",
"deleteFailed": "Не удалось удалить",
"unnamedConversation": "Диалог без названия"
},
"contextMenu": {
"viewAttackChain": "Открыть цепочку атаки",
"viewVulnerabilities": "Открыть уязвимости",
"downloadMarkdown": "Скачать Markdown",
"downloadMarkdownSummary": "Сводка",
"downloadMarkdownFull": "Полностью",
"rename": "Переименовать",
"pinConversation": "Закрепить диалог",
"unpinConversation": "Открепить",
"batchManage": "Пакетное управление",
"deleteConversation": "Удалить диалог"
},
"batchImportModal": {
"hitlInherit": "Как в глобальных настройках",
"hitlOff": "Без одобрения",
"hitlHuman": "Одобрение человеком",
"hitlAgent": "Одобрение агентом",
"hitlReviewEdit": "Проверка и правка агентом",
"hitlPolicy": "Одобрение инструментов",
"hitlHint": "Применяется ко всем задачам этой очереди, включая добавленные позже. Используются глобальные белый список, стратегия аудита и тайм-аут.",
"hitlSubtaskHint": "Новые задачи используют настройку одобрения инструментов очереди. Измените её в сведениях об очереди.",
"title": "Новая задача",
"queueTitle": "Название очереди",
"queueTitlePlaceholder": "Введите название очереди (необязательно, для поиска и фильтра)",
"queueTitleHint": "Задайте название очереди пакетных задач, чтобы позже её было проще найти и вести.",
"role": "Роль",
"defaultRole": "По умолчанию",
"roleHint": "Выберите роль; все задачи выполнятся с её конфигурацией (промпт и инструменты).",
"project": "Проект",
"projectNone": "(Не привязан)",
"projectHint": "Можно привязать эту очередь к проекту; оставьте пустым, чтобы не привязывать.",
"agentMode": "Режим агента",
"agentModeSingle": "Один агент (Eino ADK)",
"agentModeMulti": "Несколько агентов (Eino)",
"agentModeHint": "Как в чате: один агент Eino (ADK) либо Deep / Plan-Execute / Supervisor (последние три требуют multi_agent.enabled).",
"concurrency": "Параллельность",
"concurrencyHint": "Число подзадач параллельно (1–8). По умолчанию 1 — последовательно; для задач со сканированием используйте 1–2.",
"scheduleMode": "Режим расписания",
"scheduleModeManual": "Вручную",
"scheduleModeCron": "Выражение cron",
"scheduleModeHint": "«Вручную» — для разового запуска; cron — для повторов. Сначала проверьте задачи вручную.",
"cronExpr": "Выражение cron",
"cronExprPlaceholder": "например, 0 */2 * * * (каждые 2 часа)",
"cronExprHint": "Стандартный cron из 5 полей: минута час день месяц день недели. Пример: `0 2 * * *` — каждый день в 02:00.",
"cronExprRequired": "Укажите выражение cron, если выбрано расписание cron",
"cronExprInvalid": "Неверный формат выражения cron. Нужно 5 полей (минута час день месяц день недели), например: 0 */2 * * *",
"executeNow": "Запустить сразу после создания",
"executeNowHint": "По умолчанию выключено. Если выключено, очередь остаётся в ожидании, и её можно запустить вручную позже.",
"tasksList": "Список задач (одна задача на строку)",
"tasksListPlaceholder": "Введите список задач, по одной на строку",
"tasksListPlaceholderExample": "Введите список задач, по одной на строку, например:\nПросканировать открытые порты 192.168.1.1\nПроверить, есть ли SQL-инъекция на https://example.com\nПеречислить поддомены example.com",
"tasksListHint": "Одна команда задачи на строку; система выполняет их через пул параллельности. Пустые строки игнорируются.",
"tasksListHintFull": "Подсказка: одна команда задачи на строку; система выполняет их через пул параллельности. Пустые строки игнорируются.",
"createQueue": "Создать очередь"
},
"batchQueueDetailModal": {
"title": "Сведения о пакетной очереди",
"addTask": "Добавить задачу",
"startExecute": "Старт",
"startExecuteNow": "Запустить сейчас (один раунд)",
"startExecuteNowConfirm": "Это очередь cron. «Старт» выполнит текущий раунд сразу, не дожидаясь следующего времени cron. Продолжить?",
"pauseQueue": "Приостановить очередь",
"rerunQueue": "Перезапустить",
"deleteQueue": "Удалить очередь",
"queueTitle": "Название задачи",
"role": "Роль",
"defaultRole": "По умолчанию",
"queueId": "ID очереди",
"status": "Статус",
"createdAt": "Создано",
"startedAt": "Начато",
"nextRunAt": "Следующий запуск",
"scheduleCronAuto": "Разрешить автозапуск cron",
"scheduleCronAutoHint": "Если выключено, выражение cron сохраняется, но очередь не запускается по расписанию; для ручного запуска используйте «Старт».",
"editSchedule": "Изменить расписание",
"editScheduleTitle": "Изменить конфигурацию расписания",
"editScheduleSuccess": "Расписание обновлено",
"editScheduleError": "Не удалось обновить расписание",
"editMetadata": "Изменить сведения",
"lastScheduleTriggerAt": "Последний запуск по расписанию",
"lastScheduleError": "Последняя ошибка расписания",
"lastRunError": "Сводка последней ошибки запуска",
"cronSchedulePausedBadge": "Расписание на паузе",
"scheduleToggleFailed": "Не удалось обновить переключатель расписания",
"completedAt": "Завершено",
"taskTotal": "Всего задач",
"concurrency": "Параллельность",
"concurrencyInvalid": "Параллелизм должен быть целым числом от 1 до 8",
"concurrencyEditHint": "Нажмите, чтобы изменить. Нельзя менять, пока очередь выполняется.",
"taskList": "Список задач",
"startLabel": "Старт",
"completeLabel": "Завершение",
"errorLabel": "Ошибка",
"resultLabel": "Результат",
"technicalDetails": "Технические сведения (ID, время, расписание)"
},
"editBatchTaskModal": {
"title": "Изменить задачу",
"taskMessage": "Текст задачи",
"taskMessagePlaceholder": "Введите текст задачи"
},
"addBatchTaskModal": {
"title": "Добавить задачу",
"taskMessage": "Текст задачи",
"taskMessagePlaceholder": "Введите текст задачи",
"add": "Добавить"
},
"vulnerabilityModal": {
"project": "Проект",
"projectNone": "(Не привязан)",
"projectHint": "Привязанные находки попадают в list_vulnerabilities этого проекта; оставьте пустым, чтобы по возможности определить проект по диалогу.",
"conversationId": "ID диалога",
"conversationIdPlaceholder": "Необязательно: ID существующего диалога; оставьте пустым для независимой уязвимости",
"conversationTag": "Метка диалога",
"conversationTagPlaceholder": "например, проверка A, еженедельный отчёт",
"taskTag": "Метка задачи",
"taskTagPlaceholder": "например, пакетное сканирование Q2, повторная проверка",
"title": "Название",
"titlePlaceholder": "/api/login уязвим к SQL-инъекции",
"description": "Описание",
"descriptionPlaceholder": "Кратко опишите суть, точку срабатывания, наблюдаемое аномальное поведение и почему это можно эксплуатировать.",
"severity": "Серьёзность",
"pleaseSelect": "Выберите",
"severityCritical": "Критическая",
"severityHigh": "Высокая",
"severityMedium": "Средняя",
"severityLow": "Низкая",
"severityInfo": "Информация",
"status": "Статус",
"statusOpen": "Открыта",
"statusConfirmed": "Подтверждена",
"statusFixed": "Исправлена",
"statusFalsePositive": "Ложное срабатывание",
"statusIgnored": "Проигнорирована",
"type": "Тип уязвимости",
"typePlaceholder": "например, SQL-инъекция, XSS, CSRF",
"target": "Цель",
"targetPlaceholder": "Укажите точно: URL, IP:порт, путь конечной точки и имя параметра.",
"preconditions": "Предусловия",
"preconditionsPlaceholder": "Состояние входа, права, учётная запись, заголовки и cookie, нужные данные, среда и версия; если не требуется — напишите «нет».",
"reproductionSteps": "Шаги воспроизведения",
"reproductionStepsPlaceholder": "Пронумеруйте шаги и укажите точку входа, параметр, полезную нагрузку, команду и точку наблюдения.",
"evidence": "Доказательства / POC",
"evidencePlaceholder": "Исходные запрос и ответ, команда curl или инструмента, заметки к снимкам, журналы, записи DNSLog и callback, результаты базы данных, пути файлов, метки времени и т. п.",
"impact": "Влияние",
"impactPlaceholder": "Опишите подтверждённое реальное влияние, например какие данные можно прочитать или изменить.",
"recommendation": "Рекомендация",
"recommendationPlaceholder": "Опишите конкретное исправление и критерии повторной проверки.",
"retestNotes": "Метод повторной проверки",
"retestNotesPlaceholder": "Как проверить исправление, включая ожидаемый код состояния, сообщение об ошибке или результат контроля доступа."
},
"vulnerabilityMd": {
"headingBasic": "Основные сведения",
"labelId": "ID уязвимости",
"labelSeverity": "Серьёзность",
"labelStatus": "Статус",
"labelType": "Тип",
"labelTarget": "Цель",
"labelConversationId": "ID диалога",
"labelTaskId": "ID задачи",
"labelTaskQueueId": "ID очереди задач",
"labelConversationTag": "Метка диалога",
"labelTaskTag": "Метка задачи",
"labelCreated": "Создано",
"labelUpdated": "Обновлено",
"headingDescription": "Описание",
"headingPreconditions": "Предусловия",
"headingReproductionSteps": "Шаги воспроизведения",
"headingEvidence": "Доказательства / POC",
"headingImpact": "Влияние",
"headingRecommendation": "Устранение",
"headingRetestNotes": "Метод повторной проверки",
"headingRetestLog": "Журнал повторных проверок"
},
"roleModal": {
"addRole": "Добавить роль",
"editRole": "Изменить роль",
"roleName": "Имя роли",
"roleNamePlaceholder": "Введите имя роли",
"roleDescription": "Описание роли",
"roleDescriptionPlaceholder": "Введите описание роли",
"roleIcon": "Значок роли",
"roleIconPlaceholder": "Введите эмодзи, например 🏆",
"roleIconHint": "Эмодзи в списке выбора роли.",
"userPrompt": "Пользовательский промпт",
"userPromptPlaceholder": "Добавляется перед сообщением пользователя...",
"userPromptHint": "Этот промпт добавляется перед сообщением пользователя и направляет ИИ. Системный промпт он не меняет.",
"relatedTools": "Связанные инструменты (необязательно)",
"defaultRoleToolsTitle": "Роль по умолчанию использует все инструменты",
"defaultRoleToolsDesc": "Роль по умолчанию использует все инструменты, включённые в управлении MCP.",
"searchToolsPlaceholder": "Поиск инструментов...",
"loadingTools": "Загрузка инструментов...",
"relatedToolsHint": "Фильтр «Связано / Не связано» выше учитывает флажки этой роли. Включение и выключение MCP задаётся в управлении MCP.",
"enableRole": "Включить эту роль",
"selectAll": "Выбрать все",
"deselectAll": "Снять выбор",
"roleNameRequired": "Укажите имя роли",
"roleNotFound": "Роль не найдена",
"firstRoleNoToolsHint": "Первая роль без выбранных инструментов по умолчанию использует все инструменты.",
"filterRoleAll": "Все",
"filterRoleOn": "Связано с ролью",
"filterRoleOff": "Не связано",
"statsPageLinked": "Отмечено на странице: {{current}} / {{total}}",
"statsPageLinkedTitle": "Флажок связывает инструмент с этой ролью; это не включение MCP",
"statsRoleLinked": "Отмечено для роли: {{current}} / {{max}}",
"statsRoleLinkedTitle": "Числитель: отмеченные инструменты (только включённые в MCP). Знаменатель: число включённых в MCP (как фильтр в управлении MCP)",
"statsRoleLinkedNoMax": "Отмечено для роли: {{current}} (переключите фильтр на «Все», уберите поиск и загрузите один раз, чтобы синхронизировать предел)",
"statsRoleLinkedNoMaxTitle": "Общее число включённых в MCP ещё не в кэше",
"statsRoleUsesAll": "Политика: все включённые в MCP ({{mcpOn}}) · всего в каталоге {{all}} (включая выключенные в MCP)",
"statsRoleUsesAllTitle": "Совпадает с числом «включено» в управлении MCP; явного списка инструментов нет",
"statsListScopeAll": "Список: все {{n}}",
"statsListScopeRoleOn": "Список: связано с этой ролью {{n}}",
"statsListScopeRoleOff": "Список: не связано с этой ролью {{n}}",
"usingAllEnabledTools": "(Используются все включённые инструменты)",
"loadToolsFailed": "Не удалось загрузить инструменты",
"cannotDeleteDefaultRole": "Нельзя удалить роль по умолчанию",
"usingAllTools": "Использовать все инструменты",
"andNMore": " и ещё {{count}}",
"toolsLabel": "Инструменты:",
"noTools": "Нет инструментов",
"paginationShow": "{{start}}–{{end}} из {{total}} инструментов",
"paginationSearch": " (поиск: «{{keyword}}»)",
"firstPage": "Первая",
"prevPage": "Назад",
"pageOf": "Стр. {{page}} / {{total}}",
"nextPage": "Далее",
"lastPage": "Последняя",
"mcpDisabledBadge": "MCP выкл.",
"mcpDisabledBadgeTitle": "Выключено в управлении MCP; флажок только задаёт связь с ролью — включите в MCP, чтобы выполнять",
"roleFilterOnBanner": "Эти инструменты отмечены и связаны с этой ролью (независимо от общего включения MCP).",
"roleFilterOffBanner": "Эти инструменты не отмечены и не связаны с этой ролью.",
"checkboxLinkTitle": "Отметьте, чтобы связать этот инструмент с этой ролью",
"bindWorkflow": "Привязать сценарий",
"bindWorkflowHint": "Если выбран сценарий, диалоги с этой ролью запускают его автоматически; поля сценария свободно задаются в JSON графа.",
"workflowPolicy": "Политика запуска сценария",
"workflowPolicyAuto": "Автозапуск",
"workflowPolicyOff": "Выкл.",
"noWorkflowBind": "Без сценария",
"workflowDisabledSuffix": " (отключён)",
"workflowMissing": "отсутствует или недоступен"
},
"workflows": {
"title": "Сценарии",
"newGraph": "Новый сценарий",
"processLibrary": "Сценарии",
"nodeLibrary": "Библиотека узлов",
"emptyList": "Сценариев пока нет",
"statusInvalid": "Ошибка проверки",
"statusEnabled": "Включён",
"statusDisabled": "Выключен",
"metaId": "ID",
"metaName": "Название",
"metaDescription": "Описание",
"metaEnabled": "Включён",
"metaIdHint": "После создания изменить нельзя; используется в API и при привязке ролей",
"metaModalTitle": "Сведения о сценарии",
"editMeta": "Изменить",
"untitled": "Сценарий без названия",
"toggleEnabled": "Включить или выключить",
"metaEnabledHint": "Выключенные сценарии роли не запускают автоматически",
"enabledUpdated": "Состояние включения обновлено",
"enabledUpdateFailed": "Не удалось обновить состояние включения",
"namePlaceholder": "Базовое веб-сканирование",
"descriptionPlaceholder": "Необязательно",
"toolbarLabel": "Инструменты правки сценария",
"canvasTools": "Инструменты холста",
"moreActions": "Ещё",
"deleteWorkflow": "Удалить сценарий",
"ai": {
"open": "Создать на естественном языке",
"title": "Создание сценария на естественном языке",
"subtitle": "ИИ готовит черновик для правки и не сохраняет и не запускает его автоматически.",
"promptLabel": "Запрос на сценарий",
"promptPlaceholder": "Пример: непрерывно отслеживать поддомены, сертификаты и открытые страницы домена и формировать отчёт при появлении новых активов",
"examplesLabel": "Примеры запросов",
"exampleDomain": "Мониторинг домена",
"exampleReport": "Одобрение отчёта",
"exampleTriage": "Разбор активов",
"includeObjective": "Также сформировать конфигурацию цели",
"allowSchedule": "Разрешить предложения запуска по расписанию",
"allowHighRisk": "Разрешить черновики узлов высокого риска",
"allowFallback": "Разрешить детерминированный запасной вариант при сбое ИИ",
"promptRequired": "Сначала опишите запрос на сценарий.",
"generateFailed": "Не удалось создать",
"generatedWithIssues": "В черновике остались ошибки проверки. Измените запрос и повторите попытку.",
"generate": "Создать черновик",
"generating": "Создание…",
"apply": "Показать на холсте",
"rendering": "Отрисовка…",
"applied": "Черновик сценария создан. Проверьте его перед сохранением.",
"canvasRendering": "ИИ собирает холст…",
"generatorAI": "Канал ИИ",
"generatorLLM": "Создано моделью",
"generatorServer": "Серверный генератор черновиков",
"generatorFallback": "Детерминированный запасной вариант",
"generatorUnknown": "Неизвестный генератор",
"llmTitle": "Создано каналом ИИ платформы по умолчанию и проверено по структуре",
"serverTitle": "Создано на сервере и прошло структурный аудит",
"fallbackTitle": "Использован детерминированный запасной вариант",
"serverFallbackNotice": "Генерация моделью недоступна: {{reason}}",
"preview": "Предпросмотр потока",
"resultNodes": "Узлы",
"resultEdges": "Связи",
"resultRepairs": "Раунды исправления",
"resultCapabilities": "Возможности узлов",
"resultTools": "Возможности инструментов",
"resultRisk": "Риск",
"resultSaveState": "Можно сохранить",
"yes": "Да",
"no": "Нет",
"missingFields": "Не хватает настроек",
"riskWarnings": "Предупреждения о риске",
"assumptions": "Допущения",
"capabilityTrace": "Цепочка возможностей",
"nodeGenerated": "Создано ИИ",
"nodeNeedsInput": "Нужен ввод",
"riskLow": "Низкий",
"riskMedium": "Средний",
"riskHigh": "Высокий",
"steps": {
"understand": "Разбор запроса",
"match": "Подбор инструментов",
"draft": "Создание узлов",
"audit": "Аудит безопасности"
},
"examples": {
"domainMonitor": "Непрерывно отслеживать поддомены, сертификаты и открытые страницы домена и формировать отчёт при появлении новых активов",
"reportReview": "Каждый день собирать сведения об угрозах, формировать отчёт и отправлять его ответственному за безопасность на одобрение",
"assetTriage": "Выделить активы высокого риска из результатов сканирования, убрать дубликаты и выдать рекомендации по устранению"
}
},
"audit": {
"title": "Аудит черновика",
"ready": "В этом черновике нет блокирующих пунктов",
"review": "Проверьте перед сохранением или запуском",
"aiNodes": "Узлы ИИ",
"needsInput": "Нужен ввод",
"highRisk": "Высокий риск",
"validation": "Ошибки структуры",
"nodeIssues": "Замечания по узлам",
"validationIssues": "Проверки структуры",
"saveConfirm": "В черновике не хватает настроек или есть узлы высокого риска. Всё равно сохранить как черновик?"
},
"package": {
"importLocal": "Импортировать локальный пакет",
"export": "Экспорт",
"title": "Импорт локального пакета",
"preflightHint": "Проверьте содержимое пакета и конфликты, прежде чем одобрить импорт",
"safeBadge": "Безопасная предпроверка",
"stepInspection": "Загрузка и предпроверка",
"stepInspectionHint": "Проверить формат, содержимое и версию",
"stepImport": "Устранить конфликт и импортировать",
"stepImportHint": "Выбрать стратегию и завершить импорт",
"stepsLabel": "Шаги импорта",
"packageEyebrow": "Локальный пакет сценария",
"packageTitle": "Выберите пакет для импорта",
"decisionEyebrow": "Стратегия импорта",
"pending": "Ожидает",
"ready": "Готово",
"footerNote": "Существующие сценарии не изменятся, пока вы не подтвердите",
"selectFile": "Выбрать локальный пакет",
"dropTitle": "Перетащите локальный пакет сюда",
"dropOr": "или",
"removeFile": "Убрать файл",
"noFile": "Файл не выбран",
"fileHint": "Только один пакет .csapkg.zip размером до 10 МиБ.",
"inspect": "Загрузить и выполнить предпроверку",
"inspecting": "Идёт безопасная предпроверка…",
"resolutionTitle": "Решение",
"confirmImport": "Подтвердить импорт",
"overwriteTitle": "Перезаписать локальный сценарий?",
"overwriteWarning": "Будут заменены название, описание, граф и состояние включения. Откат в этой версии недоступен.",
"overwriteCheck": "Подтверждаю перезапись текущего локального сценария",
"overwriteConfirm": "Перезаписать и импортировать",
"errors": {
"fileRequired": "Перед предпроверкой выберите локальный пакет сценария.",
"fileTooLarge": "Файл превышает лимит 10 МиБ. Выберите пакет меньшего размера.",
"invalidArchive": "Локальный пакет не является допустимым Zip-архивом, предпроверка невозможна.",
"unsupportedFormat": "Этот формат или версия локального пакета не поддерживается.",
"invalidManifest": "Манифест локального пакета недопустим, предпроверка невозможна.",
"checksumMismatch": "Проверка локального пакета не пройдена: файл мог быть повреждён или изменён.",
"multipleWorkflows": "В этой версии поддерживаются локальные пакеты только с одним сценарием.",
"workflowInvalid": "Определение сценария в локальном пакете недопустимо, предпроверка невозможна.",
"inspectionNotFound": "Запись предпроверки больше не существует. Загрузите пакет и выполните предпроверку снова.",
"inspectionExpired": "Срок предпроверки истёк. Загрузите пакет и выполните предпроверку снова.",
"inspectionConsumed": "Эта предпроверка уже использована при импорте и не может быть применена повторно.",
"conflictChanged": "Локальный сценарий изменился после предпроверки. Перед импортом выполните предпроверку снова.",
"idConflict": "Выбранное решение больше не соответствует текущему конфликту. Выполните предпроверку снова.",
"invalidAction": "Решение импорта недопустимо. Выберите его снова.",
"invalidRenameId": "Введите свободный новый ID сценария.",
"overwriteConfirmationRequired": "Подтвердите перезапись, прежде чем заменять локальный сценарий.",
"idempotencyKeyRequired": "Браузер не может создать идентификатор запроса импорта. Обновите страницу и повторите попытку.",
"idempotencyKeyReused": "Состояние запроса импорта недопустимо. Выполните предпроверку снова и повторите попытку.",
"importFailed": "Импорт не выполнен; локальный сценарий не изменён.",
"exportFailed": "Экспорт не выполнен. Повторите попытку позже.",
"workflowNotFound": "Сценарий не найден, экспорт невозможен.",
"generic": "Операция не выполнена. Повторите попытку позже.",
"serviceUnavailable": "Служба импорта не готова. Обновите страницу и повторите попытку."
},
"conflict": {
"identical": "Найден локальный сценарий с тем же ID и тем же содержимым; импорт будет пропущен.",
"idConflict": "Найден локальный сценарий с тем же ID, но другим содержимым. По умолчанию сохраняется локальная версия.",
"none": "Локальный сценарий с таким ID не найден. Можно создать новый сценарий."
},
"summary": {
"title": "Результат предпроверки",
"passed": "Проверки пройдены",
"workflowName": "Название сценария",
"unnamedWorkflow": "Сценарий без названия",
"sourceId": "ID исходного сценария",
"sourceRevision": "Исходная ревизия",
"graphSize": "Размер графа",
"graphSizeValue": "{{nodes}} узлов · {{edges}} связей",
"contentHash": "Хеш содержимого",
"expiresAt": "Срок предпроверки"
},
"resolution": {
"needInspection": "Сначала выберите локальный пакет и выполните предпроверку.",
"createTitle": "Можно создать",
"createHint": "Импорт создаст новый локальный сценарий.",
"identicalTitle": "Дубликат не нужен",
"identicalHint": "Такое содержимое уже есть. Повторный импорт не нужен.",
"keepExisting": "Оставить локальную версию",
"keepExistingHint": "Текущий локальный сценарий не меняется; запись импорта сохраняется.",
"revealRiskChoices": "Изменить решение",
"overwrite": "Перезаписать локальную версию",
"overwriteHint": "Заменить название, описание, граф и состояние включения; потребуется повторное подтверждение.",
"rename": "Сохранить с новым ID",
"renameHint": "Оставить текущий локальный сценарий и создать копию с новым ID.",
"newWorkflowId": "Новый ID сценария",
"newWorkflowIdPlaceholder": "Например: web-scan-basic-copy",
"continueOverwrite": "К подтверждению перезаписи",
"confirmRename": "Подтвердить сохранение с новым ID",
"confirmCreate": "Подтвердить создание",
"confirmSkip": "Подтвердить пропуск импорта",
"confirmKeep": "Подтвердить сохранение локальной версии",
"confirmComplete": "Подтвердить завершение"
},
"result": {
"created": "Импорт завершён: создан новый локальный сценарий.",
"overwritten": "Импорт завершён: локальный сценарий перезаписан.",
"renamed": "Импорт завершён: локальный сценарий создан с новым ID.",
"keptExisting": "Локальный сценарий оставлен без изменений.",
"skippedIdentical": "Такое локальное содержимое уже есть; импорт пропущен.",
"complete": "Импорт завершён.",
"skippedAction": "Импорт пропущен",
"keptAction": "Локальная версия сохранена",
"completedAction": "Импорт завершён"
},
"exportSelectSaved": "Перед экспортом выберите сохранённый сценарий."
},
"connect": "Связать",
"connecting": "Связывание",
"deleteSelected": "Удалить выбранное",
"autoLayout": "Авторазмещение",
"dryRun": "Пробный запуск",
"canvasEmpty": "Перетащите узлы слева на холст или создайте сценарий на естественном языке",
"properties": "Свойства",
"nodeProperties": "Свойства узла",
"edgeProperties": "Свойства связи",
"deleteNode": "Удалить узел",
"deleteEdge": "Удалить связь",
"propertyEmpty": "Выберите узел или связь, чтобы изменить свойства",
"propLabel": "Название",
"propType": "Тип",
"customFields": "Дополнительные поля",
"addField": "Добавить поле",
"noCustomFields": "Нет дополнительных полей",
"nodes": {
"start": "Старт",
"tool": "Инструмент",
"agent": "Агент",
"condition": "Условие",
"hitl": "Одобрение",
"output": "Вывод",
"end": "Конец",
"default": "Узел"
},
"edges": {
"yes": "Да",
"no": "Нет"
},
"config": {
"inputKeys": "Входные переменные",
"mcpTool": "Инструмент MCP",
"selectTool": "Выберите инструмент",
"searchTool": "Поиск инструментов…",
"noToolsFound": "Нет подходящих инструментов",
"noToolsAvailable": "Нет доступных инструментов",
"toolDisabled": " (выключен)",
"argumentsTemplate": "Шаблон аргументов",
"argumentsStatic": "Аргументы инструмента (JSON)",
"timeoutSeconds": "Таймаут (секунды)",
"optional": "Необязательно",
"agentMode": "Режим агента",
"inputSource": "Источник ввода",
"inputBinding": "Привязка поля ввода",
"inputBindingHint": "from = источник данных, field = имя поля (например, output, message)",
"nodeInstruction": "Инструкция узла",
"instructionPlaceholder": "Опишите, что должен сделать этот узел",
"outputKey": "Имя выходной переменной",
"conditionExpression": "Выражение условия",
"conditionHint": "Узел вычисляет matched (true/false); исходящие связи задают ветви: первая — «Да», вторая — «Нет». На связи также можно указать <code>{{previous.matched}} == \"true\"</code>.",
"conditionGuideTitle": "Доступный синтаксис",
"conditionGuideVars": "Переменные: {{previous.output}}, {{previous.matched}}, {{inputs.message}}, {{outputs.name}}, {{nodeId.output}}",
"conditionGuideOps": "Операторы: ==, !=, >, >=, <, <=, contains, matches, &&, ||",
"conditionGuideJson": "Вложенные поля: jsonpath(value, \"$.status\") или jq(value, \".severity\")",
"edgeCondition": "Условие связи",
"edgeBranch": "Ветвь условия",
"selectBranch": "Выбрать",
"edgeConditionHintCondition": "{{previous.matched}} == \"true\" (Да) или == \"false\" (Нет)",
"edgeConditionHintExample": "например, {{previous.output}} == \"ok\"",
"edgeBranchHint": "Первая связь от узла условия по умолчанию ведёт в ветвь «Да», вторая — в «Нет»; условия можно задать здесь.",
"joinStrategy": "Стратегия объединения",
"joinStrategyHint": "Если в узел входят несколько предыдущих, выберите, как собрать previous: объединить все, последний по порядку на холсте, первый непустой или прервать при ошибке.",
"hitlPrompt": "Текст одобрения",
"hitlPromptPlaceholder": "Одобрить продолжение",
"hitlReviewer": "Проверяющий",
"hitlInteractiveHint": "Выполнение останавливается на этом узле. Чтобы продолжить, одобрите или отклоните шаг через API или панель мониторинга.",
"promptBinding": "Привязка поля запроса",
"promptBindingHint": "Если текст пуст, текст одобрения берётся из привязанного поля",
"outputSource": "Источник переменной",
"sourceBinding": "Привязка поля вывода",
"sourceBindingHint": "Значение привязанного поля записывается в выходную переменную; заданное ниже статическое значение его заменяет",
"staticValue": "Статическое значение вывода",
"resultBinding": "Привязка итога",
"resultBindingHint": "Поле, которое показывается в итоге конечного узла",
"endTemplate": "Шаблон итога"
},
"defaultHitlPrompt": "Подтвердите, нужно ли продолжать этот шаг",
"nodeFallback": "Узел {{n}}",
"loadFailed": "Не удалось загрузить сценарии",
"saveFailed": "Не удалось сохранить сценарий",
"dryRunPrompt": "Сообщение для пробного запуска",
"dryRunPromptHint": "Это сообщение передаётся узлу «Старт» как вход message.",
"dryRunFailed": "Пробный запуск не выполнен",
"dryRunDone": "Пробный запуск завершён",
"dryRunTrace": "Трассировка пробного запуска",
"dryRunNoTrace": "Нет трассировки",
"deleteFailed": "Не удалось удалить сценарий",
"saved": "Сценарий сохранён",
"deleted": "Сценарий удалён",
"idNameRequired": "Нужны ID и название сценария",
"selectToDelete": "Выберите сценарий для удаления",
"confirmDelete": "Удалить сценарий {{id}}?",
"duplicateEdge": "Между этими узлами уже есть связь",
"connectModeOn": "Режим связи: нажмите исходный узел, затем целевой",
"connectModeOff": "Режим связи выключен",
"validation": {
"needStart": "Нужен хотя бы один узел «Старт»",
"needOutput": "Нужен хотя бы один узел «Вывод»",
"edgeSelfLoop": "Связь {{id}} не может указывать на саму себя",
"edgeSourceMissing": "Исходный узел связи {{id}} не существует",
"edgeTargetMissing": "Целевой узел связи {{id}} не существует",
"startIncoming": "У узла «Старт» {{label}} не должно быть входящих связей",
"outputOutgoing": "У узла «Вывод» {{label}} не должно быть исходящих связей",
"toolNeedsMcp": "Для узла инструмента {{label}} нужен инструмент MCP",
"conditionNeedsExpr": "Для узла условия {{label}} нужно выражение условия",
"conditionNeedsOutEdge": "Узлу условия {{label}} нужна хотя бы одна исходящая связь (ветвь «Да» или «Нет»)",
"conditionTooManyEdges": "У узла условия {{label}} должно быть не более двух исходящих связей («Да» и «Нет»); для третьей и следующих задайте условия связей",
"conditionBranchLabel": "Исходящие связи узла условия {{label}} нужно пометить «Да» или «Нет»",
"conditionBranchDuplicate": "У узла условия {{label}} повторяются ветви",
"nodeNeedsIncoming": "Узлу {{label}} нужна входящая связь",
"nodeNeedsOutgoing": "Узлу {{label}} нужна исходящая связь",
"nodeUnreachable": "До узла {{label}} нельзя дойти от «Старт»",
"graphCycle": "В сценарии есть цикл; граф должен быть без циклов",
"serverFailed": "Серверная проверка графа не пройдена",
"outputNeedsKey": "Для узла вывода {{label}} нужно имя выходной переменной"
}
},
"c2": {
"clipboardCopied": "Скопировано в буфер",
"common": {
"justNow": "Только что",
"minutesAgo": "{{n}} мин. назад",
"hoursAgo": "{{n}} ч. назад"
},
"fmt": {
"durationMs": "{{n}} мс",
"durationSec": "{{n}} с",
"durationMin": "{{n}} мин"
},
"files": {
"parent": "Вверх",
"refresh": "Обновить",
"upload": "Загрузить",
"uploading": "Загрузка {{name}} · {{percent}}%",
"uploadOk": "Загружено",
"uploadQueued": "Задача загрузки поставлена в очередь",
"uploadPendingApproval": "Задача загрузки ожидает одобрения HITL",
"uploadUnsupported": "Загрузка для этой сессии не поддерживается",
"uploadCurlBeacon": "Маяки Curl не загружают файлы; используйте HTTP Beacon",
"uploadTcpShell": "Это TCP reverse shell (bash/nc): только команды и скачивание. Для загрузки переподключитесь: (1) скомпилированным маяком CSB1 на том же слушателе или (2) маяком HTTP/HTTPS Beacon.",
"uploadTcpReverse": "Это TCP reverse shell (bash/nc): только команды и скачивание. Для загрузки переподключитесь: (1) скомпилированным маяком CSB1 на том же слушателе или (2) маяком HTTP/HTTPS Beacon.",
"loading": "Загрузка…",
"timeout": "Время загрузки файлов истекло",
"emptyDir": "Пустой каталог",
"colName": "Имя",
"colSize": "Размер",
"colMode": "Режим",
"colActions": "Действия",
"open": "Открыть",
"download": "Скачать",
"downloadOk": "Скачано",
"failed": "Ошибка"
},
"listeners": {
"nameRequired": "Введите имя слушателя",
"typeRequired": "Выберите тип слушателя",
"portInvalid": "Порт должен быть целым числом от 1 до 65535",
"saveFailed": "Не удалось сохранить слушатель",
"title": "Управление слушателями",
"create": "Создать слушатель",
"name": "Имя",
"type": "Тип",
"bindHost": "Адрес привязки",
"bindPort": "Порт привязки",
"status": "Статус",
"remark": "Примечание",
"actions": "Действия",
"start": "Запустить",
"stop": "Остановить",
"delete": "Удалить",
"edit": "Изменить",
"running": "Работает",
"stopped": "Остановлен",
"placeholderName": "Имя слушателя",
"placeholderHost": "По умолчанию 127.0.0.1",
"placeholderPort": "Номер порта",
"placeholderRemark": "Примечание, необязательно",
"emptyTitle": "Слушателей пока нет",
"emptyHint": "Создайте первый слушатель C2 кнопкой ниже",
"headerCreateBtn": "+ Создать слушатель",
"modalCreateTitle": "Создать слушатель",
"placeholderNameExample": "напр. http-beacon-01",
"bindHintExternal": "0.0.0.0 — доступ извне",
"callbackHost": "Хост обратного вызова (необязательно)",
"callbackHostHint": "Публичный IP или имя хоста для полезных нагрузок и маяков; отдельно от адреса привязки. Если пусто, при генерации полезной нагрузки используется адрес привязки или автоопределение.",
"allowLegacyShell": "Разрешить незашифрованный классический reverse shell (только лаборатория)",
"allowLegacyShellHint": "По умолчанию выключено. Если включено, открытые TCP-подключения bash/nc регистрируют сессии и уязвимы для сканеров из интернета; в рабочей среде используйте зашифрованные сборки Beacon.",
"malleableProfile": "Malleable Profile",
"malleableProfileHint": "Необязательно. Заголовки ответов HTTP/HTTPS Beacon и маскировка трафика. Чтобы применить изменения, остановите слушатель и запустите его снова.",
"malleableProfileNone": "Нет",
"malleableProfileNonHttpHint": "Этот тип слушателя не использует Malleable Profile. Профиль можно привязать заранее, если позже переключитесь на HTTP/HTTPS Beacon.",
"malleableProfileEmptyListHint": "Сохранённых профилей пока нет. Создайте профиль в разделе C2 → Маскировка трафика / Malleable Profile и выберите его здесь.",
"placeholderRemarkLong": "Примечание, необязательно",
"editTitle": "Изменить слушатель",
"startedAt": "Запущен {{time}}",
"startedAtPrefix": "Запущен",
"statusError": "Ошибка",
"bindEndpoint": "Адрес прослушивания",
"callbackShort": "Обратный вызов",
"profileBadgeTitle": "Привязан Malleable Profile",
"confirmDelete": "Удалить этот слушатель? Все связанные сессии и задачи будут удалены.",
"toastFillRequired": "Заполните все обязательные поля",
"toastCreated": "Слушатель создан",
"toastStarted": "Слушатель запущен",
"toastStopped": "Слушатель остановлен",
"toastDeleted": "Слушатель удалён",
"toastUpdated": "Слушатель обновлён",
"loadingProfiles": "Загрузка Malleable Profile…",
"toastProfilesLoadFailed": "Не удалось загрузить Malleable Profile",
"submitCreate": "Создать",
"typeLabels": {
"http_beacon": "HTTP Beacon",
"https_beacon": "HTTPS Beacon",
"tcp_reverse": "TCP Reverse",
"websocket": "WebSocket"
}
},
"sessions": {
"title": "Управление сессиями",
"hostname": "Имя хоста",
"username": "Пользователь",
"os": "ОС",
"arch": "Арх.",
"ip": "IP-адрес",
"status": "Статус",
"active": "Активна",
"sleeping": "Сон",
"dead": "Нет связи",
"isAdmin": "Админ",
"pid": "PID",
"sleep": "Интервал сна",
"jitter": "Джиттер",
"firstSeen": "Первый контакт",
"lastCheckIn": "Последний отклик",
"selectSession": "Выбор сессии",
"terminal": "Терминал",
"files": "Файлы",
"tasks": "Задачи",
"info": "Сведения",
"execute": "Выполнить команду",
"kill": "Завершить сессию",
"cardDeleteSession": "Удалить",
"btnSleep": "Сон",
"emptyTitle": "Нет активных сессий",
"emptyHint": "Запустите слушатель и выполните полезную нагрузку на цели",
"unknownHost": "неизвестно",
"rootBadge": "ROOT",
"curlBeaconTitle": "Облегчённый маяк Curl",
"curlBeaconBody": "Эта сессия создана однострочником Curl: только heartbeat и задачи.\nИнтерактивный терминал и файлы требуют скомпилированного бинарника Beacon или слушателя TCP reverse.",
"infoSessionId": "ID сессии",
"infoImplantUuid": "UUID импланта",
"infoHostname": "Имя хоста",
"infoUsername": "Пользователь",
"infoOs": "ОС",
"infoArch": "Арх.",
"infoPid": "PID",
"infoProcess": "Процесс",
"infoAdmin": "Админ",
"infoInternalIp": "Внутренний IP",
"infoSleep": "Сон",
"infoSleepLine": "{{sec}} с (джиттер {{jitter}}%)",
"infoFirstSeen": "Первый контакт",
"infoLastCheckin": "Последний отклик",
"infoNote": "Заметка",
"infoNoteEmpty": "Нет заметок",
"infoCopy": "Копировать",
"noteEdit": "Изменить",
"notePlaceholder": "Заметка, чтобы опознать эту сессию…",
"toastNoteSaved": "Заметка сохранена",
"toastNoteTooLong": "Не больше 2000 символов",
"infoSectionIdentity": "Идентификация",
"infoSectionSystem": "Система",
"infoSectionNetwork": "Сеть и маяк",
"infoSectionTimeline": "Хронология",
"infoSectionNote": "Заметки",
"adminYes": "Да",
"adminNo": "Нет",
"promptSleepSeconds": "Интервал сна (секунды)",
"promptJitterPercent": "Джиттер, % (0–100)",
"sleepModalHint": "Сохраняется на сервере и ставит в очередь задачу сна. Имплант применит её при следующем опросе задач; следующие отклики сохранят эти параметры.",
"sleepModalTitle": "Интервал маяка",
"sleepModalCurrent": "Сейчас {{sec}} с · джиттер {{jitter}}%",
"sleepModalPreview": "Ориентир {{min}}–{{max}} с",
"sleepModalPresets": "Шаблоны",
"toastSleepInvalid": "Интервал сна — не меньше 1 с",
"toastSleepUpdated": "Параметры сна обновлены",
"confirmExitSession": "Отправить этой сессии команду выхода?",
"confirmDeleteSession": "Удалить эту сессию и связанные задачи и файлы с сервера? (Импланту команда выхода не отправляется; чтобы завершить агент, используйте «Завершить сессию».)",
"toastExitSent": "Команда выхода отправлена",
"toastSessionDeleted": "Запись сессии удалена",
"terminalWelcome": "Терминал CyberStrikeAI C2 — Enter: выполнить; ↑↓: история; Ctrl+L: очистить; Ctrl+C: отменить ввод",
"termStatusReady": "Готов",
"termStatusExec": "Выполнение…",
"termStatusErr": "Ошибка",
"termStatusTimeout": "Тайм-аут",
"termNoSession": "Ошибка: сессия не выбрана",
"termWaitTimeout": "[Время ожидания результата истекло]",
"termCleared": "Терминал очищен",
"termNoSelection": "Текст не выделен",
"termWaitFinish": "Дождитесь завершения текущей команды",
"termCtrlC": "Удалённое прерывание в этой версии не поддерживается",
"termQueued": "[Команда в очереди — выполнится после текущей задачи]",
"clearTerminal": "Очистить",
"batchDelete": "Удалить выбранные",
"deleteFiltered": "Удалить отфильтрованные",
"selectAll": "Выбрать все",
"filterAllStatus": "Все статусы",
"filterAllListeners": "Все слушатели",
"filterSearchPlaceholder": "Имя хоста, пользователь или IP",
"filterApply": "Фильтр",
"filterReset": "Сбросить",
"filterSuspicious": "Вероятные ложные срабатывания",
"filterCount": "Всего {{n}}, выбрано {{selected}}",
"emptyFilter": "Нет сессий по текущим фильтрам",
"listEmpty": "Нет сессий",
"selectPromptTitle": "Выберите сессию",
"selectPromptHint": "Нажмите сессию в списке слева, чтобы открыть терминал, файлы и задачи.",
"confirmBatchDelete": "Удалить выбранные сессии ({{n}})? Связанные задачи и записи файлов будут удалены.",
"confirmDeleteFiltered": "Удалить все сессии из текущей выборки ({{n}})?",
"toastSelectFirst": "Выберите хотя бы одну сессию",
"toastBatchDeleted": "Удалено сессий: {{n}}"
},
"tasks": {
"title": "Управление задачами",
"taskId": "ID задачи",
"type": "Тип",
"status": "Статус",
"result": "Результат",
"error": "Ошибка",
"duration": "Длительность",
"createdAt": "Создано",
"queued": "В очереди",
"sent": "Отправлена",
"running": "Выполняется",
"success": "Успешно",
"failed": "Сбой",
"cancelled": "Отменена",
"viewResult": "Результат",
"cancel": "Отменить задачу",
"refresh": "Обновить задачи",
"pending": "Ожидание",
"emptyAll": "Задач пока нет",
"emptySession": "Для этой сессии задач нет",
"sessionTaskHistory": "История задач",
"sessionTaskCount": "Задач: {{n}}",
"colTask": "Задача",
"colSession": "Сессия",
"colType": "Тип",
"colCommand": "Команда",
"colStatus": "Статус",
"colDuration": "Длительность",
"colCreated": "Создано",
"colActions": "Действия",
"view": "Просмотр",
"cancelBtn": "Отмена",
"modalTitle": "Сведения о задаче",
"labelId": "ID",
"labelSession": "Сессия",
"labelType": "Тип",
"labelCommand": "Команда",
"labelPayload": "Полезная нагрузка",
"labelStatus": "Статус",
"labelCreated": "Создано",
"labelSent": "Отправлено",
"labelCompleted": "Завершено",
"labelDuration": "Длительность",
"labelError": "Ошибка",
"labelResult": "Вывод",
"toastCancelled": "Задача отменена",
"batchDelete": "Удалить выбранные",
"selectAll": "Выбрать все на странице",
"deleteOne": "Удалить задачу",
"deleteBtn": "Удалить",
"confirmDeleteOne": "Удалить эту запись задачи с сервера? Это нельзя отменить.",
"confirmBatchDelete": "Удалить выбранные записи задач ({{n}})? Это нельзя отменить.",
"toastSelectFirst": "Сначала выберите задачи",
"toastDeleted": "Удалено задач: {{n}}",
"paginationShow": "{{start}}-{{end}} из {{total}}",
"paginationPerPage": "На странице",
"paginationFirst": "Первая",
"paginationPrev": "Назад",
"paginationPage": "Стр. {{current}} / {{total}}",
"paginationNext": "Далее",
"paginationLast": "Последняя",
"statTotal": "Отфильтровано",
"timePresets": "Быстро",
"preset15m": "15 минут",
"preset1h": "1 час",
"preset24h": "24 часа",
"preset7d": "7 дней",
"presetAll": "Все",
"filterAllStatuses": "Все статусы",
"filterAllTypes": "Все типы",
"filterSession": "ID сессии",
"filterSessionPlaceholder": "s_xxxxxxxx",
"applyFilters": "Применить",
"resetFilters": "Сбросить"
},
"payloads": {
"386": "386",
"title": "Генератор полезной нагрузки",
"oneliner": "Однострочник",
"build": "Сборка маяка",
"listener": "Слушатель",
"kind": "Вариант",
"host": "Хост обратного вызова",
"generate": "Сгенерировать",
"copy": "Копировать",
"copied": "Скопировано",
"os": "Целевая ОС",
"arch": "Целевая архитектура",
"buildBtn": "Собрать",
"building": "Сборка...",
"download": "Скачать",
"linux": "Linux",
"windows": "Windows",
"darwin": "macOS",
"amd64": "AMD64",
"arm64": "ARM64",
"arm": "ARM",
"onelinerDesc": "Однострочный reverse shell для цели (Bash / Python / PowerShell / Curl).",
"buildDesc": "Кросс-компиляция полного бинарника Beacon для Linux / Windows / macOS.",
"hostOptional": "Хост обратного вызова (необязательно)",
"placeholderListenerHost": "Пусто: хост обратного вызова слушателя, иначе адрес привязки",
"generateOnelinerBtn": "Сгенерировать однострочник",
"buildBeaconBtn": "Собрать маяк",
"loopbackBeaconWarning": "127.0.0.1 работает, только если маяк и C2 на одном хосте и в одном сетевом пространстве имён (простой локальный тест). Если C2 в Docker, а маяк на хосте, 127.0.0.1 указывает на loopback хоста, а не контейнера: укажите опубликованный порт и LAN-IP хоста или host.docker.internal. Для удалённых целей привяжите 0.0.0.0 и пересоберите.",
"noBeaconListenersTcpOnly": "tcp_reverse поддерживает скомпилированный Beacon (TCP и кадрирование CSB1); классический shell — через однострочник выше",
"noListenersOption": "Нет слушателей",
"noKindOption": "Нет вариантов",
"toastLoadListenersFail": "Не удалось загрузить слушатели: {{msg}}",
"toastPickListener": "Сначала выберите слушатель",
"toastOnelinerFail": "Не удалось сгенерировать однострочник: {{msg}}",
"toastBuildFail": "Не удалось собрать маяк: {{msg}}",
"toastBuildSuccess": "Сборка выполнена: {{bytes}} байт",
"buildSuccessTitle": "Сборка выполнена",
"buildMetaOsArch": "ОС: {{os}} | Арх.: {{arch}}",
"buildSize": "Размер: {{bytes}} байт",
"clickToCopyTitle": "Нажмите, чтобы скопировать",
"toastDownloadQueued": "Задача скачивания поставлена в очередь"
},
"events": {
"title": "Аудит событий",
"level": "Уровень",
"category": "Категория",
"message": "Сообщение",
"time": "Время",
"info": "Инфо",
"warn": "Предупреждение",
"critical": "Критический",
"listener": "Слушатель",
"session": "Сессия",
"task": "Задача",
"payload": "Полезная нагрузка",
"opsec": "OPSEC",
"refresh": "Обновить",
"empty": "Событий пока нет",
"batchDelete": "Удалить выбранные",
"selectAll": "Выбрать все на странице",
"deleteOne": "Удалить",
"confirmDeleteOne": "Удалить это событие? Это нельзя отменить.",
"confirmBatchDelete": "Удалить выбранные события ({{n}})? Это нельзя отменить.",
"toastSelectFirst": "Сначала выберите события",
"toastDeleted": "Удалено событий: {{n}}",
"paginationShow": "{{start}}-{{end}} из {{total}}",
"paginationPerPage": "На странице",
"paginationFirst": "Первая",
"paginationPrev": "Назад",
"paginationPage": "Стр. {{current}} / {{total}}",
"paginationNext": "Далее",
"paginationLast": "Последняя",
"statTotal": "Отфильтровано",
"timePresets": "Быстро",
"preset15m": "15 минут",
"preset1h": "1 час",
"preset24h": "24 часа",
"preset7d": "7 дней",
"presetAll": "Все",
"filterAllLevels": "Все уровни",
"filterAllCategories": "Все категории",
"filterSession": "ID сессии",
"filterSessionPlaceholder": "s_xxxxxxxx",
"applyFilters": "Применить",
"resetFilters": "Сбросить",
"colSession": "Сессия",
"colTask": "Задача",
"colId": "ID события",
"detailTitle": "Сведения о событии",
"detailData": "Дополнительные данные"
},
"profiles": {
"title": "Malleable Profile",
"name": "Имя",
"userAgent": "User-Agent",
"uris": "Пути URI",
"headers": "Заголовки",
"jitter": "Диапазон джиттера",
"create": "Создать профиль",
"createBtn": "+ Создать профиль",
"delete": "Удалить",
"empty": "Профилей пока нет",
"defaultValue": "По умолчанию",
"modalCreateTitle": "Создать Malleable Profile",
"profileNameLabel": "Имя профиля",
"placeholderProfileName": "напр. cdn-fronting",
"hintUa": "Свой User-Agent для HTTP-запросов Beacon",
"labelBeaconUris": "URI Beacon (по одному в строке)",
"hintUris": "Пути URI, по которым маяк выходит на связь",
"labelJitterMin": "Джиттер, мин. (мс)",
"labelJitterMax": "Джиттер, макс. (мс)",
"labelRespHeaders": "Свои заголовки ответа (JSON)",
"hintHeaders": "Заголовки ответа HTTP, имитирующие обычный сервер",
"toastNameRequired": "Укажите имя профиля",
"toastInvalidHeadersJson": "Некорректный JSON в заголовках ответа",
"toastInvalidJitter": "Jitter должен быть целым: 0 <= минимум <= максимум",
"toastCreated": "Профиль создан",
"toastDeleted": "Профиль удалён",
"confirmDelete": "Удалить этот профиль?",
"submitCreate": "Создать"
}
},
"rbac": {
"title": "Доступ к платформе",
"pageSubtitle": "Участники, роли и доступные данные в одном месте.",
"createUser": "Добавить участника",
"memberManagement": "Участники",
"memberManagementHint": "Назначение ролей и области данных участникам",
"roleManagement": "Роли",
"roleManagementHint": "Наборы прав и видимость по умолчанию",
"users": "Пользователи",
"usersHint": "Выберите учётную запись, чтобы управлять ролями и областью ресурсов.",
"searchUsers": "Имя пользователя или отображаемое имя",
"metricUsers": "Учётные записи",
"metricEnabled": "Включено",
"metricRoles": "Роли",
"metricAssignments": "Выдачи ресурсов",
"metricUsersPill": "учётные записи",
"metricEnabledPill": "включённые учётные записи",
"metricRolesPill": "роли",
"metricAssignmentsPill": "выдачи",
"selectUser": "Выберите пользователя",
"selectUserHint": "Выберите пользователя платформы, чтобы изменить роли, статус и выдачи ресурсов.",
"createRole": "Новая роль",
"tabRoles": "Роли и права",
"tabAssignments": "Выдачи ресурсов",
"tabAudit": "История изменений",
"roleMembership": "Роли участника",
"roleMembershipHint": "Роли определяют допустимые действия, область ресурсов — видимые данные.",
"unsavedChanges": "Есть несохранённые изменения",
"saveRoleChanges": "Сохранить роли",
"resourceType": "Тип ресурса",
"resourceId": "ID ресурса",
"resourceIdPlaceholder": "Введите ID ресурсов через запятую",
"searchResource": "Поиск реальных ресурсов",
"searchResourcePlaceholder": "Поиск по имени или ID",
"assignSelected": "Выдать выбранное",
"advancedAssignment": "Дополнительно: указать ID",
"advancedAssignmentHint": "Для известных ID из журналов или API. При отправке существование ресурса всё равно проверяется.",
"availableResources": "Доступные ресурсы",
"availableResourcesHint": "Выбор на странице сохраняется при перелистывании",
"currentAssignments": "Текущие явные выдачи",
"allResourceTypes": "Все типы",
"searchAssignments": "Имя или ID выданного ресурса",
"items": "эл.",
"assignmentHelp": "Явные выдачи нужны только ролям «Назначенные ресурсы». Выдача проекта также охватывает диалоги и уязвимости этого проекта.",
"assignResource": "Выдать",
"roleCatalog": "Каталог ролей",
"roleCatalogHint": "Сначала задайте права и область ресурсов, затем назначьте роль участникам.",
"searchRoles": "Поиск ролей или прав",
"filterRoles": "Фильтр ролей",
"userModalTitle": "Пользователь платформы",
"username": "Имя пользователя",
"displayName": "Отображаемое имя",
"password": "Пароль",
"passwordPlaceholder": "При изменении оставьте пустым, чтобы не менять",
"enabled": "Включить учётную запись",
"roles": "Роли",
"roleModalTitle": "Роль платформы",
"roleName": "Имя роли",
"description": "Описание",
"scope": "Область ресурсов",
"permissions": "Права",
"searchPermissions": "Поиск прав, напр. project:read",
"selectVisible": "Выбрать видимые",
"clearVisible": "Снять видимые",
"deleteUserConfirm": "Удалить этого пользователя платформы? Активные сессии будут сразу отозваны.",
"deleteBuiltinUser": "Встроенного администратора удалить нельзя",
"deleteRoleConfirm": "Удалить эту роль платформы?",
"scopeHint": "Область ресурсов и права на операции вместе определяют фактический доступ.",
"builtinAccount": "Встроенная учётная запись",
"statusEnabled": "Включена",
"statusDisabled": "Отключена",
"noRoleAssigned": "Роль не назначена",
"noExplicitGrant": "Нет явных выдач",
"notConfigured": "Не настроено",
"noRoleDescription": "Нет описания роли",
"noDescription": "Нет описания",
"systemBuiltin": "Системная роль",
"customRole": "Своя",
"operationPermissions": "Права на операции",
"assignedMembers": "Участники",
"viewPermissions": "Смотреть права",
"effectivePermissions": "Действующие права",
"effectiveScope": "Действующая область",
"revoke": "Отозвать",
"retry": "Повторить",
"alreadyAssigned": "Назначено",
"loadingResources": "Загрузка реальных ресурсов…",
"viewSystemRole": "Просмотр системной роли",
"editRole": "Изменить роль",
"resourceCount": "Ресурсов: {{count}}",
"permissionCount": "Прав: {{count}}",
"userCount": "Пользователей: {{count}}",
"confirmDiscardSwitchUser": "Изменения ролей не сохранены. Отменить их и переключить участника?",
"confirmDiscardEditUser": "Изменения ролей не сохранены. Отменить их и изменить профиль участника?",
"confirmDiscardSwitchTab": "Изменения ролей не сохранены. Отменить их и переключить вкладку?",
"confirmDiscardResourceType": "Смена типа ресурса сбросит текущий выбор. Продолжить?",
"pendingGrants": "К выдаче",
"clearSelection": "Снять выбор",
"confirmGrant": "Подтвердить выдачу",
"removePending": "Убрать",
"selectedCount": "Выбрано: {{count}}",
"noRoleNoticeTitle": "Роль не назначена",
"noRoleNoticeHint": "Назначьте роль, прежде чем настраивать выдачи ресурсов. Без роли доступны только собственные данные, большинство функций недоступно.",
"assignRolesNow": "Назначить роли",
"viewPermissionsDetail": "Подробнее",
"hidePermissions": "Скрыть",
"effectivePermissionsDetail": "Состав действующих прав",
"editUserRolesHint": "Роли изменяются в карточке участника, вкладка «Роли и права».",
"auditTitle": "История изменений прав",
"auditHint": "События аудита по доступу этого участника к платформе.",
"unknownActor": "Неизвестный инициатор",
"metricUserContext": "Участник: {{name}} · ролей: {{roles}} · выдач: {{grants}}",
"currentMemberLabel": "Выбранный участник",
"auditPageSizeLabel": "Строк на странице",
"auditPageSize20": "20 / стр.",
"auditPageSize50": "50 / стр.",
"auditPageSize100": "100 / стр.",
"auditFilters": {
"filterBarLabel": "Фильтры истории изменений",
"actionLabel": "Фильтр по действию",
"allActions": "Все действия",
"actorPlaceholder": "Имя инициатора",
"resourceTypeLabel": "Фильтр по типу ресурса",
"allResourceTypes": "Все типы ресурсов"
},
"unknownTarget": "Неизвестный участник",
"auditColumns": {
"action": "Действие",
"actor": "Инициатор",
"target": "Участник",
"resourceType": "Тип ресурса",
"resourceId": "ID ресурса",
"time": "Время"
},
"deleteUserConfirmDetailed": "Удалить участника {{name}} (@{{username}})?\n\nБудут отозваны активные сессии, а также привязки ролей ({{roles}}) и выдачи ресурсов ({{grants}}).",
"auditActions": {
"create_user": "Создание пользователя платформы",
"update_user": "Обновление пользователя платформы",
"delete_user": "Удаление пользователя платформы",
"create_role": "Создание роли платформы",
"update_role": "Обновление роли платформы",
"delete_role": "Удаление роли платформы",
"assign_resource": "Выдача доступа к ресурсу",
"delete_resource_assignment": "Отзыв выдачи ресурса"
},
"copyId": "Копировать ID",
"copiedId": "Скопировано",
"resourceIdLabel": "ID",
"resourceDetailProject": "Проект {{id}}",
"pagination": {
"first": "Первая",
"previous": "Назад",
"next": "Далее",
"last": "Последняя",
"rowsPerPage": "Строк на странице",
"recordRange": "{{start}}-{{end}} из {{total}}",
"pageIndicator": "Стр. {{page}} / {{pages}}",
"resourcePage": "Стр. {{page}}",
"pageSummary": "Стр. {{page}} / {{pages}} · {{total}}",
"emptySummary": "0"
},
"resourceTypes": {
"user": "Пользователь платформы",
"project": "Проект",
"conversation": "Диалог",
"vulnerability": "Уязвимость",
"webshell": "Подключение WebShell",
"batch_task": "Пакетная задача",
"c2_listener": "Слушатель C2"
},
"scopes": {
"all": {
"label": "Все ресурсы",
"hint": "Доступ ко всем данным платформы",
"option": "Все ресурсы — доступ ко всем данным платформы"
},
"assigned": {
"label": "Назначенные ресурсы",
"hint": "Только данные, явно выданные администратором",
"option": "Назначенные ресурсы — только данные, выданные администратором"
},
"own": {
"label": "Созданные мной",
"hint": "Только данные, созданные участником",
"option": "Созданные мной — только собственные данные"
}
},
"systemRoles": {
"admin": {
"name": "Администратор",
"description": "Полный доступ к администрированию платформы"
},
"operator": {
"name": "Оператор",
"description": "Повседневные сценарии безопасности без управления учётными записями и основной конфигурацией"
},
"auditor": {
"name": "Аудитор",
"description": "Только чтение аудита, мониторинга и активов"
},
"viewer": {
"name": "Только чтение",
"description": "Только чтение явно выданных ресурсов"
}
},
"empty": {
"noMatchingUsers": "Нет подходящих участников",
"noUsers": "Участников платформы пока нет",
"tryAnotherKeyword": "Попробуйте другой запрос",
"addFirstUser": "Создайте первого участника кнопкой «Добавить участника»",
"noMatchingRoles": "Нет подходящих ролей",
"adjustRoleSearch": "Измените поиск или создайте свою роль",
"noRoles": "Ролей нет",
"selectUserFirst": "Сначала выберите участника",
"noAssignments": "Выдач ресурсов нет",
"addAssignmentHint": "Выберите ресурсы слева, затем нажмите «Подтвердить выдачу» выше",
"noMatchingAssignments": "Нет подходящих выдач",
"adjustAssignmentFilter": "Измените тип ресурса или запрос",
"noMatchingResources": "Нет подходящих ресурсов",
"noMatchingPermissions": "Нет подходящих прав",
"noEffectivePermissions": "Действующих прав нет",
"assignRoleFirst": "Назначьте роль, чтобы увидеть права",
"noAuditLogs": "Истории изменений нет",
"noAuditLogsHint": "Здесь появятся изменения ролей и выдач этого участника"
},
"messages": {
"roleChangesSaved": "Изменения ролей сохранены и уже действуют",
"grantPartial": "Добавлено выдач: {{created}}; уже были или дубли: {{skipped}}",
"grantSuccess": "Выдано ресурсов ({{resource}}): {{count}}"
},
"errors": {
"loadFailed": "Ошибка загрузки",
"loadDataFailed": "Не удалось загрузить данные управления доступом",
"loadResourcesFailed": "Не удалось загрузить ресурсы",
"saveFailed": "Ошибка сохранения",
"saveUserFailed": "Не удалось сохранить участника",
"saveRoleFailed": "Не удалось сохранить роль",
"deleteFailed": "Ошибка удаления",
"deleteUserFailed": "Не удалось удалить участника",
"deleteRoleFailed": "Не удалось удалить роль",
"enterResourceId": "Введите хотя бы один ID ресурса",
"tooManyResources": "За раз можно выдать не больше 100 ресурсов",
"batchGrantFailed": "Пакетная выдача не выполнена",
"grantFailed": "Не удалось выдать",
"revokeFailed": "Не удалось отозвать",
"loadAuditFailed": "Не удалось загрузить историю аудита"
},
"permissionModules": {
"agent": "Запуск агентов",
"agents": "Описания агентов",
"attackchain": "Цепочки атак",
"audit": "Аудит",
"auth": "Безопасность учётной записи",
"c2": "C2",
"chat": "Диалоги",
"config": "Конфигурация системы",
"dashboard": "Обзор",
"files": "Файлы",
"fofa": "FOFA",
"hitl": "Человек в контуре",
"knowledge": "База знаний",
"mcp": "MCP",
"monitor": "Монитор выполнения",
"notification": "Уведомления",
"openapi": "OpenAPI",
"project": "Проекты",
"rbac": "Доступ к платформе",
"robot": "Роботы",
"roles": "Роли тестирования",
"skills": "Навыки",
"tasks": "Задачи",
"terminal": "Терминал",
"vulnerability": "Уязвимости",
"webshell": "WebShell",
"workflow": "Сценарии"
},
"permissionDescriptions": {
"auth": {
"self": "Управлять своей сессией и паролем"
},
"dashboard": {
"read": "Просматривать сводки на обзоре"
},
"chat": {
"read": "Просматривать диалоги",
"write": "Создавать и изменять диалоги",
"delete": "Удалять диалоги и ходы"
},
"agent": {
"execute": "Запускать ИИ-агентов и сценарии"
},
"hitl": {
"read": "Просматривать очереди и журналы HITL",
"write": "Одобрять, отклонять и настраивать запросы HITL"
},
"tasks": {
"read": "Просматривать очереди задач",
"write": "Создавать и запускать очереди задач",
"delete": "Удалять очереди задач"
},
"project": {
"read": "Просматривать проекты и факты проекта",
"write": "Создавать и изменять проекты и факты проекта",
"delete": "Удалять проекты и факты проекта"
},
"vulnerability": {
"read": "Просматривать уязвимости",
"write": "Создавать и изменять уязвимости",
"delete": "Удалять уязвимости"
},
"webshell": {
"read": "Просматривать подключения WebShell",
"write": "Управлять подключениями WebShell и работать с ними",
"delete": "Удалять подключения WebShell"
},
"c2": {
"read": "Просматривать слушатели, сессии, задачи, события и профили C2",
"write": "Управлять слушателями, сессиями, задачами, полезными нагрузками, файлами и профилями C2",
"delete": "Удалять объекты C2"
},
"mcp": {
"read": "Просматривать состояние MCP и внешнюю конфигурацию MCP",
"write": "Управлять внешними серверами MCP и вызывать конечную точку MCP"
},
"knowledge": {
"read": "Просматривать базу знаний и журналы поиска",
"write": "Создавать, изменять, индексировать и сканировать базу знаний",
"delete": "Удалять элементы базы знаний и журналы поиска"
},
"skills": {
"read": "Просматривать навыки и статистику",
"write": "Создавать и изменять навыки",
"delete": "Удалять навыки и статистику"
},
"agents": {
"read": "Просматривать агентов Markdown",
"write": "Создавать и изменять агентов Markdown",
"delete": "Удалять агентов Markdown"
},
"roles": {
"read": "Просматривать роли тестирования ИИ",
"write": "Создавать и изменять роли тестирования ИИ",
"delete": "Удалять роли тестирования ИИ"
},
"workflow": {
"read": "Просматривать определения и запуски сценариев",
"write": "Создавать, изменять, проверять, запускать и возобновлять сценарии",
"delete": "Удалять сценарии"
},
"config": {
"read": "Просматривать конфигурацию системы",
"write": "Изменять и применять конфигурацию системы"
},
"terminal": {
"execute": "Выполнять команды в терминале"
},
"audit": {
"read": "Просматривать и экспортировать журналы аудита",
"delete": "Удалять журналы аудита"
},
"rbac": {
"read": "Просматривать пользователей, роли платформы, права и выдачи",
"write": "Управлять пользователями, ролями платформы, правами и выдачами"
},
"notification": {
"read": "Просматривать уведомления",
"write": "Отмечать уведомления прочитанными"
},
"robot": {
"read": "Просматривать статус привязки роботов",
"write": "Управлять привязками роботов и проверять обратные вызовы"
},
"files": {
"read": "Просматривать файлы, загруженные в чат",
"write": "Загружать, изменять и переименовывать файлы чата",
"delete": "Удалять файлы чата"
},
"attackchain": {
"read": "Просматривать цепочки атак",
"write": "Пересоздавать цепочки атак"
},
"fofa": {
"execute": "Выполнять поиск FOFA и разбирать запросы"
},
"openapi": {
"read": "Читать агрегированные результаты OpenAPI"
},
"monitor": {
"read": "Просматривать монитор выполнения",
"write": "Отменять отслеживаемые выполнения",
"delete": "Удалять записи монитора выполнения"
}
}
},
"vulnerabilityRetest": {
"startFailed": "Проверка не отправлена. Инструкция сохранена в ветке; вернитесь туда для продолжения.",
"title": "Повторная проверка уязвимости",
"button": "Перепроверить",
"hint": "Каждое подтверждение создаёт независимую ветку исходного диалога с сохранением проекта и истории для дальнейшей проверки.",
"promptLabel": "Инструкция для проверки",
"placeholderHint": "Заполнители заменяются при отправке. Их также можно вводить в последующих сообщениях.",
"confirm": "Подтвердить и начать проверку",
"defaultPrompt": "Проверьте, исправлена ли уязвимость {{vulnerability_id}}. После завершения проверки обновите её статус.",
"guidanceHeading": "Метод проверки (из поля «Метод повторной проверки»):",
"promptRequired": "Введите инструкцию для проверки.",
"navigationChanged": "Вы переключились на другой диалог. Вернитесь в ветку проверки для отправки инструкции.",
"branchCreated": "Ветка проверки создана. Продолжите проверку в этой ветке."
}
}