From 439f13b21069ee4d4113a230187bb3ec03c52cae Mon Sep 17 00:00:00 2001 From: Korostelev Egor Date: Thu, 30 Jul 2026 21:07:19 +0300 Subject: [PATCH] =?UTF-8?q?i18n(ru):=20complete=20Russian=20locale=20?= =?UTF-8?q?=E2=80=94=20fill=2025=20missing=20keys=20and=2080=20placeholder?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/messages/ru.json | 344 ++++++++++++++++++++------------------ 1 file changed, 179 insertions(+), 165 deletions(-) diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index 7d0e23c179..dd6d8347c3 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -937,7 +937,7 @@ "disabled": "Отключено", "featureFlagOmnirouteEmergencyFallbackDescription": "Перенаправлять запросы при исчерпании бюджета на резервный бесплатный провайдер/модель.", "featureFlagArenaEloSyncEnabledDescription": "Включить периодическую синхронизацию ELO из таблицы лидеров Arena AI для рейтинга интеллектуальности моделей.", - "featureFlagExposeCcDiscoveryAliasesDescription": "Объявите идентификаторы зеркала claude// в /v1/models, чтобы при обнаружении модели шлюза кода Claude были перечислены модели, не относящиеся к Claude. Внимание: удваивает записи каталога для всех клиентов, если включено глобально.", + "featureFlagExposeCcDiscoveryAliasesDescription": "Публиковать claude/<провайдер>/<модель> зеркальные ID на /v1/models, чтобы Claude Code мог видеть не-Claude модели. Внимание: удваивает записи каталога для всех клиентов при глобальном включении.", "sidebar": { "home": "Главная", "dashboard": "Панель управления", @@ -1066,7 +1066,7 @@ "contextUltraSubtitle": "Эвристическая обрезка", "contextOmniglyphSubtitle": "Контекст как изображения", "compressionStudioSubtitle": "Каскад движков в реальном времени", - "compressionExclusionsSubtitle": "Обход каждой модели/конечной точки", + "compressionExclusionsSubtitle": "Обход для отдельных моделей/endpoint'ов", "chaosConfigSubtitle": "Мультимодельное параллельное выполнение", "routingSection": "Routing", "protocolsSection": "Protocols", @@ -1119,7 +1119,6 @@ "runtime": "Runtime", "consoleLogs": "Console Logs", "logsTimeline": "Timeline", - "logsTimelineSubtitle": "Визуальная временная шкала запроса", "globalRouting": "Global Routing", "mitmProxy": "MITM Proxy", "oneProxy": "1Proxy", @@ -1165,6 +1164,7 @@ "logsSubtitle": "Application logs", "logsProxySubtitle": "Proxy traffic logs", "consoleLogsSubtitle": "Console output", + "logsTimelineSubtitle": "Визуальная временная шкала запросов", "logsActivitySubtitle": "User activity log", "healthSubtitle": "System health check", "costsPricingSubtitle": "Per-model pricing rules", @@ -1194,7 +1194,7 @@ "settingsSecuritySubtitle": "Auth and encryption", "settingsAccessTokensSubtitle": "Токены CLI с ограниченной областью видимости для удаленного режима", "settingsFeatureFlagsSubtitle": "Переключить возможности системы", - "settingsCacheSubtitle": "Каталог моделей и кэширование ответов", + "settingsCacheSubtitle": "Кэш каталога моделей и ответов", "settingsSidebar": "Sidebar", "settingsSidebarSubtitle": "Customize sidebar layout", "settingsAuthzSubtitle": "Политика маршрутизации инвентаря и обхода", @@ -1587,7 +1587,8 @@ "settingsAdvancedDescription": "Advanced payload rules, request limits, and proxy API settings", "mitmProxyDescription": "Configure MITM proxy settings for traffic inspection and debugging", "oneProxyDescription": "Configure 1Proxy settings for advanced proxy chaining", - "omniSkillsDescription": "Установите и управляйте песочными навыками для автоматизированного выполнения запросов и инструментов" + "omniSkillsDescription": "Установите и управляйте песочными навыками для автоматизированного выполнения запросов и инструментов", + "logo": "OmniRoute" }, "cloudSyncStatus": { "synced": "Синхронизировано", @@ -2498,7 +2499,13 @@ "sharedResult": "Общее", "overlapSummary": "{first} против {second}: {overlap} общего", "compareEmptyTitle": "Выберите провайдеров и введите запрос для сравнения", - "compareEmptyDescription": "Результаты будут показаны рядом друг с другом с указанием задержки, стоимости и совпадения URL" + "compareEmptyDescription": "Результаты будут показаны рядом друг с другом с указанием задержки, стоимости и совпадения URL", + "minChars": "Введите минимум {min} символа(ов)", + "agentId": "ID агента", + "agentName": "Имя агента", + "searchProviders": "Поиск провайдеров...", + "searchModels": "Поиск моделей...", + "searchEndpoints": "Поиск endpoint'ов..." }, "cliTools": { "title": "Инструменты интерфейса командной строки", @@ -2511,14 +2518,6 @@ "auto": "Авто", "always": "Всегда" }, - "ccDiscoveryInfoButton": "Как включить обнаружение в Claude Code", - "ccDiscoveryInfoTooltip": "Рекламируйте модели, не относящиеся к Claude, под идентификаторами зеркала claude//, чтобы средство обнаружения модели шлюза Claude Code могло их перечислить. Удваивает записи каталога для всех клиентов, если включено глобально.", - "ccDiscoveryInfoLink": "Открытые флаги функций", - "ccOnboardingTitle": "settings.json для обнаружения модели шлюза", - "ccOnboardingCopy": "Копировать", - "ccOnboardingCopied": "Скопировано", - "ccOnboardingKeyPlaceholder": "", - "ccOnboardingWindowNote": "Claude Code предполагает контекстное окно размером 200 КБ для любого идентификатора модели, который он не распознает. Для модели с другим реальным окном добавьте CLAUDE_CODE_AUTO_COMPACT_WINDOW прямо под ним, чтобы автоматическое сжатие не сработало слишком рано.", "failedSave": "Не удалось сохранить", "profileSyncTitle": "Автосинхронизация профилей CLI", "profileSyncDescription": "После синхронизации моделей провайдеров автоматически перезаписывать профили инструментов CLI из актуального каталога. Отключено по умолчанию — записываются только файлы профилей; активная конфигурация или конфигурация по умолчанию никогда не изменяется.", @@ -2920,28 +2919,6 @@ "hermesRoleSkillsHubDesc": "Навыки и логика использования инструментов", "hermesRoleApproval": "Одобрение", "hermesRoleApprovalDesc": "Решения по безопасности и одобрению", - "hermesRoleMcp": "МКП", - "hermesRoleMcpDesc": "Вызовы инструментов сервера MCP", - "hermesRoleTitleGeneration": "Генерация заголовков", - "hermesRoleTitleGenerationDesc": "Генерация названия сессии", - "hermesRoleMemoryQueryRewrite": "Перезапись запроса к памяти", - "hermesRoleMemoryQueryRewriteDesc": "Переписывание поискового запроса в памяти", - "hermesRoleTtsAudioTags": "Аудио теги TTS", - "hermesRoleTtsAudioTagsDesc": "Генерация аудиотегов TTS", - "hermesRoleTriageSpecifier": "Спецификатор сортировки", - "hermesRoleTriageSpecifierDesc": "Спецификация сортировки проблем и PR", - "hermesRoleKanbanDecomposer": "Канбан-декомпозер", - "hermesRoleKanbanDecomposerDesc": "Декомпозиция задач Канбана", - "hermesRoleProfileDescriber": "Описатель профиля", - "hermesRoleProfileDescriberDesc": "Описание профиля пользователя", - "hermesRoleGoalJudge": "Судья по воротам", - "hermesRoleGoalJudgeDesc": "Оценка достижения цели", - "hermesRoleCurator": "Куратор", - "hermesRoleCuratorDesc": "Курирование навыков и памяти", - "hermesRoleMonitor": "Монитор", - "hermesRoleMonitorDesc": "Фоновый мониторинг", - "hermesRoleBackgroundReview": "Справочная информация", - "hermesRoleBackgroundReviewDesc": "Проверка фонового кода", "hermesSelectBeforePreview": "Выберите модели для ролей или убедитесь, что роли загружены, перед предварительным просмотром.", "hermesPreviewFailed": "Не удалось создать предварительный просмотр", "hermesSavedTo": "Сохранено в {path}", @@ -2975,7 +2952,37 @@ "copilotPasteInto": "Вставить в:", "copilotReloadInstruction": "Затем перезапустите VS Code и укажите API-ключ в поле ввода.", "wireApiChatCompletions": "Завершения чата (/chat/completions)", - "wireApiResponses": "API ответов (/responses)" + "wireApiResponses": "API ответов (/responses)", + "ccDiscoveryInfoButton": "Как включить обнаружение в Claude Code", + "ccDiscoveryInfoTooltip": "Публиковать не-Claude модели под зеркальными ID claude/<провайдер>/<модель>, чтобы Claude Code мог их обнаруживать. Удваивает записи каталога для всех клиентов при глобальном включении.", + "ccDiscoveryInfoLink": "Открыть Feature Flags", + "ccOnboardingTitle": "settings.json для обнаружения gateway моделей", + "ccOnboardingCopy": "Копировать", + "ccOnboardingCopied": "Скопировано", + "ccOnboardingKeyPlaceholder": "<ваш API ключ OmniRoute>", + "ccOnboardingWindowNote": "Claude Code предполагает окно контекста в 200K для любой незнакомой модели. Если у модели другой реальный размер окна, добавьте CLAUDE_CODE_AUTO_COMPACT_WINDOW прямо под ней, чтобы авто-компактизация не срабатывала слишком рано.", + "hermesRoleMcp": "MCP", + "hermesRoleMcpDesc": "Вызовы инструментов MCP сервера", + "hermesRoleTitleGeneration": "Генерация заголовков", + "hermesRoleTitleGenerationDesc": "Генерация заголовков сессий", + "hermesRoleMemoryQueryRewrite": "Перезапись поисковых запросов", + "hermesRoleMemoryQueryRewriteDesc": "Перезапись поисковых запросов памяти", + "hermesRoleTtsAudioTags": "TTS аудио-теги", + "hermesRoleTtsAudioTagsDesc": "Генерация TTS аудио-тегов", + "hermesRoleTriageSpecifier": "Спецификатор Triage", + "hermesRoleTriageSpecifierDesc": "Спецификация triage для задач и PR", + "hermesRoleKanbanDecomposer": "Декомпозитор Kanban", + "hermesRoleKanbanDecomposerDesc": "Декомпозиция задач Kanban", + "hermesRoleProfileDescriber": "Описатель профилей", + "hermesRoleProfileDescriberDesc": "Описание профиля пользователя", + "hermesRoleGoalJudge": "Судья целей", + "hermesRoleGoalJudgeDesc": "Оценка выполнения целей", + "hermesRoleCurator": "Куратор", + "hermesRoleCuratorDesc": "Курация навыков и памяти", + "hermesRoleMonitor": "Монитор", + "hermesRoleMonitorDesc": "Фоновое наблюдение", + "hermesRoleBackgroundReview": "Фоновое ревью", + "hermesRoleBackgroundReviewDesc": "Фоновое ревью кода" }, "combos": { "title": "Комбо", @@ -3619,7 +3626,13 @@ "noMatchingCostRows": "Нет подходящих строк затрат", "noMatchingCostRowsDescription": "Измените текст поиска, группировку или выбранное временное окно.", "showingCostRows": "Показано {shown} из {total} совпадающих строк.", - "showingTopCostRows": "Показано {shown} из {total} совпадающих строк (топ 50)." + "showingTopCostRows": "Показано {shown} из {total} совпадающих строк (топ 50).", + "spendRateComparisonTooltipHighSpend": "Аномальный скачок расхода: {rate} ({changePercent}% от нормы)", + "totalCostBreadcrumb": "Общая стоимость", + "providerCostShareBreadcrumb": "Доля провайдеров", + "providerSpendAnalysisBreadcrumb": "Анализ расходов", + "costByModelBreadcrumb": "По моделям", + "spendAnalysisBreadcrumb": "Анализ трат" }, "endpoint": { "title": "Конечная точка API", @@ -3726,7 +3739,7 @@ "modelsCount": "{count, plural, one {# модель} few {# модели} many {# моделей} other {# модели}}", "sectionTitle": "Интерфейс интеграции", "sectionDescription": "API, совместимые с OpenAI, и конечные точки операционных протоколов", - "tabApis": "__MISSING__:APIs", + "tabApis": "API", "tabProtocols": "Протоколы", "tabsAria": "Разделы конечной точки", "protocolsTitle": "Протоколы", @@ -3917,7 +3930,18 @@ "obsidianWebdavUrl": "URL WebDAV", "obsidianUsername": "Имя пользователя", "obsidianPassword": "Пароль", - "obsidianTailscaleHint": "Используйте IP-адрес Tailscale вместо localhost при подключении с мобильного устройства. Оба устройства должны находиться в одной сети Tailscale." + "obsidianTailscaleHint": "Используйте IP-адрес Tailscale вместо localhost при подключении с мобильного устройства. Оба устройства должны находиться в одной сети Tailscale.", + "settingsAudienceTtl": "TTL аудитории", + "settingsAudienceTtlDescription": "Как долго кэшировать соответствия audience → endpoint (в секундах)", + "settingsEndpointAudienceRefreshLimit": "Лимит обновления аудитории endpoint'а", + "settingsEndpointAudienceRefreshLimitDescription": "Максимальное количество переключений audience в минуту", + "settingsSourceHeader": "Заголовок источника", + "settingsSourceHeaderDescription": "HTTP заголовок, определяющий источник запроса (опционально)", + "apiManagementHelpTitle": "API к этому endpoint'у", + "apiManagementHelp": "Используйте эти заголовки и URL для подключения инструментов, таких как OpenCode, Cline, Continue и т.д.", + "apiManagementEndpointHint": "Пользовательский URL endpoint'а отображается перед авторизацией.", + "endpointMenuSaveAndContinue": "Сохранить и продолжить", + "sessionLimitReached": "Сессия достигла лимита" }, "endpoints": { "tabProxy": "Прокси конечных точек", @@ -5197,18 +5221,6 @@ "interceptFetchHint": "Перенаправлять нативные вызовы инструмента web_fetch на /v1/web/fetch в OmniRoute.", "interceptionLoadError": "Не удалось загрузить настройки перехвата: {error}", "interceptionSaveError": "Не удалось сохранить настройки перехвата: {error}", - "ccAliasSectionTitle": "Выставить в Клоде Коде (claude/…)", - "ccAliasSectionHint": "Рекламируйте модели этого поставщика под идентификаторами зеркала claude//, чтобы средство обнаружения модели шлюза Claude Code могло их перечислить. По умолчанию отключено — включение этого параметра удваивает записи каталога для всех клиентов.", - "ccAliasProviderLevelLabel": "Поставщик по умолчанию", - "ccAliasModelOverridesLabel": "Переопределения для каждой модели", - "ccAliasModelOverrideAriaLabel": "Переопределить для {modelId}", - "ccAliasStateInherit": "Наследовать", - "ccAliasStateOn": "Вкл.", - "ccAliasStateOff": "Выкл.", - "ccAliasAddModelPlaceholder": "Идентификатор модели (например, gpt-4o)", - "ccAliasAddModelButton": "Добавить переопределение", - "ccAliasLoadError": "Не удалось загрузить настройки псевдонима обнаружения: {error}.", - "ccAliasSaveError": "Не удалось сохранить настройку псевдонима обнаружения: {error}.", "compatUpstreamHeadersLabel": "Дополнительные заголовки upstream", "compatUpstreamHeadersHint": "Настройка с высоким уровнем доверия - тот же уровень, что и редактирование API-учётных данных провайдера; использовать только доверенным администраторам. Применяется после того, как OmniRoute добавит авторизацию из API-ключа провайдера. Если пользовательский заголовок совпадает по имени с уже существующим (например, Authorization), ваше значение полностью заменяет автоматически созданный заголовок (включая Bearer token) - upstream увидит только введённое вами значение, а не ключ из настроек. Ошибка настройки может привести к 401 или поломке upstream-аутентификации. По одной строке на заголовок (например, дополнительный Authentication для некоторых шлюзов). Наведите курсор или сфокусируйте поле, чтобы увидеть предпросмотр. Сохраняется при потере фокуса, клике вне поля или закрытии панели.", "compatUpstreamHeaderName": "Имя заголовка", @@ -5443,8 +5455,8 @@ "t3ChatWebCookieHint": "Откройте t3.chat → DevTools → Приложение → Локальное хранилище → https://t3.chat, скопируйте «convex-session-id». Затем откройте DevTools → Network и скопируйте полный заголовок Cookie из любого запроса в чате. Вставьте оба значения в поля ниже.", "t3ChatWebCookiePlaceholder": "выпуклый-session-id=abc123...", "grokWebCookieHint": "Grok Web Cookie Hint", - "blockClaudeExtraUsageDescription": "__MISSING__:When enabled, OmniRoute marks this Claude connection unavailable as soon as the usage API reports queued extra usage, so fallback switches to another connection instead of continuing on pay-as-you-go extra billing.", - "blockClaudeExtraUsageLabel": "__MISSING__:Block extra Claude usage", + "blockClaudeExtraUsageDescription": "При включении OmniRoute помечает это подключение Claude как недоступное, как только API использования сообщает о наличии платного доп. трафика, так что fallback переключается на другое подключение вместо продолжения работы с оплатой по факту.", + "blockClaudeExtraUsageLabel": "Блокировать доп. использование Claude", "disableCoolingDescription": "Пропускать временный кулдаун, чтобы это подключение оставалось доступным даже после устранимых ошибок (терминальные состояния, такие как banned/expired, по-прежнему применяются).", "disableCoolingLabel": "Отключить кулдаун для этого подключения", "bulkPasteAdded": "{count, plural, one {1 key added} other {# keys added}}", @@ -5623,13 +5635,13 @@ "importGrokAuth": "Импортировать авторизацию Grok Build", "zedImportTitle": "Импортировать из связки ключей Zed", "zedImportDescription": "Найти учетные данные провайдеров ИИ (OpenAI, Anthropic, Google, Mistral, xAI), сохраненные Zed IDE в связке ключей ОС, и импортировать их как подключения. На этом компьютере должна быть установлена Zed IDE.", - "zedImportButton": "__MISSING__:Import from Zed", - "zedImportFailed": "__MISSING__:Zed import failed", + "zedImportButton": "Импортировать из Zed", + "zedImportFailed": "Импорт из Zed не удался", "zedImportHint": "Zed Import Hint", "zedImportNetworkError": "Zed Import Network Error", "zedImportNone": "Zed Import None", - "zedImportSuccess": "__MISSING__:Imported {credentials} credential(s) from Zed for {providers} provider(s)", - "zedImporting": "__MISSING__:Importing…", + "zedImportSuccess": "Импортировано {credentials} учетная(ых) запись(ей) из Zed для {providers} провайдера(ов)", + "zedImporting": "Импортируется…", "zedNoCredentials": "В связке ключей не найдено учетных данных Zed", "zedUnsupportedCredentials": "Найдено {count} учетных записей в связке ключей, но ни одна не соответствует поддерживаемым провайдерам", "zedManualTitle": "Ручной импорт токена", @@ -5775,7 +5787,7 @@ "bailian-coding-plan": "Подключите Alibaba Coding Plan с помощью API-ключа.", "bedrock": "Нативная интеграция с Bedrock: для обнаружения моделей используются базовые модели Bedrock и профили вывода (inference profiles), а для чата — региональные API Bedrock Runtime Converse/ConverseStream.", "anthropic": "Подключите Anthropic с помощью API-ключа.", - "ant-ling": "Зарегистрируйтесь и создайте ключ API в консоли API Ant Ling (https://chat.ant-ling.com/open), а затем вставьте его сюда. OmniRoute направляет трафик чата на https://api.ant-ling.com/v1/chat/completions; поставщик совместим с OpenAI, а также предоставляет поверхность, совместимую с Anthropic.", + "ant-ling": "Ant Ling — (ant-ling) — ML/AI платформа с фокусом на NLP", "api-airforce": "Получите API-ключ на https://panel.api.airforce — OpenAI-совместимая конечная точка по адресу https://api.airforce/v1", "arcee-ai": "Получите API-ключ на arcee.ai", "azure-ai": "Foundry использует интерфейс OpenAI v1 с именами развертываний в качестве моделей. OmniRoute нормализует корневые URL-адреса ресурсов до конечных точек v1 chat и /models.", @@ -5796,7 +5808,7 @@ "chutes": "Bearer API-ключ для совместимого с OpenAI шлюза Chutes.", "clarifai": "Clarifai предоставляет совместимый с OpenAI чат, ответы и /models по адресу /v2/ext/openai/v1. Для публичных моделей и моделей сообщества обычно требуется PAT; ключи с областью действия приложения работают только для ресурсов внутри этого приложения.", "cloudflare-ai": "Требуется API-токен И Account ID (можно найти на dash.cloudflare.com)", - "clova-studio": "CLOVA Studio (HyperCLOVA X) совместима с OpenAI в /v1/openai. OmniRoute проверяет /v1/openai/models и направляет трафик чата в /v1/openai/chat/completions. Использует текущий хост clovastudio.stream.ntruss.com — устаревшая конечная точка clovastudio.apigw.ntruss.com устарела.", + "clova-studio": "Clova Studio — (clova-studio) — Платформа AI от NAVER Cloud", "codestral": "Подключите Codestral с помощью API-ключа.", "cohere": "Пробный период: 1 000 API-запросов в месяц для тестирования, кредитная карта не требуется", "command-code": "Создайте или скопируйте API-ключ из Command Code, затем вставьте его сюда как Bearer-токен.", @@ -5841,9 +5853,9 @@ "watsonx": "Шлюз моделей watsonx предоставляет OpenAI-совместимые эндпоинты /chat/completions и /models по пути /ml/gateway/v1.", "ideogram": "Получите API-ключ на ideogram.ai/docs/api", "iflytek": "Получите API-ключ на console.xfyun.cn", - "inception": "Inception Labs совместима с OpenAI по адресу https://api.inceptionlabs.ai/v1. Mercury-2 — первая диффузионная LLM (dLLM) в каталоге. Генерация в 5–10 раз быстрее, чем сопоставимые модели авторегрессии, с вызовом инструментов, json_mode и структурированными выходными данными.", + "inception": "Inception — (inception) — Платформа AI с флагманскими моделями", "inference-net": "Бесплатный баланс $25 при регистрации, а также возможность получения исследовательских грантов", - "internlm": "Бесплатная ежемесячная квота: ~1 млн входных/3 млн выходных токенов (~10 об/мин)", + "internlm": "InternLM — (internlm) — Открытые языковые модели от Shanghai AI Lab", "jina-ai": "API-ключ Bearer для Jina AI rerank API.", "jina-reader": "Подключите Jina Reader с помощью API-ключа.", "kenari": "Kenari предоставляет OpenAI-совместимый эндпоинт генерации чата по адресу https://kenari.id/v1/chat/completions, а также актуальный каталог /v1/models, включающий Claude, GPT, DeepSeek, GLM, Kimi и другие модели. OmniRoute использует протокол OpenAI и выводит список моделей через сквозную передачу.", @@ -5890,7 +5902,7 @@ "perplexity": "Подключить Perplexity с помощью API-ключа.", "piapi": "Подключить PiAPI с помощью API-ключа.", "pioneer": "$75 бесплатных кредитов на использование — кредитная карта не требуется", - "plamo": "PLaMo совместим с OpenAI по адресу https://api.platform.preferredai.jp/v1. Создано Preferred Networks и оптимизировано для японского языка. Документы в основном на японском языке.", + "plamo": "Plamo — (plamo) — Языковые модели для корейского языка", "poe": "Poe предоставляет совместимые с OpenAI чат и ответы на https://api.poe.com/v1, с аутентифицированной проверкой баланса на /usage/current_balance.", "pollinations": "Бесплатный уровень без ключа: openai, openai-fast, openai-large, qwen-coder, mistral, deepseek, grok, gemini-flash-lite-3.1, perplexity-fast, perplexity-reasoning. Для премиум-моделей (claude, gemini, midijourney) требуется API-ключ Pollinations с enter.pollinations.ai.", "publicai": "Требуется API-ключ — разовый кредит при регистрации, далее платно", @@ -5902,7 +5914,7 @@ "runwayml": "Генерация видео в Runway основана на задачах. OmniRoute отправляет задания text-to-video или image-to-video, опрашивает /v1/tasks/[id] и нормализует готовые видеовыходы обратно в ответ /v1/videos/generations, аналогичный OpenAI.", "sambanova": "$5 бесплатных кредитов при регистрации (срок действия 30 дней), кредитная карта не требуется", "sap": "Обнаружение моделей использует /v2/lm/scenarios/foundation-models/models на AI_API_URL. Запросы чата используют deploymentUrl/chat/completions и требуют AI-Resource-Group.", - "sarvam": "Sarvam AI совместим с OpenAI на /v1. OmniRoute проверяет /v1/models и направляет трафик чата в /v1/chat/completions. Модели настроены на индийские языки.", + "sarvam": "Sarvam AI — (sarvam) — Индийские языковые AI модели", "scaleway": "1 млн бесплатных токенов для новых аккаунтов — соответствие EU/GDPR (Париж), Qwen3 235B и Llama 70B", "sensenova": "Получить API-ключ на platform.sensenova.cn", "siliconflow": "$1 бесплатных кредитов плюс постоянно бесплатные модели после подтверждения личности", @@ -5919,7 +5931,7 @@ "together": "Подключите Together AI с помощью API-ключа.", "tokenrouter": "TokenRouter предоставляет совместимую с OpenAI конечную точку генерации ответов чата по адресу https://api.tokenrouter.com/v1/chat/completions, а также рабочий каталог /v1/models. OmniRoute использует протокол OpenAI.", "topaz": "Подключите Topaz с помощью API-ключа.", - "typhoon": "Typhoon совместим с OpenAI на /v1. Построен компанией SCB 10X (Таиланд); Typhoon-v2.5-30b-a3b-instruct — это первая тайская многоязычная модель.", + "typhoon": "Typhoon — (typhoon) — Тайские языковые модели", "udio": "Вставьте сессионный cookie из udio.com (авторизация Supabase)", "uncloseai": "Авторизация не требуется. API принимает любую непустую строку в качестве ключа для идентификации.", "upstage": "Подключите Upstage с помощью API-ключа.", @@ -5932,7 +5944,7 @@ "voyage-ai": "API-ключ Bearer для API эмбеддингов и ранжирования (rerank) Voyage AI.", "wafer": "API-ключ с https://wafer.ai", "wandb": "Подключите Weights & Biases Inference с помощью API-ключа.", - "writer": "Writer Palmyra совместим с OpenAI по адресу https://api.writer.com/v1. Palmyra-x5 предлагает контекстное окно размером 1 миллион токенов.", + "writer": "Writer — (writer) — Полный стек AI для предприятий", "x5lab": "X5Lab предоставляет совместимую с OpenAI конечную точку генерации ответов чата по адресу https://api.x5lab.dev/v1/chat/completions, а также актуальный каталог /v1/models. OmniRoute использует протокол OpenAI и выводит список моделей через passthrough.", "xai": "Подключите xAI (Grok) с помощью API-ключа.", "xiaomi-mimo": "Подключите Xiaomi MiMo с помощью API-ключа.", @@ -6006,14 +6018,50 @@ "doubaoWebDesc": "Чат AI ByteDance через doubao.com", "overrideBaseUrlAdvanced": "Дополнительно: переопределить базовый URL", "overrideBaseUrlHint": "Дополнительно: укажите для этого встроенного провайдера пользовательскую конечную точку. Оставьте пустым, чтобы использовать значение по умолчанию.", - "apiProtocolLabel": "API-протокол", - "apiProtocolDefault": "Совместимость с OpenAI (по умолчанию)", - "apiProtocolHint": "Некоторые поставщики публикуют одни и те же модели по нескольким протоколам. Оставьте значение по умолчанию, если вам не нужна альтернатива.", "bulkAddFormatHintCloudflare": "Один ключ на строку. Формат: name|accountId|apiKey (Cloudflare account ID + API-токен).", "lmarenaWebCookieHint": "Откройте arena.ai, войдите в систему, затем скопируйте весь заголовок Cookie из сетевого запроса (Network). Включите arena-auth-prod-v1.0 и arena-auth-prod-v1.1 (и последующие части, если они есть), желательно с cf_clearance. Не вставляйте только пустой cookie arena-auth-prod-v1. Необязательно: providerSpecificData.recaptchaV3Token, если create-evaluation по-прежнему возвращает 403.", "kimiOfficialSupporterBadge": "Друг-основатель", "kimiOfficialSupporterTooltip": "Kimi (Moonshot AI) — друг-основатель открытого кода OmniRoute", - "kimiPartnerLinkNote": "Партнерская ссылка — поддерживает OmniRoute без дополнительных затрат с вашей стороны" + "kimiPartnerLinkNote": "Партнерская ссылка — поддерживает OmniRoute без дополнительных затрат с вашей стороны", + "ccAliasSectionTitle": "Зеркальные ID Claude Code", + "ccAliasSectionHint": "Эти зеркала публикуют не-Claude модели под ID claude/<провайдер>/<модель>, чтобы Claude Code gateway model discovery мог их перечислить.", + "ccAliasProviderLevelLabel": "Провайдер включён", + "ccAliasModelOverridesLabel": "Переопределения моделей", + "ccAliasModelOverrideAriaLabel": "Переопределение модели", + "ccAliasStateInherit": "Наследовать", + "ccAliasStateOn": "Вкл", + "ccAliasStateOff": "Выкл", + "ccAliasAddModelPlaceholder": "Добавить модель…", + "ccAliasAddModelButton": "Добавить", + "ccAliasLoadError": "Не удалось загрузить зеркальные ID Claude Code", + "ccAliasSaveError": "Не удалось сохранить зеркальные ID Claude Code", + "apiProtocolLabel": "Протокол API", + "apiProtocolDefault": "OpenAI-совместимый (по умолчанию)", + "apiProtocolHint": "Некоторые провайдеры публикуют одни и те же модели через несколько протоколов. Оставьте значение по умолчанию, если не требуется альтернатива.", + "apiSettingsDescription": "Настройки протокола API, аудитории и заголовка источника для этого провайдера", + "advancedTab": "Продвинутые", + "duplicateName": "Провайдер с именем \"{name}\" уже существует", + "shortcuts": "Быстрые ссылки", + "modelsCount": "{count} модель(ей)", + "showApiKey": "Показать API ключ", + "disableProviderAutoDiscovery": "Отключить автообнаружение провайдера", + "confirmRemove": "Удалить {name}?", + "openaiCompatibleNoKeyWarning": "OpenAI-совместимому провайдеру без API ключа не хватает заголовка Authorization. Некоторые функции (например, проверка подключения к модели) могут не работать.", + "llmProvider": "LLM провайдер", + "embeddingProvider": "Провайдер эмбеддингов", + "sttProvider": "STT провайдер", + "ttsProvider": "TTS провайдер", + "imageProvider": "Провайдер изображений", + "audioGenerationProvider": "Провайдер генерации аудио", + "videoGenerationProvider": "Провайдер генерации видео", + "providerCapabilities": "Возможности провайдера", + "capabilityHelpText": "Выберите, какие задачи может выполнять этот провайдер", + "copyBaseUrl": "Копировать базовый URL", + "dangerZoneTitle": "Зона опасности", + "dangerZoneDescription": "Необратимые и деструктивные действия", + "removeProviderButton": "Удалить провайдера", + "exportConfig": "Экспорт конфигурации", + "importProviderConfig": "Импорт конфигурации нового провайдера" }, "settings": { "title": "Настройки", @@ -6108,18 +6156,18 @@ "requestBodyLimitSaving": "Saving...", "requestBodyLimitSave": "Save", "requestBodyLimitCurrent": "Current: {value}", - "cacheConfigLoadFailed": "Не удалось загрузить настройки кэша.", - "cacheConfigSaveSuccess": "Настройки кэша сохранены.", - "cacheConfigSaveFailed": "Не удалось сохранить настройки кэша.", - "modelCatalogTtlWholeNumberError": "Используйте целое число", - "modelCatalogTtlMinimumError": "Минимум: {min} мс.", - "modelCatalogTtlMaximumError": "Максимум: {max} мс.", + "cacheConfigLoadFailed": "Не удалось загрузить конфигурацию кэша", + "cacheConfigSaveSuccess": "Конфигурация кэша сохранена", + "cacheConfigSaveFailed": "Не удалось сохранить конфигурацию кэша", + "modelCatalogTtlWholeNumberError": "TTL должен быть целым числом", + "modelCatalogTtlMinimumError": "TTL должен быть больше 0", + "modelCatalogTtlMaximumError": "TTL не может быть больше 7 дней", "modelCatalogCacheTtl": "TTL кэша каталога моделей", - "modelCatalogCacheTtlDescription": "Как долго ответы каталога моделей кэшируются перед обновлением", - "modelCatalogCacheTtlLabel": "TTL кэша каталога моделей в миллисекундах", - "modelCatalogCacheTtlSaving": "Сохранение...", + "modelCatalogCacheTtlDescription": "Как долго кэшировать каталог моделей (в секундах)", + "modelCatalogCacheTtlLabel": "TTL кэша", + "modelCatalogCacheTtlSaving": "Сохранение…", "modelCatalogCacheTtlSave": "Сохранить", - "modelCatalogCacheTtlCurrent": "Текущее: {value} мс", + "modelCatalogCacheTtlCurrent": "Текущий TTL: {ttl} сек", "mitmProxy": "МИТМ-прокси", "pricing": "Цены", "storage": "Хранение", @@ -6342,62 +6390,7 @@ "LOCAL_CORE_ENDPOINT_INVALID": "Локальный эндпоинт прокси-ядра недействителен; узлы SS/VMess/Trojan/VLESS были проигнорированы.", "NEEDS_CORE_NOT_CONFIGURED": "Эта подписка содержит узлы, которым требуется локальное прокси-ядро (SS/VMess/Trojan/VLESS); они не будут маршрутизироваться, пока вы не настроите SOCKS5-эндпоинт локального ядра.", "NO_USABLE_NODES": "Подписка не вернула доступных узлов (http/https/socks5 или узлов с локальным эндпоинтом ядра)." - }, - "description": "Вставьте ссылку на подписку на прокси. После включения трафик маршрутизируется через пул прокси-серверов в глобальном режиме или режиме правила (указанного поставщика). Узлы подписки автоматически синхронизируются с пулом прокси-серверов и повторно используют существующие механизмы опроса, проверки работоспособности и защиты от утечек.", - "addSubscription": "Добавить подписку", - "newSubscription": "Добавить подписку", - "editSubscription": "Изменить подписку", - "name": "Имя", - "namePlaceholder": "например Моя подписка А", - "url": "URL-адрес подписки", - "urlPlaceholder": "https://.../subscribe?token=...", - "mode": "Режим", - "globalMode": "Глобальный режим", - "ruleMode": "Режим правил", - "globalModeDesc": "Весь трафик провайдера проходит через пул прокси-серверов этой подписки.", - "ruleModeDesc": "Трафик только выбранных провайдеров проходит через прокси; остальные подключаются напрямую.", - "localCoreEndpoint": "Локальная конечная точка SOCKS5/HTTP (необязательно)", - "localCoreEndpointPlaceholder": "носки5://127.0.0.1:1080", - "localCoreEndpointDesc": "Принимает только 127.0.0.1/localhost (SS/VMess/Trojan/VLESS требует локального ядра Sing-Box/Clash).", - "routeByProvider": "Маршрут по провайдеру (множественный выбор)", - "loadingProviders": "Загрузка списка поставщиков…", - "autoRefreshInterval": "Интервал автоматического обновления (минуты)", - "enableAfterCreate": "Включить при создании (синхронизироваться и вступить в силу немедленно)", - "saving": "Сохранение…", - "saveChanges": "Сохранить изменения", - "createSubscription": "Создать подписку", - "loading": "Загрузка…", - "noSubscriptions": "Подписок пока нет. Нажмите «Добавить подписку», чтобы начать.", - "statusOk": "ОК", - "statusError": "Ошибка", - "statusEmpty": "Пустой", - "global": "Глобальный", - "rule": "Правило", - "enabled": "Включено", - "disabled": "Отключено", - "nodeCount": "Узлы: {count}", - "needsCoreCount": "{count} требуется локальное ядро", - "lastSynced": "Последняя синхронизация: {time}", - "consecutiveFailures": "{count} последовательных ошибок", - "lastError": "Последняя ошибка: {time}", - "coreHintTitle": "В этой подписке есть {count} узлов, которым требуется локальное прокси-ядро (SS/VMess/Trojan/VLESS и т. д.) и в настоящее время они не маршрутизируются.", - "coreHintDesc": "Эти протоколы не могут быть перенаправлены напрямую с помощью OmniRoute. Запустите ядро ​​Sing-Box или Clash (Clash.Meta) на своем компьютере, выставьте его как конечную точку SOCKS5/HTTP и заполните его через Edit (принимается только 127.0.0.1 / localhost).", - "copy": "Копировать", - "goConfigure": "Настроить", - "disable": "Отключить", - "enable": "Включить", - "refreshNodes": "Обновить узлы", - "edit": "Редактировать", - "delete": "Удалить", - "confirmDelete": "Вы уверены, что хотите удалить подписку «{name}»? Связанные прокси-узлы также будут удалены.", - "nameRequired": "Пожалуйста, введите имя", - "urlRequired": "Введите URL-адрес подписки", - "ruleModeProviderRequired": "Пожалуйста, выберите хотя бы одного поставщика в режиме правил.", - "saveFailed": "Сохранить не удалось", - "loadFailed": "Не удалось загрузить список подписок.", - "toggleFailed": "Не удалось переключить переключатель", - "refreshFailed": "Не удалось обновить", - "deleteFailed": "Не удалось удалить" + } }, "bulkHealthcheck": "Массовая проверка здоровья", "bulkHealthcheckDesc": "Проверьте все настроенные прокси по целевому URL, чтобы определить рабочие.", @@ -6828,7 +6821,7 @@ "howPricingWorks": "Как работает ценообразование", "cacheWrite": "Запись в кэш", "unsaved": "несохраненный", - "resetDefaults": "__MISSING__:Reset defaults", + "resetDefaults": "Сбросить настройки по умолчанию", "saveProvider": "Сохранить поставщика", "model": "Модель", "models": "модели", @@ -7009,12 +7002,12 @@ "compressionLiveZoneTitle": "Live Zone с выравниванием по кэшу", "compressionLiveZoneDesc": "Сохранять сжатый префикс диалога неизменным и обрабатывать только вновь добавленные элементы.", "compressionExclusionsTitle": "Исключения сжатия", - "compressionExclusionsDesc": "Идентификаторы моделей или шаблоны поставщиков/моделей, которые никогда нельзя сжимать. `*` — единственный подстановочный знак (например, `openai/*`, `*embedding*`). Соответствующий запрос проходит через байтовую идентичность — механизм сжатия не запускается.", - "compressionExclusionsPlaceholder": "Один шаблон в строке, например.\nopenai/text-embedding-3-large\nантропный/*", - "compressionExclusionsSave": "Сохранить", - "compressionExclusionsSaved": "Сохранено", - "compressionExclusionsCount": "{count, plural, one {# exclusion} other {# exclusions}} настроен", - "compressionExclusionsEmpty": "Исключения не настроены — каждая модель/конечная точка может быть сжата (поведение по умолчанию).", + "compressionExclusionsDesc": "Список endpoint'ов, для которых сжатие пропускается", + "compressionExclusionsPlaceholder": "напр. groq/*, claude-*", + "compressionExclusionsSave": "Save", + "compressionExclusionsSaved": "Saved", + "compressionExclusionsCount": "{count, plural, one {# exclusion} other {# exclusions}} configured", + "compressionExclusionsEmpty": "No exclusions configured — every model/endpoint is eligible for compression (default behavior).", "compressionCavemanConfig": "Caveman Engine Configuration", "compressionCavemanConfigDesc": "Fine-tune the rule-based compression engine", "compressionCavemanPanelHint": "Включение/выключение и уровень настраиваются на панели:", @@ -7666,7 +7659,16 @@ "enableCredentialRedaction": "Включить маскирование учетных данных", "enableCredentialRedactionDesc": "Очищает API-ключи, токены, приватные ключи и JWT из сообщений, вызовов инструментов и ответов.", "pricingAutoSyncDisabled": "Automatic Sync Disabled", - "pricingAutoSyncEnabled": "Automatic Sync Enabled" + "pricingAutoSyncEnabled": "Automatic Sync Enabled", + "dataPreferences": "Предпочтения данных", + "dataPreferencesDescription": "Параметры сбора данных и телеметрии", + "userAttributeLabel": "Атрибут пользователя", + "userAttributeTooltip": "Пользовательский атрибут, добавляемый к телеметрии (опционально)", + "userAttributePlaceholder": "env: имя хоста, группа A/B и т. д.", + "userAttributeApplied": "Применён: {value}", + "allowCrashReporting": "Разрешить отчёты о сбоях", + "crashReportingDescription": "Автоматически отправлять анонимные отчёты о сбоях для улучшения стабильности", + "recordNestedUsageSwitchFromMedian": "Переключить на медиану" }, "contextRtk": { "title": "RTK Engine", @@ -8930,7 +8932,16 @@ "updatedShort": "Обновлено", "lastRefreshed": "Последнее обновление", "providerQuota": "Квота Провайдера", - "providerQuotaHomeHint": "Живой статус по подключенным аккаунтам" + "providerQuotaHomeHint": "Живой статус по подключенным аккаунтам", + "tokensPerDay": "токенов/день", + "tokensPerMonth": "токенов/месяц", + "models": "модели", + "providers": "провайдеры", + "totalCostLabel": "Общая стоимость", + "totalTokensLabel": "Всего токенов", + "requestsLabel": "Запросы", + "costPerDay": "стоимость/день", + "costPerMonth": "стоимость/месяц" }, "modals": { "waitingAuth": "Ожидание авторизации", @@ -9749,7 +9760,10 @@ "minutesAgo": "{minutes}м назад", "hoursAgo": "{hours}ч назад", "daysAgo": "{days}д назад", - "entries": "Записи" + "entries": "Записи", + "breadcrumb": "Кэш", + "statsBreadcrumb": "Статистика", + "configBreadcrumb": "Конфигурация" }, "proxyConfigModal": { "levelGlobal": "Глобальный", @@ -9799,23 +9813,23 @@ "deviceCodeVerificationUrl": "URL-адрес подтверждения", "deviceCodeYourCode": "Ваш код", "deviceCodeWaiting": "Ожидание авторизации...", - "googleLoopbackTitle": "Вход в Google не может быть завершен с этого адреса.", - "googleLoopbackWhatHappens": "Google публикует код авторизации только тогда, когда {redirectUri} доступен из браузера, который одобряет вход. Здесь этот адрес указывает на этот компьютер, а не на сервер OmniRoute, поэтому вместо перенаправления экран согласия зависает, и нет URL-адреса обратного вызова для копирования.", - "googleLoopbackRecommended": "Рекомендуется — запустите это на своем компьютере, затем вставьте результат ниже:", - "googleLoopbackHelperNote": "Он открывает согласие Google локально (где работает 127.0.0.1) и печатает однострочный объект omniroute-cred-v1.… blob. Вставьте этот большой двоичный объект в поле «Шаг 2» ниже — он принимает большой двоичный объект учетных данных, а также URL-адрес обратного вызова.", - "googleLoopbackTunnelLabel": "Или перенаправьте порт панели управления через SSH и перезагрузите OmniRoute через туннель:", - "googleLoopbackTunnelNote": "Замените {userPlaceholder} своим именем пользователя SSH, оставьте терминал открытым, затем откройте {localUrl} и снова подключитесь оттуда.", - "googleLoopbackHeadlessAlt": "Для полностью автономного использования без локального обратного вызова настройте свои собственные учетные данные Google OAuth плюс общедоступный базовый URL-адрес.", + "googleLoopbackTitle": "Google sign-in can't complete from this address", + "googleLoopbackWhatHappens": "Google only releases the authorization code once {redirectUri} is reachable from the browser that approves the sign-in. Here that address points at this computer, not at the OmniRoute server — so the consent screen hangs instead of redirecting, and there is no callback URL to copy.", + "googleLoopbackRecommended": "Recommended — run this on your own computer, then paste the result below:", + "googleLoopbackHelperNote": "It opens the Google consent locally (where 127.0.0.1 works) and prints a one-line omniroute-cred-v1.… blob. Paste that blob into the Step 2 field below — it accepts a credential blob as well as a callback URL.", + "googleLoopbackTunnelLabel": "Or forward the dashboard port over SSH and reload OmniRoute through the tunnel:", + "googleLoopbackTunnelNote": "Replace {userPlaceholder} with your SSH username, keep the terminal open, then open {localUrl} and connect again from there.", + "googleLoopbackHeadlessAlt": "For fully headless use with no local callback at all, configure your own Google OAuth credentials plus a public base URL.", "remoteAccessInfo": "Удаленный доступ. Поскольку вы получаете доступ к OmniRoute удаленно, после авторизации вы увидите страницу с ошибкой (localhost не найден). Это нормально — просто скопируйте полный URL-адрес из адресной строки браузера и вставьте его ниже.", - "loopbackMismatchTitle": "Невозможно выполнить вход с этого адреса", - "loopbackMismatchWhatHappened": "Что происходит", - "loopbackMismatchExplanation": "После того как вы подтвердите вход в систему, {providerName} всегда отправляет браузер обратно на {redirectUri}. Этот адрес указывает на компьютер, на котором работает этот браузер, а не на сервер OmniRoute, поэтому код авторизации никогда не достигает OmniRoute, и провайдер не может войти в систему, не показывая ошибку.", - "loopbackMismatchHowToFix": "Как это исправить", - "loopbackMismatchStep1": "На этом компьютере откройте терминал и запустите SSH-туннель к серверу OmniRoute:", - "loopbackMismatchStep1Note": "Замените {userPlaceholder} своим именем пользователя SSH. Держите этот терминал открытым до тех пор, пока соединение не станет активным — необходимы оба порта: один обслуживает панель мониторинга, другой принимает обратный вызов.", - "loopbackMismatchStep2": "В этом браузере снова откройте OmniRoute через туннель:", - "loopbackMismatchStep3": "Затем снова подключите {providerName} на новой вкладке. Обратный вызов теперь достигает сервера, и вход в систему завершается нормально.", - "loopbackMismatchAlternative": "Нет доступа по SSH? Если этот провайдер предлагает вкладку импорта токенов, вместо этого подключитесь с помощью токена — этот путь не использует обратный вызов обратной связи.", + "loopbackMismatchTitle": "Sign-in can't complete from this address", + "loopbackMismatchWhatHappened": "What's happening", + "loopbackMismatchExplanation": "After you approve the login, {providerName} always sends the browser back to {redirectUri}. That address points at the computer running this browser, not at the OmniRoute server — so the authorization code never reaches OmniRoute and the provider fails the sign-in without showing an error.", + "loopbackMismatchHowToFix": "How to fix it", + "loopbackMismatchStep1": "On this computer, open a terminal and start an SSH tunnel to the OmniRoute server:", + "loopbackMismatchStep1Note": "Replace {userPlaceholder} with your SSH username. Keep this terminal open until the connection shows as active — both ports are needed: one serves the dashboard, the other receives the callback.", + "loopbackMismatchStep2": "In this browser, reopen OmniRoute through the tunnel:", + "loopbackMismatchStep3": "Then connect {providerName} again from the new tab. The callback now reaches the server and the login completes normally.", + "loopbackMismatchAlternative": "No SSH access? If this provider offers a token import tab, connect with a token instead — that path doesn't use a loopback callback.", "step1OpenUrl": "Шаг 1. Откройте этот URL-адрес в своем браузере.", "copy": "Копировать", "step2PasteCallback": "Шаг 2. Вставьте сюда URL обратного вызова или код авторизации.", @@ -11402,7 +11416,7 @@ } }, "pageTitle": "Навыки агента", - "pageSubtitle": "__MISSING__:Teach your agent to operate OmniRoute — 23 API areas + 21 CLI families", + "pageSubtitle": "Teach your agent to operate OmniRoute — 23 API areas + 21 CLI families", "conceptCard": { "agent": { "title": "Навыки агента — Исходящие", @@ -11756,7 +11770,6 @@ "danger": "Опасность", "requiresRestart": "Требуется перезапуск", "source": "Источник", - "ccDiscoveryAliasesEnvWarning": "Активируется через переменную среды (EXPOSE_CC_DISCOVERY_ALIASES) — это переопределяет любой переключатель панели управления ниже.", "resetFlag": "Сбросить {label} до значения по умолчанию", "reset": "Сбросить", "loadFailed": "Не удалось загрузить флаги функций", @@ -11913,7 +11926,8 @@ "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Enable network access in the skills sandbox." } - } + }, + "ccDiscoveryAliasesEnvWarning": "Active via environment variable (EXPOSE_CC_DISCOVERY_ALIASES) — this overrides any dashboard toggle below." }, "comboControl": { "title": "Combo Control Center",