From 07cd4c0f2e8abced6f136d098af1b741dba23d9a Mon Sep 17 00:00:00 2001 From: 3g0r1ch Date: Thu, 6 Aug 2026 06:09:05 +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=20(#9001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Validated in local merge-train T5 (base49+contributors+pacocartones) --- src/i18n/messages/ru.json | 268 +++++++++++++++++++++++++------------- 1 file changed, 181 insertions(+), 87 deletions(-) diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index 9fd2a39bb4..87ee1019a2 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -937,7 +937,7 @@ "disabled": "Отключено", "featureFlagOmnirouteEmergencyFallbackDescription": "Перенаправлять запросы при исчерпании бюджета на резервный бесплатный провайдер/модель.", "featureFlagArenaEloSyncEnabledDescription": "Включить периодическую синхронизацию ELO из таблицы лидеров Arena AI для рейтинга интеллектуальности моделей.", - "featureFlagExposeCcDiscoveryAliasesDescription": "__MISSING__:Advertise claude/<provider>/<model> mirror ids on /v1/models so Claude Code gateway model discovery lists non-Claude models. Warning: doubles catalog entries for all clients when enabled globally.", + "featureFlagExposeCcDiscoveryAliasesDescription": "Публиковать claude/<провайдер>/<модель> зеркальные ID на /v1/models, чтобы Claude Code мог видеть не-Claude модели. Внимание: удваивает записи каталога для всех клиентов при глобальном включении.", "sidebar": { "home": "Главная", "dashboard": "Панель управления", @@ -1055,7 +1055,7 @@ "combosLive": "Combo Studio", "combosLiveSubtitle": "Каскад маршрутизации в реальном времени", "compressionStudio": "Compression Studio", - "compressionExclusions": "__MISSING__:Exclusions", + "compressionExclusions": "Исключения", "contextSettingsSubtitle": "Глобальные настройки по умолчанию", "contextHeadroomSubtitle": "Табличное уплотнение", "contextSessionDedupSubtitle": "Межходовая дедупликация", @@ -1066,7 +1066,7 @@ "contextUltraSubtitle": "Эвристическая обрезка", "contextOmniglyphSubtitle": "Контекст как изображения", "compressionStudioSubtitle": "Каскад движков в реальном времени", - "compressionExclusionsSubtitle": "__MISSING__:Per-model/endpoint bypass", + "compressionExclusionsSubtitle": "Обход для отдельных моделей/endpoint'ов", "chaosConfigSubtitle": "Мультимодельное параллельное выполнение", "routingSection": "Routing", "protocolsSection": "Protocols", @@ -1107,7 +1107,7 @@ "settingsSecurity": "Security", "settingsAccessTokens": "Токены доступа", "settingsFeatureFlags": "Флаги функций", - "settingsCache": "__MISSING__:Cache", + "settingsCache": "Кэш", "settingsAuthz": "Authz", "settingsRouting": "Routing", "settingsResilience": "Resilience", @@ -1164,7 +1164,7 @@ "logsSubtitle": "Application logs", "logsProxySubtitle": "Proxy traffic logs", "consoleLogsSubtitle": "Console output", - "logsTimelineSubtitle": "__MISSING__:Visual request timeline", + "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": "__MISSING__:Model catalog and response caching", + "settingsCacheSubtitle": "Кэш каталога моделей и ответов", "settingsSidebar": "Sidebar", "settingsSidebarSubtitle": "Customize sidebar layout", "settingsAuthzSubtitle": "Политика маршрутизации инвентаря и обхода", @@ -1557,7 +1557,7 @@ "settingsGeneralDescription": "Storage, database, and general instance configuration", "settingsAppearanceDescription": "Theme, branding, and visual customization", "settingsAiDescription": "AI behaviors, thinking budgets, vision, and memory settings", - "settingsCacheDescription": "__MISSING__:TTL for model catalog cache entries", + "settingsCacheDescription": "TTL для записей кэша каталога моделей", "settingsSecurityDescription": "Authentication, authorization, and access control settings", "featureFlags": "Флаги функций", "featureFlagsDescription": "Возможности системы управления и экспериментальные возможности", @@ -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": "Инструменты интерфейса командной строки", @@ -2946,14 +2953,36 @@ "copilotReloadInstruction": "Затем перезапустите VS Code и укажите API-ключ в поле ввода.", "wireApiChatCompletions": "Завершения чата (/chat/completions)", "wireApiResponses": "API ответов (/responses)", - "ccDiscoveryInfoButton": "__MISSING__:How to enable discovery in Claude Code", - "ccDiscoveryInfoTooltip": "__MISSING__:Advertise non-Claude models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Doubles catalog entries for all clients when enabled globally.", - "ccDiscoveryInfoLink": "__MISSING__:Open Feature Flags", - "ccOnboardingTitle": "__MISSING__:settings.json for gateway model discovery", - "ccOnboardingCopy": "__MISSING__:Copy", - "ccOnboardingCopied": "__MISSING__:Copied", - "ccOnboardingKeyPlaceholder": "__MISSING__:", - "ccOnboardingWindowNote": "__MISSING__:Claude Code assumes a 200K context window for any model id it does not recognize. For a model with a different real window, add CLAUDE_CODE_AUTO_COMPACT_WINDOW just under it so auto-compaction does not fire too early." + "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": "Комбо", @@ -3597,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", @@ -3704,7 +3739,7 @@ "modelsCount": "{count, plural, one {# модель} few {# модели} many {# моделей} other {# модели}}", "sectionTitle": "Интерфейс интеграции", "sectionDescription": "API, совместимые с OpenAI, и конечные точки операционных протоколов", - "tabApis": "__MISSING__:APIs", + "tabApis": "API", "tabProtocols": "Протоколы", "tabsAria": "Разделы конечной точки", "protocolsTitle": "Протоколы", @@ -3895,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": "Прокси конечных точек", @@ -5411,8 +5457,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}}", @@ -5591,13 +5637,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": "Ручной импорт токена", @@ -5743,7 +5789,7 @@ "bailian-coding-plan": "Подключите Alibaba Coding Plan с помощью API-ключа.", "bedrock": "Нативная интеграция с Bedrock: для обнаружения моделей используются базовые модели Bedrock и профили вывода (inference profiles), а для чата — региональные API Bedrock Runtime Converse/ConverseStream.", "anthropic": "Подключите Anthropic с помощью API-ключа.", - "ant-ling": "__MISSING__:Register and create an API key at the Ant Ling API console (https://chat.ant-ling.com/open), then paste it here. OmniRoute routes chat traffic to https://api.ant-ling.com/v1/chat/completions; the provider is OpenAI-compatible and also exposes an Anthropic-compatible surface.", + "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.", @@ -5764,7 +5810,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": "__MISSING__:CLOVA Studio (HyperCLOVA X) is OpenAI-compatible on /v1/openai. OmniRoute probes /v1/openai/models and routes chat traffic to /v1/openai/chat/completions. Uses the current clovastudio.stream.ntruss.com host — the legacy clovastudio.apigw.ntruss.com endpoint is being deprecated.", + "clova-studio": "Clova Studio — (clova-studio) — Платформа AI от NAVER Cloud", "codestral": "Подключите Codestral с помощью API-ключа.", "cohere": "Пробный период: 1 000 API-запросов в месяц для тестирования, кредитная карта не требуется", "command-code": "Создайте или скопируйте API-ключ из Command Code, затем вставьте его сюда как Bearer-токен.", @@ -5809,9 +5855,9 @@ "watsonx": "Шлюз моделей watsonx предоставляет OpenAI-совместимые эндпоинты /chat/completions и /models по пути /ml/gateway/v1.", "ideogram": "Получите API-ключ на ideogram.ai/docs/api", "iflytek": "Получите API-ключ на console.xfyun.cn", - "inception": "__MISSING__:Inception Labs is OpenAI-compatible at https://api.inceptionlabs.ai/v1. mercury-2 is the first diffusion LLM (dLLM) in the catalog — 5-10x faster generation than comparable autoregressive models, with tool calling, json_mode, and structured outputs.", + "inception": "Inception — (inception) — Платформа AI с флагманскими моделями", "inference-net": "Бесплатный баланс $25 при регистрации, а также возможность получения исследовательских грантов", - "internlm": "__MISSING__:Free monthly quota ~1M input / 3M output tokens (~10 RPM)", + "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 и выводит список моделей через сквозную передачу.", @@ -5858,7 +5904,7 @@ "perplexity": "Подключить Perplexity с помощью API-ключа.", "piapi": "Подключить PiAPI с помощью API-ключа.", "pioneer": "$75 бесплатных кредитов на использование — кредитная карта не требуется", - "plamo": "__MISSING__:PLaMo is OpenAI-compatible at https://api.platform.preferredai.jp/v1. Built by Preferred Networks and optimized for Japanese. Docs are primarily in Japanese.", + "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-ключ — разовый кредит при регистрации, далее платно", @@ -5870,7 +5916,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": "__MISSING__:Sarvam AI is OpenAI-compatible on /v1. OmniRoute probes /v1/models and routes chat traffic to /v1/chat/completions. Models are tuned for Indic languages.", + "sarvam": "Sarvam AI — (sarvam) — Индийские языковые AI модели", "scaleway": "1 млн бесплатных токенов для новых аккаунтов — соответствие EU/GDPR (Париж), Qwen3 235B и Llama 70B", "sensenova": "Получить API-ключ на platform.sensenova.cn", "siliconflow": "$1 бесплатных кредитов плюс постоянно бесплатные модели после подтверждения личности", @@ -5887,7 +5933,7 @@ "together": "Подключите Together AI с помощью API-ключа.", "tokenrouter": "TokenRouter предоставляет совместимую с OpenAI конечную точку генерации ответов чата по адресу https://api.tokenrouter.com/v1/chat/completions, а также рабочий каталог /v1/models. OmniRoute использует протокол OpenAI.", "topaz": "Подключите Topaz с помощью API-ключа.", - "typhoon": "__MISSING__:Typhoon is OpenAI-compatible on /v1. Built by SCB 10X (Thailand); typhoon-v2.5-30b-a3b-instruct is a thai-first, multilingual model.", + "typhoon": "Typhoon — (typhoon) — Тайские языковые модели", "udio": "Вставьте сессионный cookie из udio.com (авторизация Supabase)", "uncloseai": "Авторизация не требуется. API принимает любую непустую строку в качестве ключа для идентификации.", "upstage": "Подключите Upstage с помощью API-ключа.", @@ -5900,7 +5946,7 @@ "voyage-ai": "API-ключ Bearer для API эмбеддингов и ранжирования (rerank) Voyage AI.", "wafer": "API-ключ с https://wafer.ai", "wandb": "Подключите Weights & Biases Inference с помощью API-ключа.", - "writer": "__MISSING__:Writer Palmyra is OpenAI-compatible at https://api.writer.com/v1. palmyra-x5 offers a 1M-token context window.", + "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-ключа.", @@ -5981,18 +6027,45 @@ "cheaperInferenceSupporterBadge": "Друг открытого кода", "cheaperInferenceSupporterTooltip": "Cheaper Inference поддерживает OmniRoute как друг открытого кода", "kimiPartnerLinkNote": "Партнерская ссылка — поддерживает OmniRoute без дополнительных затрат с вашей стороны", - "ccAliasSectionTitle": "__MISSING__:Expose in Claude Code (claude/…)", - "ccAliasSectionHint": "__MISSING__:Advertise this provider's models under claude/<provider>/<model> mirror ids so Claude Code's gateway model discovery can list them. Off by default — enabling this doubles catalog entries for all clients.", - "ccAliasProviderLevelLabel": "__MISSING__:Provider default", - "ccAliasModelOverridesLabel": "__MISSING__:Per-model overrides", - "ccAliasModelOverrideAriaLabel": "__MISSING__:Override for {modelId}", - "ccAliasStateInherit": "__MISSING__:Inherit", - "ccAliasStateOn": "__MISSING__:On", - "ccAliasStateOff": "__MISSING__:Off", - "ccAliasAddModelPlaceholder": "__MISSING__:Model id (e.g. gpt-4o)", - "ccAliasAddModelButton": "__MISSING__:Add override", - "ccAliasLoadError": "__MISSING__:Failed to load discovery-alias settings: {error}", - "ccAliasSaveError": "__MISSING__:Failed to save discovery-alias setting: {error}" + "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": "Настройки", @@ -6087,18 +6160,18 @@ "requestBodyLimitSaving": "Saving...", "requestBodyLimitSave": "Save", "requestBodyLimitCurrent": "Current: {value}", - "cacheConfigLoadFailed": "__MISSING__:Failed to load cache settings", - "cacheConfigSaveSuccess": "__MISSING__:Cache settings saved", - "cacheConfigSaveFailed": "__MISSING__:Failed to save cache settings", - "modelCatalogTtlWholeNumberError": "__MISSING__:Use a whole number", - "modelCatalogTtlMinimumError": "__MISSING__:Minimum is {min} ms", - "modelCatalogTtlMaximumError": "__MISSING__:Maximum is {max} ms", - "modelCatalogCacheTtl": "__MISSING__:Model Catalog Cache TTL", - "modelCatalogCacheTtlDescription": "__MISSING__:How long model catalog responses are cached before refreshing", - "modelCatalogCacheTtlLabel": "__MISSING__:Model catalog cache TTL in milliseconds", - "modelCatalogCacheTtlSaving": "__MISSING__:Saving...", - "modelCatalogCacheTtlSave": "__MISSING__:Save", - "modelCatalogCacheTtlCurrent": "__MISSING__:Current: {value} ms", + "cacheConfigLoadFailed": "Не удалось загрузить конфигурацию кэша", + "cacheConfigSaveSuccess": "Конфигурация кэша сохранена", + "cacheConfigSaveFailed": "Не удалось сохранить конфигурацию кэша", + "modelCatalogTtlWholeNumberError": "TTL должен быть целым числом", + "modelCatalogTtlMinimumError": "TTL должен быть больше 0", + "modelCatalogTtlMaximumError": "TTL не может быть больше 7 дней", + "modelCatalogCacheTtl": "TTL кэша каталога моделей", + "modelCatalogCacheTtlDescription": "Как долго кэшировать каталог моделей (в секундах)", + "modelCatalogCacheTtlLabel": "TTL кэша", + "modelCatalogCacheTtlSaving": "Сохранение…", + "modelCatalogCacheTtlSave": "Сохранить", + "modelCatalogCacheTtlCurrent": "Текущий TTL: {ttl} сек", "mitmProxy": "МИТМ-прокси", "pricing": "Цены", "storage": "Хранение", @@ -6752,7 +6825,7 @@ "howPricingWorks": "Как работает ценообразование", "cacheWrite": "Запись в кэш", "unsaved": "несохраненный", - "resetDefaults": "__MISSING__:Reset defaults", + "resetDefaults": "Сбросить настройки по умолчанию", "saveProvider": "Сохранить поставщика", "model": "Модель", "models": "модели", @@ -6932,13 +7005,13 @@ "compressionPreserveSystemNever": "Никогда", "compressionLiveZoneTitle": "Live Zone с выравниванием по кэшу", "compressionLiveZoneDesc": "Сохранять сжатый префикс диалога неизменным и обрабатывать только вновь добавленные элементы.", - "compressionExclusionsTitle": "__MISSING__:Compression Exclusions", - "compressionExclusionsDesc": "__MISSING__:Model ids or provider/model patterns that must never be compressed. `*` is the only wildcard (e.g. `openai/*`, `*embedding*`). A matching request passes through byte-identical — no compression engine runs.", - "compressionExclusionsPlaceholder": "__MISSING__:One pattern per line, e.g.\nopenai/text-embedding-3-large\nanthropic/*", - "compressionExclusionsSave": "__MISSING__:Save", - "compressionExclusionsSaved": "__MISSING__:Saved", - "compressionExclusionsCount": "__MISSING__:{count, plural, one {# exclusion} other {# exclusions}} configured", - "compressionExclusionsEmpty": "__MISSING__:No exclusions configured — every model/endpoint is eligible for compression (default behavior).", + "compressionExclusionsTitle": "Исключения сжатия", + "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": "Включение/выключение и уровень настраиваются на панели:", @@ -7590,7 +7663,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", @@ -8854,7 +8936,16 @@ "updatedShort": "Обновлено", "lastRefreshed": "Последнее обновление", "providerQuota": "Квота Провайдера", - "providerQuotaHomeHint": "Живой статус по подключенным аккаунтам" + "providerQuotaHomeHint": "Живой статус по подключенным аккаунтам", + "tokensPerDay": "токенов/день", + "tokensPerMonth": "токенов/месяц", + "models": "модели", + "providers": "провайдеры", + "totalCostLabel": "Общая стоимость", + "totalTokensLabel": "Всего токенов", + "requestsLabel": "Запросы", + "costPerDay": "стоимость/день", + "costPerMonth": "стоимость/месяц" }, "modals": { "waitingAuth": "Ожидание авторизации", @@ -9673,7 +9764,10 @@ "minutesAgo": "{minutes}м назад", "hoursAgo": "{hours}ч назад", "daysAgo": "{days}д назад", - "entries": "Записи" + "entries": "Записи", + "breadcrumb": "Кэш", + "statsBreadcrumb": "Статистика", + "configBreadcrumb": "Конфигурация" }, "proxyConfigModal": { "levelGlobal": "Глобальный", @@ -9723,23 +9817,23 @@ "deviceCodeVerificationUrl": "URL-адрес подтверждения", "deviceCodeYourCode": "Ваш код", "deviceCodeWaiting": "Ожидание авторизации...", - "googleLoopbackTitle": "__MISSING__:Google sign-in can't complete from this address", - "googleLoopbackWhatHappens": "__MISSING__: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": "__MISSING__:Recommended — run this on your own computer, then paste the result below:", - "googleLoopbackHelperNote": "__MISSING__: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": "__MISSING__:Or forward the dashboard port over SSH and reload OmniRoute through the tunnel:", - "googleLoopbackTunnelNote": "__MISSING__:Replace {userPlaceholder} with your SSH username, keep the terminal open, then open {localUrl} and connect again from there.", - "googleLoopbackHeadlessAlt": "__MISSING__:For fully headless use with no local callback at all, configure your own Google OAuth credentials plus a public base 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": "__MISSING__:Sign-in can't complete from this address", - "loopbackMismatchWhatHappened": "__MISSING__:What's happening", - "loopbackMismatchExplanation": "__MISSING__: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": "__MISSING__:How to fix it", - "loopbackMismatchStep1": "__MISSING__:On this computer, open a terminal and start an SSH tunnel to the OmniRoute server:", - "loopbackMismatchStep1Note": "__MISSING__: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": "__MISSING__:In this browser, reopen OmniRoute through the tunnel:", - "loopbackMismatchStep3": "__MISSING__:Then connect {providerName} again from the new tab. The callback now reaches the server and the login completes normally.", - "loopbackMismatchAlternative": "__MISSING__:No SSH access? If this provider offers a token import tab, connect with a token instead — that path doesn't use a loopback callback.", + "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 обратного вызова или код авторизации.", @@ -11326,7 +11420,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": "Навыки агента — Исходящие", @@ -11837,7 +11931,7 @@ "description": "Enable network access in the skills sandbox." } }, - "ccDiscoveryAliasesEnvWarning": "__MISSING__:Active via environment variable (EXPOSE_CC_DISCOVERY_ALIASES) — this overrides any dashboard toggle below." + "ccDiscoveryAliasesEnvWarning": "Active via environment variable (EXPOSE_CC_DISCOVERY_ALIASES) — this overrides any dashboard toggle below." }, "comboControl": { "title": "Combo Control Center",