Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
618 lines
54 KiB
TypeScript
618 lines
54 KiB
TypeScript
import type { Messages } from '../types';
|
||
|
||
export const ruAiMessages: Messages = {
|
||
'ai.chat.contextUsage': 'Контекст: {used} / {max} токенов',
|
||
// AI Settings
|
||
'ai.agentSettings': 'Настройки агента',
|
||
'ai.chat.preparing': 'Подготовка…',
|
||
'ai.title': 'AI',
|
||
'ai.description': 'Настройка AI-провайдеров, агентов и параметров безопасности',
|
||
'ai.providers': 'Провайдеры',
|
||
'ai.agents': 'Агенты',
|
||
'ai.providers.empty': 'Провайдеры не настроены. Добавьте провайдера, чтобы начать.',
|
||
'ai.providers.add': 'Добавить провайдера',
|
||
'ai.providers.active': 'Активен',
|
||
'ai.providers.apiKeyConfigured': 'API-ключ настроен',
|
||
'ai.providers.noApiKey': 'Нет API-ключа',
|
||
'ai.providers.configure': 'Настроить',
|
||
'ai.providers.remove': 'Удалить',
|
||
'ai.providers.name': 'Отображаемое имя',
|
||
'ai.providers.name.placeholder': 'например, Мой провайдер',
|
||
'ai.providers.style': 'Стиль протокола',
|
||
'ai.providers.style.anthropic': 'Совместимый с Anthropic',
|
||
'ai.providers.style.openai': 'Совместимый с OpenAI',
|
||
'ai.providers.style.google': 'Совместимый с Google',
|
||
'ai.providers.style.inherited': 'авто',
|
||
'ai.providers.style.help': 'Определяет, какой формат API используется для запросов. Переопределите, если стороннее API использует другой диалект.',
|
||
'ai.providers.openaiApi': 'Формат API OpenAI',
|
||
'ai.providers.openaiApi.chat': 'Chat Completions',
|
||
'ai.providers.openaiApi.responses': 'Responses',
|
||
'ai.providers.openaiApi.help': 'Chat Completions работает с большинством OpenAI-совместимых эндпоинтов. Responses может повысить попадание в кэш на ретрансляторах с поддержкой /v1/responses.',
|
||
'ai.providers.icon.change': 'Изменить иконку',
|
||
'ai.providers.icon.upload': 'Загрузить изображение',
|
||
'ai.providers.icon.reset': 'Сбросить',
|
||
'ai.providers.icon.close': 'Свернуть',
|
||
'ai.providers.icon.uploadedNote': 'Своя иконка (64×64 WebP)',
|
||
'ai.providers.icon.errorType': 'Пожалуйста, выберите файл изображения.',
|
||
'ai.providers.apiKey': 'API-ключ',
|
||
'ai.providers.apiKey.placeholder': 'Введите API-ключ',
|
||
'ai.providers.apiKey.decrypting': 'Расшифровка...',
|
||
'ai.providers.baseUrl': 'Базовый URL',
|
||
'ai.providers.baseUrl.anthropicHelp': 'Anthropic-совместимый: хост с /v1 или без (например https://gateway.example или https://gateway.example/v1). Проверка и чат используют /v1/models и /v1/messages.',
|
||
'ai.providers.baseUrl.ollamaHelp': 'Локальный Ollama: http://localhost:11434/v1 (без API-ключа). Ollama Cloud: https://ollama.com/v1 и ключ Cloud.',
|
||
'ai.providers.skipTLSVerify': 'Пропустить проверку TLS-сертификата (для самоподписанных сертификатов)',
|
||
'ai.providers.defaultModel': 'Модель по умолчанию',
|
||
'ai.providers.defaultModel.placeholder': 'например, gpt-4o, claude-sonnet-4-20250514',
|
||
'ai.providers.contextWindow': 'Контекстное окно',
|
||
'ai.providers.contextWindow.placeholder': 'например, 128000',
|
||
'ai.providers.contextWindow.help': 'Оставьте пустым, чтобы использовать значение из списка моделей, если оно доступно; иначе NetMesh применит безопасное значение по умолчанию.',
|
||
'ai.providers.contextWindow.error': 'Введите положительное целое число или оставьте поле пустым.',
|
||
'ai.providers.refreshModels': 'Обновить модели',
|
||
'ai.providers.test': 'Проверить',
|
||
'ai.providers.test.testing': 'Проверка…',
|
||
'ai.providers.test.ok': 'Подключено ({latency} ms)',
|
||
'ai.providers.test.warn': 'Эндпоинт доступен, но ответ выглядит неполным ({latency} ms)',
|
||
'ai.providers.test.warnSlow': 'Подключено, но медленно ({latency} ms)',
|
||
'ai.providers.test.error': 'Ошибка ({detail})',
|
||
'ai.providers.test.missingBaseUrl': 'Сначала укажите Base URL',
|
||
'ai.providers.test.missingApiKey': 'Сначала укажите API-ключ',
|
||
'ai.providers.test.unavailable': 'Проверка соединения недоступна в этой среде',
|
||
'ai.providers.searchModel': 'Искать или ввести ID модели...',
|
||
'ai.providers.filterModels': 'Фильтровать модели...',
|
||
'ai.providers.loadingModels': 'Загрузка моделей...',
|
||
'ai.providers.noMatchingModels': 'Нет подходящих моделей',
|
||
'ai.providers.clickToLoadModels': 'Нажмите, чтобы загрузить модели',
|
||
'ai.providers.showingModels': 'Показаны первые 100 из {count} моделей. Введите текст для фильтрации.',
|
||
'ai.providers.advancedParams': 'Дополнительные параметры',
|
||
'ai.providers.advancedParams.hint': 'Оставьте пустым, чтобы использовать настройки провайдера по умолчанию.',
|
||
'ai.providers.advancedParams.maxTokens.placeholder': 'например, 4096',
|
||
'ai.providers.advancedParams.default': 'По умолчанию у провайдера',
|
||
|
||
// AI Codex
|
||
'ai.codex': 'Codex',
|
||
'ai.codex.title': 'Codex CLI',
|
||
'ai.codex.description': 'Подключение OpenAI Codex. Здесь можно войти через ChatGPT или включить API-ключ OpenAI-совместимого провайдера и пользовательский endpoint в настройках.',
|
||
'ai.codex.appServer.title': 'Использовать Codex App Server',
|
||
'ai.codex.appServer.experimental': 'Экспериментально',
|
||
'ai.codex.appServer.description': 'Постоянный протокол Codex с нативными подтверждениями, песочницей, актуальными моделями и вопросами во время выполнения. SDK остаётся режимом по умолчанию.',
|
||
'ai.codex.appServer.checking': 'Проверка поддержки App Server…',
|
||
'ai.codex.appServer.available': 'Эта версия Codex CLI поддерживает App Server.',
|
||
'ai.codex.appServer.modelCatalogWarning': 'Динамический каталог моделей Codex недоступен. Используется встроенный список моделей.',
|
||
'ai.codex.appServer.approval.allowSession': 'Разрешить для сеанса',
|
||
'ai.codex.appServer.userInput.title': 'Codex требуется ваш ответ',
|
||
'ai.codex.appServer.userInput.description': 'Ответьте на вопросы, чтобы продолжить текущую задачу.',
|
||
'ai.codex.appServer.userInput.other': 'Введите другой ответ',
|
||
'ai.codex.appServer.userInput.autoResolve': 'Если ответа не будет вовремя, Codex продолжит автоматически.',
|
||
'ai.codex.appServer.userInput.skip': 'Пропустить',
|
||
'ai.codex.appServer.userInput.submit': 'Продолжить',
|
||
'ai.codex.steer.addInstruction': 'Добавить инструкцию',
|
||
'ai.codex.steer.sending': 'Инструкция добавляется…',
|
||
'ai.codex.steer.placeholder': 'Добавьте инструкцию, пока Codex работает…',
|
||
'ai.codex.steer.notSteerableReview': 'В этот сеанс проверки Codex нельзя добавить инструкцию. Черновик сохранён.',
|
||
'ai.codex.steer.notSteerableCompact': 'В этот сеанс сжатия Codex нельзя добавить инструкцию. Черновик сохранён.',
|
||
'ai.codex.steer.busy': 'Другая инструкция уже отправляется в Codex.',
|
||
'ai.codex.steer.inactive': 'Задача Codex уже завершена. Черновик сохранён.',
|
||
'ai.codex.steer.unsupported': 'Инструкции во время выполнения доступны только в режиме Codex App Server.',
|
||
'ai.codex.steer.failed': 'Codex не принял дополнительную инструкцию. Черновик сохранён.',
|
||
'ai.codex.detecting': 'Обнаружение...',
|
||
'ai.codex.notFound': 'Не найден',
|
||
'ai.codex.awaitingLogin': 'Ожидание входа',
|
||
'ai.codex.connectedChatGPT': 'Подключено через ChatGPT',
|
||
'ai.codex.connectedApiKey': 'Подключено через API-ключ',
|
||
'ai.codex.connectedCustomConfig': 'Подключено через ~/.codex/config.toml',
|
||
'ai.codex.customConfigIncomplete': 'Обнаружен пользовательский конфиг (отсутствует переменная окружения)',
|
||
'ai.codex.customConfigHint': 'Используется пользовательский провайдер "{provider}", настроенный в ~/.codex/config.toml — вход через ChatGPT не требуется.',
|
||
'ai.codex.customConfigMissingEnvKey': 'Предупреждение: {envKey} не задана в переменных окружения вашей оболочки. Экспортируйте её (или запустите NetMesh из оболочки, где она задана), чтобы Codex мог пройти аутентификацию.',
|
||
'ai.codex.notConnected': 'Не подключено',
|
||
'ai.codex.statusUnknown': 'Статус неизвестен',
|
||
'ai.codex.path': 'Путь:',
|
||
'ai.codex.notFoundHint': 'Не удалось найти codex в PATH. Установите его или укажите путь к исполняемому файлу ниже.',
|
||
'ai.codex.customPathPlaceholder': 'например, /usr/local/bin/codex',
|
||
'ai.codex.check': 'Проверить',
|
||
'ai.codex.resetPath': 'Сбросить',
|
||
'ai.codex.openLogin': 'Открыть вход',
|
||
'ai.codex.logout': 'Выйти',
|
||
'ai.codex.connectChatGPT': 'Подключить ChatGPT',
|
||
'ai.codex.refreshStatus': 'Обновить статус',
|
||
|
||
// AI Claude Code
|
||
'ai.claude.title': 'Claude Code',
|
||
'ai.claude.description': 'Агентный помощник для программирования от Anthropic. Требует установленный в системе Claude Code CLI.',
|
||
'ai.claude.detecting': 'Обнаружение...',
|
||
'ai.claude.detected': 'Обнаружен',
|
||
'ai.claude.notFound': 'Не найден',
|
||
'ai.claude.path': 'Путь:',
|
||
'ai.claude.notFoundHint': 'Не удалось найти claude в PATH. Установите его или укажите путь к исполняемому файлу ниже.',
|
||
'ai.claude.customPathPlaceholder': 'например, /usr/local/bin/claude',
|
||
'ai.claude.configSection': 'Аутентификация и конфигурация (опционально)',
|
||
'ai.claude.configDir': 'Каталог конфигурации',
|
||
'ai.claude.configDir.placeholder': '~/.claude (пусто — по умолчанию)',
|
||
'ai.claude.configDir.hint': 'Задаёт CLAUDE_CONFIG_DIR — укажите папку, где выполнен вход `claude` (содержит settings.json и учётные данные).',
|
||
'ai.claude.settings': 'Файл настроек',
|
||
'ai.claude.settings.placeholder': '~/team-settings.json (путь или встроенный {"model":"..."})',
|
||
'ai.claude.settings.hint': 'Опционально. Путь к settings.json или встроенный JSON, передаётся в SDK как `settings`. Дополняет «Каталог конфигурации» выше и независим от него (накладывается сверху, не заменяет).',
|
||
'ai.claude.envVars': 'Переменные окружения',
|
||
'ai.claude.envVars.placeholder': 'ANTHROPIC_BASE_URL=https://...\nANTHROPIC_MODEL=...',
|
||
'ai.claude.envVars.hint': 'По одному KEY=VALUE в строке, передаётся агенту Claude. Хранится локально в открытом виде — для API-ключей и учётных данных используйте «Каталог конфигурации» выше (вход `claude`).',
|
||
'ai.claude.check': 'Проверить',
|
||
'ai.claude.resetPath': 'Сбросить',
|
||
|
||
// AI GitHub Copilot CLI
|
||
'ai.copilot.title': 'GitHub Copilot CLI',
|
||
'ai.copilot.description': 'Использует GitHub Copilot CLI. После обнаружения может быть выбран как внешний агент для программирования.',
|
||
'ai.copilot.detecting': 'Обнаружение...',
|
||
'ai.copilot.detected': 'Обнаружен',
|
||
'ai.copilot.notFound': 'Не найден',
|
||
'ai.copilot.path': 'Путь:',
|
||
'ai.copilot.notFoundHint': 'Не удалось найти copilot в PATH. Установите его или укажите путь к исполняемому файлу ниже.',
|
||
'ai.copilot.customPathPlaceholder': 'например, /usr/local/bin/copilot',
|
||
'ai.copilot.check': 'Проверить',
|
||
'ai.copilot.resetPath': 'Сбросить',
|
||
|
||
// AI Cursor SDK
|
||
'ai.cursor.title': 'Cursor',
|
||
'ai.cursor.description': 'Использует Cursor SDK или локальный вход Agent CLI.',
|
||
'ai.cursor.detecting': 'Обнаружение...',
|
||
'ai.cursor.detected': 'Доступен',
|
||
'ai.cursor.notFound': 'Недоступен',
|
||
'ai.cursor.path': 'Среда:',
|
||
'ai.cursor.notFoundHint': 'Укажите API-ключ или переключитесь на CLI login.',
|
||
'ai.cursor.notInstalledHint': 'Cursor SDK / Agent CLI не обнаружен.',
|
||
'ai.cursor.installStatus': 'Среда Cursor',
|
||
'ai.cursor.installed': 'Обнаружено',
|
||
'ai.cursor.notInstalled': 'Не обнаружено',
|
||
'ai.cursor.modeCli': 'CLI login',
|
||
'ai.cursor.modeApiKey': 'API Key',
|
||
'ai.cursor.modeCliHint': 'Использует локальный `cursor-agent login` и квоту подписки Auto. Сохранённый API-ключ сохраняется, но в этом режиме не используется.',
|
||
'ai.cursor.modeApiKeyHint': 'Использует платный Cursor API. CLI login в этом режиме игнорируется.',
|
||
'ai.cursor.cliLoginStatus': 'CLI login',
|
||
'ai.cursor.cliLoginOk': 'Вход выполнен',
|
||
'ai.cursor.cliLoginAs': 'Вход как {{email}}',
|
||
'ai.cursor.cliLoginMissing': 'Нет входа',
|
||
'ai.cursor.cliLoginHint': 'Выполните `cursor-agent login` в терминале, затем нажмите Check.',
|
||
'ai.cursor.apiKeyStatus': 'API-ключ',
|
||
'ai.cursor.apiKeyConfigured': 'Настроен',
|
||
'ai.cursor.apiKeyMissing': 'Не указан',
|
||
'ai.cursor.apiKeyFromEnv': 'Из окружения',
|
||
'ai.cursor.apiKey': 'API-ключ',
|
||
'ai.cursor.apiKeyPlaceholder': 'Введите API-ключ Cursor',
|
||
'ai.cursor.apiKeyPlaceholder.env': 'Используется CURSOR_API_KEY; введите ключ для замены',
|
||
'ai.cursor.apiKeyEnvHint': 'Cursor может использовать CURSOR_API_KEY из shell. Сохраняйте ключ здесь только если хотите переопределить его в NetMesh.',
|
||
'ai.cursor.apiKeyOverrideHint': 'NetMesh сначала использует сохранённый здесь ключ, затем CURSOR_API_KEY.',
|
||
'ai.cursor.saveApiKey': 'Сохранить',
|
||
'ai.cursor.saved': 'Сохранено',
|
||
'ai.cursor.showApiKey': 'Показать API-ключ',
|
||
'ai.cursor.hideApiKey': 'Скрыть API-ключ',
|
||
'ai.cursor.customPathPlaceholder': 'например, /usr/local/bin/cursor',
|
||
'ai.cursor.check': 'Проверить',
|
||
|
||
// AI CodeBuddy Code
|
||
'ai.codebuddy.title': 'CodeBuddy Code',
|
||
'ai.codebuddy.description': 'Использует CodeBuddy Code через официальный Agent SDK (`@tencent-ai/agent-sdk`). После обнаружения может быть выбран как внешний агент для программирования.',
|
||
'ai.codebuddy.detecting': 'Обнаружение...',
|
||
'ai.codebuddy.detected': 'Обнаружен',
|
||
'ai.codebuddy.notFound': 'Не найден',
|
||
'ai.codebuddy.path': 'Путь:',
|
||
'ai.codebuddy.notFoundHint': 'Не удалось найти codebuddy в PATH. Установите его или укажите путь к исполняемому файлу ниже.',
|
||
'ai.codebuddy.customPathPlaceholder': 'например, /usr/local/bin/codebuddy',
|
||
'ai.codebuddy.check': 'Проверить',
|
||
'ai.codebuddy.resetPath': 'Сбросить',
|
||
'ai.codebuddy.configSection': 'Аутентификация и конфигурация (необязательно)',
|
||
'ai.codebuddy.internetEnv': 'Сетевая среда',
|
||
'ai.codebuddy.internetEnv.default': 'По умолчанию (зарубежная)',
|
||
'ai.codebuddy.internetEnv.internal': 'Internal',
|
||
'ai.codebuddy.internetEnv.ioa': 'IOA',
|
||
'ai.codebuddy.internetEnv.hint': 'Устанавливает CODEBUDDY_INTERNET_ENVIRONMENT — выберите Internal или IOA для ограниченных сетевых сред.',
|
||
'ai.codebuddy.envVars': 'Переменные окружения',
|
||
'ai.codebuddy.envVars.placeholder': 'CODEBUDDY_API_KEY=...\nCODEBUDDY_AUTH_TOKEN=...\nOTHER_VAR=...',
|
||
'ai.codebuddy.envVars.hint': 'По одной записи KEY=VALUE на строку, передаются агенту CodeBuddy. Укажите CODEBUDDY_API_KEY или CODEBUDDY_AUTH_TOKEN для аутентификации. Хранятся локально в открытом виде.',
|
||
'ai.codebuddy.elicitation.title': 'CodeBuddy требуется ваш ответ',
|
||
'ai.codebuddy.elicitation.description': 'Проверьте запрос, чтобы продолжить текущий ход.',
|
||
'ai.codebuddy.elicitation.select': 'Выберите вариант',
|
||
'ai.codebuddy.elicitation.yes': 'Да',
|
||
'ai.codebuddy.elicitation.no': 'Нет',
|
||
'ai.codebuddy.elicitation.decline': 'Отклонить',
|
||
'ai.codebuddy.elicitation.accept': 'Продолжить',
|
||
'ai.codebuddy.elicitation.validation.required': 'Поле «{field}» обязательно.',
|
||
'ai.codebuddy.elicitation.validation.invalidType': 'Поле «{field}» содержит недопустимое значение.',
|
||
'ai.codebuddy.elicitation.validation.integer': 'Поле «{field}» должно быть целым числом.',
|
||
'ai.codebuddy.elicitation.validation.notInteger': 'Поле «{field}» должно быть целым числом.',
|
||
'ai.codebuddy.elicitation.validation.minimum': 'Значение «{field}» должно быть не меньше {limit}.',
|
||
'ai.codebuddy.elicitation.validation.maximum': 'Значение «{field}» должно быть не больше {limit}.',
|
||
'ai.codebuddy.elicitation.validation.minLength': 'Поле «{field}» должно содержать не менее {limit} символов.',
|
||
'ai.codebuddy.elicitation.validation.maxLength': 'Поле «{field}» должно содержать не более {limit} символов.',
|
||
'ai.codebuddy.elicitation.validation.minItems': 'Выберите не менее {limit} вариантов для «{field}».',
|
||
'ai.codebuddy.elicitation.validation.maxItems': 'Выберите не более {limit} вариантов для «{field}».',
|
||
'ai.codebuddy.elicitation.validation.format': 'Поле «{field}» должно соответствовать формату {format}.',
|
||
'ai.codebuddy.elicitation.validation.option': 'Выберите допустимый вариант для «{field}».',
|
||
|
||
// AI Grok Build (in-app managed agent — distinct from External MCP client install)
|
||
'ai.grok.title': 'Grok Build',
|
||
'ai.grok.description': 'Агент программирования Grok Build от xAI (CLI). Установите Grok CLI, выполните `grok login` или задайте XAI_API_KEY, затем выберите его как внешнего агента.',
|
||
'ai.grok.detecting': 'Обнаружение...',
|
||
'ai.grok.detected': 'Обнаружен',
|
||
'ai.grok.notFound': 'Не найден',
|
||
'ai.grok.path': 'Путь:',
|
||
'ai.grok.notFoundHint': 'Не удалось найти grok в PATH. Установите Grok Build CLI или укажите путь к исполняемому файлу ниже.',
|
||
'ai.grok.customPathPlaceholder': 'например, /usr/local/bin/grok',
|
||
'ai.grok.check': 'Проверить',
|
||
'ai.grok.resetPath': 'Сбросить',
|
||
'ai.grok.runtime.acp.title': 'Использовать Grok ACP (agent stdio)',
|
||
'ai.grok.runtime.acp.default': 'По умолчанию',
|
||
'ai.grok.runtime.acp.description':
|
||
'Подключение к Grok через Agent Client Protocol (grok agent stdio). NetMesh MCP внедряется в session/new. Выключите, чтобы использовать исходный headless streaming-json CLI.',
|
||
'ai.grok.runtime.streamingJson.hint':
|
||
'Режим headless streaming-json (grok -p --output-format streaming-json). MCP внедряется через .grok/config.toml проекта.',
|
||
|
||
// AI Default Agent
|
||
'ai.defaultAgent': 'Агент по умолчанию',
|
||
'ai.defaultAgent.description': 'Агент, который будет использоваться при запуске новой AI-сессии',
|
||
'ai.defaultAgent.catty': 'Catty (встроенный)',
|
||
'ai.toolAccess.title': 'Доступ к инструментам',
|
||
'ai.toolAccess.mode': 'Режим доступа NetMesh',
|
||
'ai.toolAccess.description': 'Выберите, как внешние агенты получают доступ к сессиям NetMesh. MCP предоставляет встроенный сервер, а Skills + CLI указывает агентам на локальный skill NetMesh и команды CLI.',
|
||
'ai.toolAccess.mode.mcp': 'MCP',
|
||
'ai.toolAccess.mode.skills': 'Skills + CLI',
|
||
'ai.toolAccess.mcpPrompt.title': 'Промпт для вашего ИИ-клиента',
|
||
'ai.toolAccess.mcpPrompt.description': 'Вставьте этот промпт в ИИ-клиент (Codex, Claude Code и т. д.), и он сам зарегистрирует MCP NetMesh.',
|
||
'ai.toolAccess.mcpPrompt.enableHint': 'Включите внешний MCP ниже, чтобы в промпт попал путь к лаунчеру.',
|
||
'ai.toolAccess.skills.file': 'Файл skill',
|
||
'ai.toolAccess.skills.description': 'В режиме Skills + CLI агенты автоматически получают путь к этому локальному skill-файлу. Путь к лаунчеру NetMesh CLI передаётся агенту в каждой сессии.',
|
||
'ai.toolAccess.skills.unavailable': 'Путь к skill-файлу недоступен',
|
||
|
||
'ai.externalMcp.title': 'Внешний MCP',
|
||
'ai.externalMcp.description': 'Откройте NetMesh как MCP-сервер для Codex, Claude Code, Cursor и Grok. Набор инструментов тот же, что у встроенных агентов. Держите NetMesh запущенным, пока клиенты подключены.',
|
||
'ai.externalMcp.sessionsExposed': 'Сессий в области: {count}',
|
||
'ai.externalMcp.mode': 'Режим доступности',
|
||
'ai.externalMcp.mode.temporary': 'Временный',
|
||
'ai.externalMcp.mode.persistent': 'Постоянный',
|
||
'ai.externalMcp.mode.description': 'Временный режим отключается после простоя. Постоянный восстанавливает External MCP при запуске NetMesh.',
|
||
'ai.externalMcp.idleTimeout': 'Таймаут простоя',
|
||
'ai.externalMcp.idleTimeout.description': 'В временном режиме отключить External MCP после указанного числа минут без MCP-операций.',
|
||
'ai.externalMcp.idleTimeout.minutes': 'мин',
|
||
'ai.externalMcp.focusOnHostOpen': 'Активировать окно при host_open',
|
||
'ai.externalMcp.focusOnHostOpen.description': 'Когда MCP-клиент открывает хост, выводить главное окно на передний план. Отключите, чтобы работать без прерываний.',
|
||
'ai.externalMcp.silentSessions': 'Бесшумные сеансы MCP',
|
||
'ai.externalMcp.silentSessions.description': 'Сеансы, открытые ИИ, не отображаются на панели вкладок и не восстанавливаются после перезапуска. Их можно посмотреть в любой момент через панель в трее.',
|
||
'ai.externalMcp.sessionIdleTimeout': 'Тайм-аут открытого сеанса',
|
||
'ai.externalMcp.sessionIdleTimeout.description': 'Автоматически закрывать сеансы, открытые ИИ, после указанного числа минут без операций терминала или файлов.',
|
||
'ai.externalMcp.usage.title': 'Как пользоваться',
|
||
'ai.externalMcp.usage.keepRunning': '1. Включите External MCP и держите NetMesh запущенным.',
|
||
'ai.externalMcp.usage.localhost': '2. Клиенты подключаются через локальный launcher (только 127.0.0.1). Discovery удаляется при отключении.',
|
||
'ai.externalMcp.usage.permissions': '3. Запись следует Settings → AI → Safety и списку блокировки команд.',
|
||
'ai.externalMcp.usage.capabilities': '4. Доступен полный catalog: терминал, SFTP, Vault и проброс портов. Секреты не возвращаются.',
|
||
'ai.externalMcp.help.ariaLabel': 'Справка External MCP',
|
||
'ai.externalMcp.security': 'Безопасность',
|
||
'ai.externalMcp.security.description': 'Слушает только 127.0.0.1 с ротацией token, использует AI Permission Mode для записи и удаляет discovery при отключении.',
|
||
'ai.externalMcp.permissionMode': 'Текущий режим разрешений: {mode}',
|
||
'ai.externalMcp.permissionMode.label': 'Режим разрешений на запись',
|
||
'ai.externalMcp.permissionMode.hint': 'Тот же параметр, что Settings → AI → Safety. Auto выполняет write-инструменты NetMesh без запросов; Confirm спрашивает каждый раз. Внешние клиенты (Codex / Claude / Grok) могут показывать своё подтверждение инструментов.',
|
||
'ai.externalMcp.permissionMode.unknown': 'Неизвестно',
|
||
'ai.externalMcp.discovery': 'Discovery',
|
||
'ai.externalMcp.launcher': 'Launcher',
|
||
'ai.externalMcp.unavailable': 'Недоступно',
|
||
'ai.externalMcp.bridgeUnavailable': 'Мост External MCP недоступен',
|
||
'ai.externalMcp.copy': 'Копировать',
|
||
'ai.externalMcp.copied': 'Скопировано',
|
||
'ai.externalMcp.copyFailed': 'Не удалось скопировать. Скопируйте вручную.',
|
||
'ai.externalMcp.refresh': 'Обновить',
|
||
'ai.externalMcp.clientConfiguration': 'Настройка клиента',
|
||
'ai.externalMcp.clientConfiguration.description': 'Выберите клиент для установки в один клик или скопируйте CLI / фрагмент конфига.',
|
||
'ai.externalMcp.client.codex': 'Codex',
|
||
'ai.externalMcp.client.claude': 'Claude Code',
|
||
'ai.externalMcp.client.grok': 'Grok',
|
||
'ai.externalMcp.client.cursor': 'Cursor',
|
||
'ai.externalMcp.cliCommand': 'CLI-команда',
|
||
'ai.externalMcp.configSnippet': 'Фрагмент конфига',
|
||
'ai.externalMcp.addToCodex': 'Добавить в Codex',
|
||
'ai.externalMcp.addToClaude': 'Добавить в Claude Code',
|
||
'ai.externalMcp.addToGrok': 'Добавить в Grok',
|
||
'ai.externalMcp.codexAdded': 'Запись MCP для Codex добавлена. Перезапустите Codex или откройте новую сессию.',
|
||
'ai.externalMcp.claudeAdded': 'Запись MCP для Claude Code добавлена. Перезапустите Claude Code или откройте новую сессию.',
|
||
'ai.externalMcp.grokAdded': 'Запись MCP для Grok добавлена. Перезапустите Grok или откройте новую сессию.',
|
||
'ai.externalMcp.installCodex': 'Сначала установите Codex, затем нажмите Обновить.',
|
||
'ai.externalMcp.installClaude': 'Сначала установите Claude Code, затем нажмите Обновить.',
|
||
'ai.externalMcp.installGrok': 'Сначала установите Grok CLI, затем нажмите Обновить.',
|
||
'ai.externalMcp.conflict.description': 'Запись NetMesh-external уже существует и указывает в другое место. Удалите или измените её вручную.',
|
||
'ai.externalMcp.enableForLauncher': 'Включите External MCP, чтобы получить путь launcher.',
|
||
'ai.externalMcp.cursor.title': 'Cursor / другие клиенты',
|
||
'ai.externalMcp.cursor.description': 'Объедините с MCP-конфигом (например ~/.cursor/mcp.json). Не заменяйте весь файл, если там уже есть другие серверы.',
|
||
'ai.externalMcp.status.unavailable': 'Недоступно',
|
||
'ai.externalMcp.status.disabled': 'Выключено',
|
||
'ai.externalMcp.status.running': 'Работает',
|
||
'ai.externalMcp.status.starting': 'Запуск',
|
||
'ai.externalMcp.status.error': 'Ошибка',
|
||
'ai.externalMcp.status.configured': 'Настроено',
|
||
'ai.externalMcp.status.notConfigured': 'Не настроено',
|
||
'ai.externalMcp.status.checking': 'Проверка',
|
||
'ai.externalMcp.status.codexNotFound': 'Codex не найден',
|
||
'ai.externalMcp.status.claudeNotFound': 'Claude Code не найден',
|
||
'ai.externalMcp.status.grokNotFound': 'Grok не найден',
|
||
'ai.externalMcp.status.conflict': 'Конфликт',
|
||
'ai.userSkills.title': 'Пользовательские skills',
|
||
'ai.userSkills.description': 'Откройте папку skills NetMesh, чтобы добавить свои каталоги skills. NetMesh автоматически сканирует их и добавляет только лёгкие индексы, если skill явно не соответствует текущему запросу.',
|
||
'ai.userSkills.openFolder': 'Открыть папку skills',
|
||
'ai.userSkills.reload': 'Перезагрузить skills',
|
||
'ai.userSkills.location': 'Расположение',
|
||
'ai.userSkills.loading': 'Сканирование пользовательских skills...',
|
||
'ai.userSkills.summary': '{ready} готово, {warnings} предупреждений',
|
||
'ai.userSkills.empty': 'Пользовательские skills пока не найдены. Откройте папку, чтобы добавить каталоги skills с файлом SKILL.md.',
|
||
'ai.userSkills.unavailable': 'Пользовательские skills недоступны в этой среде.',
|
||
'ai.userSkills.status.ready': 'Готово',
|
||
'ai.userSkills.status.warning': 'Предупреждение',
|
||
|
||
// AI Quick Messages
|
||
'ai.quickMessages.title': 'Быстрые сообщения',
|
||
'ai.quickMessages.description': 'Создавайте часто используемые подсказки и вставляйте их в AI-чат через / или кнопку быстрых сообщений. В отличие от user skills, быстрые сообщения заполняют поле ввода текстом.',
|
||
'ai.quickMessages.add': 'Добавить быстрое сообщение',
|
||
'ai.quickMessages.createTitle': 'Новое быстрое сообщение',
|
||
'ai.quickMessages.editTitle': 'Редактировать быстрое сообщение',
|
||
'ai.quickMessages.name': 'Название',
|
||
'ai.quickMessages.name.placeholder': 'например: Проверить диск',
|
||
'ai.quickMessages.slug': 'Команда',
|
||
'ai.quickMessages.slug.placeholder': 'disk-check',
|
||
'ai.quickMessages.descriptionField': 'Описание (необязательно)',
|
||
'ai.quickMessages.descriptionField.placeholder': 'Краткая подсказка о назначении',
|
||
'ai.quickMessages.content': 'Текст сообщения',
|
||
'ai.quickMessages.content.placeholder': 'Полный текст подсказки для вставки...',
|
||
'ai.quickMessages.empty': 'Быстрых сообщений пока нет. Добавьте несколько часто используемых подсказок.',
|
||
'ai.quickMessages.confirmDelete': 'Удалить быстрое сообщение «{name}»?',
|
||
'ai.quickMessages.error.nameRequired': 'Укажите название.',
|
||
'ai.quickMessages.error.invalidSlug': 'Команда может содержать только строчные буквы, цифры и дефисы.',
|
||
'ai.quickMessages.error.contentRequired': 'Укажите текст сообщения.',
|
||
'ai.quickMessages.error.slugTaken': 'Эта команда уже используется другим быстрым сообщением.',
|
||
'ai.quickMessages.error.slugConflictsWithSkill': 'Команда конфликтует с user skill «/{slug}». Выберите другую.',
|
||
'ai.quickMessages.error.maxItems': 'Можно сохранить не более {max} быстрых сообщений.',
|
||
|
||
// AI Chat
|
||
'ai.chat.noProvider': 'AI-провайдер не настроен. Перейдите в **Настройки → AI → Провайдеры**, чтобы добавить и включить провайдера.',
|
||
'ai.chat.toolDenied': 'Действие было отклонено пользователем.',
|
||
'ai.chat.toolApproved': 'Одобрено',
|
||
'ai.chat.toolApprovalHint': 'Enter — разрешить один раз, Escape — отклонить',
|
||
'ai.chat.approve': 'Одобрить',
|
||
'ai.chat.approveOnce': 'Разрешить один раз',
|
||
'ai.chat.alwaysAllow': 'Всегда разрешать',
|
||
'ai.chat.slashStopDesc': 'Остановить текущий ход AI и отменить выполняющиеся инструменты',
|
||
'ai.chat.slashCompactDesc': 'Сжать ранний контекст разговора',
|
||
'ai.chat.reject': 'Отклонить',
|
||
'ai.chat.toolLabel': 'Инструмент',
|
||
'ai.chat.targetLabel': 'Цель',
|
||
'ai.chat.rawCommand': 'Команда',
|
||
'ai.chat.copyCommand': 'Копировать',
|
||
'ai.chat.commandCopied': 'Скопировано',
|
||
'ai.chat.approvalSession': 'Сессия',
|
||
'ai.chat.approvalShell': 'Shell',
|
||
'ai.chat.approvalCwd': 'Каталог',
|
||
'ai.chat.approvalReason': 'Причина',
|
||
'ai.chat.approvalInvocation': 'Вызов',
|
||
'ai.chat.permissionRequired': 'Требуется разрешение',
|
||
'ai.chat.permissionDescription': 'AI-агент хочет выполнить вызов инструмента, для которого требуется ваше одобрение.',
|
||
'ai.chat.commandBlocked': 'Эта команда заблокирована вашей политикой безопасности и не может быть выполнена.',
|
||
'ai.chat.recommendAllow': 'Разрешить',
|
||
'ai.chat.recommendConfirm': 'Подтвердить',
|
||
'ai.chat.recommendDeny': 'Запретить',
|
||
'ai.chat.exportConversation': 'Экспортировать разговор',
|
||
'ai.chat.exportAs': 'Экспортировать как',
|
||
'ai.chat.exportMarkdown': 'Markdown',
|
||
'ai.chat.exportJSON': 'JSON',
|
||
'ai.chat.exportPlainText': 'Обычный текст',
|
||
'ai.chat.thinking': 'Размышляет',
|
||
'ai.chat.thoughtFor': 'Размышлял {duration}',
|
||
'ai.chat.thought': 'Мысль',
|
||
'ai.chat.agents': 'Агенты',
|
||
'ai.chat.detectedOnMachine': 'Обнаружено на этом устройстве',
|
||
'ai.chat.rescan': 'Пересканировать',
|
||
'ai.chat.permObserver': 'Наблюдатель',
|
||
'ai.chat.permConfirm': 'Подтверждение',
|
||
'ai.chat.permAuto': 'Авто',
|
||
'ai.chat.permObserverDesc': 'Только чтение',
|
||
'ai.chat.permConfirmDesc': 'Спрашивать перед записью',
|
||
'ai.chat.permAutoDesc': 'Выполнять свободно',
|
||
'ai.chat.emptyHint': 'Спрашивайте о ваших серверах, запускайте команды или получайте помощь с конфигурациями.',
|
||
'ai.chat.placeholder': 'Сообщение {agent} — @ для добавления контекста, / для команд',
|
||
'ai.chat.placeholderDefault': 'Сообщение агенту Catty...',
|
||
'ai.chat.noModel': 'Нет модели',
|
||
'ai.chat.noProviderModel': 'Модель по умолчанию не задана — настройте её в Настройки → AI → Провайдеры.',
|
||
'ai.chat.selectProvider': 'Выберите провайдера',
|
||
'ai.chat.selectProviderAndModel': 'Выберите провайдера и модель',
|
||
'ai.chat.selectModel': 'Выберите модель',
|
||
'ai.chat.searchModels': 'Поиск моделей',
|
||
'ai.chat.providers': 'Провайдеры',
|
||
'ai.chat.models': 'Модели',
|
||
'ai.chat.pinned': 'Закреплённые',
|
||
'ai.chat.useCustomModel': 'Использовать «{id}»',
|
||
'ai.chat.thinkingLevel': 'Мышление',
|
||
'ai.chat.thinkingOff': 'Выкл.',
|
||
'ai.chat.pinModel': 'Закрепить модель',
|
||
'ai.chat.unpinModel': 'Открепить модель',
|
||
'ai.chat.loadingModels': 'Загрузка моделей...',
|
||
'ai.chat.noMatchingModels': 'Нет подходящих моделей',
|
||
'ai.chat.recent': 'Недавние',
|
||
'ai.chat.viewAll': 'Показать всё',
|
||
'ai.chat.untitled': 'Без названия',
|
||
'ai.chat.justNow': 'Только что',
|
||
'ai.chat.minutesAgo': '{n}м назад',
|
||
'ai.chat.hoursAgo': '{n}ч назад',
|
||
'ai.chat.daysAgo': '{n}д назад',
|
||
'ai.chat.newChat': 'Новый чат',
|
||
'ai.chat.allSessions': 'Все сессии',
|
||
'ai.chat.loadEarlierMessages': 'Загрузить более ранние сообщения (ещё {n})',
|
||
'ai.chat.jumpNav': 'Перейти к сообщению',
|
||
'ai.chat.jumpUntitled': '(пустое сообщение)',
|
||
'ai.chat.usedTools': 'Использовано инструментов: {n}',
|
||
'ai.chat.loadMoreSessions': 'Загрузить больше сессий (ещё {n})',
|
||
'ai.chat.noSessions': 'Предыдущих сессий нет',
|
||
'ai.chat.retryHint': 'Вы можете повторить попытку, отправив сообщение ещё раз.',
|
||
'ai.chat.approvalTimeout': 'Время ожидания одобрения инструмента истекло через 5 минут. Вы можете повторить попытку, отправив сообщение ещё раз.',
|
||
'ai.chat.menuHosts': 'Хосты',
|
||
'ai.chat.menuContext': 'Контекст',
|
||
'ai.chat.menuFiles': 'Файлы',
|
||
'ai.chat.menuImage': 'Изображение',
|
||
'ai.chat.menuMentionHost': 'Упомянуть хост',
|
||
'ai.chat.menuMentionNote': 'Упомянуть заметку',
|
||
'ai.chat.mentionNoteSearch': 'Поиск заметок…',
|
||
'ai.chat.mentionNoteEmpty': 'Нет подходящих заметок',
|
||
'ai.chat.mentionNoteUnavailable': 'Этот агент не может читать заметки хранилища в текущем режиме подключения.',
|
||
'ai.chat.mentionNoteTooMany': 'Невозможно сослаться на все эти заметки одновременно. Выберите меньше заметок.',
|
||
'ai.chat.mentionNoteInvalid': '«{{title}}» не удалось прикрепить: у заметки недопустимый идентификатор.',
|
||
'ai.chat.untitledNote': 'Заметка без названия',
|
||
'ai.chat.menuUserSkills': 'Пользовательские навыки',
|
||
'ai.chat.menuSlashCommands': 'Команды /',
|
||
'ai.chat.slashCommands': 'Команды /',
|
||
'ai.chat.slashSystemCommands': 'Системные команды',
|
||
'ai.chat.slashQuickMessages': 'Быстрые сообщения',
|
||
'ai.chat.slashUserSkills': 'Пользовательские навыки',
|
||
'ai.chat.quickMessages': 'Команды /',
|
||
'ai.chat.slashNoResults': 'Нет подходящих команд',
|
||
'ai.chat.slashEmptyHint': 'Добавьте подсказки в Настройки → AI → Быстрые сообщения.',
|
||
|
||
// AI Chat Shortcuts
|
||
'ai.chatShortcuts.title': 'Быстрые действия чата',
|
||
'ai.chatShortcuts.selectionAction': 'Показывать «Добавить в чат» при выделении в терминале',
|
||
'ai.chatShortcuts.selectionAction.description': 'Показывать небольшую кнопку AI рядом с выделенным текстом терминала.',
|
||
|
||
// AI Error
|
||
'ai.codex.bridgeError': 'Обработчики главного процесса Codex ещё не загружены. Полностью перезапустите NetMesh или dev-процесс Electron и попробуйте снова.',
|
||
|
||
// AI Web Search
|
||
'ai.webSearch.title': 'Веб-поиск',
|
||
'ai.webSearch.enable': 'Включить веб-поиск',
|
||
'ai.webSearch.enable.description': 'Разрешить AI-агенту искать в интернете актуальную информацию.',
|
||
'ai.webSearch.provider': 'Провайдер поиска',
|
||
'ai.webSearch.provider.description': 'Выберите провайдера API веб-поиска.',
|
||
'ai.webSearch.apiKey': 'API-ключ',
|
||
'ai.webSearch.apiKey.description': 'API-ключ для выбранного провайдера поиска.',
|
||
'ai.webSearch.apiKey.placeholder': 'Введите API-ключ...',
|
||
'ai.webSearch.apiHost': 'Адрес API',
|
||
'ai.webSearch.apiHost.description': 'Пользовательская конечная точка API. Оставьте значение по умолчанию, если не используете прокси.',
|
||
'ai.webSearch.apiHost.searxngDescription': 'URL вашего экземпляра SearXNG (обязательно).',
|
||
'ai.webSearch.maxResults': 'Макс. число результатов',
|
||
'ai.webSearch.maxResults.description': 'Максимальное количество результатов поиска для возврата (1-20).',
|
||
|
||
// AI Safety Settings
|
||
'ai.safety.title': 'Безопасность',
|
||
'ai.safety.permissionMode': 'Режим разрешений',
|
||
'ai.safety.permissionMode.description': 'Управляет тем, как AI взаимодействует с вашими терминалами. Режим наблюдателя блокирует все операции записи через NetMesh и применяется как к встроенным, так и к внешним агентам. Режим подтверждения носит рекомендательный характер для внешних агентов (они управляют собственным потоком одобрения инструментов).',
|
||
'ai.safety.permissionMode.observer': 'Наблюдатель — только чтение, без действий',
|
||
'ai.safety.permissionMode.confirm': 'Подтверждение — спрашивать перед действиями',
|
||
'ai.safety.permissionMode.auto': 'Авто — выполнять свободно',
|
||
'ai.safety.commandTimeout': 'Тайм-аут команды',
|
||
'ai.safety.commandTimeout.description': 'Максимальное число секунд, которое команда может выполняться до принудительного завершения. Применяется как к встроенным, так и к внешним агентам.',
|
||
'ai.safety.commandTimeout.unit': 'с',
|
||
'ai.safety.responseIdleTimeout': 'Ожидание ответа встроенного ИИ',
|
||
'ai.safety.responseIdleTimeout.description': 'Отменяет запрос встроенного ИИ после указанного числа секунд без нового ответа. Не управляет общей длительностью ответа и выполнением команд.',
|
||
'ai.safety.responseIdleTimeout.unit': 'с',
|
||
'ai.safety.maxIterations': 'Макс. число итераций',
|
||
'ai.safety.maxIterations.description': 'Максимальное число циклов использования инструментов AI, чтобы предотвратить бесконтрольное выполнение. У внешних агентов могут быть собственные внутренние лимиты итераций, имеющие приоритет.',
|
||
'ai.safety.blocklist': 'Чёрный список команд',
|
||
'ai.safety.blocklist.description': 'Regex-шаблоны для блокировки опасных команд. Применяется как к встроенным, так и к внешним агентам через механизм выполнения NetMesh.',
|
||
'ai.safety.blocklist.placeholder': 'Regex-шаблон...',
|
||
'ai.safety.blocklist.reset': 'Сбросить по умолчанию',
|
||
'ai.safety.blocklist.add': 'Добавить шаблон',
|
||
'ai.safety.grants.title': 'Память разрешений',
|
||
'ai.safety.grants.heading': 'Правила для режима подтверждения',
|
||
'ai.safety.grants.description': 'В режиме подтверждения действие сначала требует подтверждения. Сохранённые правила автоматически разрешают похожие действия во всех терминальных сессиях, их можно редактировать вручную.',
|
||
'ai.safety.grants.empty': 'Правил пока нет. Выберите «Всегда разрешать» при одобрении или добавьте вручную.',
|
||
'ai.safety.grants.capability': 'Идентификатор возможности',
|
||
'ai.safety.grants.sessionPattern': 'Шаблон сессии',
|
||
'ai.safety.grants.commandPattern': 'Шаблон команды (необяз.)',
|
||
'ai.safety.grants.note': 'Заметка (необяз.)',
|
||
'ai.safety.grants.add': 'Добавить правило',
|
||
'ai.safety.grants.remove': 'Удалить',
|
||
'ai.safety.grants.export': 'Экспорт JSON',
|
||
'ai.safety.grants.import': 'Импорт JSON',
|
||
'ai.safety.note': 'Эти настройки безопасности применяются к действиям, выполняемым через NetMesh. Внешние CLI-агенты могут иметь собственные локальные инструменты и собственные правила управления ими.',
|
||
|
||
// Unified tooltips for terminal workspace and top tabs (issue #954)
|
||
'terminal.layer.addTerminal': 'Добавить терминал',
|
||
'terminal.layer.switchToSplitView': 'Переключить в режим разделения',
|
||
'terminal.layer.sftp': 'SFTP',
|
||
'terminal.layer.scripts': 'Скрипты',
|
||
'terminal.layer.history': 'История',
|
||
'terminal.layer.theme': 'Тема',
|
||
'terminal.layer.notes': 'Заметки',
|
||
'terminal.layer.aiChat': 'AI-чат',
|
||
'terminal.layer.movePanelLeft': 'Переместить панель влево',
|
||
'terminal.layer.movePanelRight': 'Переместить панель вправо',
|
||
'terminal.layer.closePanel': 'Закрыть панель',
|
||
'terminal.layer.closePane': 'Закрыть область',
|
||
'terminal.layer.resizeSplit': 'Изменить размер области',
|
||
'terminal.layer.splitHorizontal': 'Разделить сверху и снизу',
|
||
'terminal.layer.splitVertical': 'Разделить слева и справа',
|
||
'terminal.layer.openInNewSplit': 'Открыть в новой области',
|
||
'terminal.layer.hostTree.search': 'Поиск хостов...',
|
||
'terminal.layer.hostTree.searchButton': 'Поиск',
|
||
'terminal.layer.hostTree.tagsButton': 'Фильтр по тегам',
|
||
'terminal.layer.hostTree.newHost': 'Новый хост',
|
||
'terminal.layer.hostTree.newHostInGroup': 'Новый хост в этой группе',
|
||
'terminal.layer.hostTree.editHost': 'Изменить хост',
|
||
'terminal.layer.hostTree.hostSavedNextConnection': 'Хост обновлён. Параметры подключения вступят в силу при следующем подключении.',
|
||
'terminal.layer.hostTree.newGroup': 'Новая группа',
|
||
'terminal.layer.hostTree.localShell': 'Локальная оболочка',
|
||
'terminal.layer.hostTree.tagsEmpty': 'Нет доступных тегов',
|
||
'terminal.layer.hostTree.clearTags': 'Сбросить выбор',
|
||
'terminal.layer.hostTree.collapse': 'Свернуть список хостов',
|
||
'terminal.layer.hostTree.expand': 'Развернуть список хостов',
|
||
'terminal.layer.hostTree.empty': 'Хосты не найдены',
|
||
'topTabs.openQuickSwitcher': 'Открыть быстрый переключатель',
|
||
'topTabs.moreTabs': 'Больше вкладок',
|
||
'topTabs.aiAssistant': 'AI-помощник',
|
||
'topTabs.newLocalTerminal': 'Новый локальный терминал',
|
||
'topTabs.controlPanel': 'Быстрые настройки',
|
||
'topTabs.controlPanel.externalMcp': 'Внешний MCP',
|
||
'topTabs.controlPanel.theme': 'Тема',
|
||
'topTabs.controlPanel.theme.light': 'Светлая',
|
||
'topTabs.controlPanel.theme.dark': 'Тёмная',
|
||
'topTabs.controlPanel.theme.system': 'Системная',
|
||
'topTabs.externalMcp.enable': 'Включить внешний MCP',
|
||
'topTabs.externalMcp.disable': 'Отключить внешний MCP',
|
||
'topTabs.windowOpacity': 'Прозрачность окна',
|
||
'topTabs.openSettings': 'Открыть настройки',
|
||
'ai.chat.sessionHistory': 'История сессий',
|
||
'ai.chat.resizeInput': 'Перетащите, чтобы изменить высоту поля ввода',
|
||
'ai.chat.attach': 'Прикрепить',
|
||
'ai.chat.terminalSelectionAttachment': 'Выделение терминала',
|
||
'ai.chat.terminalSelectionLines': 'строк: {count}',
|
||
'ai.chat.collapse': 'Свернуть',
|
||
'ai.chat.expand': 'Развернуть',
|
||
'ai.chat.enableAgent': 'Включить {name}',
|
||
'ai.chat.artifact.noteFallback': 'Заметка Vault',
|
||
'ai.chat.artifact.openNotes': 'Открыть заметки',
|
||
'ai.chat.artifact.openHosts': 'Открыть хосты',
|
||
'ai.chat.artifact.notesSummary': '{count} заметок в Vault',
|
||
'ai.chat.artifact.hostsSummary': '{count} хостов в Vault',
|
||
'ai.chat.artifact.hostsAdded': 'Добавлено хостов: {count}',
|
||
'ai.chat.artifact.hostsPreview': 'Предпросмотр хостов: {count}',
|
||
'ai.chat.artifact.failed': 'Операция Vault не удалась',
|
||
'ai.chat.artifact.unavailableTitle': 'Недоступно',
|
||
'ai.chat.artifact.noteMissing': 'Эта заметка больше не в Vault.',
|
||
'ai.chat.artifact.hostMissing': 'Этот хост больше не в Vault.',
|
||
'ai.chat.artifact.snippetMissing': 'Этот сниппет или скрипт больше не находится в Vault.',
|
||
'ai.chat.artifact.openSnippets': 'Открыть сниппеты',
|
||
'ai.chat.artifact.snippetsSummary': 'Сниппетов в Vault: {count}',
|
||
'ai.chat.artifact.scriptsSummary': 'Скриптов в Vault: {count}',
|
||
'ai.chat.artifact.snippetFallback': 'Сниппет Vault',
|
||
'ai.chat.artifact.scriptFallback': 'Сценарий автоматизации',
|
||
'ai.chat.artifact.scriptLanguage': 'Скрипт: {language}',
|
||
'ai.chat.artifact.snippetDeleted': 'Сниппет удалён',
|
||
'ai.chat.artifact.scriptDeleted': 'Скрипт удалён',
|
||
'ai.chat.artifact.snippetRan': 'Сниппет выполнен',
|
||
'ai.chat.artifact.scriptStarted': 'Запуск скрипта начат',
|
||
'ai.chat.artifact.scriptRunStatus': 'Запуск скрипта: {status}',
|
||
'ai.chat.artifact.scriptRunsSummary': 'Запусков скриптов: {count}',
|
||
'ai.chat.artifact.scriptRunStopped': 'Запуск скрипта остановлен',
|
||
'ai.chat.artifact.scriptRunPaused': 'Запуск скрипта приостановлен',
|
||
'ai.chat.artifact.scriptRunResumed': 'Запуск скрипта возобновлён',
|
||
'ai.chat.artifact.scriptReference': 'Справка nct API',
|
||
'zmodem.waitingForRemote': 'Ожидание удалённой стороны...',
|
||
'zmodem.uploading': 'Загрузка',
|
||
'zmodem.downloading': 'Скачивание',
|
||
'zmodem.cancelTransfer': 'Отменить передачу (Ctrl+C)',
|
||
'zmodem.overwrite.title': 'Удалённый файл уже существует',
|
||
'zmodem.overwrite.applyToRest': 'Применить к остальным конфликтам',
|
||
'zmodem.overwrite.overwrite': 'Перезаписать',
|
||
'zmodem.overwrite.skip': 'Пропустить',
|
||
'zmodem.overwrite.cancel': 'Отмена',
|
||
'settings.shortcuts.resetToDefault': 'Сбросить по умолчанию',
|
||
};
|