// Русский интерфейс Navi. Слаги те же, что в en.js, — словарь читается по ним,
// а не по порядку строк. Имена продуктов (Navi, Synapse, MCP, Ollama, GitHub…)
// не переводятся: они и есть название. Формы множественного числа выбираются
// по params.n, поэтому у числовых строк здесь четыре ключа вместо двух.
export default {
// оболочка приложения — заголовки документа и прочее вне самого чата
'app.titleSettings': 'Navi — Настройки',
// панель артефактов — опубликованные файлы, ссылки, файлы сессии, фоновые
'artifacts.panelLabel': 'Артефакты сессии',
'artifacts.resize': 'Изменить ширину панели',
'artifacts.close': 'Закрыть артефакты',
'artifacts.closeDetails': 'Закрыть подробности',
'artifacts.tabArtifacts': 'Артефакты',
'artifacts.tabLinks': 'Ссылки',
'artifacts.tabFiles': 'Файлы',
'artifacts.tabBackgrounds': 'Фоновые',
'artifacts.viewedImages': 'Просмотренные изображения',
'artifacts.viewedImageAlt': 'Изображение, просмотренное Navi {n}',
'artifacts.emptyArtifacts': 'Нет опубликованных файлов',
'artifacts.emptyLinks': 'Ссылок пока не найдено',
'artifacts.emptyFiles': 'В каталоге сессии нет файлов',
'artifacts.emptyBackgrounds': 'Нет фоновых задач и терминалов',
'artifacts.openPreview': 'Открыть просмотр',
'artifacts.openRaw': 'Открыть исходный файл',
'artifacts.openInline': 'Открыть в браузере',
'artifacts.showPreview': 'Показать просмотр',
'artifacts.showSource': 'Показать исходник',
'artifacts.copyFileLink': 'Скопировать ссылку на файл',
'artifacts.copyAllLinks': 'Скопировать все ссылки',
'artifacts.openAllLinks': 'Открыть все ссылки',
'artifacts.refreshFiles': 'Обновить файлы',
'artifacts.linksInSession': {
one: '{n} ссылка в сессии',
few: '{n} ссылки в сессии',
many: '{n} ссылок в сессии',
},
'artifacts.loadingSource': 'Загрузка исходника...',
'artifacts.previewUnavailable': 'Просмотр недоступен',
'artifacts.sourceFailed': 'Не удалось загрузить исходник: {error}',
'artifacts.latestProgress': 'Ход выполнения',
'artifacts.noOutput': 'Вывода пока нет — он придёт заметкой в следующем ходу.',
'artifacts.terminal': 'Терминал',
'artifacts.directory': 'Каталог',
'artifacts.toolAndAge': '{tool} · {age} назад',
'artifacts.statusRunning': 'Выполняется',
'artifacts.statusDone': 'Готово',
'artifacts.statusFailed': 'Сбой',
'artifacts.statusStopped': 'Остановлен',
'artifacts.statusBusy': 'Занят',
'artifacts.statusIdle': 'Свободен',
'artifacts.statusClosed': 'Закрыт',
// общая лексика, повторяется везде, где смысл тот же
// боковая панель — разговоры, полоса профилей, подпись внизу
'sidebar.newChat': 'Новый чат',
'sidebar.searchPlaceholder': 'Поиск по разговорам...',
'sidebar.results': {
one: '{n} результат',
few: '{n} результата',
many: '{n} результатов',
},
'sidebar.conversations': 'Разговоры',
'sidebar.serviceSessions': 'Служебные сессии',
'sidebar.pendingRecallsOnly': 'Только с запланированным возвратом',
'sidebar.serviceSessionsLabel': 'Служебные сессии (Synapse)',
'sidebar.search': 'Поиск',
'sidebar.refresh': 'Обновить',
'sidebar.loadingConversations': 'Загрузка разговоров...',
'sidebar.noConversations': 'Разговоров пока нет',
'sidebar.noMatch': 'Ни один разговор не подходит под фильтр',
'sidebar.pinned': 'Закреплён',
'sidebar.recallPending': 'Запланирован возврат к разговору',
'sidebar.serviceSession': 'Служебная сессия (реакция Synapse)',
'sidebar.cancelRecall': 'Отменить возврат',
'sidebar.skipNext': 'Пропустить следующий',
'sidebar.pin': 'Закрепить',
'sidebar.unpin': 'Открепить',
'sidebar.noAuthTitle': 'Авторизация отключена',
'sidebar.localMode': 'Локальный режим',
'sidebar.localAvatar': 'локальный',
'sidebar.admin': 'Админ',
'sidebar.openProfile': 'Открыть профиль в gnexus-auth',
'sidebar.avatar': 'аватар',
'sidebar.logout': 'Выйти',
'sidebar.login': 'Войти',
'common.error': 'Что-то пошло не так',
'common.menu': 'Меню',
'common.save': 'Сохранить',
'common.cancel': 'Отмена',
'common.close': 'Закрыть',
'common.create': 'Создать',
'common.add': 'Добавить',
'common.done': 'Готово',
'common.never': 'Никогда',
'common.always': 'Всегда',
'common.you': 'Вы',
'common.revoke': 'Отозвать',
'common.copyToClipboard': 'Скопировать в буфер обмена',
'common.copy': 'Копировать',
'common.copied': 'Скопировано!',
'common.task': 'задача',
'common.toolsCount': {
one: '{n} инструмент',
few: '{n} инструмента',
many: '{n} инструментов',
},
'common.download': 'Скачать',
'common.yes': 'Да',
'common.no': 'Нет',
'common.notAvailable': 'Н/Д',
'common.result': 'Результат',
'common.liveOutput': 'Живой вывод',
'common.delete': 'Удалить',
'common.minutesAgo': {
one: '{n} мин назад',
few: '{n} мин назад',
many: '{n} мин назад',
},
'common.pullToRefresh': 'Потяните, чтобы обновить',
'common.releaseToRefresh': 'Отпустите, чтобы обновить',
'common.refreshing': 'Обновление...',
'common.justNow': 'только что',
// область сообщений — из чего состоит сообщение и что делает агент
'messages.thinking': 'Размышление',
'messages.thinkingStatus': 'Размышляет…',
'messages.plan': 'План',
'messages.arguments': 'Аргументы',
'messages.running': 'выполняется',
'messages.starting': 'запуск',
'messages.runningTool': 'Выполняется {tool}…',
'messages.preparingNext': 'Готовит следующее действие…',
'messages.showAllTools': 'Показать все инструменты',
'messages.hideOlderTools': 'Скрыть ранние инструменты',
'messages.useful': 'Полезно',
'messages.notUseful': 'Не полезно',
'messages.scheduledRecall': 'Запланированный возврат',
'messages.synapseEvent': 'Событие Synapse',
'messages.openFile': 'Открыть файл',
'messages.untitledContent': 'Содержимое',
'messages.unknownUiComponent': 'Неизвестный UI-компонент: {name}',
'messages.jsonItems': {
one: '{n} элемент',
few: '{n} элемента',
many: '{n} элементов',
},
'messages.jsonKeys': {
one: '{n} ключ',
few: '{n} ключа',
many: '{n} ключей',
},
'messages.contextSummary': 'Сводка контекста',
'messages.compressingContext': 'Сжатие контекста…',
'messages.contextCompressed': 'Контекст сжат',
'messages.compressionCounts': {
one: '({before} → {after} сообщение)',
few: '({before} → {after} сообщения)',
many: '({before} → {after} сообщений)',
},
// область чата — шапка, список и панель ввода под ним
'chat.rename': 'Переименовать',
'chat.scheduledRecall': 'Запланирован {type} возврат на {time}',
'chat.recallOnce': 'разовый',
'chat.recallRecurring': 'повторяющийся',
'chat.recallImmediate': 'немедленный',
'chat.connectionLost': 'Связь потеряна. Переподключаюсь в фоне…',
'chat.retry': 'Повторить',
'chat.nothingOpen': 'Ничего не открыто',
'chat.startConversation': 'Выберите разговор или начните новый',
'chat.attachFiles': 'Прикрепить файлы',
'chat.messagePlaceholder': 'Сообщение для Navi…',
'chat.stopGeneration': 'Остановить генерацию',
'chat.sendEnter': 'Отправить (Enter)',
'chat.sending': 'Отправка…',
'chat.removeAttachment': 'Убрать',
'chat.attachment': 'вложение',
'chat.loadingOlder': 'Загружаю более ранние сообщения…',
'chat.scrollToBottom': 'Прокрутить вниз',
'chat.queued': {
one: '{n} сообщение в очереди',
few: '{n} сообщения в очереди',
many: '{n} сообщений в очереди',
},
'chat.queuedHint': 'В очереди, пока идёт текущий ход — они выполнятся следующими',
// мелкие компоненты интерфейса — вход и приветствие, диалоги, просмотр
// фото, сетки карточек и формы
'ui.welcomeTitle': 'Добро пожаловать в Navi',
'ui.tagline': 'Ваш персональный ИИ-ассистент',
'ui.loginWithGnexus': 'Войти через GNEXUS',
'ui.offline': 'Нет сети — интерфейс открыт из кэша, сообщения не отправляются',
'ui.confirmTitle': 'Требуется подтверждение',
'ui.photo': 'Фото',
'ui.loadImageFailed': 'Не удалось загрузить изображение',
'ui.reply': 'Ответить',
'ui.replyToSelection': 'Ответить на выделенное',
'ui.overview': 'Обзор',
'ui.description': 'Описание',
'ui.details': 'Детали',
'ui.moreCards': '+{n} ещё',
'ui.submitted': 'Отправлено',
'ui.submit': 'Отправить',
'ui.fieldRequired': 'Поле «{field}» обязательно',
'ui.invalidEmail': 'Введите корректный адрес электронной почты',
'ui.invalidUrl': 'Введите корректный адрес http:// или https://',
'ui.notANumber': 'Должно быть числом',
'ui.minValue': 'Минимальное значение — {n}',
'ui.maxValue': 'Максимальное значение — {n}',
'ui.minLength': {
one: 'Минимальная длина — {n} символ',
few: 'Минимальная длина — {n} символа',
many: 'Минимальная длина — {n} символов',
},
'ui.maxLength': {
one: 'Максимальная длина — {n} символ',
few: 'Максимальная длина — {n} символа',
many: 'Максимальная длина — {n} символов',
},
'ui.invalidFormat': 'Неверный формат',
'ui.notificationsPromptTitle': 'Включить уведомления',
'ui.notificationsPromptText':
'Navi сможет сообщать, когда ответ готов, — даже если вкладка закрыта.',
'ui.notificationsPromptAllow': 'Включить',
'ui.notificationsPromptLater': 'Не сейчас',
// колонки таблиц
'col.name': 'Название',
'col.key': 'Ключ',
'col.created': 'Создан',
'col.lastUsed': 'Последнее использование',
'col.tool': 'Инструмент',
'col.status': 'Статус',
'col.started': 'Начат',
'col.finished': 'Завершён',
'col.subagentTokens': 'Токены под-агента',
'col.pid': 'PID',
'col.command': 'Команда',
'col.cwd': 'Рабочий каталог',
'col.uptime': 'Время работы',
'col.background': 'Фоновый',
'col.reason': 'Причина',
// диалоги подтверждения
'confirm.revokeKey': 'Отозвать API-ключ «{name}»? Это нельзя отменить.',
'confirm.revokeTarget': 'Отозвать цель Synapse «{target}»? Это нельзя отменить.',
'confirm.mcpResetAdmin': 'Сбросить ключ для «{server}» на общий по умолчанию?',
'confirm.deleteSession': 'Удалить этот разговор?',
'confirm.mcpReset':
'Удалить ваш ключ для «{server}»? Сервер перестанет быть подключённым для вас.',
// сам аккаунт
'profile.languageAuto': 'Авто (из аккаунта)',
// Язык всегда пишется на самом себе, поэтому эти три строки одинаковы во всех
// словарях и переводу не подлежат.
'profile.langEn': 'English',
'profile.langUk': 'Українська',
'profile.langRu': 'Русский',
// всплывающие сообщения — заголовок, иногда строка текста под ним
'toast.languageSaved': 'Язык сохранён',
'toast.keyCreateFailed': 'Не удалось создать ключ',
'toast.keyRevoked': 'API-ключ отозван',
'toast.keyRevokeFailed': 'Не удалось отозвать ключ',
'toast.notificationsDenied': 'Разрешение не выдано',
'toast.notificationsAllowApp': 'Разрешите уведомления в системных настройках приложения.',
'toast.notificationsAllowBrowser': 'Разрешите уведомления в настройках сайта в браузере.',
'toast.notificationsUnavailable': 'Push недоступен',
'toast.notificationsUnavailableText': 'Сервер сейчас не принимает подписки на push.',
'toast.notificationsFailed': 'Ошибка push',
'toast.mcpKeySaved': 'Ключ сохранён для {server}',
'toast.mcpKeySaveFailed': 'Не удалось сохранить ключ',
'toast.mcpKeyReset': 'Ключ сброшен для {server}',
'toast.mcpKeyResetFailed': 'Не удалось сбросить ключ',
'toast.synapseTargetAdded': 'Цель добавлена',
'toast.synapseTargetAddFailed': 'Не удалось добавить цель',
'toast.synapseTargetRevoked': 'Цель отозвана',
'toast.synapseTargetRevokeFailed': 'Не удалось отозвать цель',
'toast.reactionsLoadFailed': 'Не удалось загрузить настройки реакций',
'toast.bgTaskStarted': 'Фоновая задача запущена',
'toast.bgTaskFinished': 'Фоновая задача завершена',
'toast.mcpConnected': 'MCP-сервер подключён',
'toast.mcpDisconnected': 'MCP-сервер отключён',
'toast.saveFailed': 'Не удалось сохранить',
'toast.instructionsSaved': 'Инструкции сохранены',
'toast.instructionsFailed': 'Не удалось сохранить инструкции',
'toast.toolsReloaded': {
one: 'Перезагружен {n} инструмент',
few: 'Перезагружено {n} инструмента',
many: 'Перезагружено {n} инструментов',
},
'toast.toolsReloadErrors': 'Перезагрузка завершилась ошибками — смотрите панель',
'toast.toolsReloadFailed': 'Не удалось перезагрузить инструменты',
// настройки — оболочка, дальше по блоку на вкладку
'settings.title': 'Настройки',
'settings.sectionsLabel': 'Разделы настроек',
'settings.tabApp': 'Приложение',
'settings.tabAccount': 'Аккаунт',
'settings.tabNotifications': 'Уведомления',
'settings.tabSynapse': 'Synapse',
'settings.tabMcp': 'MCP',
'settings.languageToolbar': 'Язык интерфейса',
'settings.languageDescription':
'По умолчанию Navi следует языку вашего аккаунта gnexus-auth; выбор здесь перекрывает его только для Navi. «Авто» возвращает язык аккаунта.',
'settings.languageDescriptionOpen':
'Вход в этот Navi отключён, поэтому язык сохраняется только в этом браузере.',
// настройки — «Приложение»
'settings.appTitle': 'Приложение',
'settings.appDescription':
'Navi — веб-приложение, но оно может жить на устройстве как обычное: либо установленное в этот браузер, либо как Android-приложение, которое оборачивает тот же интерфейс. Это не исключающие друг друга варианты: на телефоне стоит держать Android-приложение, а везде ещё — установленное веб-приложение.',
'settings.appInstallTitle': 'Установка в этот браузер',
'settings.appInstallText':
'Установка помещает Navi в отдельное окно без адресной строки, добавляет значок в док или на домашний экран и кэширует интерфейс, поэтому приложение открывается мгновенно и показывает сессии даже без сети. Она же включает уведомления о готовых ответах — в том числе когда вкладка закрыта.',
'settings.appAndroidAlert':
'Вы читаете это внутри Android-приложения, и оно уже установлено. Чтобы обновить его, скачайте APK ниже и установите поверх старого.',
'settings.appInstalledAlert':
'Установлено — Navi работает в отдельном окне, а не во вкладке браузера.',
'settings.appInstallAction': 'Установить',
'settings.appInstallHint': 'Браузер попросит подтвердить.',
'settings.appBrowserSafari': 'Safari:',
'settings.appIosTap': 'нажмите',
'settings.appIosShare': '«Поделиться», затем',
'settings.appIosAddHome': 'На экран «Домой»',
'settings.appIosNote':
'Уведомления там требуют iOS 16.4 или новее и работают только в установленном приложении, а не во вкладке Safari.',
'settings.appBrowserChrome': 'Chrome или Edge:',
'settings.appChromeClick':
'нажмите значок установки в правом конце адресной строки или откройте',
'settings.appChromeMenu': 'меню и выберите',
'settings.appChromeInstall': 'Установить Navi',
'settings.appBrowserAndroid': 'Android:',
'settings.appAndroidOpen': 'откройте',
'settings.appAndroidMenu': 'меню и выберите',
'settings.appAndroidInstall': 'Установить приложение',
'settings.appAndroidAlso': '(иногда «На главный экран»)',
'settings.appHttpsBefore':
'Браузеры предлагают это только по HTTPS или на localhost — по обычному адресу',
'settings.appHttpsAfter':
'такая возможность не появляется, как и офлайн-режим с уведомлениями.',
'settings.appAndroidTitle': 'Android-приложение',
'settings.appAndroidText':
'Тот же Navi в нативной оболочке. То, чего не даст вкладка браузера: уведомления при заблокированном телефоне — фоновая служба держит соединение открытым — плюс нативная камера и выбор фото, а ссылки открываются в обычном браузере. Сессии, профили и настройки живут на сервере, поэтому приложение и веб-клиент не расходятся.',
'settings.appApkMissing': 'APK не опубликован на этом сервере — соберите его командой',
'settings.appVersion': 'Версия',
'settings.appSize': 'Размер',
'settings.appBuilt': 'Сборка',
'settings.appDownloadApk': 'Скачать APK',
'settings.appAndroidStep1':
'Откройте скачанный файл на телефоне. Android спросит, разрешить ли установку приложений из этого источника, — разрешите.',
'settings.appAndroidStep2': 'При первом запуске приложение спросит адрес Navi. Введите',
'settings.appAndroidStep2Tail':
', затем войдите через браузер, когда он откроется; приложение вернётся само.',
'settings.appAndroidStep3':
'Более новый APK устанавливается поверх старого и сохраняет настройки. Удалять прежнюю версию пришлось бы только при смене ключа подписи.',
// настройки — API-ключи
'settings.keysTitle': 'API-ключи',
'settings.keysCreate': 'Новый ключ',
'settings.keysDescription':
'API-ключи позволяют безголовым клиентам (скриптам, голосовым помощникам, устройствам IoT) аутентифицироваться без OAuth в браузере.',
'settings.keysNoAuthWarning':
'Авторизация сейчас отключена. Любые созданные здесь ключи привязаны к локальному анонимному пользователю и дают полный доступ к этому экземпляру Navi.',
'settings.keysLoading': 'Загрузка API-ключей',
'settings.keysEmpty': 'API-ключей пока нет. Создайте первый, чтобы начать.',
'settings.keyCreateTitle': 'Создание API-ключа',
'settings.keyNamePlaceholder': 'например, Умные часы, Скрипт автоматизации',
'settings.keyCreatedTitle': 'API-ключ создан',
'settings.keyCopyNow': 'Скопируйте этот токен сейчас — он',
'settings.keyCopyNowStrong': 'больше не будет показан',
// настройки — уведомления
'settings.notificationsTitle': 'Уведомления',
'settings.notificationsBridgeText':
'Приложение держит соединение открытым в фоне и показывает системное уведомление, когда ответ готов, а Navi свёрнут. Если закрыть само приложение, уведомления прекратятся.',
'settings.notificationsWebText':
'Push-уведомления позволяют Navi сообщить вам о готовом ответе — даже когда вкладка закрыта. На каждый готовый ответ приходит одно уведомление, но только если ни одно окно Navi не открыто на этой сессии.',
'settings.notificationsUnsupported':
'Этот браузер не поддерживает web push (нужны HTTPS, service worker и Push API). Попробуйте Chrome или свежий Firefox.',
'settings.notificationsRowTitle': 'Push-уведомления',
'settings.notificationsOnBackground':
'Включены — фоновый режим держит соединение, пока приложение свёрнуто.',
'settings.notificationsOn': 'Включены — это устройство подписано.',
'settings.notificationsBlockedApp': 'Заблокированы в системных настройках приложения.',
'settings.notificationsBlockedBrowser': 'Заблокированы в настройках сайта в браузере.',
'settings.notificationsOff': 'Выключены.',
// настройки — MCP-серверы
'settings.mcpTitle': 'MCP-серверы',
'settings.mcpDescriptionAdmin':
'Всё, что подключено к вашим профилям. Сервер со слотом личного ключа работает под вашим ключом — не задавайте свой, и он продолжит использовать общий ключ, настроенный на этом Navi.',
'settings.mcpDescription':
'Всё, что подключено к вашим профилям. Серверу со слотом личного ключа нужен',
'settings.mcpDescriptionStrong': 'ваш собственный ключ',
'settings.mcpDescriptionTail':
'— пока вы его не сохраните, для вас он не подключён вовсе. Серверы без слота общие и доступны всегда.',
'settings.mcpLoading': 'Загрузка MCP-серверов',
'settings.mcpEmpty': 'К этому Navi не подключено ни одного MCP-сервера ни в одном профиле.',
'settings.mcpKeySet':
'Личный ключ сохранён {date} — используется вместо общего ({location}).',
'settings.mcpKeyAbsentAdmin':
'Личного ключа нет — используется общий ключ из конфигурации ({location}).',
'settings.mcpKeyAbsent': 'Личного ключа нет — этот сервер для вас не подключён.',
'settings.mcpNoSlot': 'Слота личного ключа нет — работает на общей конфигурации.',
'settings.mcpKeyPlaceholder': '••• сохранён — введите новый ключ, чтобы заменить',
'settings.mcpKeyPlaceholderNew': 'Вставьте ваш ключ',
'settings.mcpReset': 'Сбросить на общий',
// настройки — доставки Synapse
'settings.synapseTargetsTitle': 'Доставки Synapse',
'settings.synapseTargetAdd': 'Добавить цель',
'settings.synapseTargetsDescription':
'Доставки из хаба уведомлений GNEXUS Synapse приходят на вебхук этого Navi и проверяются по личному секрету цели. Создайте цель в админ-панели Synapse, затем зарегистрируйте её здесь, чтобы Navi принимал её доставки.',
'settings.synapseTargetsLoading': 'Загрузка целей',
'settings.synapseTargetsEmpty':
'Ни одной цели Synapse не зарегистрировано. Добавьте её, чтобы начать принимать доставки.',
'settings.synapseTargetColRef': 'Идентификатор цели',
'settings.synapseTargetAddTitle': 'Добавление цели Synapse',
'settings.synapseTargetRefPlaceholder': 'например, navi-main (как в админ-панели Synapse)',
'settings.synapseTargetSecret': 'Секрет доставки',
'settings.synapseTargetSecretPlaceholder': 's2s-секрет цели Synapse',
'settings.synapseTargetHintBefore': 'В админ-панели Synapse создайте цель, указывающую на',
'settings.synapseTargetHintAfter':
'этого Navi, и вставьте её секрет здесь. Navi использует его, чтобы убедиться, что доставки действительно пришли из Synapse.',
// настройки — реакции Synapse
'settings.reactionsTitle': 'Реакции Synapse',
'settings.reactionsDescription':
'Когда приходит событие GNEXUS Synapse, Navi может отреагировать сам: диспетчер выбирает профиль по вашим инструкциям, работа идёт в скрытой служебной сессии, а посмотреть её потом можно через переключатель «Служебные сессии» в боковой панели.',
'settings.reactionsNotConfigured':
'Интеграция с Synapse не настроена на этом Navi: варианты, отправляющие события в Synapse, отключены. Доставка только в приложение продолжает работать.',
'settings.reactionsLoading': 'Загрузка настроек реакций',
'settings.reactionsEnable': 'Включить реакции',
'settings.reactionsOn': 'Пришедшие события запускают фоновый прогон реакции.',
'settings.reactionsOff': 'События принимаются и пишутся в журнал, но Navi ничего не делает.',
'settings.reactionsNotify': 'Сообщать о завершённых реакциях',
'settings.reactionsOnlyFailures': 'Только сбои',
'settings.reactionsPushAlways': 'Push после каждого завершённого прогона.',
'settings.reactionsPushFailures': 'Push только когда прогон закончился ошибками.',
'settings.reactionsPushNever': 'Не отправлять push о завершении.',
'settings.reactionsTarget': 'Куда идут уведомления',
'settings.reactionsTargetNote':
'Относится к инструменту notify в Navi и к push о завершении реакций.',
'settings.reactionsTargetApp': 'Только в приложение',
'settings.reactionsTargetAppSynapse': 'Приложение + Synapse',
'settings.reactionsTargetSynapse': 'Только Synapse',
'settings.reactionsInstructions': 'Инструкции для реакций',
'settings.reactionsInstructionsNote':
'Указания, по которым диспетчер выбирает профиль и строит задачу. Их можете править и вы, и Navi; каждое изменение попадает в историю ниже.',
'settings.reactionsInstructionsPlaceholder':
'например, «События todo из gntodo идут в профиль developer; спам-письма — никуда».',
'settings.reactionsInstructionsSave': 'Сохранить инструкции',
'settings.reactionsHistory': 'История правок',
'settings.reactionsSessionTtl': 'Продолжать беседу',
'settings.reactionsSessionTtlNote':
'Когда диспетчер называет беседу в событии, Navi продолжает ту же сессию вместо новой — если она была активна не позже этого срока. 0 отключает продолжение.',
'settings.reactionsSessionTtlUnit': 'минут простоя',
'settings.dispatcherInstructions': 'Распределение событий по профилям',
'settings.dispatcherInstructionsNote':
'Указания только для диспетчера: какой тип события в какой профиль идёт и что считать одной беседой (ключ беседы). В сессию и в задачу они не попадают.',
'settings.dispatcherInstructionsPlaceholder':
'например, «tg.* → secretary, ключ = id чата; gntodo.* → developer, не продолжать никогда».',
'settings.dispatcherInstructionsSave': 'Сохранить инструкции распределителю',
// настройки — инструменты (только для админа)
'settings.adminToolsTitle': 'Инструменты',
'settings.adminToolsReloading': 'Перезагрузка…',
'settings.adminToolsReload': 'Перезагрузить инструменты',
'settings.adminToolsDescriptionBefore': 'Перечитывает инструменты из',
'settings.adminToolsDescriptionAfter':
', провайдеры контекста и переподключает все MCP-серверы — без перезапуска и простоя. Новые инструменты можно вызывать со следующего сообщения в любой сессии. Только для админа: подменяет набор инструментов, с которым работают все профили.',
'settings.adminToolsLoaded': {
one: 'загружено {n} инструмент',
few: 'загружено {n} инструмента',
many: 'загружено {n} инструментов',
},
'settings.adminToolsRegistry': '({n} в реестре)',
'settings.adminToolsMissing':
'называет {names} — такого инструмента нет, он исключён из всех профилей.',
'settings.adminToolsMcpFailed': 'Переподключение MCP не удалось: {error}',
'settings.adminToolsMcpTools': {
one: '{n} MCP-инструмент',
few: '{n} MCP-инструмента',
many: '{n} MCP-инструментов',
},
'settings.adminToolsProviders': {
one: '{n} провайдер контекста',
few: '{n} провайдера контекста',
many: '{n} провайдеров контекста',
},
}