mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-10-19 14:07:36 +02:00
4905 lines
345 KiB
JSON
4905 lines
345 KiB
JSON
{
|
||
"lang": {
|
||
"zhCN": "中文",
|
||
"enUS": "English",
|
||
"ruRU": "Русский"
|
||
},
|
||
"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": {
|
||
"title": "Вход в CyberStrikeAI",
|
||
"titlePrefix": "Вход в",
|
||
"subtitle": "Войдите с учётной записью платформы. Администратор по умолчанию — admin.",
|
||
"usernameLabel": "Имя пользователя",
|
||
"usernamePlaceholder": "admin",
|
||
"passwordLabel": "Пароль",
|
||
"passwordPlaceholder": "Введите пароль",
|
||
"submit": "Войти"
|
||
},
|
||
"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": "Конфигурация блокировки вызовов сохранена. Дальнейшие вызовы инструментов будут использовать новую конфигурацию.",
|
||
"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": {
|
||
"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": {
|
||
"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": "Создать задачи",
|
||
"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": "Очистка хранилища",
|
||
"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": "Заполните ID диалога, название, описание, серьёзность, тип, цель, шаги воспроизведения, доказательства/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": "Метод повторной проверки",
|
||
"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": {
|
||
"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": "Параллельность",
|
||
"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": "Метод повторной проверки"
|
||
},
|
||
"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": "Сценариев пока нет",
|
||
"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": "Подтвердить создание",
|
||
"confirmComplete": "Подтвердить завершение"
|
||
},
|
||
"result": {
|
||
"created": "Импорт завершён: создан новый локальный сценарий.",
|
||
"overwritten": "Импорт завершён: локальный сценарий перезаписан.",
|
||
"renamed": "Импорт завершён: локальный сценарий создан с новым ID.",
|
||
"keptExisting": "Локальный сценарий оставлен без изменений.",
|
||
"skippedIdentical": "Такое локальное содержимое уже есть; импорт пропущен.",
|
||
"complete": "Импорт завершён.",
|
||
"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": {
|
||
"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": "Удалять записи монитора выполнения"
|
||
}
|
||
}
|
||
}
|
||
}
|