// Russian — ru. Keys must match en.js exactly; missing keys fall back to English. export default { // brand / common "brand.sub": "Шлюз", "common.loading": "Загрузка…", "common.save": "Сохранить", "common.saving": "Сохранение…", "common.cancel": "Отмена", "common.add": "Добавить", "common.edit": "Изменить", "common.delete": "Удалить", "common.close": "Закрыть", "common.test": "Тест", "common.copy": "Копировать", "common.copied": "Скопировано", "common.confirm": "Подтвердить", "common.none": "нет", "common.saved": "Сохранено", "common.error": "Ошибка", "common.ok": "OK", "common.refresh": "Обновить", "common.actions": "Действия", "common.optional": "необязательно", "common.search": "Поиск", "common.all": "все", // nav "nav.dashboard": "Дашборд", "nav.models": "Модели", "nav.routing": "Роутинг", "nav.protocols": "Протоколы", "nav.keys": "API-ключи", "nav.playground": "Playground", "nav.settings": "Настройки", "nav.foot": "Шлюз · v{v}", // topbar / status "status.router": "Роутер", "status.gateway": "Шлюз", "status.online": "в сети", "status.offline": "недоступен", "status.checking": "проверка…", "theme.toggle": "Тема", "logout": "Выйти", // login "login.title": "allaigate Gateway", "login.subtitle": "Введите токен администратора для управления этим шлюзом.", "login.token": "Токен администратора", "login.tokenPlaceholder": "вставьте токен", "login.submit": "Войти в консоль", "login.hint": "Токен печатается в логе шлюза при запуске или задаётся через [admin].token_env.", "login.failed": "Неверный токен администратора.", // dashboard "dash.title": "Дашборд", "dash.subtitle": "Трафик в реальном времени, расходы и аналитика роутинга по пулу моделей.", "dash.range": "Период", "dash.range.1h": "1ч", "dash.range.24h": "24ч", "dash.range.7d": "7д", "dash.kpi.requests": "Запросы", "dash.kpi.tokens": "Токены", "dash.kpi.cost": "Стоимость", "dash.kpi.latency": "Ср. задержка", "dash.kpi.success": "Успешность", "dash.kpi.failovers": "Переключения", "dash.series.title": "Запросы по времени", "dash.series.cost": "Расходы по времени", "dash.series.empty": "Трафика за этот период нет.", "dash.breakdown.title": "Разбивка", "dash.groupby.model": "по модели", "dash.groupby.tier": "по уровню", "dash.groupby.label": "по задаче", "dash.groupby.account": "по аккаунту", "dash.recent.title": "Последние запросы", "dash.recent.empty": "Запросов ещё нет. Попробуйте Playground.", "dash.col.time": "Время", "dash.col.model": "Модель", "dash.col.tier": "Уровень", "dash.col.task": "Задача", "dash.col.tokens": "Токены", "dash.col.cost": "Стоимость", "dash.col.latency": "Задержка", "dash.col.outcome": "Результат", "dash.col.requests": "Запросы", "dash.col.errors": "Ошибки", "dash.health.title": "Состояние", "dash.health.reachable": "доступен", "dash.health.unreachable": "недоступен", // models "models.title": "Модели", "models.subtitle": "Пул моделей — сочетайте дешёвые локальные модели с облачными API.", "models.add": "Добавить модель", "models.empty": "Моделей нет. Добавьте первую модель.", "models.col.id": "ID", "models.col.provider": "Провайдер", "models.col.model": "Модель", "models.col.tier": "Уровень цены", "models.col.key": "Ключ", "models.col.caps": "Возможности", "models.col.price": "Цена (вх/исх)", "models.probe": "Проверить", "models.probe.ok": "Доступна ({ms} мс)", "models.probe.fail": "Ошибка: {err}", "models.form.addTitle": "Добавить модель", "models.form.editTitle": "Редактировать модель", "models.form.id": "ID", "models.form.idHint": "Уникальный ID для роутинга, например local-qwen", "models.form.provider": "Провайдер", "models.form.baseUrl": "Base URL", "models.form.model": "Имя модели", "models.form.kind": "Тип", "models.form.costTier": "Уровень цены", "models.form.priceIn": "Цена вх. ($/1M)", "models.form.priceOut": "Цена исх. ($/1M)", "models.form.apiKeyEnv": "Имя env-переменной с ключом", "models.form.apiKeyEnvHint": "Имя переменной окружения или секрета с ключом провайдера.", "models.form.caps": "Возможности", "models.form.secret": "Значение секрета", "models.form.secretStored": "сохранён", "models.form.secretEnv": "из env", "models.form.secretMissing": "не задан", "models.form.secretPlaceholder": "задать или заменить ключ (только запись)", "models.deleteConfirm": "Удалить модель \"{id}\"?", // routing "routing.title": "Роутинг", "routing.subtitle": "Сопоставьте уровни сложности с упорядоченным списком моделей (приоритет = fallback).", "routing.default": "Модель по умолчанию", "routing.defaultHint": "Используется, если роутер недоступен.", "routing.tiers": "Уровни", "routing.tierHint": "Перетащите чипы для изменения порядка; первый — предпочтительный, остальные — резервные.", "routing.addModel": "+ добавить", "routing.addTier": "Добавить уровень", "routing.tierName": "Название уровня", "routing.policy": "Политика", "routing.policy.mode": "Режим", "routing.policy.fixed": "Фиксированная таблица", "routing.policy.costAware": "С учётом стоимости", "routing.policy.maxCost": "Макс. стоимость запроса ($)", "routing.policy.minClass": "Мин. класс на уровень", "routing.empty": "Моделей нет — сначала добавьте модели.", // protocols "protocols.title": "Протоколы", "protocols.subtitle": "Включайте только нужные входящие API. Переключатели применяются мгновенно.", "protocols.implemented": "реализован", "protocols.planned": "планируется", "protocols.openai_chat": "OpenAI Chat Completions", "protocols.openai_chat.d": "POST /v1/chat/completions — работает с OpenAI SDK, LangChain, crewAI.", "protocols.openai_completions": "OpenAI Completions (устаревший)", "protocols.openai_completions.d": "POST /v1/completions — устаревшие интеграции.", "protocols.openai_embeddings": "OpenAI Embeddings", "protocols.openai_embeddings.d": "POST /v1/embeddings — RAG-пайплайны.", "protocols.openai_models": "OpenAI Models", "protocols.openai_models.d": "GET /v1/models — автообнаружение клиентами.", "protocols.anthropic_messages": "Anthropic Messages", "protocols.anthropic_messages.d": "POST /v1/messages — Claude-нативные агенты.", "protocols.mcp": "MCP (Model Context Protocol)", "protocols.mcp.d": "JSON-RPC / SSE — MCP-нативные оркестраторы.", "protocols.native_passthrough": "Нативный проброс", "protocols.native_passthrough.d": "POST /route — прямой доступ к решению роутера.", // keys "keys.title": "API-ключи", "keys.subtitle": "Виртуальные ключи шлюза для агентов. Ключи провайдеров не покидают шлюз.", "keys.add": "Новый ключ", "keys.empty": "Ключей нет — шлюз в открытом режиме (без аутентификации).", "keys.openMode": "Открытый режим: любой запрос принимается (ключ не нужен).", "keys.col.key": "Ключ", "keys.col.account": "Аккаунт", "keys.col.rate": "Лимит / мин", "keys.col.models": "Разрешённые модели", "keys.form.title": "Новый API-ключ", "keys.form.account": "Аккаунт", "keys.form.rate": "Лимит запросов / мин", "keys.form.allow": "Разрешённые модели", "keys.form.allowHint": "Оставьте пустым, чтобы разрешить все модели.", "keys.form.custom": "Произвольный ключ (необязательно)", "keys.form.customHint": "Оставьте пустым для автогенерации sk-gw-…", "keys.created": "Ключ создан — скопируйте его сейчас, он больше не отобразится:", "keys.revoke": "Отозвать", "keys.revokeConfirm": "Отозвать этот ключ?", "keys.allowAll": "все", // playground "pg.title": "Playground", "pg.subtitle": "Отправьте запрос через активный пайплайн и изучите решение роутера.", "pg.system": "Системный промпт", "pg.systemPlaceholder": "необязательное системное сообщение", "pg.prompt": "Промпт", "pg.promptPlaceholder": "Задайте вопрос…", "pg.mode": "Режим", "pg.mode.auto": "Авто (роутинг)", "pg.mode.pinned": "Фиксированная модель", "pg.profile": "Профиль", "pg.model": "Модель", "pg.temp": "Температура", "pg.maxTokens": "Макс. токены", "pg.send": "Отправить", "pg.stream": "Стриминг", "pg.sending": "Отправка…", "pg.answer": "Ответ", "pg.empty": "Ответ и решение роутера появятся здесь.", "pg.decision": "Решение роутера", "pg.task": "Задача", "pg.tier": "Уровень", "pg.score": "Сложность", "pg.selected": "Выбранная модель", "pg.source": "Источник маршрута", "pg.cost": "Стоимость", "pg.latency": "Задержка", "pg.tokens": "Токены (вх/исх)", "pg.failover": "Failover", "pg.error": "Ошибка запроса", // settings "settings.title": "Настройки", "settings.subtitle": "Подключение к шлюзу, входные данные роутинга, надёжность и наблюдаемость.", "settings.router": "Подключение к роутеру", "settings.router.url": "URL роутера", "settings.router.keyEnv": "Имя env-переменной с ключом роутера", "settings.router.timeout": "Таймаут (мс)", "settings.router.verifyTls": "Проверять TLS-сертификат", "settings.router.taxonomy": "ID таксономии", "settings.route": "Входные данные роутинга", "settings.route.strategy": "Стратегия текста", "settings.route.maxChars": "Макс. символов", "settings.route.cacheTtl": "TTL кэша", "settings.route.profile": "Профиль по умолчанию", "settings.breaker": "Автоматический выключатель", "settings.breaker.threshold": "Порог ошибок", "settings.breaker.cooldown": "Время восстановления", "settings.log": "Логирование", "settings.log.level": "Уровень логов", "settings.log.bodies": "Логировать тела сообщений (приватность отключена)", "settings.telemetry": "Телеметрия", "settings.telemetry.metrics": "Включить Prometheus /metrics", "settings.cortiq": "Метаданные ответа", "settings.cortiq.echo": "Включать блок роутинга cortiq в ответы", "settings.stats": "Статистика", "settings.stats.enabled": "Записывать статистику запросов", "settings.stats.file": "Файл статистики (JSONL)", "settings.stats.retention": "Срок хранения", "settings.listen": "Адрес прослушивания", "settings.export": "Экспорт конфигурации", "settings.import": "Импорт конфигурации", "settings.needsRestart": "Сохранено. Некоторые изменения (адрес прослушивания) требуют перезапуска.", // toasts / misc "toast.saved": "Изменения сохранены", "toast.deleted": "Удалено", "toast.probing": "Проверка…", "toast.imported": "Конфигурация импортирована", };