{
  "common": {
    "save": "Сохранить",
    "cancel": "Отмена",
    "delete": "Удалить",
    "loading": "Загрузка...",
    "error": "Произошла ошибка",
    "success": "Успех",
    "confirm": "Вы уверены?",
    "refresh": "Обновить",
    "close": "Закрыть",
    "add": "Добавить",
    "edit": "Редактировать",
    "search": "Поиск",
    "back": "Назад",
    "next": "Далее",
    "submit": "Отправить",
    "reset": "Сброс",
    "copy": "Копировать",
    "copied": "Скопировано!",
    "enabled": "Включено",
    "disabled": "Отключено",
    "active": "Активный",
    "inactive": "Неактивный",
    "noData": "Нет доступных данных",
    "configure": "Настроить",
    "manage": "Управление",
    "name": "Имя",
    "actions": "Действия",
    "status": "Статус",
    "type": "Тип",
    "model": "Модель",
    "models": "модели",
    "provider": "Поставщик",
    "account": "Аккаунт",
    "time": "Время",
    "details": "Подробности",
    "created": "Создано",
    "lastUsed": "Последнее использование",
    "loadMore": "Загрузить больше",
    "noResults": "Результаты не найдены",
    "reloadPage": "Обновить страницу",
    "connected": "Подключено",
    "disconnected": "Отключено",
    "notConfigured": "Не настроено",
    "testConnection": "Тестовое соединение",
    "enable": "Включить",
    "disable": "Отключить",
    "columns": "Столбцы",
    "newest": "Новейший",
    "oldest": "Самый старый",
    "all": "Все",
    "none": "Нет",
    "yes": "Да",
    "no": "Нет",
    "warning": "Предупреждение",
    "note": "Примечание",
    "free": "Бесплатно",
    "skipToContent": "Перейти к содержимому"
  },
  "sidebar": {
    "home": "Главная",
    "dashboard": "Панель управления",
    "providers": "Провайдеры",
    "combos": "Комбо",
    "usage": "Использование",
    "analytics": "Аналитика",
    "costs": "Затраты",
    "health": "Здоровье",
    "limits": "Лимиты и квоты",
    "cliTools": "Инструменты интерфейса командной строки",
    "media": "Медиа",
    "settings": "Настройки",
    "translator": "Переводчик",
    "docs": "Документы",
    "issues": "Проблемы",
    "apiManager": "Менеджер API",
    "logs": "Журналы",
    "auditLog": "Журнал аудита",
    "shutdown": "Выключение",
    "restart": "Перезапустить",
    "shutdownConfirm": "Выключить OmniRoute?",
    "restartConfirm": "Перезапустить OmniRoute?",
    "version": "v{version}",
    "debug": "Отладка",
    "system": "Система",
    "help": "Помощь",
    "serverDisconnected": "Сервер отключен",
    "serverDisconnectedMsg": "Прокси-сервер остановлен или перезагружается.",
    "expandSidebar": "Развернуть боковую панель",
    "collapseSidebar": "Свернуть боковую панель",
    "themes": "Темы",
    "presetColors": "Популярные цвета",
    "createTheme": "Создать тему",
    "chooseColor": "Выберите один цвет",
    "themeCoral": "Коралловый",
    "themeBlue": "Синий",
    "themeRed": "Красный",
    "themeGreen": "Зелёный",
    "themeViolet": "Фиолетовый",
    "themeOrange": "Оранжевый",
    "themeCyan": "Голубой",
    "endpoints": "Конечные точки",
    "playground": "Площадка",
    "agents": "Агенты",
    "cliToolsShort": "Инструменты"
  },
  "themesPage": {
    "title": "Темы",
    "description": "Выбери готовую тему или создай свою из одного цвета",
    "presetColors": "Популярные цвета",
    "customTheme": "Своя тема",
    "customThemeDesc": "Нажми создать тему и выбери один цвет",
    "createTheme": "Создать тему",
    "activePreset": "Активная тема"
  },
  "header": {
    "logout": "Выход из системы",
    "language": "Язык",
    "providers": "Провайдеры",
    "providerDescription": "Управляйте подключениями к поставщикам ИИ",
    "combos": "Комбо",
    "comboDescription": "Комбинации моделей с резервным вариантом",
    "usage": "Использование и аналитика",
    "usageDescription": "Отслеживайте использование API, потребление токенов и журналы запросов.",
    "analytics": "Аналитика",
    "analyticsDescription": "Диаграммы, тенденции и аналитические сведения об оценках",
    "cliTools": "Инструменты интерфейса командной строки",
    "cliToolsDescription": "Настройка инструментов CLI",
    "home": "Главная",
    "homeDescription": "Добро пожаловать в OmniRoute",
    "endpoint": "Конечные точки",
    "endpointDescription": "Управление прокси-эндпоинтами, MCP, A2A и API-эндпоинтами",
    "settings": "Настройки",
    "settingsDescription": "Управляйте своими предпочтениями",
    "openaiCompatible": "Совместимость с OpenAI",
    "anthropicCompatible": "Антропная совместимость",
    "media": "Media",
    "mediaDescription": "Generate images, videos, and music",
    "themes": "Темы",
    "themesDescription": "Выберите цветовую тему для всей панели",
    "mcp": "MCP",
    "mcpDescription": "Model Context Protocol server management and tools",
    "a2a": "A2A",
    "a2aDescription": "Agent-to-Agent protocol tasks and observability"
  },
  "home": {
    "quickStart": "Быстрый старт",
    "quickStartDesc": "Приступайте к работе в 4 шага. Подключайте провайдеров, маршрутизируйте модели, контролируйте все.",
    "fullDocs": "Полная документация",
    "step1Title": "1. Создайте ключ API.",
    "step1Desc": "Перейдите к <endpoint>Endpoint</endpoint> -> Зарегистрированные ключи. Создайте один ключ для каждой среды.",
    "step2Title": "2. Подключите провайдеров",
    "step2Desc": "Добавьте учетные записи в <providers>Providers</providers>. Поддерживает OAuth, ключ API и уровни бесплатного пользования.",
    "step3Title": "3. Укажите своего клиента",
    "step3Desc": "Установите базовый URL-адрес {url} в клиенте IDE или API.",
    "step4Title": "4. Мониторинг и оптимизация",
    "step4Desc": "Отслеживайте токены, стоимость и ошибки в <logs>Журналы запросов</logs> и <analytics>Analytics</analytics>.",
    "providersOverview": "Обзор провайдеров",
    "configuredOf": "{configured} настроен из {total} доступных поставщиков",
    "noModelsAvailable": "Нет доступных моделей для этого поставщика.",
    "configureFirst": "Сначала настройте соединение в {providers}.",
    "configureProvider": "Настроить поставщика",
    "modelAvailable": "Доступна модель {count}",
    "modelsAvailable": "Доступно {count} моделей",
    "connectionsActive": "Соединение {count} активно",
    "connectionsActivePlural": "{count} активных соединений",
    "copyModelName": "Скопировать название модели",
    "documentation": "Документация",
    "healthMonitor": "Монитор здоровья",
    "reportIssue": "Сообщить о проблеме",
    "activeError": "{active} активен · {errors} ошибка",
    "oauthLabel": "OAuth",
    "apiKeyLabel": "API-ключ",
    "requestsShort": "{count} требуется",
    "providerModelsTitle": "{provider} — Модели",
    "copiedModel": "Скопировано: {model}",
    "aliasLabel": "псевдоним"
  },
  "analytics": {
    "title": "Аналитика",
    "overviewDescription": "Отслеживайте шаблоны использования API, потребление токенов, затраты и тенденции активности среди всех поставщиков и моделей.",
    "evalsDescription": "Запустите оценочные пакеты для тестирования и проверки конечных точек LLM. Сравнивайте качество модели, обнаруживайте регрессии и измеряйте задержку тестирования.",
    "overview": "Обзор",
    "evals": "Оценки"
  },
  "apiManager": {
    "title": "API-ключи",
    "createKey": "Создать ключ API",
    "key": "Ключ",
    "revokeKey": "Отозвать ключ",
    "revokeConfirm": "Вы уверены, что хотите отозвать этот ключ API?",
    "noKeys": "Ключей API пока нет",
    "noKeysDesc": "Создайте свой первый ключ API для аутентификации запросов к вашей конечной точке.",
    "keyLabel": "Ключевая этикетка",
    "permissions": "Разрешения",
    "expiresAt": "Срок действия истекает",
    "never": "Никогда",
    "revoke": "Отозвать",
    "showKey": "Показать ключ",
    "hideKey": "Скрыть ключ",
    "copyKey": "Копировать ключ API",
    "allModels": "Все модели",
    "selectedModels": "Выбранные модели",
    "readOnly": "Только чтение",
    "fullAccess": "Полный доступ",
    "keyManagement": "Управление ключами API",
    "keyManagementDesc": "Создавайте ключи API для аутентификации запросов к вашей конечной точке и управляйте ими.",
    "totalKeys": "Всего ключей",
    "restricted": "Ограниченный",
    "totalRequests": "Всего запросов",
    "modelsAvailable": "Доступные модели",
    "registeredKeys": "Зарегистрированные ключи",
    "keysRegistered": "Зарегистрировано {count} ключей",
    "keyRegistered": "Ключ {count} зарегистрирован",
    "keysSecurityNote": "Каждый ключ изолирует отслеживание использования и может быть отозван независимо. Ключи маскируются после создания в целях безопасности.",
    "createFirstKey": "Создайте свой первый ключ",
    "name": "Имя",
    "usage": "Использование",
    "created": "Создано",
    "actions": "Действия",
    "reqs": "требования",
    "neverUsed": "Никогда не использовался",
    "deleteConfirm": "Удалить этот ключ API?",
    "usageTips": "Советы по использованию",
    "tipAuth": "Используйте ключи API в заголовке авторизации в качестве носителя YOUR_KEY.",
    "tipSecure": "Ключи отображаются только один раз во время создания — храните их в надежном месте.",
    "tipSeparate": "Создавайте отдельные ключи для разных клиентов или сред.",
    "tipRestrict": "Ограничьте ключи определенными моделями для повышения безопасности и контроля затрат.",
    "keyName": "Имя ключа",
    "keyNamePlaceholder": "например, Ключ производства, Ключ разработки",
    "keyNameDesc": "Выберите описательное имя, чтобы определить назначение этого ключа.",
    "keyCreated": "Ключ API создан",
    "keyCreatedSuccess": "Ключ успешно создан!",
    "keyCreatedNote": "Скопируйте и сохраните этот ключ сейчас — он больше не будет отображаться.",
    "done": "Готово",
    "savePermissions": "Сохранить разрешения",
    "allowAll": "Разрешить все",
    "restrict": "Ограничить",
    "allowAllInfo": "Этот ключ дает доступ ко всем доступным моделям.",
    "restrictInfo": "Этот ключ может получить доступ к {selected} из моделей {total}.",
    "selected": "{count} выбрано",
    "all": "Все",
    "clear": "Очистить",
    "searchModels": "Поиск моделей по названию или поставщику...",
    "noModelsFound": "Модели не найдены",
    "keyNameRequired": "Укажите имя ключа.",
    "keyNameTooLong": "Имя ключа должно содержать не более {max} символов.",
    "keyNameInvalid": "Имя ключа может содержать только буквы, цифры, пробелы, дефисы и подчеркивания.",
    "invalidKeyName": "Неверное имя ключа",
    "failedCreateKey": "Не удалось создать ключ",
    "failedCreateKeyRetry": "Не удалось создать ключ. Пожалуйста, попробуйте еще раз.",
    "invalidKeyId": "Неверный идентификатор ключа",
    "failedDeleteKey": "Не удалось удалить ключ",
    "failedDeleteKeyRetry": "Не удалось удалить ключ. Пожалуйста, попробуйте еще раз.",
    "invalidModelsSelection": "Неверный выбор моделей",
    "cannotSelectMoreThanModels": "Невозможно выбрать более {max} моделей.",
    "failedUpdatePermissions": "Не удалось обновить разрешения.",
    "failedUpdatePermissionsRetry": "Не удалось обновить разрешения. Пожалуйста, попробуйте еще раз.",
    "unknownProvider": "неизвестно",
    "copyMaskedKey": "Копировать замаскированный ключ",
    "modelsCount": "{count, plural, one {# model} other {# models}}",
    "lastUsedOn": "Последний: {date}",
    "editPermissions": "Редактировать разрешения",
    "deleteKey": "Удалить ключ",
    "model": "{count} модель",
    "models": "{count} модели",
    "permissionsTitle": "Разрешения: {name}",
    "allowAllDesc": "Этот ключ дает доступ ко всем доступным моделям.",
    "restrictDesc": "Этот ключ может получить доступ к {selectedCount} из моделей {totalModels}.",
    "selectedCount": "{count} выбрано"
  },
  "auditLog": {
    "title": "Журнал аудита",
    "searchPlaceholder": "Поиск действий...",
    "action": "Действие",
    "actor": "Актер",
    "target": "Цель",
    "ipAddress": "IP-адрес",
    "timestamp": "Временная метка",
    "noEntries": "Записи аудита не найдены",
    "filterByAction": "Фильтровать по действию...",
    "filterByActor": "Фильтровать по актеру...",
    "filterEntriesAria": "Фильтрация записей журнала аудита",
    "filterByActionTypeAria": "Фильтровать по типу действия",
    "filterByActorAria": "Фильтровать по актеру",
    "refreshAuditLogAria": "Обновить журнал аудита",
    "tableAria": "Записи журнала аудита",
    "failedFetchAuditLog": "Не удалось получить журнал аудита.",
    "notAvailable": "—",
    "description": "Административные действия и события безопасности",
    "showing": "Показаны записи {count} (смещение {offset})",
    "previous": "Предыдущий"
  },
  "media": {
    "title": "Медиа-площадка",
    "subtitle": "Генерируйте изображения, видео и музыку",
    "model": "Model",
    "prompt": "Prompt",
    "generate": "Сгенерировать",
    "generating": "Generating...",
    "loadingModels": "Loading available models...",
    "noModels": "No models available. Configure providers with media capabilities first.",
    "error": "Generation Failed",
    "result": "Result",
    "imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
    "videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
    "musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI."
  },
  "cliTools": {
    "title": "Инструменты интерфейса командной строки",
    "noActiveProviders": "Нет активных провайдеров",
    "noActiveProvidersDesc": "Сначала добавьте и подключите поставщиков, чтобы настроить инструменты CLI.",
    "mapModels": "Модели карт",
    "testConnection": "Тестовое соединение",
    "connectionStatus": "Статус соединения",
    "configureEndpoint": "Настроить конечную точку",
    "instructions": "Инструкции",
    "modelMapping": "Сопоставление модели",
    "baseUrl": "Базовый URL",
    "apiKey": "API-ключ",
    "configured": "Настроен",
    "notConfigured": "Не настроено",
    "notInstalled": "Не установлено",
    "custom": "Пользовательский",
    "unknown": "Неизвестно",
    "lastSavedAt": "Последнее сохранение: {date}",
    "never": "Никогда",
    "justNow": "только что",
    "minutesAgoShort": "{count} мин назад",
    "hoursAgoShort": "{count}ч назад",
    "daysAgoShort": "{count}дн назад",
    "monthsAgoShort": "{count}мес. назад",
    "yearsAgoShort": "{count}г назад",
    "runtimeCheckFailed": "Проверка времени выполнения не удалась",
    "yourApiKeyPlaceholder": "ваш-API-ключ",
    "modelPlaceholder": "поставщик/идентификатор модели",
    "configurationSaved": "Конфигурация успешно сохранена.",
    "failedToSave": "Не удалось сохранить конфигурацию.",
    "noApiKeysCreateOne": "Нет ключей API — создайте их на странице «Ключи».",
    "defaultOmnirouteKey": "sk_omniroute (по умолчанию)",
    "selectModel": "Выберите модель",
    "selectModelForAlias": "Выберите модель для {alias}",
    "selectModelForTool": "Выберите модель для {tool}",
    "select": "Выбрать",
    "clear": "Очистить",
    "comingSoon": "Скоро",
    "checkingRuntime": "Проверка статуса выполнения...",
    "guideOnlyIntegration": "Интеграция только для руководства (локальная среда выполнения не требуется)",
    "cliRuntimeDetected": "Среда выполнения CLI обнаружена и готова",
    "cliFoundNotRunnable": "CLI найден, но не работает{reason}",
    "cliRuntimeNotDetected": "Среда выполнения CLI не обнаружена",
    "binary": "Двоичный",
    "configPath": "Путь конфигурации",
    "configPathShort": "Конфигурация",
    "failedCheckRuntimeStatus": "Не удалось проверить статус выполнения.",
    "copy": "Копировать",
    "copied": "Скопировано",
    "copyConfig": "Копировать конфигурацию",
    "saveConfig": "Сохранить конфигурацию",
    "selectionSaved": "Выбор сохранен.",
    "guide": "Руководство",
    "detected": "Обнаружено",
    "notReady": "Не готов",
    "active": "Активный",
    "inactive": "Неактивный",
    "startMitm": "Запустить МИТМ",
    "stopMitm": "Остановить МИТМ",
    "mitmStarted": "MITM стартовал успешно!",
    "mitmStopped": "MITM успешно остановлен!",
    "failedStart": "Не удалось запустить MITM",
    "failedStop": "Не удалось остановить MITM",
    "saveMappings": "Сохранить сопоставления",
    "mappingsSaved": "Сопоставления сохранены!",
    "failedSaveMappings": "Не удалось сохранить сопоставления.",
    "howItWorks": "Как это работает:",
    "antigravityHowWorksDesc": "Антигравитация отправляет запросы на конечную точку Google. MITM перехватывает и перенаправляет их в OmniRoute.",
    "antigravityStep1": "1. Запустите MITM для маршрутизации запросов через OmniRoute.",
    "antigravityStep2Prefix": "2. Добавить",
    "antigravityStep2Suffix": "в файл хостов как 127.0.0.1.",
    "antigravityStep3": "3. Откройте Антигравитацию и запросы будут проксироваться.",
    "sudoPasswordRequiredTitle": "Требуется пароль Sudo",
    "sudoPasswordHint": "Пароль администратора необходим для изменения файлов хостов и настроек системного прокси.",
    "enterSudoPassword": "Введите пароль sudo",
    "sudoPasswordRequiredError": "Требуется пароль Sudo.",
    "cancel": "Отмена",
    "confirm": "Подтвердить",
    "settingsApplied": "Настройки успешно применены!",
    "failedApplySettings": "Не удалось применить настройки.",
    "settingsReset": "Настройки успешно сброшены!",
    "failedResetSettings": "Не удалось сбросить настройки",
    "backupRestored": "Бэкап восстановлен!",
    "failedRestore": "Не удалось восстановить",
    "checkingCli": "Проверка {tool} CLI...",
    "cliNotRunnable": "{tool} CLI установлен, но не запускается",
    "cliNotInstalled": "{tool} CLI не установлен",
    "cliNotDetected": "{tool} CLI не обнаружен",
    "cliDetectedReady": "{tool} CLI обнаружен и готов",
    "cliFoundFailedHealthcheck": "{tool} CLI найден, но проверка работоспособности во время выполнения не выполнена {reason}.",
    "installCliPrompt": "Чтобы использовать эту функцию, установите {tool} CLI.",
    "installCodexPrompt": "Установите Codex CLI, чтобы использовать функцию автоматического применения.",
    "hide": "Скрыть",
    "howToInstall": "Как установить",
    "installationGuide": "Руководство по установке",
    "platforms": "macOS/Linux/Windows:",
    "afterInstallationRun": "После установки запустите",
    "toVerify": "чтобы проверить.",
    "current": "Текущий",
    "baseUrlPlaceholder": "https://.../v1",
    "resetToDefault": "Сбросить настройки по умолчанию",
    "providerModelPlaceholder": "поставщик/идентификатор модели",
    "apply": "Применить",
    "reset": "Сброс",
    "manualConfig": "Ручная настройка",
    "backups": "Резервные копии",
    "configBackups": "Резервные копии конфигурации",
    "noBackupsYet": "Резервных копий пока нет. Резервные копии создаются автоматически перед каждым применением или сбросом.",
    "restore": "Восстановить",
    "backupRestoredReloading": "Бэкап восстановлен! Статус перезагрузки...",
    "failedRestoreBackup": "Не удалось восстановить резервную копию",
    "applied": "Применено!",
    "failed": "Не удалось",
    "resetDone": "Сбросить!",
    "omnirouteConfiguredOpenAiCompatible": "OmniRoute настроен как поставщик, совместимый с OpenAI.",
    "provider": "Поставщик",
    "model": "Модель",
    "providers": "Провайдеры",
    "auth": "Авторизация",
    "noApiKeysAvailable": "Нет доступных ключей API",
    "usingDefaultOmniroute": "Использование по умолчанию: sk_omniroute",
    "updateConfig": "Обновить конфигурацию",
    "applyConfig": "Применить конфигурацию",
    "noBackupsAvailable": "Резервные копии отсутствуют.",
    "profileSaved": "Профиль «{name}» сохранен!",
    "failedSaveProfile": "Не удалось сохранить профиль",
    "profileActivated": "Профиль активирован!",
    "failedActivateProfile": "Не удалось активировать профиль",
    "profiles": "Профили",
    "savedProfiles": "Сохраненные профили",
    "noProfilesYet": "Ни один профиль еще не сохранен. Сохраните текущую конфигурацию как профиль ниже.",
    "activate": "Активировать",
    "deleteProfile": "Удалить профиль",
    "profileNamePlaceholder": "Имя профиля (например, Личный кабинет)",
    "saveCurrent": "Сохранить текущий",
    "codexAuthNotePrefix": "Кодекс использует",
    "codexAuthNoteMiddle": "с",
    "codexAuthNoteSuffix": "Нажмите «Применить» для автоматической настройки.",
    "claudeManualConfiguration": "Клод CLI — ручная настройка",
    "codexManualConfiguration": "Интерфейс командной строки Codex — ручная настройка",
    "droidManualConfiguration": "Заводской дроид – ручная настройка",
    "openClawManualConfiguration": "Открытый коготь — ручная настройка",
    "clineManualConfiguration": "Ручная настройка Cline",
    "kiloManualConfiguration": "Ручная настройка кода Kilo",
    "toolDescriptions": {
      "antigravity": "Google Antigravity IDE с MITM",
      "claude": "Антропный код Клода CLI",
      "codex": "Интерфейс командной строки Кодекса OpenAI",
      "droid": "Искусственный интеллект заводского дроида",
      "openclaw": "Открытый ИИ-помощник когтя",
      "cline": "Cline AI Coding Assistant CLI",
      "kilo": "Интерфейс командной строки Kilo Code AI Assistant",
      "cursor": "Редактор кода курсора AI",
      "continue": "Продолжить AI-помощник",
      "opencode": "OpenCode AI coding agent (Terminal)",
      "kiro": "Amazon Kiro — AI-powered IDE"
    },
    "guides": {
      "cursor": {
        "notes": {
          "0": "Для использования этой функции требуется учетная запись Cursor Pro.",
          "1": "Курсор маршрутизирует запросы через собственный сервер, поэтому локальная конечная точка не поддерживается. Пожалуйста, включите Cloud Endpoint в настройках."
        },
        "steps": {
          "1": {
            "title": "Открыть настройки",
            "desc": "Зайдите в Настройки -> Модели."
          },
          "2": {
            "title": "Включить API OpenAI",
            "desc": "Включите опцию «Ключ OpenAI API»."
          },
          "3": {
            "title": "Базовый URL"
          },
          "4": {
            "title": "API-ключ"
          },
          "5": {
            "title": "Добавить пользовательскую модель",
            "desc": "Нажмите «Просмотреть всю модель» -> «Добавить пользовательскую модель»."
          },
          "6": {
            "title": "Выберите модель"
          }
        }
      },
      "continue": {
        "steps": {
          "1": {
            "title": "Открыть конфигурацию",
            "desc": "Открыть файл конфигурации «Продолжить»"
          },
          "2": {
            "title": "API-ключ"
          },
          "3": {
            "title": "Выберите модель"
          },
          "4": {
            "title": "Добавить конфигурацию модели",
            "desc": "Добавьте следующую конфигурацию в массив моделей:"
          }
        }
      },
      "opencode": {
        "steps": {
          "1": {
            "title": "Install OpenCode",
            "desc": "Install via npm: npm install -g opencode-ai"
          },
          "2": {
            "title": "API Key"
          },
          "3": {
            "title": "Set Base URL",
            "desc": "opencode config set baseUrl {{baseUrl}}"
          },
          "4": {
            "title": "Select Model"
          }
        }
      },
      "kiro": {
        "steps": {
          "1": {
            "title": "Open Kiro Settings",
            "desc": "Go to Settings → AI Provider"
          },
          "2": {
            "title": "Base URL",
            "desc": "Paste your OmniRoute endpoint URL"
          },
          "3": {
            "title": "API Key"
          },
          "4": {
            "title": "Select Model"
          }
        }
      }
    }
  },
  "combos": {
    "title": "Комбо",
    "description": "Создавайте комбинации моделей с взвешенной маршрутизацией и поддержкой резервного варианта.",
    "createCombo": "Создать комбо",
    "editCombo": "Редактировать комбо",
    "deleteCombo": "Удалить комбо",
    "noModels": "Нет моделей",
    "noModelsYet": "Модели еще не добавлены",
    "addModel": "Добавить модель",
    "addModelToCombo": "Добавить модель в комбинацию",
    "routingStrategy": "Стратегия маршрутизации",
    "maxRetries": "Макс. повторов",
    "timeout": "Тайм-аут (мс)",
    "healthcheck": "Проверка здоровья",
    "priority": "Приоритет",
    "fallback": "Резервный вариант",
    "roundRobin": "Круговая система",
    "random": "Случайный",
    "leastLatency": "Наименьшая задержка",
    "comboName": "Имя комбинации",
    "comboNamePlaceholder": "мое комбо",
    "deleteConfirm": "Удалить это комбо?",
    "noCombosYet": "Комбинаций пока нет",
    "comboCreated": "Комбо успешно создано",
    "comboUpdated": "Комбо успешно обновлено",
    "comboDeleted": "Комбо удалено.",
    "failedCreate": "Не удалось создать комбо",
    "failedUpdate": "Не удалось обновить комбо.",
    "errorCreating": "Ошибка создания комбо",
    "errorUpdating": "Ошибка обновления комбо",
    "errorDeleting": "Ошибка удаления комбо.",
    "testFailed": "Тестовый запрос не выполнен",
    "failedToggle": "Не удалось переключить комбо.",
    "testResults": "Результаты теста — {name}",
    "resolvedBy": "Решено:",
    "more": "+{count} подробнее",
    "reqs": "требования",
    "success": "успех",
    "proxyConfigured": "Прокси настроен",
    "copyComboName": "Скопировать название комбинации",
    "enableCombo": "Включить комбо",
    "disableCombo": "Отключить комбо",
    "testCombo": "Тестовое комбо",
    "duplicate": "Дублировать",
    "proxyConfig": "Конфигурация прокси",
    "nameRequired": "Требуется имя",
    "nameInvalid": "Только буквы, цифры, -, _, / и . разрешено",
    "nameHint": "Буквы, цифры, -, _, / и . разрешено",
    "priorityDesc": "Последовательный откат: сначала пробуется модель 1, затем 2 и т. д.",
    "weightedDesc": "Распределяет трафик по весовому проценту с резервным вариантом",
    "roundRobinDesc": "Круговое распределение: каждый запрос переходит к следующей модели по очереди.",
    "randomDesc": "Равномерный случайный выбор, затем возврат к оставшимся моделям",
    "leastUsedDesc": "Выбирает модель с наименьшим количеством запросов, балансируя нагрузку с течением времени.",
    "costOptimizedDesc": "Маршруты к самой дешевой модели в первую очередь на основе цены",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each model once before reshuffling",
    "models": "Модели",
    "autoBalance": "Автобаланс",
    "advancedSettings": "Расширенные настройки",
    "retryDelay": "Задержка повтора (мс)",
    "concurrencyPerModel": "Параллелизм/модель",
    "queueTimeout": "Тайм-аут очереди (мс)",
    "advancedHint": "Оставьте пустым, чтобы использовать глобальные значения по умолчанию. Они переопределяют настройки каждого провайдера.",
    "moveUp": "Вверх",
    "moveDown": "Двигаться вниз",
    "removeModel": "Удалить",
    "saving": "Сохранение...",
    "weighted": "Взвешенный",
    "leastUsed": "Наименее используемый",
    "costOpt": "Цена-опция",
    "strategyGuideTitle": "How to use this strategy",
    "strategyGuideWhen": "When to use",
    "strategyGuideAvoid": "Avoid when",
    "strategyGuideExample": "Example",
    "strategyGuide": {
      "priority": {
        "when": "You have one preferred model and only want fallback on failure.",
        "avoid": "You need request distribution across models.",
        "example": "Primary coding model with cheaper backup for outages."
      },
      "weighted": {
        "when": "You need controlled traffic split across models.",
        "avoid": "You cannot maintain accurate weights over time.",
        "example": "80% stable model + 20% canary model rollout."
      },
      "round-robin": {
        "when": "You want predictable and even distribution.",
        "avoid": "Models differ too much in latency or cost.",
        "example": "Same model on multiple accounts to spread throughput."
      },
      "random": {
        "when": "You want simple distribution with minimal setup.",
        "avoid": "You need strict traffic guarantees.",
        "example": "Quick prototyping with equivalent models."
      },
      "least-used": {
        "when": "You want adaptive balancing based on live demand.",
        "avoid": "Traffic is too low to benefit from usage balancing.",
        "example": "Mixed workloads where one model often gets overloaded."
      },
      "cost-optimized": {
        "when": "Cost reduction is your top priority.",
        "avoid": "Pricing data is missing or outdated.",
        "example": "Background or batch jobs where lower cost is preferred."
      }
    },
    "advancedHelp": {
      "maxRetries": "How many retries are attempted before failing a request.",
      "retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
      "timeout": "Максимальная продолжительность запроса до прерывания.",
      "healthcheck": "Skips unhealthy models/providers from routing decisions.",
      "concurrencyPerModel": "Максимальное количество одновременных запросов, разрешенных для каждой модели в циклическом переборе.",
      "queueTimeout": "Как долго запрос может находиться в очереди до истечения времени ожидания."
    },
    "templatesTitle": "Быстрые шаблоны",
    "templatesDescription": "Примените стартовый профиль, затем настройте модели и конфигурации.",
    "templateApply": "Применить шаблон",
    "templateHighAvailability": "Высокая доступность",
    "templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
    "templateCostSaver": "Cost saver",
    "templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
    "templateBalanced": "Balanced load",
    "templateBalancedDesc": "Least-used routing to spread demand over time.",
    "usageGuideHide": "Hide",
    "usageGuideDontShowAgain": "Don't show again",
    "usageGuideShow": "Show guide",
    "quickTestTitle": "Combo ready to validate",
    "quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
    "testNow": "Test now",
    "pricingCoverage": "Pricing coverage",
    "pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
    "pricingAvailable": "Pricing available",
    "pricingMissing": "No pricing",
    "pricingAvailableShort": "priced",
    "pricingMissingShort": "no-price",
    "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
    "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
    "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.",
    "readinessTitle": "Готовы сохранить?",
    "readinessDescription": "Прежде чем создавать или обновлять эту комбинацию, просмотрите контрольный список.",
    "readinessCheckName": "Имя комбинации действительно",
    "readinessCheckModels": "Выбрана хотя бы одна модель",
    "readinessCheckWeights": "Взвешенная сумма составляет 100 %.",
    "readinessCheckWeightsOptional": "Правило веса не требуется",
    "readinessCheckPricing": "Доступны данные о ценах",
    "readinessCheckPricingOptional": "Правило ценообразования не требуется",
    "saveBlockedTitle": "Сохранение блокируется до тех пор, пока не будут исправлены следующие элементы:",
    "saveBlockName": "Определите имя комбинации.",
    "saveBlockModels": "Добавьте хотя бы одну модель.",
    "saveBlockWeighted": "Установите веса на 100 % (текущее: {total}%).",
    "saveBlockPricing": "Добавьте цены хотя бы на одну модель или выберите другую стратегию.",
    "recommendationsLabel": "Recommended setup",
    "applyRecommendations": "Apply recommendations",
    "recommendationsUpdated": "Recommendations updated for {strategy}.",
    "recommendationsApplied": "Recommendations applied to this combo.",
    "strategyRecommendations": {
      "priority": {
        "title": "Fail-safe baseline",
        "description": "Use one primary model and keep fallback chain short and reliable.",
        "tip1": "Put your most reliable model first.",
        "tip2": "Keep 1-2 backup models with similar quality.",
        "tip3": "Use safe retries to absorb transient provider failures."
      },
      "weighted": {
        "title": "Controlled traffic split",
        "description": "Great for canary rollouts and gradual migration between models.",
        "tip1": "Start with conservative split like 90/10.",
        "tip2": "Keep the total at 100% and auto-balance after changes.",
        "tip3": "Monitor success and latency before increasing canary weight."
      },
      "round-robin": {
        "title": "Predictable load sharing",
        "description": "Best when models are equivalent and you need smooth distribution.",
        "tip1": "Use at least 2 models.",
        "tip2": "Set concurrency limits to avoid burst overload.",
        "tip3": "Use queue timeout to fail fast under saturation."
      },
      "random": {
        "title": "Quick spread with low setup",
        "description": "Use when you need simple distribution without strict guarantees.",
        "tip1": "Use models with similar latency profiles.",
        "tip2": "Keep retries enabled to absorb random misses.",
        "tip3": "Prefer this for experimentation, not strict SLAs."
      },
      "least-used": {
        "title": "Adaptive balancing",
        "description": "Routes to less-used models to reduce hotspots over time.",
        "tip1": "Works better under continuous traffic.",
        "tip2": "Combine with health checks for safer balancing.",
        "tip3": "Track per-model usage to validate distribution gains."
      },
      "cost-optimized": {
        "title": "Budget-first routing",
        "description": "Routes to lower-cost models when pricing metadata is available.",
        "tip1": "Ensure pricing coverage for all selected models.",
        "tip2": "Keep a quality fallback for hard prompts.",
        "tip3": "Use for batch/background jobs where cost is the main KPI."
      }
    },
    "templateFreeStack": "Free Stack ($0)",
    "templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
  },
  "costs": {
    "title": "Затраты",
    "budget": "Бюджет",
    "totalCost": "Общая стоимость",
    "breakdown": "Распределение затрат",
    "noData": "Нет данных о стоимости",
    "byModel": "По модели",
    "byProvider": "По поставщику"
  },
  "endpoint": {
    "title": "Конечная точка API",
    "available": "Доступные конечные точки",
    "cloudProxy": "Облачный прокси",
    "disableConfirm": "Вы уверены, что хотите отключить облачный прокси?",
    "baseUrl": "Базовый URL",
    "apiKeyLabel": "API-ключ",
    "registeredKeys": "Зарегистрированные ключи",
    "chatCompletions": "Завершения чата",
    "responses": "Ответы",
    "listModels": "Получение списка моделей",
    "usingCloudProxy": "Использование облачного прокси",
    "usingLocalServer": "Использование локального сервера",
    "machineId": "Идентификатор машины: {id}...",
    "disableCloud": "Отключить облако",
    "enableCloud": "Включить облако",
    "modelsAcrossEndpoints": "{models} модели на {endpoints} конечных точках",
    "chatDesc": "Потоковое и непотоковое чат со всеми провайдерами",
    "embeddings": "Вложения",
    "embeddingsDesc": "Встраивание текста для конвейеров поиска и RAG",
    "imageGeneration": "Генерация изображений",
    "imageDesc": "Генерация изображений из текстовых подсказок",
    "rerank": "Изменить рейтинг",
    "rerankDesc": "Изменение ранжирования документов по релевантности запросу",
    "audioTranscription": "Аудио транскрипция",
    "audioTranscriptionDesc": "Транскрипция аудиофайлов в текст (шепотом)",
    "textToSpeech": "Преобразование текста в речь",
    "textToSpeechDesc": "Преобразование текста в естественно звучащую речь",
    "moderations": "Модерации",
    "moderationsDesc": "Модерация контента и классификация безопасности",
    "responsesDesc": "OpenAI Responses API для Codex и продвинутых агентных рабочих процессов",
    "listModelsDesc": "Список всех доступных моделей по всем подключённым провайдерам",
    "settingsApiDesc": "Чтение и изменение конфигурации OmniRoute через API",
    "settingsApi": "Settings API",
    "categoryCore": "Основные API",
    "categoryMedia": "Медиа и мультимодальность",
    "categoryUtility": "Утилиты и управление",
    "enableCloudTitle": "Включить облачный прокси",
    "whatYouGet": "Что вы получите",
    "cloudBenefitAccess": "Доступ к вашему API из любой точки мира",
    "cloudBenefitShare": "Легко делитесь конечной точкой со своей командой",
    "cloudBenefitPorts": "Нет необходимости открывать порты или настраивать брандмауэр",
    "cloudBenefitEdge": "Быстрая глобальная периферийная сеть",
    "cloudSessionNote": "Cloud сохранит ваш сеанс аутентификации в течение 1 дня. Если он не используется, он будет автоматически удален.",
    "cloudUnstableNote": "Cloud в настоящее время нестабильно работает с Claude Code OAuth в некоторых случаях.",
    "cloudConnected": "Облачный прокси подключен!",
    "connectingToCloud": "Подключение к облаку...",
    "verifyingConnection": "Проверка соединения...",
    "connecting": "Подключение...",
    "verifying": "Проверка...",
    "connected": "Подключено!",
    "disableCloudTitle": "Отключить облачный прокси",
    "disableWarning": "Все сеансы аутентификации будут удалены из облака.",
    "syncingData": "Синхронизация последних данных...",
    "disablingCloud": "Отключение облака...",
    "syncing": "Синхронизация...",
    "disabling": "Отключение...",
    "cloudConnectedVerified": "Облачный прокси подключен и проверен!",
    "connectedVerificationPending": "Подключено — ожидается проверка",
    "connectedVerificationPendingWithError": "Подключено — ожидается проверка: {error}",
    "cloudDisabledSuccess": "Облако успешно отключено",
    "syncedSuccess": "Синхронизировано успешно",
    "failedDisable": "Не удалось отключить облако.",
    "failedEnable": "Не удалось включить облако",
    "cloudRequestTimeout": "Тайм-аут запроса облака",
    "cloudRequestFailed": "Запрос в облако не выполнен.",
    "cloudWorkerUnreachable": "Не удалось связаться с облачным работником. Убедитесь, что облачная служба запущена (npm run dev в /cloud).",
    "connectionFailed": "Соединение не удалось",
    "syncFailed": "Не удалось синхронизировать облачные данные.",
    "providerModelsTitle": "{provider} — Модели",
    "noModelsForProvider": "Нет доступных моделей для этого поставщика.",
    "chat": "Чат",
    "embedding": "Встраивание",
    "image": "Изображение",
    "custom": "обычай",
    "modelsCount": "{count, plural, one {# model} other {# models}}",
    "sectionTitle": "Integration Surface",
    "sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
    "tabApis": "OpenAI-compatible APIs",
    "tabProtocols": "Protocols",
    "tabsAria": "Endpoint sections",
    "protocolsTitle": "Protocols",
    "protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
    "mcpCardTitle": "MCP Server",
    "mcpCardDescription": "Model Context Protocol over stdio",
    "a2aCardTitle": "A2A Server",
    "a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
    "protocolToolsLabel": "Tools",
    "protocolTasksLabel": "Tasks",
    "protocolActiveStreamsLabel": "Active streams",
    "protocolLastActivity": "Last activity",
    "quickStart": "Quick Start",
    "openMcpDashboard": "Open MCP management",
    "openA2aDashboard": "Open A2A management",
    "mcpQuickStartTitle": "MCP Quick Start",
    "mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
    "mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
    "mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
    "a2aQuickStartTitle": "A2A Quick Start",
    "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
    "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
    "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.",
    "completionsLegacy": "Completions (Legacy)",
    "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format"
  },
  "mcpDashboard": {
    "loading": "Loading MCP dashboard...",
    "activate": "activate",
    "deactivate": "deactivate",
    "confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
    "switchComboFailed": "Failed to switch combo state.",
    "switchComboSuccess": "Combo \"{combo}\" updated.",
    "confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
    "applyProfileFailed": "Failed to apply resilience profile.",
    "applyProfileSuccess": "Profile \"{profile}\" applied.",
    "confirmResetBreakers": "Reset all circuit breakers?",
    "resetBreakersFailed": "Failed to reset circuit breakers.",
    "resetBreakersSuccess": "Circuit breakers reset.",
    "processStatus": "Process status",
    "online": "Online",
    "offline": "Offline",
    "pid": "PID",
    "sessionUptime": "Session uptime",
    "lastHeartbeat": "Last heartbeat",
    "activity24h": "Activity (24h)",
    "totalCalls": "Total calls",
    "successRate": "Success rate",
    "avgLatency": "Avg latency",
    "topTools": "Top tools",
    "noToolCalls24h": "No tool calls in the last 24 hours.",
    "runtimeDetails": "Runtime details",
    "transport": "Transport",
    "scopesEnforced": "Scopes enforced",
    "yes": "yes",
    "no": "no",
    "lastCall": "Last call",
    "heartbeatPath": "Heartbeat path",
    "operationalControls": "Operational controls",
    "switchCombo": "Switch combo",
    "inactive": "inactive",
    "active": "active",
    "activateCombo": "Activate combo",
    "deactivateCombo": "Deactivate combo",
    "applyResilienceProfile": "Apply resilience profile",
    "profileAggressive": "aggressive",
    "profileBalanced": "balanced",
    "profileConservative": "conservative",
    "applyProfile": "Apply profile",
    "resetCircuitBreakers": "Reset circuit breakers",
    "resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
    "resetAllBreakers": "Reset all breakers",
    "toolsAndScopes": "Tools and scopes",
    "tableTool": "Tool",
    "tableScopes": "Scopes",
    "tablePhase": "Phase",
    "tableAudit": "Audit",
    "auditLog": "Audit log",
    "auditSummary": "Calls: {total} | page {page} of {totalPages}",
    "allTools": "All tools",
    "allResults": "All results",
    "success": "Success",
    "failure": "Failure",
    "apiKeyIdPlaceholder": "apiKeyId",
    "loadingAuditEntries": "Loading audit entries...",
    "noAuditEntriesForFilters": "No audit entries found for current filters.",
    "tableTimestamp": "Timestamp",
    "tableDuration": "Duration",
    "tableResult": "Result",
    "tableApiKey": "API key",
    "failed": "failed",
    "previous": "Previous",
    "next": "Next"
  },
  "a2aDashboard": {
    "loading": "Loading A2A dashboard...",
    "confirmCancelTask": "Cancel task {taskId}?",
    "cancelTaskFailed": "Failed to cancel task.",
    "cancelTaskSuccess": "Task {taskId} cancelled.",
    "smokeSendFailed": "message/send smoke test failed.",
    "smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
    "smokeSendSuccess": "message/send ok.",
    "smokeStreamFailed": "message/stream smoke test failed.",
    "smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
    "smokeStreamNoTaskId": "message/stream finished without task id.",
    "health": "Health",
    "ok": "ok",
    "totalTasks": "Total tasks",
    "activeStreams": "Active streams",
    "lastTask": "Last task",
    "taskStateOverview": "Task state overview",
    "state": {
      "submitted": "submitted",
      "working": "working",
      "completed": "completed",
      "failed": "failed",
      "cancelled": "cancelled"
    },
    "agentCard": "Agent card",
    "version": "Version",
    "url": "URL",
    "capabilities": "Capabilities",
    "agentCardNotAvailable": "Agent card not available.",
    "quickValidation": "Quick validation",
    "quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
    "runMessageSend": "Run message/send",
    "runMessageStream": "Run message/stream",
    "taskManagement": "Task management",
    "taskSummary": "{total} tasks | page {page} of {totalPages}",
    "allStates": "all",
    "allSkills": "all skills",
    "loadingTasks": "Loading tasks...",
    "noTasksForFilters": "No tasks found for current filters.",
    "tableTask": "Task",
    "tableSkill": "Skill",
    "tableState": "State",
    "tableUpdated": "Updated",
    "tableActions": "Actions",
    "view": "View",
    "cancel": "Cancel",
    "previous": "Previous",
    "next": "Next",
    "taskDetail": "Task detail",
    "close": "Close",
    "metadata": "Metadata",
    "events": "Events",
    "artifacts": "Artifacts"
  },
  "health": {
    "title": "Здоровье системы",
    "description": "Мониторинг вашего экземпляра OmniRoute в режиме реального времени",
    "healthy": "Здоровый",
    "degraded": "Деградированный",
    "down": "Вниз",
    "uptime": "Время работы",
    "memory": "Память",
    "memoryRss": "Память (RSS)",
    "heap": "Куча",
    "cpu": "ЦП",
    "database": "База данных",
    "version": "Версия",
    "lastCheck": "Последняя проверка",
    "providerHealth": "Здоровье поставщика",
    "systemMetrics": "Системные метрики",
    "tokenHealth": "Здоровье токена",
    "refreshAll": "Обновить все",
    "checkNow": "Проверьте сейчас",
    "loadingHealth": "Загрузка данных о состоянии здоровья...",
    "failedToLoad": "Не удалось загрузить данные о состоянии: {error}.",
    "retry": "Повторить попытку",
    "allOperational": "Все системы в рабочем состоянии",
    "issuesDetected": "Обнаружены системные проблемы",
    "updatedAt": "Обновлен {time}",
    "latency": "Задержка",
    "latencyP50": "стр50",
    "latencyP95": "стр.95",
    "latencyP99": "стр.99",
    "millisecondsShort": "{value}мс",
    "notAvailable": "—",
    "totalRequests": "Всего запросов",
    "noDataYet": "Данных пока нет",
    "promptCache": "Подскажите кэш",
    "entries": "Записи",
    "hitRate": "Скорость попадания",
    "hitsMisses": "Попадания/промахи",
    "signatureCache": "Кэш подписей",
    "signatureDefaults": "По умолчанию",
    "signatureTool": "Инструмент",
    "signatureFamily": "Семья",
    "signatureSession": "Сессия",
    "recovering": "Восстановление",
    "noCBData": "Данные по автоматическому выключателю отсутствуют. Сначала сделайте несколько запросов.",
    "providerHealthStatusAria": "Состояние здоровья поставщика",
    "issuesLabel": "Обнаружены проблемы",
    "operational": "Оперативный",
    "providers": "Провайдеры",
    "healthyCount": "{count} здоров",
    "nodeVersion": "Узел {version}",
    "failures": "{count} сбой",
    "failuresPlural": "{count} сбоев",
    "lastFailure": "Последний",
    "rateLimitStatus": "Статус ограничения скорости",
    "activeLimiters": "{count} активный ограничитель",
    "activeLimitersPlural": "{count} активные ограничители",
    "queued": "В очереди",
    "queuedCount": "{count} поставлен в очередь",
    "running": "бег",
    "runningCount": "{count} работает",
    "ok": "ОК",
    "activeLockouts": "Активные блокировки",
    "resetConfirm": "Вернуть все автоматические выключатели в исправное состояние? Это очистит все счетчики сбоев и вернет всех поставщиков в рабочее состояние.",
    "resetAllTitle": "Верните все автоматические выключатели в исправное состояние.",
    "resetting": "Сброс...",
    "resetAll": "Сбросить все",
    "until": "До {time}"
  },
  "limits": {
    "title": "Лимиты и квоты",
    "rateLimit": "Ограничение скорости",
    "remaining": "Осталось",
    "requestsPerMinute": "Запросов/мин",
    "tokensPerMinute": "Токенов/мин",
    "dailyLimit": "Дневной лимит"
  },
  "logs": {
    "title": "Журналы",
    "requestLogs": "Запрос журналов",
    "proxyLogs": "Журналы прокси",
    "auditLog": "Журнал аудита",
    "console": "Консоль",
    "auditLogDesc": "Административные действия и события безопасности",
    "loading": "Загрузка...",
    "refresh": "Обновить",
    "filterByAction": "Фильтровать по действию...",
    "filterByActor": "Фильтровать по актеру...",
    "filterEntriesAria": "Фильтрация записей журнала аудита",
    "filterByActionTypeAria": "Фильтровать по типу действия",
    "filterByActorAria": "Фильтровать по актеру",
    "refreshAuditLogAria": "Обновить журнал аудита",
    "tableAria": "Записи журнала аудита",
    "failedFetchAuditLog": "Не удалось получить журнал аудита.",
    "showing": "Показаны записи {count} (смещение {offset})",
    "search": "Поиск",
    "timestamp": "Временная метка",
    "action": "Действие",
    "actor": "Актер",
    "target": "Цель",
    "details": "Подробности",
    "ipAddress": "IP-адрес",
    "notAvailable": "—",
    "noEntries": "Записи журнала аудита не найдены",
    "previous": "Предыдущий",
    "next": "Далее"
  },
  "onboarding": {
    "welcome": "Добро пожаловать",
    "security": "Безопасность",
    "test": "Тест",
    "ready": "Готово!",
    "setPassword": "Установить пароль",
    "addProvider": "Добавьте своего первого провайдера",
    "getStarted": "Начать",
    "skip": "Пропустить",
    "skipWizard": "Полностью пропустить мастер",
    "skipPassword": "Пропустить установку пароля",
    "skipAndContinue": "Пропустить и продолжить",
    "passwordLabel": "Пароль",
    "confirmPassword": "Подтвердите пароль",
    "enterPassword": "Введите пароль",
    "confirmPasswordPlaceholder": "Подтвердите пароль",
    "passwordsMismatch": "Пароли не совпадают",
    "setupComplete": "Настройка завершена!",
    "goToDashboard": "Перейти в личный кабинет →",
    "welcomeDesc": "OmniRoute — это ваш локальный прокси-сервер AI API. Он направляет запросы нескольким поставщикам искусственного интеллекта с балансировкой нагрузки, аварийным переключением и отслеживанием использования.",
    "multiProvider": "Мультипровайдер",
    "usageTracking": "Отслеживание использования",
    "apiKeyMgmt": "Управление ключами API",
    "securityDesc": "Установите пароль для защиты вашей панели управления или пропустите этот шаг.",
    "providerDesc": "Подключите своего первого поставщика искусственного интеллекта. Вы можете добавить больше позже.",
    "apiKeyRequired": "Ключ API (обязательно)",
    "customUrlOptional": "Пользовательский URL-адрес (необязательно)",
    "testDesc": "Давайте проверим, работает ли подключение к вашему провайдеру.",
    "runTest": "Запустить тест соединения",
    "testingConnection": "Тестирование соединения...",
    "connectionSuccessful": "Подключение успешно! Ваш провайдер готов.",
    "noProviderFound": "Поставщик не найден. Вы можете добавить его из панели управления позже.",
    "testFailed": "Тест не пройден, но вы можете настроить это позже.",
    "couldNotTest": "Не удалось проверить сейчас. Вы можете протестировать с панели управления.",
    "doneDesc": "Все готово! Ваш экземпляр OmniRoute настроен и готов к прокси-запросам AI.",
    "yourEndpoint": "Ваша конечная точка:",
    "continue": "Продолжить",
    "retry": "Повторить попытку",
    "failedSetPassword": "Не удалось установить пароль. Попробуйте еще раз.",
    "failedAddProvider": "Не удалось добавить поставщика. Попробуйте еще раз.",
    "connectionError": "Ошибка подключения. Пожалуйста, попробуйте еще раз.",
    "provider": "Поставщик"
  },
  "providers": {
    "title": "Провайдеры",
    "addProvider": "Добавить поставщика",
    "editProvider": "Изменить поставщика",
    "deleteProvider": "Удалить поставщика",
    "noProviders": "Поставщики не настроены",
    "modelAvailability": "Доступность модели",
    "accounts": "Счета",
    "newAccount": "Новая учетная запись",
    "deleteConfirm": "Вы уверены, что хотите удалить этого провайдера?",
    "testing": "Тестирование...",
    "testConnection": "Тестовое соединение",
    "testSuccess": "Соединение успешно",
    "testFailed": "Соединение не удалось",
    "available": "Доступно",
    "cooldown": "Перезарядка",
    "unavailable": "Недоступно",
    "unknown": "Неизвестно",
    "oauthLabel": "OAuth",
    "compatibleLabel": "Совместимый",
    "chat": "Чат",
    "responses": "Ответы",
    "messages": "Сообщения",
    "oauthProviders": "Поставщики OAuth",
    "freeProviders": "Бесплатные провайдеры",
    "apiKeyProviders": "Поставщики ключей API",
    "compatibleProviders": "Поставщики, совместимые с ключами API",
    "testAll": "Проверить все",
    "testAllOAuth": "Проверьте все соединения OAuth",
    "testAllFree": "Проверьте все бесплатные соединения",
    "testAllApiKey": "Проверьте все соединения API-ключей",
    "testAllCompatible": "Проверьте все совместимые соединения",
    "connected": "{count} подключено",
    "errorCount": "{count} Ошибка ({code})",
    "errorCountNoCode": "{count} Ошибка",
    "noConnections": "Нет соединений",
    "disabled": "Отключено",
    "enableProvider": "Включить провайдера",
    "disableProvider": "Отключить провайдера",
    "testResults": "Результаты испытаний",
    "noCompatibleYet": "Совместимых поставщиков пока не добавлено",
    "compatibleHint": "Используйте кнопки выше, чтобы добавить конечные точки, совместимые с OpenAI или Anthropic.",
    "addOpenAICompatible": "Добавить совместимость с OpenAI",
    "addAnthropicCompatible": "Добавить антропную совместимость",
    "addNewProvider": "Добавить нового провайдера",
    "backToProviders": "Вернуться к Провайдерам",
    "configureNewProvider": "Настройте нового поставщика ИИ для использования с вашими приложениями.",
    "providerLabel": "Поставщик",
    "selectProvider": "Выберите провайдера",
    "selectedProvider": "Выбранный провайдер",
    "authMethod": "Метод аутентификации",
    "apiKeyLabel": "API-ключ",
    "apiKeyRequired": "Требуется ключ API",
    "selectProviderRequired": "Пожалуйста, выберите провайдера",
    "enterApiKey": "Введите свой ключ API",
    "apiKeySecure": "Ваш ключ API будет зашифрован и надежно сохранен.",
    "oauth2Connect": "Подключиться с помощью OAuth2",
    "oauth2Label": "ОАут2",
    "oauth2Desc": "Подключите свою учетную запись, используя аутентификацию OAuth2.",
    "displayName": "Отображаемое имя",
    "displayNamePlaceholder": "например, Production API, среда разработки",
    "displayNameHint": "Необязательно. Понятное имя для идентификации этой конфигурации.",
    "active": "Активный",
    "activeDescription": "Включите этого поставщика для использования в ваших приложениях.",
    "cancel": "Отмена",
    "createProvider": "Создать поставщика",
    "failedCreate": "Не удалось создать поставщика",
    "errorOccurred": "Произошла ошибка. Пожалуйста, попробуйте еще раз.",
    "modelStatus": "Статус модели",
    "allModelsOperational": "Все модели в рабочем состоянии",
    "modelsWithIssues": "{count} модели с проблемами",
    "allModelsNormal": "Все модели реагируют нормально.",
    "cooldownCleared": "Время восстановления для {model} очищено.",
    "failedClearCooldown": "Не удалось очистить время восстановления",
    "loadingAvailability": "Загрузка доступности модели...",
    "clearCooldown": "Очистить",
    "clearing": "Очистка...",
    "until": "До {time}",
    "providerTestFailed": "Тест провайдера не пройден",
    "modeTest": "{mode} Тест",
    "passedCount": "{count} пройден",
    "failedCount": "{count} не удалось",
    "testedCount": "{count} проверено",
    "millisecondsAbbr": "{value}мс",
    "okShort": "ОК",
    "errorShort": "ОШИБКА",
    "noActiveConnectionsInGroup": "Для этой группы не найдено активных соединений.",
    "allTestsPassed": "Все тесты {total} пройдены",
    "testSummary": "{passed}/{total} пройден, {failed} не выполнен",
    "nameLabel": "Имя",
    "prefixLabel": "Префикс",
    "baseUrlLabel": "Базовый URL",
    "apiTypeLabel": "Тип API",
    "prefixHint": "Обязательно. Уникальный префикс для названий моделей.",
    "nameHint": "Обязательно. Дружественная метка для этого узла.",
    "baseUrlHint": "Обязательно.  Базовый URL-адрес API поставщика.",
    "anthropicPrefixPlaceholder": "ac-прод",
    "openaiPrefixPlaceholder": "oc-прод",
    "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1",
    "openaiBaseUrlPlaceholder": "https://api.openai.com/v1",
    "validateConnection": "Подтвердить соединение",
    "validating": "Проверка...",
    "connectionValid": "Соединение действительно!",
    "connectionFailed": "Соединение не удалось. Проверьте URL и ключ.",
    "testKeyLabel": "Тестовый ключ API",
    "testKeyPlaceholder": "sk-... (только для проверки)",
    "providerNotFound": "Провайдер не найден",
    "deleteConnectionConfirm": "Удалить это соединение?",
    "failedSetAlias": "Не удалось установить псевдоним",
    "failedSaveConnection": "Не удалось сохранить соединение.",
    "failedSaveConnectionRetry": "Не удалось сохранить соединение. Пожалуйста, попробуйте еще раз.",
    "failedRetestConnection": "Не удалось повторно проверить соединение",
    "deleteCompatibleNodeConfirm": "Удалить этот {type} Совместимый узел?",
    "anthropicCompatibleDetails": "Антропные совместимые детали",
    "openaiCompatibleDetails": "Подробности совместимости с OpenAI",
    "messagesApi": "API сообщений",
    "responsesApi": "API ответов",
    "chatCompletions": "Завершения чата",
    "importingModels": "Импорт...",
    "importFromModels": "Импорт из /модели",
    "addConnectionToImport": "Добавьте соединение, чтобы включить импорт.",
    "noModelsConfigured": "Ни одна модель не настроена",
    "connectionCount": "{count} соединение(я)",
    "fetchingModels": "Загрузка доступных моделей...",
    "failedFetchModels": "Не удалось получить модели.",
    "noModelsFound": "Модели не найдены",
    "importFailed": "Импорт не удался",
    "noNewModelsAdded": "Новых моделей не добавлялось.",
    "adding": "Добавление...",
    "importingModelsTitle": "Импорт моделей",
    "copyModel": "Копировать модель",
    "removeModel": "Удалить модель",
    "rateLimitProtected": "Защищено",
    "rateLimitUnprotected": "незащищенный",
    "enableRateLimitProtection": "Нажмите, чтобы включить защиту от ограничения скорости",
    "disableRateLimitProtection": "Нажмите, чтобы отключить защиту ограничения скорости",
    "productionKey": "Производственный ключ",
    "enterNewApiKey": "Введите новый ключ API",
    "optional": "Необязательно",
    "anthropicCompatibleName": "Антропная совместимость",
    "openaiCompatibleName": "Совместимость с OpenAI",
    "failedImportModels": "Не удалось импортировать модели.",
    "noModelsReturnedFromEndpoint": "Ни одна модель не возвращена из конечной точки /models.",
    "importingModelsProgress": "Импорт {current} из {total} моделей...",
    "foundModelsStartingImport": "Найдено {count} моделей. Начинаем импорт...",
    "importingModelById": "Импорт {modelId}...",
    "importSuccessCount": "{count, plural, one {# model} other {# models}} успешно импортирован!",
    "noNewModelsAddedExisting": "Новых моделей не добавлялось (все уже есть).",
    "importDoneCount": "✓ Готово! {count, plural, one {# model imported.} other {# models imported.}}",
    "unexpectedErrorOccurred": "Произошла непредвиденная ошибка",
    "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}",
    "messagesPath": "сообщения",
    "responsesPath": "ответы",
    "chatCompletionsPath": "чат/дополнения",
    "add": "Добавить",
    "edit": "Редактировать",
    "delete": "Удалить",
    "anthropic": "антропный",
    "openai": "ОпенАИ",
    "singleConnectionPerCompatible": "Для каждого совместимого узла разрешено только одно соединение. Добавьте еще один узел, если вам нужно больше соединений.",
    "connections": "Соединения",
    "providerProxyTitleConfigured": "Прокси-сервер провайдера: {host}",
    "configured": "настроен",
    "providerProxyConfigureHint": "Настроить прокси для всех подключений этого провайдера",
    "providerProxy": "Прокси-сервер провайдера",
    "noConnectionsYet": "Пока нет подключений",
    "addFirstConnectionHint": "Добавьте первое соединение, чтобы начать",
    "addConnection": "Добавить соединение",
    "availableModels": "Доступные модели",
    "pageAutoRefresh": "Страница обновится автоматически...",
    "statusDisabled": "отключен",
    "statusConnected": "подключен",
    "statusRuntimeIssue": "проблема во время выполнения",
    "statusAuthFailed": "аутентификация не удалась",
    "statusRateLimited": "ставка ограничена",
    "statusNetworkIssue": "проблема с сетью",
    "statusTestUnsupported": "тест не поддерживается",
    "statusUnavailable": "недоступен",
    "statusFailed": "не удалось",
    "statusError": "ошибка",
    "oauthAccount": "Учетная запись OAuth",
    "errorTypeRuntime": "Локальная среда выполнения",
    "errorTypeUpstreamAuth": "Авторизация восходящего потока",
    "errorTypeMissingCredential": "Отсутствуют учетные данные",
    "errorTypeRefreshFailed": "Обновить не удалось",
    "errorTypeTokenExpired": "Срок действия токена истек",
    "errorTypeRateLimited": "Скорость ограничена",
    "errorTypeUpstreamUnavailable": "Восходящий поток недоступен",
    "errorTypeNetworkError": "Ошибка сети",
    "errorTypeTestUnsupported": "Тест не поддерживается",
    "errorTypeUpstreamError": "Ошибка восходящего потока",
    "proxySourceGlobal": "Глобальный",
    "proxySourceProvider": "Поставщик",
    "proxySourceKey": "Ключ",
    "proxyConfiguredBySource": "Прокси ({source}): {host}",
    "autoPriority": "Авто: {priority}",
    "proxy": "Прокси",
    "retestAuthentication": "Повторная проверка подлинности",
    "retest": "Повторное тестирование",
    "disableConnection": "Отключить соединение",
    "enableConnection": "Включить соединение",
    "reauthenticateConnection": "Повторно аутентифицировать это соединение",
    "proxyConfig": "Конфигурация прокси",
    "aliasExistsAlert": "Псевдоним «{alias}» уже существует. Используйте другую модель или измените существующий псевдоним.",
    "openRouterAnyModelHint": "OpenRouter поддерживает любую модель. Добавляйте модели и создавайте псевдонимы для быстрого доступа.",
    "modelIdFromOpenRouter": "Идентификатор модели (из OpenRouter)",
    "openRouterModelPlaceholder": "антропный/Клод-3-опус",
    "customModels": "Пользовательские модели",
    "customModelsHint": "Добавьте идентификаторы моделей, которых нет в списке по умолчанию. Они будут доступны для маршрутизации.",
    "modelId": "Идентификатор модели",
    "customModelPlaceholder": "например gpt-4.5-турбо",
    "loading": "Загрузка...",
    "removeCustomModel": "Удалить пользовательскую модель",
    "noCustomModels": "Пользовательские модели пока не добавлены.",
    "allSuggestedAliasesExist": "Все предложенные псевдонимы уже существуют. Пожалуйста, выберите другую модель или удалите конфликтующие псевдонимы.",
    "failedSaveCustomModel": "Не удалось сохранить пользовательскую модель.",
    "modelAddedSuccess": "Модель {modelId} успешно добавлена",
    "failedAddModelTryAgain": "Не удалось добавить модель. Пожалуйста, попробуйте еще раз.",
    "failedSaveImportedModel": "Не удалось сохранить импортированную модель в пользовательскую базу данных.",
    "failedImportModelsTryAgain": "Не удалось импортировать модели. Пожалуйста, попробуйте еще раз.",
    "failedRemoveModelFromDatabase": "Не удалось удалить модель из базы данных.",
    "modelRemovedSuccess": "Модель успешно удалена",
    "failedDeleteModelTryAgain": "Не удалось удалить модель. Пожалуйста, попробуйте еще раз.",
    "compatibleModelsDescription": "Добавьте модели, совместимые с {type}, вручную или импортируйте их из конечной точки /models.",
    "anthropicCompatibleModelPlaceholder": "Клод-3-опус-20240229",
    "openaiCompatibleModelPlaceholder": "gpt-4o",
    "apiKeyValidationFailed": "Проверка ключа API не удалась. Пожалуйста, проверьте свой ключ и повторите попытку.",
    "addProviderApiKeyTitle": "Добавьте ключ API {provider}",
    "checking": "Проверка...",
    "check": "Проверить",
    "valid": "Действителен",
    "invalid": "Недействительный",
    "creating": "Создание...",
    "validationChecksAnthropicCompatible": "Проверка проверяет {provider} путем проверки ключа API.",
    "validationChecksOpenAiCompatible": "Проверка проверяет {provider} через /models по вашему базовому URL-адресу.",
    "priorityLabel": "Приоритет",
    "saving": "Сохранение...",
    "save": "Сохранить",
    "editConnection": "Изменить соединение",
    "accountName": "Имя учетной записи",
    "email": "электронная почта",
    "healthCheckMinutes": "Проверка здоровья (мин)",
    "healthCheckHint": "Интервал обновления упреждающего токена. 0 = отключено.",
    "groupLabel": "Environment",
    "groupPlaceholder": "e.g. eKaizen, Personal",
    "failedTestConnection": "Не удалось проверить соединение",
    "failed": "Не удалось",
    "leaveBlankKeepCurrentApiKey": "Оставьте пустым, чтобы сохранить текущий ключ API.",
    "editCompatibleTitle": "Изменить совместимость {type}",
    "compatibleBaseUrlHint": "Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.",
    "apiKeyForCheck": "API-ключ (для проверки)",
    "compatibleProdPlaceholder": "{type} Совместимость (Прод.)",
    "providerTestTimeout": "Provider test timed out — too many connections to test at once",
    "advancedSettings": "Advanced Settings",
    "chatPathLabel": "Chat Endpoint Path",
    "chatPathPlaceholder": "/chat/completions",
    "chatPathHint": "Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)",
    "modelsPathLabel": "Models Endpoint Path",
    "modelsPathPlaceholder": "/models",
    "modelsPathHint": "Custom models path for validation (e.g. /v4/models)"
  },
  "settings": {
    "title": "Настройки",
    "general": "Общий",
    "security": "Безопасность",
    "appearance": "Внешний вид",
    "routing": "Маршрутизация",
    "cache": "Кэш",
    "resilience": "Устойчивость",
    "systemPrompt": "Системная подсказка",
    "thinkingBudget": "Думая о бюджете",
    "proxy": "Прокси",
    "pricing": "Цены",
    "storage": "Хранение",
    "policies": "Политика",
    "ipFilter": "IP-фильтр",
    "comboDefaults": "Комбинированные значения по умолчанию",
    "fallbackChains": "Резервные цепочки",
    "changePassword": "Изменить пароль",
    "enablePassword": "Включить пароль",
    "darkMode": "Темный режим",
    "lightMode": "Светлый режим",
    "systemTheme": "Системная тема",
    "enableCache": "Включить кеш",
    "cacheTTL": "Срок жизни кэша",
    "maxCacheSize": "Максимальный размер кэша",
    "clearCache": "Очистить кэш",
    "cacheHits": "Попадания в кэш",
    "cacheMisses": "Промахи в кэше",
    "hitRate": "Скорость попадания",
    "cacheEntries": "Записи кэша",
    "circuitBreaker": "Автоматический выключатель",
    "retryPolicy": "Политика повтора",
    "maxRetries": "Макс. повторов",
    "retryDelay": "Задержка повтора",
    "timeoutMs": "Тайм-аут (мс)",
    "enableSystemPrompt": "Включить системную подсказку",
    "systemPromptText": "Текст системной подсказки",
    "enableThinking": "Включить мышление",
    "maxThinkingTokens": "Максимальное количество жетонов мышления",
    "enableProxy": "Включить прокси",
    "proxyUrl": "URL-адрес прокси-сервера",
    "pricingRates": "Формат ценообразования",
    "currentPricing": "Текущий обзор цен",
    "loadingPricing": "Загрузка данных о ценах...",
    "noPricing": "Нет данных о ценах",
    "input": "Ввод",
    "output": "Выход",
    "cached": "Кэшированный",
    "reasoning": "Рассуждение",
    "cacheCreation": "Создание кэша",
    "customPricing": "Индивидуальные цены",
    "databaseSize": "Размер базы данных",
    "backupDb": "Резервное копирование базы данных",
    "restoreDb": "Восстановить базу данных",
    "exportData": "Экспортировать данные",
    "importData": "Импортировать данные",
    "clearData": "Очистить все данные",
    "clearDataConfirm": "Это приведет к безвозвратному удалению всех данных. Вы уверены?",
    "enableRequestLogs": "Включить журналы запросов",
    "logRetention": "Хранение журнала",
    "ipWhitelist": "Белый список IP-адресов",
    "ipBlacklist": "Черный список IP-адресов",
    "addIP": "Добавить IP",
    "savedSuccessfully": "Настройки успешно сохранены",
    "ai": "ИИ",
    "advanced": "Расширенный",
    "localMode": "Локальный режим — все данные хранятся на вашем компьютере.",
    "settingsSectionsAria": "Разделы настроек",
    "switchThemes": "Переключение между светлой и темной темами",
    "themeSelectionAria": "Выбор темы",
    "themeLight": "Свет",
    "themeDark": "Темный",
    "themeSystem": "Система",
    "hideHealthLogs": "Скрыть журналы проверки работоспособности",
    "hideHealthLogsDesc": "Если включено, подавлять сообщения [HealthCheck] в консоли сервера.",
    "themeAccent": "Цвет темы",
    "themeAccentDesc": "Выберите готовый цвет или создайте свою тему из одного цвета",
    "themeCreate": "Создать тему",
    "themeCustom": "Своя тема",
    "themeBlue": "Синий",
    "themeRed": "Красный",
    "themeGreen": "Зелёный",
    "themeViolet": "Фиолетовый",
    "themeOrange": "Оранжевый",
    "themeCyan": "Голубой",
    "promptCache": "Подскажите кэш",
    "flushCache": "Очистить кэш",
    "flushing": "Промывка…",
    "size": "Размер",
    "hits": "Хиты",
    "evictions": "Выселения",
    "loadingCacheStats": "Загрузка статистики кеша…",
    "globalProxy": "Глобальный прокси",
    "globalProxyDesc": "Настройте глобальный исходящий прокси-сервер для всех вызовов API. Отдельные поставщики, комбинации и ключи могут переопределить это.",
    "noGlobalProxy": "Глобальный прокси не настроен",
    "globalLabel": "Глобальный",
    "configure": "Настроить",
    "globalSystemPrompt": "Глобальная системная подсказка",
    "systemPromptDesc": "Внедряется во все запросы на уровне прокси.",
    "saved": "Сохранено",
    "systemPromptPlaceholder": "Введите системное приглашение для внедрения во все запросы...",
    "systemPromptHint": "Это приглашение добавляется к системному сообщению каждого запроса. Используйте для глобальных инструкций, рекомендаций по безопасности или правил форматирования ответов.",
    "chars": "{count} символов",
    "thinkingBudgetTitle": "Думая о бюджете",
    "thinkingBudgetDesc": "Контролируйте использование токенов рассуждения ИИ во всех запросах",
    "passthrough": "Сквозное прохождение",
    "passthroughDesc": "Никаких изменений — клиент контролирует продуманный бюджет",
    "auto": "Авто",
    "autoDesc": "Удалите всю конфигурацию мышления — пусть решает провайдер",
    "custom": "Пользовательский",
    "customDesc": "Установите фиксированный бюджет токенов для всех запросов.",
    "adaptive": "Адаптивный",
    "adaptiveDesc": "Масштабируйте бюджет в зависимости от сложности запроса",
    "effortNone": "Нет (0 токенов)",
    "effortLow": "Низкий (1 тыс. токенов)",
    "effortMedium": "Средний (10 тыс. токенов)",
    "effortHigh": "Высокий (128 тыс. токенов)",
    "tokenBudget": "Бюджет токена",
    "tokens": "жетоны",
    "baseEffortLevel": "Базовый уровень усилий",
    "adaptiveHint": "Адаптивный режим масштабируется от этого базового уровня в зависимости от количества сообщений, использования инструмента и длины подсказки.",
    "requireLogin": "Требовать вход",
    "requireLoginDesc": "При включении приборная панель требует пароль. Когда ВЫКЛ, доступ без входа в систему.",
    "currentPassword": "Текущий пароль",
    "enterCurrentPassword": "Введите текущий пароль",
    "newPassword": "Новый пароль",
    "enterNewPassword": "Введите новый пароль",
    "confirmPassword": "Подтвердите новый пароль",
    "confirmPasswordPlaceholder": "Подтвердите новый пароль",
    "passwordsNoMatch": "Пароли не совпадают",
    "passwordUpdated": "Пароль успешно обновлен",
    "failedUpdatePassword": "Не удалось обновить пароль",
    "errorOccurred": "Произошла ошибка",
    "updatePassword": "Обновить пароль",
    "setPassword": "Установить пароль",
    "apiEndpointProtection": "Защита конечных точек API",
    "requireAuthModels": "Требовать ключ API для /models",
    "requireAuthModelsDesc": "Если включено, конечная точка /v1/models возвращает 404 для неаутентифицированных запросов. Предотвращает обнаружение модели неавторизованными пользователями.",
    "blockedProviders": "Заблокированные провайдеры",
    "blockedProvidersDesc": "Скройте конкретных поставщиков из ответа /v1/models. Заблокированные поставщики не будут отображаться в списках моделей.",
    "providersBlocked": "Поставщик(и) {count} заблокирован в /models",
    "blockProviderTitle": "Блок {provider}",
    "unblockProviderTitle": "Разблокировать {provider}",
    "routingStrategy": "Стратегия маршрутизации",
    "fillFirst": "Сначала заполните",
    "fillFirstDesc": "Используйте учетные записи в порядке приоритета",
    "roundRobin": "Круговая система",
    "roundRobinDesc": "Перебирать все аккаунты",
    "p2c": "P2C",
    "p2cDesc": "Выберите 2 случайных, используйте более здоровый",
    "random": "Случайный",
    "randomDesc": "Случайный аккаунт для каждого запроса",
    "leastUsed": "Наименее используемый",
    "leastUsedDesc": "Выберите наименее использованную учетную запись",
    "costOpt": "Опция стоимости",
    "costOptDesc": "Предпочитаю самый дешевый доступный аккаунт",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each account once before reshuffling",
    "stickyLimit": "Липкий лимит",
    "stickyLimitDesc": "Звонки на аккаунт до переключения",
    "modelAliases": "Псевдонимы моделей",
    "modelAliasesTitle": "Псевдонимы моделей",
    "modelAliasesDesc": "Шаблоны подстановочных знаков для переназначения названий моделей • Используйте * и ?",
    "addCustomAlias": "Добавить пользовательский псевдоним",
    "deprecatedModelId": "Устаревший ID модели",
    "newModelId": "Новый ID модели",
    "customAliases": "Пользовательские псевдонимы",
    "builtInAliases": "Встроенные псевдонимы",
    "backgroundDegradationTitle": "Деградация фоновых задач",
    "backgroundDegradationDesc": "Автоматически обнаруживает фоновые задачи (заголовки, резюме) и перенаправляет на более дешёвые модели",
    "enableDegradation": "Включить деградацию фоновых задач",
    "enableDegradationHint": "Когда включено, фоновые задачи, такие как генерация заголовков и резюмирование, автоматически перенаправляются на более дешёвые модели",
    "tasksDetected": "Обнаружено задач",
    "degradationMap": "Карта деградации моделей",
    "premiumModel": "Премиум-модель",
    "cheapModel": "Дешёвая модель",
    "detectionPatterns": "Шаблоны обнаружения",
    "newPattern": "напр. \"создать заголовок\"",
    "aliasPatternPlaceholder": "Клод-сонет-*",
    "aliasTargetPlaceholder": "Клод-сонет-4-20250514",
    "pattern": "Узор",
    "targetModel": "Целевая модель",
    "add": "+ Добавить",
    "session": "Сессия",
    "sessionDetailsAria": "Детали сеанса",
    "status": "Статус",
    "authenticated": "Аутентифицированный",
    "guest": "Гость",
    "loginTime": "Время входа в систему",
    "sessionAge": "Возраст сессии",
    "browser": "Браузер",
    "clearLocalData": "Очистить локальные данные",
    "logout": "Выход из системы",
    "clearLocalDataConfirm": "Удалить все локальные данные? Это сбросит ваши настройки.",
    "unknown": "Неизвестно",
    "systemActor": "система",
    "ipAccessControl": "IP-контроль доступа",
    "ipAccessControlDesc": "Блокировать или разрешать определенные IP-адреса",
    "ipModeDisabled": "Отключено",
    "ipModeBlacklist": "Черный список",
    "ipModeWhitelist": "Белый список",
    "ipModeWhitelistPriority": "Приоритет ВЛ",
    "addIpAddress": "Добавить IP-адрес",
    "ipAddressPlaceholder": "192.168.1.0/24 или 10.0.*.*",
    "block": "+ Блокировать",
    "allow": "+ Разрешить",
    "blocked": "Заблокировано ({count})",
    "allowed": "Разрешено ({count})",
    "temporaryBans": "Временные баны ({count})",
    "minLeft": "Осталось {min} м",
    "auditLog": "Журнал аудита",
    "searchAuditLogs": "Поиск в журналах аудита...",
    "failedLoadAuditLog": "Не удалось загрузить журнал аудита.",
    "noAuditEvents": "События аудита не найдены",
    "action": "Действие",
    "actor": "Актер",
    "details": "Подробности",
    "time": "Время",
    "fallbackChainsTitle": "Резервные цепочки",
    "fallbackChainsDesc": "Определить резервный порядок поставщика для каждой модели",
    "addChain": "+ Добавить цепочку",
    "modelName": "Название модели",
    "modelNamePlaceholder": "Клод-сонет-4-20250514",
    "providersCommaSeparated": "Поставщики (через запятую, в порядке приоритета)",
    "providersCommaSeparatedPlaceholder": "антропный, опенай, близнецы",
    "createChain": "Создать цепочку",
    "noFallbackChains": "Никаких резервных цепочек",
    "noFallbackChainsDesc": "Создайте цепочку, чтобы определить резервный порядок поставщика для модели.",
    "loadingFallbackChains": "Загрузка резервных цепочек...",
    "deleteChainConfirm": "Удалить резервную цепочку для \"{model}\"?",
    "chainCreated": "Цепочка создана для {model}",
    "chainDeleted": "Цепочка удалена для {model}.",
    "failedCreateChain": "Не удалось создать цепочку.",
    "failedDeleteChain": "Не удалось удалить цепочку.",
    "deleteChain": "Удалить цепочку",
    "fillModelAndProviders": "Пожалуйста, укажите название модели и поставщиков",
    "addAtLeastOneProvider": "Добавьте хотя бы одного провайдера",
    "comboDefaultsTitle": "Комбинированные значения по умолчанию",
    "globalComboConfig": "Глобальная комбинированная конфигурация",
    "defaultStrategy": "Стратегия по умолчанию",
    "defaultStrategyDesc": "Применяется к новым комбинациям без явной стратегии.",
    "comboStrategyAria": "Комбо-стратегия",
    "priority": "Приоритет",
    "weighted": "Взвешенный",
    "maxRetriesLabel": "Макс. повторов",
    "retryDelayLabel": "Задержка повтора (мс)",
    "timeoutLabel": "Тайм-аут (мс)",
    "healthCheck": "Проверка здоровья",
    "healthCheckDesc": "Предварительная проверка доступности провайдера",
    "trackMetrics": "Отслеживание показателей",
    "trackMetricsDesc": "Запись показателей для каждого комбо-запроса",
    "providerOverrides": "Переопределения поставщика",
    "providerOverridesDesc": "Переопределить тайм-аут и повторные попытки для каждого поставщика. Настройки поставщика переопределяют глобальные настройки по умолчанию.",
    "providerMaxRetriesAria": "{provider} максимальное количество повторов",
    "providerTimeoutAria": "{provider} таймаут мс",
    "removeProviderOverrideAria": "Удалить переопределение {provider}",
    "newProviderNamePlaceholder": "например гугл, опенай...",
    "newProviderNameAria": "Новое имя провайдера",
    "retries": "повторные попытки",
    "ms": "мс",
    "saveComboDefaults": "Сохранить настройки комбинации по умолчанию",
    "maxNestingDepth": "Максимальная глубина вложения",
    "concurrencyPerModel": "Параллелизм/модель",
    "queueTimeout": "Тайм-аут очереди (мс)",
    "providerProfiles": "Профили поставщиков",
    "providerProfilesDesc": "Отдельные настройки устойчивости для поставщиков OAuth (на основе сеанса) и API-ключей (измеренного). Поставщики OAuth имеют более строгие пороговые значения из-за более низких ограничений скорости.",
    "oauthProviders": "Поставщики OAuth",
    "apiKeyProviders": "Поставщики ключей API",
    "transientCooldown": "Временное восстановление",
    "rateLimitCooldown": "Время восстановления лимита скорости",
    "maxBackoffLevel": "Максимальный уровень отсрочки",
    "cbThreshold": "Порог CB",
    "cbResetTime": "Время сброса выключателя",
    "rateLimiting": "Ограничение скорости",
    "rateLimitingDesc": "Поставщики ключей API автоматически ограничиваются по скорости безопасными значениями по умолчанию. Ограничения извлекаются из заголовков ответов и со временем адаптируются.",
    "defaultSafetyNet": "Сеть безопасности по умолчанию",
    "rpm": "об/мин",
    "minGap": "Мин. разрыв",
    "maxConcurrent": "Макс. одновременность",
    "activeLimiters": "Активные лимитеры",
    "noActiveLimiters": "Активных ограничителей скорости пока нет.",
    "reservoir": "водохранилище",
    "running": "Бег",
    "queued": "В очереди",
    "circuitBreakers": "Автоматические выключатели",
    "breakerStateClosed": "Закрыто",
    "breakerStateOpen": "Открыть",
    "breakerStateHalfOpen": "Полуоткрытый",
    "tripped": "{count} сработал",
    "healthy": "{count} здоров",
    "resetAll": "Сбросить все",
    "noCircuitBreakers": "Автоматические выключатели пока не активны. Они создаются автоматически, когда запросы проходят через комбинированный конвейер.",
    "failures": "{count} сбой(и)",
    "policiesLocked": "Политики и заблокированные идентификаторы",
    "allOperational": "Все системы в рабочем состоянии — никаких блокировок или срабатываний выключателей.",
    "loadingPolicies": "Загрузка политик...",
    "lockedIdentifiers": "Заблокированные идентификаторы",
    "unlockedIdentifier": "Разблокировано: {identifier}",
    "sinceDate": "с {date}",
    "forceUnlock": "Принудительная разблокировка",
    "unlocking": "Разблокировка...",
    "failedUnlock": "Не удалось разблокировать",
    "failedLoadWithStatus": "Не удалось загрузить: {status}.",
    "failedLoadResilience": "Не удалось загрузить статус устойчивости.",
    "saveFailed": "Сохранить не удалось",
    "resetFailed": "Сбросить не удалось",
    "loadingResilience": "Загрузка состояния устойчивости...",
    "retry": "Повторить попытку",
    "systemStorage": "Система и хранилище",
    "allDataLocal": "Все данные хранятся локально на вашем компьютере.",
    "databasePath": "Путь к базе данных",
    "exportDatabase": "Экспорт базы данных",
    "exportAll": "Экспортировать все (.tar.gz)",
    "importDatabase": "Импортировать базу данных",
    "confirmDbImport": "Подтвердить импорт базы данных",
    "confirmDbImportDesc": "Это заменит все текущие данные содержимым из {file}. Резервная копия будет создана автоматически перед импортом.",
    "yesImport": "Да, импорт",
    "lastBackup": "Последняя резервная копия",
    "noBackupYet": "Резервной копии пока нет",
    "backupNow": "Резервное копирование сейчас",
    "backupRestore": "Резервное копирование и восстановление",
    "viewBackups": "Просмотр резервных копий",
    "hide": "Скрыть",
    "backupRetentionDesc": "Снимки базы данных создаются автоматически перед восстановлением и каждые 15 минут при изменении данных. Хранение: 24 часа в час + 30 ежедневных резервных копий с умной ротацией.",
    "loadingBackups": "Загрузка резервных копий...",
    "noBackupsYet": "Резервных копий пока нет. Резервные копии будут создаваться автоматически при изменении данных.",
    "backupsAvailable": "Доступно {count} резервных копий",
    "refresh": "Обновить",
    "confirm": "Подтвердить?",
    "yes": "Да",
    "no": "Нет",
    "restore": "Восстановить",
    "invalidFileType": "Неверный тип файла. Принимаются только файлы .sqlite.",
    "exportFailed": "Экспорт не удался",
    "exportFailedWithError": "Не удалось экспортировать: {error}.",
    "fullExportFailedWithError": "Не удалось выполнить полный экспорт: {error}.",
    "backupCreated": "Резервная копия создана: {file}",
    "restoreSuccess": "Восстановлено! {connections} соединений, {nodes} узлов, {combos} комбинаций, {apiKeys} ключей API.",
    "importSuccess": "База данных импортирована! {connections} соединений, {nodes} узлов, {combos} комбинаций, {apiKeys} ключей API.",
    "justNow": "только что",
    "minutesAgo": "{count} мин назад",
    "hoursAgo": "{count}ч назад",
    "daysAgo": "{count}дн назад",
    "backupReasonManual": "руководство",
    "backupReasonPreRestore": "предварительное восстановление",
    "connectionsCount": "{count, plural, one {# connection} other {# connections}}",
    "noChangesSinceBackup": "Никаких изменений с момента последнего резервного копирования",
    "backupFailed": "Резервное копирование не выполнено",
    "restoreFailed": "Восстановление не удалось",
    "importFailed": "Импорт не удался",
    "errorDuringRestore": "Произошла ошибка во время восстановления",
    "errorDuringImport": "Во время импорта произошла ошибка",
    "modelPricing": "Цены на модели",
    "modelPricingDesc": "Настройка ставок стоимости для каждой модели • Все ставки указаны в токенах $/1 млн.",
    "providers": "Провайдеры",
    "registry": "Реестр",
    "priced": "Цена",
    "searchProvidersModels": "Поиск поставщиков или моделей...",
    "showAll": "Показать все",
    "noProvidersMatch": "Ни один поставщик не соответствует вашему запросу.",
    "howPricingWorks": "Как работает ценообразование",
    "cacheWrite": "Запись в кэш",
    "unsaved": "несохраненный",
    "resetDefaults": "Сбросить настройки по умолчанию",
    "saveProvider": "Сохранить поставщика",
    "saving": "Сохранение...",
    "model": "Модель",
    "models": "модели",
    "moreProviders": "{count} больше поставщиков",
    "withPricing": "с настроенной ценой",
    "policiesCircuitBreakers": "Политики и автоматические выключатели",
    "activeIssuesDetected": "Обнаружены активные проблемы",
    "off": "Выкл.",
    "resetPricingConfirm": "Сбросить все цены для {provider} до значений по умолчанию?",
    "pricingDescInput": "Входные данные: токены, отправленные в модель.",
    "pricingDescOutput": "Результат: сгенерированы токены",
    "pricingDescCached": "Кэшировано: повторно используемый ввод (~ 50 % от частоты ввода)",
    "pricingDescReasoning": "Рассуждение: жетоны мышления (возврат к выходу)",
    "pricingDescCacheWrite": "Запись в кэш: создание записей в кэше (возврат к вводу)",
    "pricingDescFormula": "Стоимость = (вход × входная_ставка) + (выход × выходная_ставка) + (кэширование × кэшированная_ставка) за миллион токенов.",
    "pricingSettingsTitle": "Настройки цен",
    "totalModels": "Всего моделей",
    "active": "Активный",
    "costCalculation": "Расчет стоимости",
    "costCalculationDesc": "Затраты рассчитываются на основе использования токенов и ценовых ставок, настроенных для каждой модели.",
    "pricingFormat": "Формат цен",
    "pricingFormatDesc": "Все ставки указаны в токенах $/1M (долларов за миллион токенов).",
    "tokenTypes": "Типы токенов",
    "inputTokenDesc": "Стандартные токены подсказок",
    "outputTokenDesc": "Жетоны завершения/ответа",
    "cachedTokenDesc": "Кэшированные входные токены (обычно 50 % от скорости ввода)",
    "reasoningTokenDesc": "Специальные жетоны рассуждения/мышления (возврат к скорости вывода)",
    "cacheCreationTokenDesc": "Токены, используемые для создания записей в кэше (возврат к скорости ввода)",
    "customPricingNote": "Вы можете переопределить цены по умолчанию для определенных моделей. Пользовательские переопределения имеют приоритет над ценами, определяемыми автоматически.",
    "editPricing": "Изменить цену",
    "viewFullDetails": "Посмотреть полную информацию",
    "themeCoral": "Коралл",
    "cliFingerprint": "CLI Fingerprint Matching",
    "cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
    "cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
    "enableFingerprintTitle": "Enable fingerprint for {provider}",
    "disableFingerprintTitle": "Disable fingerprint for {provider}"
  },
  "translator": {
    "title": "Переводчик",
    "metaTitle": "Детская площадка для переводчиков | ОмниРоут",
    "metaDescription": "Отладка, тестирование и визуализация преобразований форматов API между поставщиками.",
    "playgroundTitle": "Площадка для переводчиков",
    "playground": "Детская площадка",
    "realtime": "Переводческая деятельность в режиме реального времени",
    "chatTester": "Тестер чата",
    "testBench": "Испытательный стенд",
    "liveMonitor": "Живой монитор",
    "modeDescriptionPlayground": "Вставьте любое тело запроса API и посмотрите, как OmniRoute преобразует его между форматами поставщика (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).",
    "modeDescriptionChatTester": "Отправляйте реальные запросы чата через OmniRoute и проверяйте полный цикл обработки: входные данные, переведенный запрос, ответ поставщика и переведенный вывод.",
    "modeDescriptionTestBench": "Запускайте заранее определенные сценарии и сравнивайте совместимость поставщиков и моделей.",
    "modeDescriptionLiveMonitor": "Наблюдайте за событиями перевода в режиме реального времени по мере прохождения запросов через OmniRoute.",
    "modeDescriptionFallback": "Отлаживайте, тестируйте и визуализируйте, как OmniRoute преобразует запросы API между поставщиками.",
    "recentTranslations": "Недавние переводы",
    "noTranslations": "Переводов пока нет",
    "source": "Источник",
    "target": "Цель",
    "time": "Время",
    "model": "Модель",
    "status": "Статус",
    "latency": "Задержка",
    "totalTranslations": "Всего переводов",
    "successful": "Успешный",
    "errors": "Ошибки",
    "avgLatency": "Средняя задержка",
    "millisecondsShort": "{value}мс",
    "notAvailableSymbol": "—",
    "liveAutoRefreshing": "Прямой эфир — автоматическое обновление",
    "paused": "Приостановлено",
    "eventsAppearHint": "События перевода появляются здесь по мере прохождения запросов через OmniRoute. Используйте любой из этих методов для генерации событий:",
    "chatTesterTab": "Вкладка «Тестер чата»",
    "testBenchTab": "Вкладка «Тестовый стенд»",
    "externalApiCalls": "Внешние вызовы API",
    "ideCliIntegrations": "Интеграция IDE/CLI",
    "inMemoryNote": "Примечание. События сохраняются в памяти и сбрасываются при перезапуске сервера.",
    "ok": "ОК",
    "errorShort": "ОШИБКА",
    "formatConverter": "Конвертер форматов",
    "formatConverterDescription": "Вставьте или введите тело запроса JSON. Переводчик автоматически определит исходный формат и преобразует его в целевой формат. Используйте это для отладки того, как OmniRoute преобразует запросы между форматами (OpenAI ↔ Claude ↔ Gemini ↔ API ответов).",
    "input": "Ввод",
    "output": "Выход",
    "auto": "Авто",
    "swapFormats": "Форматы обмена",
    "translateAction": "Перевести",
    "clear": "Очистить",
    "inputPlaceholder": "Вставьте сюда текст запроса или выберите шаблон ниже...",
    "exampleTemplates": "Примеры шаблонов",
    "exampleTemplatesHint": "— Нажмите, чтобы загрузить",
    "templateLoadHint": "Шаблон загружает запрос в формате {format}. Измените исходный формат, чтобы загрузить его в другом формате.",
    "compatibilityTester": "Тестер совместимости",
    "compatibilityReport": "Отчет о совместимости",
    "testBenchDescription": "Запустите предопределенные сценарии (простой чат, вызов инструментов и т. д.), чтобы проверить совместимость перевода и поставщика. Выберите исходный формат и целевого поставщика, затем запустите все тесты, чтобы увидеть процент совместимости. Используйте это, чтобы узнать, какие функции работают у разных поставщиков.",
    "targetProvider": "Целевой поставщик",
    "runAllTests": "Запустить все тесты",
    "runTest": "Запустить тест",
    "reRun": "Повторный запуск",
    "running": "Бег...",
    "passed": "прошло",
    "failed": "не удалось",
    "passedIconLabel": "✅ Пройдено",
    "chunks": "куски",
    "scenarioSimpleChat": "Простой чат",
    "scenarioToolCalling": "Вызов инструмента",
    "scenarioMultiTurn": "Многооборотный",
    "scenarioThinking": "мышление",
    "scenarioSystemPrompt": "Системная подсказка",
    "scenarioStreaming": "Потоковое вещание",
    "templateNames": {
      "simple-chat": "Простой чат",
      "tool-calling": "Вызов инструмента",
      "multi-turn": "Многооборотный",
      "thinking": "мышление",
      "system-prompt": "Системная подсказка",
      "streaming": "Потоковое вещание"
    },
    "templateDescriptions": {
      "simple-chat": "Основное текстовое сообщение",
      "tool-calling": "Вызов функции/инструмента",
      "multi-turn": "Разговор с историей",
      "thinking": "Расширенное мышление/рассуждение",
      "system-prompt": "Сложные системные инструкции",
      "streaming": "Запрос потоковой передачи SSE"
    },
    "templatePayloads": {
      "simpleChat": {
        "system": "Вы полезный помощник.",
        "userGreeting": "Здравствуйте! Как вы сегодня?"
      },
      "toolCalling": {
        "userWeather": "Какая погода в Сан-Паулу?",
        "toolDescription": "Получить текущую погоду для местоположения",
        "cityNameDescription": "Название города"
      },
      "multiTurn": {
        "system": "Вы помощник кодировщика.",
        "userInitial": "Напишите функцию для сортировки массива на Python.",
        "assistantExample": "Вот простая функция сортировки:\n\n``` питон\nЗащиту sort_array (обр):\n    возврат отсортированный (прибытие)\n```",
        "userFollowUp": "Теперь отсортируйте его по убыванию."
      },
      "thinking": {
        "question": "Какова сумма первых 100 простых чисел?"
      },
      "systemPrompt": {
        "systemInstruction": "Вы старший инженер-программист, специализирующийся на распределенных системах. Кратко отвечайте на вопросы, используя лучшие отраслевые практики. Всегда предоставляйте примеры кода, когда это уместно. Отформатируйте свои ответы, используя уценку.",
        "question": "Как реализовать шаблон автоматического выключателя?"
      },
      "streaming": {
        "prompt": "Расскажите мне короткую историю о роботе, который учится рисовать."
      }
    },
    "openaiCompatibleLabel": "Совместимость с OpenAI",
    "anthropicCompatibleLabel": "Антропная совместимость",
    "noTemplateForFormat": "Нет шаблона для этого формата",
    "translationFailed": "Не удалось выполнить перевод: {error}.",
    "pipelineDebugger": "Отладчик конвейеров",
    "translationPipeline": "Конвейер перевода",
    "pipelineVisualization": "Визуализация трубопровода",
    "pipelineVisualizationHint": "Отправьте сообщение, чтобы узнать, как ваш запрос проходит через обнаружение → перевод → звонок поставщику.",
    "chatTesterDescription": "Отправляйте сообщения в определенном клиентском формате и проверяйте каждый этап конвейера перевода.",
    "chatTesterFlow": "Запрос клиента → Обнаружение формата → OpenAI Intermediate → Формат поставщика → Ответ",
    "clickStepToInspect": "Щелкните любой шаг, чтобы проверить данные на этом этапе.",
    "clientFormat": "Формат клиента",
    "provider": "Поставщик",
    "modelPlaceholder": "Выберите или введите название модели...",
    "sendMessageToSeePipeline": "Отправьте сообщение, чтобы увидеть процесс перевода",
    "chatMessageHintPrefix": "Ваше сообщение будет отформатировано как",
    "chatMessageHintSuffix": "запрос, транслируемый через конвейер и отправляемый выбранному провайдеру.",
    "youWithFormat": "Вы ({format})",
    "assistant": "Ассистент",
    "typeMessage": "Введите сообщение...",
    "send": "Отправить",
    "clientRequest": "Запрос клиента",
    "clientRequestDescription": "Тело запроса в том виде, в каком его отправил бы ваш клиент.",
    "formatDetected": "Обнаружен формат",
    "formatDetectedDescription": "OmniRoute автоматически определяет формат API по структуре запроса.",
    "openaiIntermediate": "OpenAI Средний уровень",
    "openaiIntermediateDescription": "Все форматы сначала нормализуются до формата OpenAI (универсальный мост).",
    "providerFormat": "Формат поставщика",
    "providerFormatDescription": "Формат OpenAI транслируется в собственный формат провайдера.",
    "providerResponse": "Ответ поставщика",
    "providerResponseRawDescription": "Необработанный ответ от API провайдера",
    "providerResponseSseDescription": "Необработанный поток SSE из API провайдера",
    "unexpectedError": "Произошла непредвиденная ошибка",
    "error": "Ошибка",
    "errorMessage": "Ошибка: {message}",
    "requestFailed": "Запрос не выполнен",
    "noTextExtracted": "(текст не извлечен)",
    "liveMonitorDescriptionPrefix": "Показывает события перевода, когда вызовы API проходят через OmniRoute. События поступают из буфера в памяти (сбрасывается при перезапуске). Использование",
    "liveMonitorDescriptionSuffix": "или внешние вызовы API для генерации событий."
  },
  "usage": {
    "title": "Использование",
    "loggerTab": "Регистратор",
    "proxyTab": "Прокси",
    "budgetManagement": "Управление бюджетом",
    "budgetSaved": "Ограничения бюджета сохранены.",
    "budgetSaveFailed": "Не удалось сохранить бюджет.",
    "loadingBudgetData": "Загрузка данных бюджета...",
    "noApiKeysTitle": "Нет ключей API",
    "noApiKeysDescription": "Сначала добавьте ключи API, чтобы настроить ограничения бюджета.",
    "apiKey": "API-ключ",
    "todaysSpend": "Сегодняшние расходы",
    "thisMonth": "В этом месяце",
    "setLimits": "Установить ограничения",
    "dailyLimitUsd": "Дневной лимит (доллар США)",
    "monthlyLimitUsd": "Месячный лимит (долл. США)",
    "warningThresholdPercent": "Порог предупреждения (%)",
    "dailyLimitPlaceholder": "например 5.00",
    "monthlyLimitPlaceholder": "например 50.00",
    "warningThresholdPlaceholder": "80",
    "saveLimits": "Сохранить лимиты",
    "budgetOk": "Бюджет в порядке — осталось {remaining}",
    "budgetExceeded": "Бюджет превышен — запросы могут быть заблокированы",
    "totalRequests": "Всего запросов",
    "noDataYet": "Данных пока нет",
    "latency": "Задержка",
    "latencyP50": "стр50",
    "latencyP95": "стр.95",
    "latencyP99": "стр.99",
    "promptCache": "Подскажите кэш",
    "systemHealth": "Здоровье системы",
    "entries": "Записи",
    "activeCount": "{count} активен",
    "openCircuitBreakersDetected": "Обнаружены разомкнутые автоматические выключатели",
    "hitRate": "Скорость попадания",
    "hitsMisses": "Попадания/промахи",
    "circuitBreakers": "Автоматические выключатели",
    "lockedIPs": "Заблокированные IP-адреса",
    "lockoutsAutoRefreshHint": "Блокировка ограничения скорости для каждой модели • Автоматическое обновление 10 с.",
    "lockedCount": "{count, plural, one {# locked} other {# locked}}",
    "timeLeft": "{time} осталось",
    "howItWorks": "Как это работает",
    "howItWorksSubtitle": "Узнайте, как оценки подтверждают ваши ответы LLM",
    "define": "Определить",
    "defineStepDescription": "Создавайте тестовые примеры с подсказками для ввода и ожидаемыми критериями вывода, используя такие стратегии, как «содержит», регулярное выражение или точное соответствие.",
    "run": "Беги",
    "runStepDescription": "Выполняйте тестовые сценарии для конечных точек LLM через OmniRoute. Каждый случай отправляется как реальный запрос API.",
    "evaluate": "Оценить",
    "evaluateStepDescription": "Ответы сравниваются с ожидаемыми критериями. См. «Годен/не годен» для каждого случая с показателями задержки и подробной обратной связью.",
    "evalSuites": "Оценочные пакеты",
    "evalSuitesHint": "Щелкните пакет, чтобы просмотреть тестовые примеры, а затем запустите его для оценки конечных точек LLM.",
    "evalsLoading": "Загрузка тестовых пакетов...",
    "noEvalSuitesFound": "Eval Suites не найдено",
    "noEvalSuitesDescription": "Пакеты Eval можно определить через API или в коде. Они проверяют результаты модели на соответствие ожидаемым результатам, используя такие стратегии, как содержание, регулярное выражение, точное соответствие и пользовательские функции.",
    "columnCase": "Дело",
    "columnStatus": "Статус",
    "columnLatency": "Задержка",
    "columnDetails": "Подробности",
    "columnModel": "Модель",
    "columnStrategy": "Стратегия",
    "columnExpected": "Ожидается",
    "statsSuites": "Люксы",
    "statsTestCases": "Тестовые случаи",
    "statsModels": "Модели",
    "statsCoverage": "Покрытие",
    "statsStrategiesCount": "{count} стратегии",
    "evaluationStrategies": "Стратегии оценки",
    "modelsUnderTest": "Тестируемые модели",
    "searchSuitesPlaceholder": "Искать апартаменты...",
    "passSuffix": "пройти",
    "casesCount": "{count, plural, one {# case} other {# cases}}",
    "runEval": "Запустить оценку",
    "runningProgress": "Запуск {current}/{total}...",
    "passRate": "проходной балл",
    "summaryBreakdown": "{passed} пройден · {failed} не пройден · всего {total}",
    "passedIconLabel": "✅ Пройдено",
    "failedIconLabel": "❌ Не удалось",
    "detailsContains": "Содержит: «{term}»",
    "detailsRegex": "Регулярное выражение: {pattern}",
    "detailsExpected": "Ожидается: \"{expected}\"",
    "noResultsYet": "Пока нет результатов",
    "testCasesCount": "Тестовые примеры ({count})",
    "noTestCasesDefined": "Тестовые примеры не определены",
    "runEvalHint": "Нажмите «Запустить оценку», чтобы выполнить все случаи для вашей конечной точки LLM. Каждый тест отправляет реальный запрос через OmniRoute.",
    "notifyNoTestCases": "Для этого набора тестовых примеров не определено.",
    "notifyAllCasesPassed": "Все дела {total} пройдены ✅",
    "notifySomeCasesFailed": "{passed}/{total} пройден, {failed} не выполнен",
    "notifyEvalRunFailed": "Оценочный запуск не удался",
    "notifyEvalTitle": "Оценка: {name}",
    "modelEvals": "Модельные оценки",
    "evalsHeroDescription": "Протестируйте и подтвердите свои конечные точки LLM, запустив предварительно определенные пакеты оценки. Каждый пакет содержит тестовые примеры, которые отправляют реальные запросы через OmniRoute и сравнивают ответы с ожидаемыми критериями, что помогает выявлять регрессии, сравнивать модели и обеспечивать качество ответов между поставщиками.",
    "qualityValidation": "Проверка качества",
    "modelComparison": "Сравнение моделей",
    "regressionDetection": "Обнаружение регрессии",
    "latencyBenchmarks": "Тесты задержки",
    "modelLockouts": "Модельные локауты",
    "noLockouts": "Ни одна модель в настоящее время не заблокирована",
    "activeSessions": "Активные сессии",
    "noSessions": "Нет активных сессий",
    "sessionsHint": "Сеансы появляются по мере прохождения запросов через прокси.",
    "sessionsTrackedHint": "Отслеживается с помощью снятия отпечатков пальцев • Автоматическое обновление в течение 5 секунд.",
    "session": "Сессия",
    "age": "Возраст",
    "requests": "Запросы",
    "connection": "Подключение",
    "durationMillisecondsShort": "{value}мс",
    "durationSecondsShort": "{value}с",
    "durationMinutesShort": "{value}м",
    "durationHoursShort": "{value}h",
    "reasonSeparator": " - ",
    "notAvailableSymbol": "-",
    "providerLimits": "Ограничения поставщика",
    "noProviders": "Ни один провайдер не подключен",
    "connectProvidersForQuota": "Подключайтесь к поставщикам с помощью OAuth, чтобы отслеживать ограничения и использование квот API.",
    "accountsCount": "{count, plural, one {# account} other {# accounts}}",
    "filteredFromCount": "(отфильтровано из {count})",
    "autoRefresh": "Автообновление",
    "refreshAll": "Обновить все",
    "loadingQuotas": "Загрузка...",
    "account": "Аккаунт",
    "modelQuotas": "Модельные квоты",
    "lastUsed": "Последнее использование",
    "actions": "Действия",
    "refreshQuota": "Обновить квоту",
    "today": "Сегодня",
    "tomorrow": "Завтра",
    "dayTimeFormat": "{day}, {time}",
    "inDuration": "в {duration}",
    "notApplicable": "Н/Д",
    "rawPlanWithValue": "Необработанный план: {plan}",
    "noPlanFromProvider": "Нет плана от провайдера",
    "noQuotaData": "Нет данных о квотах",
    "ungrouped": "Ungrouped",
    "viewFlat": "Flat",
    "viewByEnvironment": "By Environment",
    "noQuotaDataAvailable": "Нет данных о квотах",
    "noAccountsForTierFilter": "Аккаунты для фильтра уровня не найдены",
    "tierAll": "Все",
    "tierEnterprise": "Предприятие",
    "tierTeam": "Команда",
    "tierBusiness": "Бизнес",
    "tierUltra": "Ультра",
    "tierPro": "Про",
    "tierPlus": "Плюс",
    "tierFree": "Бесплатно",
    "tierUnknown": "Неизвестно"
  },
  "modals": {
    "waitingAuth": "Ожидание авторизации",
    "verificationUrl": "URL-адрес подтверждения",
    "yourCode": "Ваш код",
    "remoteAccess": "Удаленный доступ:",
    "connectedSuccess": "Подключено успешно!",
    "connectionFailed": "Соединение не удалось",
    "chooseAuthMethod": "Выберите метод аутентификации:",
    "awsBuilderId": "Идентификатор строителя AWS",
    "awsIamIdentity": "Центр идентификации AWS IAM",
    "googleAccount": "Аккаунт Google",
    "githubAccount": "Аккаунт GitHub",
    "importToken": "Импортировать токен",
    "pasteToken": "Вставьте токен обновления из Kiro IDE.",
    "awsRegion": "Регион AWS",
    "autoDetecting": "Автоматическое обнаружение токенов...",
    "readingFromCache": "Чтение из кэша AWS SSO",
    "readingFromCursor": "Чтение из базы данных Cursor IDE",
    "initializing": "Инициализация...",
    "pricingConfig": "Конфигурация цен",
    "loadingPricing": "Загрузка данных о ценах...",
    "pricingRatesFormat": "Формат ценообразования",
    "noPricingData": "Нет данных о ценах",
    "noModelsFound": "Модели не найдены"
  },
  "loggers": {
    "allProviders": "Все провайдеры",
    "allModels": "Все модели",
    "allAccounts": "Все аккаунты",
    "allApiKeys": "Все ключи API",
    "allTypes": "Все типы",
    "allLevels": "Все уровни",
    "modelAZ": "Модель А-Я",
    "modelZA": "Модель Z-A",
    "loadingLogs": "Загрузка журналов...",
    "loadingProxyLogs": "Загрузка журналов прокси...",
    "noLogEntries": "Записи журнала не найдены",
    "noPayloadData": "Для этой записи журнала отсутствуют данные полезной нагрузки.",
    "proxyEvent": "Прокси-событие",
    "proxy": "Прокси",
    "level": "Уровень",
    "directNative": "Прямой (родной)",
    "combo": "Комбо",
    "inputTokens": "Я:",
    "outputTokens": "О:"
  },
  "stats": {
    "usageOverview": "Обзор использования",
    "outputTokens": "Выходные токены",
    "totalCost": "Общая стоимость",
    "usageByModel": "Использование по модели",
    "usageByAccount": "Использование по учетной записи",
    "failedToLoad": "Не удалось загрузить статистику использования.",
    "tokenHealth": "Здоровье токена",
    "totalOAuth": "Всего OAuth",
    "healthy": "Здоровый",
    "warning": "Предупреждение",
    "errored": "Ошибка",
    "lastCheck": "Последняя проверка",
    "noData": "Нет данных",
    "share": "Поделиться",
    "unableToLoad": "Невозможно загрузить системные метрики",
    "product": "Продукт",
    "resources": "Ресурсы",
    "company": "Компания"
  },
  "auth": {
    "welcome": "Добро пожаловать",
    "signIn": "Войти",
    "enterPassword": "Введите свой пароль, чтобы продолжить",
    "password": "Пароль",
    "unifiedProxy": "Единый прокси-сервер AI API",
    "unifiedAiApiProxy": "Единый прокси-сервер AI API",
    "unifiedAiApiProxyDesc": "Направляйте запросы к нескольким поставщикам ИИ через одну конечную точку. Встроенные функции балансировки нагрузки, аварийного переключения и отслеживания использования.",
    "passwordNotEnabled": "Защита паролем не включена",
    "loading": "Загрузка...",
    "invalidPassword": "Неверный пароль",
    "errorOccurredRetry": "Произошла ошибка. Пожалуйста, попробуйте еще раз.",
    "configureInstance": "Давайте настроим ваш экземпляр OmniRoute.",
    "runOnboardingWizard": "Запустите мастер регистрации, чтобы настроить пароль и подключить первого поставщика ИИ.",
    "startOnboarding": "Начать регистрацию",
    "secureYourInstance": "Защитите свой экземпляр",
    "setPasswordDescription": "Установите пароль, чтобы защитить свою панель управления и защитить конечные точки API от несанкционированного доступа.",
    "configurePassword": "Настроить пароль",
    "continue": "Продолжить",
    "windowWillClose": "Это окно закроется автоматически...",
    "closeTabNow": "Вы можете закрыть эту вкладку сейчас.",
    "copyUrlManual": "Скопируйте URL-адрес из адресной строки и вставьте его в приложение.",
    "accessDeniedDescription": "У вас нет разрешения на доступ к этому ресурсу. Проверьте свой API-ключ или свяжитесь с администратором.",
    "goToDashboard": "Перейти на панель управления",
    "featureMultiProviderTitle": "Мультипровайдер",
    "featureMultiProviderDesc": "OpenAI, Anthropic, Google и другие",
    "featureLoadBalancingTitle": "Балансировка нагрузки",
    "featureLoadBalancingDesc": "Распределяйте запросы разумно",
    "featureUsageTrackingTitle": "Отслеживание использования",
    "featureUsageTrackingDesc": "Мониторинг затрат и токенов",
    "resetPassword": "Сбросить пароль",
    "resetDescription": "Выберите способ восстановления доступа к панели управления",
    "stopServer": "Остановите сервер OmniRoute.",
    "processing": "Обработка...",
    "pleaseWait": "Пожалуйста, подождите, пока мы завершим авторизацию.",
    "authSuccess": "Авторизация прошла успешно!",
    "copyUrl": "Скопировать этот URL",
    "accessDenied": "Доступ запрещен",
    "methodCliTitle": "Способ 1: сброс CLI",
    "methodCliDescription": "Выполните следующую команду на сервере, где работает OmniRoute:",
    "methodCliHint": "Это предложит вам установить новый пароль. Сначала сервер должен быть остановлен.",
    "methodManualTitle": "Способ 2: Ручной сброс",
    "methodManualDescription": "Удалим пароль из базы данных и установим новый при запуске:",
    "setPasswordInYour": "Установите новый пароль в своем",
    "fileLabelSuffix": "файл:",
    "newPasswordPlaceholder": "ваш_новый_пароль",
    "deleteSettingsFile": "Удалить",
    "orRemovePasswordHashField": "или удалите поле пароляHash",
    "restartServerWithNewPassword": "Перезагрузите сервер - он будет использовать новый пароль.",
    "backToLogin": "Вернуться к входу",
    "forgotPassword": "Забыли пароль?"
  },
  "landing": {
    "brandName": "ОмниРоут",
    "navigateHome": "Перейти домой",
    "toggleMenu": "Переключить меню",
    "featuresLink": "Особенности",
    "docsLink": "Документы",
    "github": "GitHub",
    "versionLive": "v1.0 уже доступен",
    "oneEndpoint": "Одна конечная точка для",
    "allProviders": "Все поставщики ИИ",
    "heroDescription": "Прокси-сервер конечной точки AI с веб-панелью — порт CLIProxyAPI на JavaScript. Беспрепятственно работает с Claude Code, OpenAI Codex, Cline, RooCode и другими инструментами CLI.",
    "getStarted": "Начать",
    "viewOnGithub": "Посмотреть на GitHub",
    "powerfulFeatures": "Мощные функции",
    "featuresSubtitle": "Все, что вам нужно для управления инфраструктурой искусственного интеллекта, собрано в одном месте и рассчитано на масштабирование.",
    "featureUnifiedEndpointTitle": "Единая конечная точка",
    "featureUnifiedEndpointDesc": "Доступ ко всем поставщикам через единый стандартный URL-адрес API.",
    "featureEasySetupTitle": "Простая настройка",
    "featureEasySetupDesc": "Приступайте к работе за считанные минуты с помощью команды npx.",
    "featureModelFallbackTitle": "Резервная модель",
    "featureModelFallbackDesc": "Автоматически переключайте поставщиков в случае сбоя или высокой задержки.",
    "featureUsageTrackingTitle": "Отслеживание использования",
    "featureUsageTrackingDesc": "Подробная аналитика и мониторинг затрат по всем моделям.",
    "featureOAuthApiKeysTitle": "OAuth и ключи API",
    "featureOAuthApiKeysDesc": "Безопасно управляйте учетными данными в одном хранилище.",
    "featureCloudSyncTitle": "Облачная синхронизация",
    "featureCloudSyncDesc": "Мгновенно синхронизируйте свои конфигурации между устройствами.",
    "featureCliSupportTitle": "Поддержка интерфейса командной строки",
    "featureCliSupportDesc": "Работает с Claude Code, Codex, Cline, Cursor и другими.",
    "featureDashboardTitle": "Панель управления",
    "featureDashboardDesc": "Визуальная панель для анализа трафика в реальном времени.",
    "howItWorks": "Как работает OmniRoute",
    "howItWorksDescription": "Данные беспрепятственно передаются из вашего приложения через наш уровень интеллектуальной маршрутизации к лучшему поставщику для выполнения этой работы.",
    "howItWorksStep1Title": "1. Интерфейс командной строки и SDK",
    "howItWorksStep1Description": "Ваши запросы начинаются с ваших любимых инструментов или нашего единого SDK. Просто измените базовый URL.",
    "howItWorksStep2Title": "2. Хаб OmniRoute",
    "howItWorksStep2Description": "Наш механизм анализирует приглашение, проверяет работоспособность провайдера и маршрутизирует с наименьшей задержкой или стоимостью.",
    "howItWorksStep3Title": "3. Поставщики ИИ",
    "howItWorksStep3Description": "Запрос мгновенно выполняется OpenAI, Anthropic, Gemini или другими.",
    "getStartedIn30Seconds": "Начните за 30 секунд",
    "getStartedDescription": "Установите OmniRoute, настройте своих провайдеров через веб-панель и начните маршрутизировать запросы AI.",
    "installOmniRoute": "Установите OmniRoute",
    "installStepDescription": "Запустите команду npx, чтобы мгновенно запустить сервер.",
    "openDashboard": "Открыть панель управления",
    "openDashboardStepDescription": "Настройка поставщиков и ключей API через веб-интерфейс",
    "routeRequests": "Запросы маршрутов",
    "routeRequestsStepDescription": "Направьте свои инструменты CLI на {endpoint}.",
    "terminal": "терминал",
    "copy": "Копировать",
    "copied": "✓ Скопировано",
    "startingOmniRoute": "Запускаем OmniRoute...",
    "serverRunningOnLabel": "Сервер работает на",
    "dashboardLabel": "Панель управления",
    "readyToRoute": "Готов к маршруту! ✓",
    "configureProvidersNote": "📝 Настройте поставщиков на панели управления или используйте переменные среды.",
    "dataLocation": "Местоположение данных:",
    "dataLocationMacLinux": " macOS/Линукс:",
    "dataLocationWindows": " Окна:",
    "product": "Продукт",
    "dashboardLink": "Панель управления",
    "changelog": "Журнал изменений",
    "resources": "Ресурсы",
    "documentation": "Документация",
    "npm": "НПМ",
    "legal": "Юридический",
    "mitLicense": "Лицензия MIT",
    "footerTagline": "Единая конечная точка для создания ИИ. С легкостью подключайтесь, маршрутизируйте и управляйте своими поставщиками ИИ.",
    "copyright": "© {year} OmniRoute. Все права защищены.",
    "flowToolClaudeCode": "Клод Код",
    "flowToolOpenAICodex": "Кодекс OpenAI",
    "flowToolCline": "Клайн",
    "flowToolCursor": "Курсор",
    "flowProviderOpenAI": "ОпенАИ",
    "flowProviderAnthropic": "антропный",
    "flowProviderGemini": "Близнецы",
    "flowProviderGithubCopilot": "GitHub второй пилот",
    "interactiveDiagram": "Интерактивная диаграмма видна на рабочем столе",
    "ctaTitle": "Готовы упростить свою инфраструктуру искусственного интеллекта?",
    "ctaDescription": "Присоединяйтесь к разработчикам, которые оптимизируют интеграцию искусственного интеллекта с помощью OmniRoute. Открытый исходный код и бесплатный запуск.",
    "startFree": "Начать бесплатно",
    "readDocumentation": "Читать документацию"
  },
  "docs": {
    "title": "Документация",
    "quickStart": "Быстрый старт",
    "features": "Особенности",
    "supportedProviders": "Поддерживаемые провайдеры",
    "supportedProvidersToc": "Провайдеры",
    "commonUseCases": "Общие случаи использования",
    "clientCompatibility": "Совместимость клиентов",
    "protocolsToc": "Protocols",
    "apiReference": "Справочник по API",
    "method": "Метод",
    "path": "Путь",
    "notes": "Примечания",
    "modelPrefixes": "Префиксы моделей",
    "prefix": "Префикс",
    "troubleshooting": "Устранение неполадок",
    "supportsChat": "Поддерживает конечные точки чата и ответов.",
    "oauthAutoRefresh": "Соединение OAuth с автоматическим обновлением токена.",
    "fullStreaming": "Полная поддержка потоковой передачи для всех моделей.",
    "docsLabel": "Документы",
    "docsHeroDescription": "AI-шлюз для LLM с несколькими поставщиками. Одна конечная точка для OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor и еще более 20 провайдеров.",
    "openDashboard": "Открыть панель управления",
    "endpointPage": "Страница конечной точки",
    "github": "GitHub",
    "reportIssue": "Сообщить о проблеме",
    "onThisPage": "На этой странице",
    "documentationVersion": "Документация — v{version}",
    "quickStartStep1Title": "1. Установите и запустите",
    "quickStartStep1Prefix": "Беги",
    "quickStartStep1Middle": "или клонируйте с GitHub и запустите",
    "quickStartStep2Title": "2. Создайте ключ API.",
    "quickStartStep2Text": "Перейдите в Конечная точка -> Зарегистрированные ключи. Создайте один ключ для каждой среды.",
    "quickStartStep3Title": "3. Подключите провайдеров",
    "quickStartStep3Text": "Добавляйте учетные записи поставщиков с помощью входа в систему OAuth, ключа API или автоматического подключения на бесплатном уровне.",
    "quickStartStep4Title": "4. Установите URL-адрес клиентской базы.",
    "quickStartStep4Prefix": "Направьте свой клиент IDE или API на",
    "quickStartStep4Suffix": "Используйте префикс провайдера, например",
    "featureRoutingTitle": "Маршрутизация между несколькими провайдерами",
    "featureRoutingText": "Направляйте запросы более чем 30 поставщикам ИИ через единую конечную точку, совместимую с OpenAI. Поддерживает API чата, ответов, аудио и изображений.",
    "featureCombosTitle": "Комбинации и балансировка",
    "featureCombosText": "Создавайте комбинации моделей с резервными цепочками и стратегиями балансировки: циклическим, приоритетным, случайным, наименее используемым и оптимизированным по затратам.",
    "featureUsageTitle": "Отслеживание использования и затрат",
    "featureUsageText": "Подсчет токенов в реальном времени, расчет стоимости для каждого поставщика/модели и подробная разбивка использования по ключам API и учетным записям.",
    "featureAnalyticsTitle": "Аналитическая панель",
    "featureAnalyticsText": "Визуальная аналитика с диаграммами запросов, токенов, ошибок, задержек, затрат и популярности модели с течением времени.",
    "featureHealthTitle": "Мониторинг здоровья",
    "featureHealthText": "Проверки работоспособности в реальном времени, статус поставщика услуг, состояния автоматических выключателей и автоматическое определение ограничения скорости с экспоненциальным замедлением.",
    "featureCliTitle": "Инструменты интерфейса командной строки",
    "featureCliText": "Управляйте конфигурациями IDE, экспортируйте/импортируйте резервные копии, находите профили кодекса и настраивайте параметры с панели управления.",
    "featureSecurityTitle": "Безопасность и политики",
    "featureSecurityText": "Аутентификация по ключу API, фильтрация IP-адресов, защита от внедрения подсказок, политики домена, управление сеансами и ведение журнала аудита.",
    "featureCloudSyncTitle": "Облачная синхронизация",
    "featureCloudSyncText": "Синхронизируйте свою конфигурацию с Cloudflare Workers для удаленного доступа с зашифрованными учетными данными и автоматического переключения при сбое.",
    "providersAcrossConnectionTypes": "Поставщики {count} для трех типов подключения.",
    "manageProviders": "Управление поставщиками",
    "providersCount": "{count} поставщиков",
    "providerTypeFree": "Уровень бесплатного пользования",
    "providerTypeOAuth": "OAuth",
    "providerTypeApiKey": "API-ключ",
    "useCaseSingleEndpointTitle": "Единая конечная точка для многих провайдеров",
    "useCaseSingleEndpointText": "Направьте клиентов на один базовый URL-адрес и выполните маршрутизацию по префиксу модели (например: gh/, cc/, kr/, openai/).",
    "useCaseFallbackTitle": "Откат и переключение модели с помощью комбинаций",
    "useCaseFallbackText": "Создавайте комбинированные модели в Dashboard и сохраняйте стабильную конфигурацию клиента, пока поставщики меняются внутри компании.",
    "useCaseUsageVisibilityTitle": "Видимость использования, стоимости и отладки",
    "useCaseUsageVisibilityText": "Отслеживайте токены и стоимость по поставщикам, учетным записям и ключам API на вкладках «Использование» и «Аналитика».",
    "clientCherryStudioTitle": "Черри Студия",
    "baseUrlLabel": "Базовый URL",
    "chatEndpointLabel": "Конечная точка чата",
    "modelRecommendationLabel": "Рекомендация модели: явный префикс",
    "clientCodexTitle": "Модели второго пилотного проекта Codex/GitHub",
    "clientCodexBullet1": "Используйте идентификаторы моделей с",
    "clientCodexBullet2": "Модели семейства Codex автоматически перенаправляются к",
    "clientCodexBullet3": "Модели, не относящиеся к Кодексу, продолжают действовать",
    "clientCursorTitle": "Курсор IDE",
    "clientCursorBullet1": "Использование",
    "clientCursorBullet1Suffix": "префикс для моделей Cursor.",
    "clientCursorBullet2": "Соединение OAuth — вход со страницы «Провайдеры».",
    "clientClaudeTitle": "Клод Код / Антигравитация",
    "clientClaudeBullet1Prefix": "Использование",
    "clientClaudeBullet1Middle": "(Клод) или",
    "clientClaudeBullet1Suffix": "(Антигравитация) приставка.",
    "protocolsTitle": "Protocols: MCP & A2A",
    "protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
    "protocolMcpTitle": "MCP (Model Context Protocol)",
    "protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
    "protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
    "protocolMcpStep2": "Point your MCP client to stdio transport.",
    "protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
    "protocolA2aTitle": "A2A (Agent2Agent)",
    "protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
    "protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
    "protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
    "protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
    "protocolTroubleshootingTitle": "Protocol Troubleshooting",
    "protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
    "protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
    "protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
    "endpointChatNote": "Конечная точка чата, совместимая с OpenAI (по умолчанию).",
    "endpointResponsesNote": "Конечная точка API ответов (Кодекс, серия o).",
    "endpointModelsNote": "Каталог моделей для всех подключенных провайдеров.",
    "endpointAudioNote": "Транскрипция аудио (Deepgram, AssemblyAI).",
    "endpointImagesNote": "Генерация изображений (NanoBanana).",
    "endpointRewriteChatNote": "Переписать помощник для клиентов без /v1.",
    "endpointRewriteResponsesNote": "Переписать помощник для ответов без /v1.",
    "endpointRewriteModelsNote": "Переписать помощник для обнаружения моделей без /v1.",
    "modelPrefixesDescriptionStart": "Используйте префикс поставщика перед названием модели для маршрутизации к определенному поставщику. Пример:",
    "modelPrefixesDescriptionEnd": "маршруты к GitHub Copilot.",
    "provider": "Поставщик",
    "type": "Тип",
    "troubleshootingModelRouting": "Если клиенту не удается выполнить маршрутизацию модели, используйте явный поставщик/модель (например: gh/gpt-5.1-codex).",
    "troubleshootingAmbiguousModels": "Если вы получаете неоднозначные ошибки модели, выберите префикс поставщика вместо простого идентификатора модели.",
    "troubleshootingCodexFamily": "Для моделей семейства GitHub Codex сохраните модель как gh/codex-model; Маршрутизатор выбирает / отвечает автоматически.",
    "troubleshootingTestConnection": "Используйте «Панель мониторинга» > «Поставщики» > «Проверить соединение» перед тестированием из IDE или внешних клиентов.",
    "troubleshootingCircuitBreaker": "Если поставщик услуг показывает, что автоматический выключатель разомкнут, дождитесь охлаждения или посетите страницу «Здоровье» для получения подробной информации.",
    "troubleshootingOAuth": "Для поставщиков OAuth выполните повторную аутентификацию, если срок действия токенов истечет. Проверьте индикатор состояния карты провайдера."
  },
  "legal": {
    "privacyPolicy": "Политика конфиденциальности",
    "termsOfService": "Условия использования",
    "providerConfigurations": "Конфигурации провайдера",
    "apiKeys": "Ключи API",
    "usageLogs": "Журналы использования",
    "applicationSettings": "Настройки приложения",
    "viewExportAnalytics": "Просмотр и экспорт аналитики использования",
    "clearHistory": "Очистить историю использования в любое время",
    "configureRetention": "Настройка политик хранения журналов",
    "backupRestore": "Резервное копирование и восстановление базы данных",
    "privacyMetadataTitle": "Политика конфиденциальности | ОмниРоут",
    "privacyMetadataDescription": "Политика конфиденциальности для прокси-маршрутизатора OmniRoute AI API.",
    "termsMetadataTitle": "Условия обслуживания | ОмниРоут",
    "termsMetadataDescription": "Условия использования прокси-маршрутизатора OmniRoute AI API.",
    "backToHome": "Вернуться домой",
    "lastUpdated": "Последнее обновление: {date}.",
    "policyLastUpdatedDate": "13 февраля 2026 г.",
    "listSeparator": "-",
    "questionsVisit": "Вопросы? Посетите наш",
    "githubRepository": "Репозиторий GitHub",
    "privacySection1Title": "1. Архитектура, ориентированная на локальность",
    "privacySection1Text": "OmniRoute спроектирован как локальное приложение. Вся обработка и хранение данных происходит полностью на вашем компьютере. Не существует централизованного сервера, собирающего вашу информацию.",
    "privacySection2Title": "2. Данные, которые мы храним",
    "privacyDataStoredIn": "Следующие данные хранятся локально в",
    "privacyDataProviderConfigurationsDesc": "URL-адреса подключения, типы провайдеров и настройки приоритета",
    "privacyDataApiKeysDesc": "шифруется и хранится локально для аутентификации у поставщиков ИИ.",
    "privacyDataUsageLogsDesc": "количество запросов, использование токенов, названия моделей, временные метки и время ответа.",
    "privacyDataApplicationSettingsDesc": "настройки темы, стратегия маршрутизации и комбинированные конфигурации",
    "privacySection3Title": "3. Нет телеметрии",
    "privacySection3Text": "OmniRoute не собирает телеметрию, аналитику или отчеты о сбоях. Никакие данные не передаются нам или третьим лицам. Ваши шаблоны использования, вызовы API и конфигурации остаются полностью конфиденциальными.",
    "privacySection4Title": "4. Сторонние поставщики ИИ",
    "privacySection4Text": "Когда вы выполняете вызовы API через OmniRoute, ваши запросы перенаправляются настроенным вами поставщикам искусственного интеллекта (например: OpenAI, Anthropic, Google). У этих провайдеров есть свои собственные политики конфиденциальности, которые определяют, как они обрабатывают ваши данные. Пожалуйста, просмотрите:",
    "privacyOpenAiPolicy": "Политика конфиденциальности OpenAI",
    "privacyAnthropicPolicy": "Антропная политика конфиденциальности",
    "privacyGooglePolicy": "Политика конфиденциальности Google",
    "privacySection5Title": "5. Облачная синхронизация (необязательно)",
    "privacySection5Text": "Если вы включите дополнительную функцию облачной синхронизации, конфигурации поставщика и ключи API могут быть переданы в настроенную конечную точку облака. Эта функция отключена по умолчанию и требует явного согласия.",
    "privacySection6Title": "6. Ведение журнала",
    "privacyLoggingIntro": "Журналы запросов можно настроить через настройки панели управления. Вы можете:",
    "privacySection7Title": "7. Ваши права",
    "privacySection7TextStart": "Поскольку все данные хранятся локально, у вас есть полный контроль. Вы можете удалить свои данные в любое время, удалив",
    "privacySection7TextEnd": "каталог или с помощью функций резервного копирования и восстановления базы данных на панели управления.",
    "termsSection1Title": "1. Обзор",
    "termsSection1Text": "OmniRoute — это локальный прокси-маршрутизатор AI API, который полностью работает на вашем компьютере. Он направляет запросы нескольким поставщикам искусственного интеллекта с балансировкой нагрузки, аварийным переключением и отслеживанием использования.",
    "termsSection2Title": "2. Обязанности пользователя",
    "termsResponsibilityApiKeys": "Вы несете единоличную ответственность за управление своими собственными ключами API и учетными данными для сторонних поставщиков ИИ (OpenAI, Anthropic, Google и т. д.).",
    "termsResponsibilityCompliance": "Вы должны соблюдать условия обслуживания каждого поставщика ИИ, к API которого вы получаете доступ через OmniRoute.",
    "termsResponsibilitySecurity": "Вы несете ответственность за безопасность вашей локальной установки OmniRoute, включая установку пароля и ограничение доступа к сети.",
    "termsSection3Title": "3. Как это работает",
    "termsSection3Text": "OmniRoute действует как промежуточный прокси. Вызовы API, отправленные в OmniRoute, преобразуются и пересылаются настроенным вами поставщикам искусственного интеллекта. OmniRoute не изменяет содержимое ваших запросов или ответов за пределами необходимой трансляции протокола.",
    "termsSection4Title": "4. Обработка данных",
    "termsDataStoredLocally": "Все данные хранятся локально на вашем компьютере в базе данных SQLite.",
    "termsNoTransmission": "OmniRoute не передает данные на внешние серверы, если вы явно не включили функции облачной синхронизации.",
    "termsDataLocationText": "Журналы использования, ключи API и конфигурация хранятся в",
    "termsSection5Title": "5. Отказ от ответственности",
    "termsSection5Text": "OmniRoute предоставляется «как есть» без каких-либо гарантий. Мы не несем ответственности за любые расходы, понесенные в результате использования API, перебоев в обслуживании или потери данных. Всегда сохраняйте резервные копии вашей конфигурации.",
    "termsSection6Title": "6. Открытый исходный код",
    "termsSection6Text": "OmniRoute — это программное обеспечение с открытым исходным кодом. Вы можете свободно просматривать, изменять и распространять его в соответствии с условиями лицензии."
  },
  "endpoints": {
    "tabProxy": "Endpoint Proxy",
    "tabApiEndpoints": "API-эндпоинты",
    "apiEndpointsTitle": "API-эндпоинты",
    "apiEndpointsDescription": "Бэкенд API-эндпоинты, доступные для использования другими приложениями и сервисами.",
    "comingSoon": "Скоро",
    "plannedFeatures": "Планируемые функции",
    "featureRestApi": "Каталог REST API с интерактивной документацией",
    "featureWebhooks": "Настройка вебхуков и подписки на события",
    "featureSwagger": "Автоматическая генерация спецификаций OpenAPI / Swagger",
    "featureAuth": "Управление API-ключами и OAuth-областями для каждого эндпоинта"
  },
  "agents": {
    "title": "CLI Agents",
    "description": "Discover installed CLI agents on your system. Add custom agents for auto-detection.",
    "refresh": "Refresh",
    "installed": "Installed",
    "notFound": "Not Found",
    "builtIn": "Built-in",
    "custom": "Custom",
    "remove": "Remove",
    "addCustomAgent": "Add Custom Agent",
    "addCustomAgentDesc": "Register any CLI tool for detection. It will be scanned automatically on refresh.",
    "agentName": "Agent Name",
    "binaryName": "Binary Name",
    "versionCommand": "Version Command",
    "spawnArgs": "Spawn Args",
    "addAgent": "Add Agent"
  },
  "autoCombo": {
    "title": "Auto-Combo Engine",
    "statusNormal": "Normal",
    "statusIncident": "Incident Mode",
    "modePack": "Mode Pack",
    "providerScores": "Provider Scores",
    "noAutoCombo": "No auto-combo configured.",
    "excludedProviders": "Excluded Providers",
    "noExclusions": "No providers currently excluded.",
    "factorQuota": "Quota",
    "factorHealth": "Health",
    "factorCost": "Cost",
    "factorLatency": "Latency",
    "factorTaskFit": "Task Fit",
    "factorStability": "Stability",
    "factorTierPriority": "Tier Priority",
    "factorTierPriorityDesc": "Prefers accounts with higher quota tiers (Ultra/Pro over Free)",
    "scoreFactorBreakdown": "Scoring Factors",
    "modePackShipFast": "Ship Fast",
    "modePackCostSaver": "Cost Saver",
    "modePackQualityFirst": "Quality First",
    "modePackOfflineFriendly": "Offline Friendly"
  }
}
