// 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.import": "Импорт модели", "nav.routing": "Роутинг", "nav.protocols": "Протоколы", "nav.keys": "API-ключи", "nav.playground": "Песочница", "nav.settings": "Настройки", "nav.foot": "Шлюз · v{v}", "nav.billing": "Ключ роутера и оплата", // topbar / status "status.router": "Роутер", "status.gateway": "Шлюз", "status.online": "в сети", "status.offline": "недоступен", "status.checking": "проверка…", "status.noKey": "нет ключа", "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.clear": "Очистить логи", "dash.clearConfirm": "Очистить всю статистику и логи? Отменить нельзя.", "dash.cleared": "Логи очищены", "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": "Запросов ещё нет. Попробуйте Песочницу.", "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": "недоступен", "dash.health.getKey": "Получить ключ роутера", // 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}\"?", "models.form.idOrModel": "Укажите id или имя модели", "models.form.apiKey": "API-ключ", "models.form.apiKeyPlaceholder": "вставьте API-ключ", "models.form.apiKeyNotNeeded": "не нужен (локальный сервер)", "models.form.apiKeyHint": "Хранится безопасно на шлюзе; больше не показывается.", "models.form.keyStored": "Ключ сохранён — оставьте пустым, чтобы не менять, или вставьте новый.", "models.form.keyFromEnv": "Используется ключ из переменной окружения.", "models.form.paramsTitle": "Параметры генерации, O(1) и режим размышления", "models.form.temperature": "Температура", "models.form.temperatureHint": "Температура генерации (0.0 — точные факты, 1.0+ — творчество).", "models.form.topP": "Top-P (Nucleus Sampling)", "models.form.topPHint": "Порог сэмплирования токенов (0.0 .. 1.0).", "models.form.maxTokens": "Макс. токенов (Max Tokens)", "models.form.maxTokensHint": "Максимальное количество генерируемых токенов.", "models.form.thinkBudget": "Режим размышления / Think Budget", "models.form.thinkBudgetHint": "Бюджет токенов мыслей (0 = выключен, N > 0 = лимит рассуждений).", "models.form.systemPrompt": "Системный промпт по умолчанию", "models.form.systemPromptHint": "Автоматически подставляется, если запрос не содержит системное сообщение.", "models.form.systemPromptPlaceholder": "Вы — полезный ассистент...", "models.form.testKey": "Проверить и загрузить модели", "models.form.testing": "проверка…", "models.form.foundModels": "загружено моделей: {n}", "models.form.modelPlaceholder": "введите для поиска…", "models.form.modelHint": "Нажмите «Проверить и загрузить модели», чтобы подтянуть список по ключу, затем выберите.", "models.managed": "управляемая", "models.managedHint": "Предоставляется CMF-сервером (Настройки → Локальные модели). Настраивается там.", // 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": "Песочница", "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.enabled": "Использовать роутер (выкл = только локальные модели)", "settings.cmf": "Локальные модели (CMF)", "settings.cmf.localOnly": "Использовать только локальные модели", "settings.cmf.manage": "Запускать локальный сервер моделей", "settings.cmf.autoInstall": "Автоустановка cortiq (crates.io)", "settings.cmf.autoUpdate": "Автообновление cortiq", "settings.cmf.model": "Путь к локальной .cmf-модели", "settings.cmf.port": "Порт локального сервера", "settings.cmf.modelId": "ID модели в пуле", "settings.cmf.note": "Обслуживает локальный .cmf через cortiq (github.com/infosave2007/cmf). Работает даже когда роутер недоступен.", "settings.cmf.threads": "Рабочие потоки", "settings.cmf.gpu": "Использовать GPU (Metal / wgpu)", "settings.cmf.speedNote": "Потоки распараллеливают декод-матвеки (~×3; 0 = по умолчанию рантайма). GPU-оффлоад помогает в основном на prefill длинных промптов — декод упирается в пропускную способность памяти, поэтому на Apple Silicon почти нейтрален.", "settings.cmf.pick": "выберите модель", "settings.cmf.models": "Локальные модели", "settings.cmf.modelsHelp": "Каждая строка — отдельная модель: шлюз поднимает свой cortiq serve на своём порту и регистрирует её в пуле. Добавляйте столько, сколько есть .cmf-файлов и свободных портов.", "settings.cmf.rowHint": "id · файл .cmf · порт · потоки · GPU. Изменения применяются после перезапуска; удаление строки останавливает сервер.", "settings.cmf.addServer": "+ Добавить модель", "settings.cmf.checkPort": "Проверить порт", "settings.cmf.portFree": "порт свободен", "settings.cmf.portBusy": "порт занят", "settings.cmf.useSuggested": "занять {port}", "settings.cmf.serving": "работает: {model} на :{port}", "settings.cmf.intro": "Запускайте модели локально движком cortiq — работает даже офлайн или когда роутер недоступен.", "settings.cmf.runtime": "Среда cortiq", "settings.cmf.runtimeHelp": "Инструмент командной строки `cortiq`, который загружает и запускает .cmf-модели. Установите один раз перед запуском локального сервера.", "settings.cmf.install": "Установить cortiq", "settings.cmf.reinstall": "Переустановить / обновить", "settings.cmf.installing": "устанавливается… (компилируется, пара минут)", "settings.cmf.installedOk": "cortiq установлен", "settings.cmf.notInstalled": "не установлен", "settings.cmf.addModel": "Добавить модель", "settings.cmf.addModelHelp": "Модели скачиваются и конвертируются во вкладке Импорт (HuggingFace → .cmf). Затем укажите путь к .cmf ниже.", "settings.cmf.importNote": "Ещё нет модели? Импортируйте:", "settings.cmf.importLink": "Открыть Импорт", "settings.cmf.modelHelp": "Путь к .cmf-файлу для запуска (напр. models/qwen.cmf), создаётся во вкладке Импорт. Несколько моделей под разные задачи? Импортируйте их и меняйте этот путь.", "settings.cmf.portHelp": "TCP-порт локального сервера моделей (по умолчанию 8081). Меняйте, только если конфликтует с другим сервисом.", "settings.cmf.threadsHelp": "Сколько ядер CPU использовать для генерации. Больше = быстрее (~×3 против 1 ядра); 0 — на усмотрение рантайма.", "settings.cmf.gpuHelp": "Выгрузить матричные операции на GPU (Metal/wgpu). На Apple Silicon ускоряет в основном длинные промпты — декод упирается в пропускную способность памяти.", "settings.cmf.localOnlyHelp": "Направлять все запросы в локальную модель, игнорируя роутер и облачные провайдеры.", "settings.cmf.manageHelp": "Шлюз запускает `cortiq serve` для .cmf ниже при старте и маршрутизирует в него. Нужен установленный cortiq (шаг 1). Применяется после перезапуска.", "settings.cmf.autoInstallHelp": "Если cortiq не найден при старте — установить автоматически с crates.io.", "settings.cmf.autoUpdateHelp": "При старте обновлять cortiq до новейшей версии, когда есть новее.", "settings.router.enabledHelp": "Использовать cortiq-router для классификации запроса (тип задачи + сложность) и выбора модели. Выкл = только локальная таблица маршрутизации.", "settings.router.verifyTlsHelp": "Проверять TLS-сертификат роутера. Выключайте только для самоподписанного / привязанного к IP сертификата.", "settings.telemetry.metricsHelp": "Отдавать метрики Prometheus по GET /metrics.", "settings.cortiq.echoHelp": "Добавлять поле `cortiq` (задача, модель, стоимость) в тело каждого ответа. Заголовки ответа шлются всегда.", "settings.stats.enabledHelp": "Записывать недавние запросы для дашборда и графиков.", "settings.cache.enabledHelp": "Семантический кэш: возвращать сохранённый ответ, когда новый промпт очень похож на прошлый, пропуская вызов модели. Нужна embedding-модель в пуле.", "settings.log.bodiesHelp": "Логировать полные тела запросов/ответов. По умолчанию выкл ради приватности.", "settings.router.taxonomy": "ID таксономии", "settings.router.getKey": "Получить или пополнить ключ роутера:", "settings.router.secret": "Ключ роутера (значение)", "settings.router.saveKey": "Сохранить ключ", "settings.router.keySaved": "Ключ роутера сохранён", "settings.router.keyEmpty": "Сначала вставьте ключ", "settings.router.secretHelp": "Вставьте ключ из письма с api.allaigate.com и нажмите «Сохранить ключ». Это НЕ ключ из раздела «Ключи» — те выдаются клиентам для доступа к вашему шлюзу.", "settings.router.keyStoredMask": "•••••••••••• — ключ сохранён (вставьте снова, чтобы заменить)", "settings.router.test": "Проверить роутер", "router.probe.ok": "Роутер работает ({ms} мс)", "router.probe.noKey": "Ключ роутера не задан", "router.probe.auth": "Ключ отклонён — недействителен или отозван", "router.probe.payment": "Требуется оплата — тариф истёк или квота исчерпана", "router.probe.quota": "Превышен лимит запросов", "router.probe.timeout": "Роутер не ответил вовремя", "router.probe.unreachable": "Роутер недоступен", "router.probe.error": "Ошибка роутера", "router.usage": "Использование", "settings.route": "Входные данные роутинга", "settings.route.strategy": "Стратегия текста", "settings.route.maxChars": "Макс. символов", "settings.route.cacheTtl": "TTL кэша", "settings.route.profile": "Профиль по умолчанию", "settings.route.strategyHelp": "Какой текст отправляется роутеру для классификации: last_user — только последнее сообщение пользователя; last_user_plus_system — последнее сообщение + системный промпт; concat_all — вся переписка.", "settings.route.maxCharsHelp": "Максимум символов этого текста, отправляемого роутеру (длиннее — обрезается). Больше = точнее классификация, но медленнее/дороже вызовы роутера.", "settings.route.cacheTtlHelp": "Сколько кэшируется решение роутинга для одинакового запроса, прежде чем роутер спрашивается снова (напр. 60s, 5m).", "settings.route.profileHelp": "Профиль роутинга по умолчанию, если запрос его не задаёт: cost-saver (дешевле), balanced (баланс) или quality-first (качество). Влияет на выбор модели роутером.", "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": "Конфигурация импортирована", "dash.cache": "Семантический кэш", "dash.cache.hitRate": "Попаданий", "dash.cache.hits": "Попадания", "dash.cache.saved": "Сэкономлено", "dash.cache.disabled": "Семантический кэш выключен — включите в Настройках.", "settings.cache": "Семантический кэш", "settings.cache.enabled": "Включить семантический кэш", "settings.cache.threshold": "Порог сходства", "settings.cache.ttl": "TTL записи", "settings.cache.embed": "Модель эмбеддингов", "settings.cache.note": "Настройки кэша применяются после перезапуска.", // импорт (HuggingFace → CMF) "import.subtitle": "Найдите модель на HuggingFace, сконвертируйте в локальный .cmf и подключите.", "import.searchPlaceholder": "Поиск моделей на HuggingFace (напр. qwen3, llama)…", "import.searching": "Ищу…", "import.noResults": "Модели не найдены.", "import.configure": "Настройка конвертации", "import.outName": "Имя файла", "import.outNameHint": "Имя .cmf (буквы, цифры, - и _).", "import.quant": "Квантизация", "import.convert": "Сконвертировать и загрузить", "import.converting": "Конвертация", "import.started": "Конвертация запущена", "import.failed": "Конвертация не удалась — смотрите лог.", "import.register": "Подключить как локальную модель", "import.registered": "Подключено как '{id}'. Запустите cortiq-server для обслуживания.", "import.jobs": "Загрузки / Конвертации", "import.cancel": "Отменить", "import.cancelling": "Отмена — удаляю недописанный файл…", "import.delete": "Удалить", "import.deleteConfirm": "Удалить эту модель и сконвертированный .cmf-файл с диска?", "import.deleted": "Удалено вместе с файлами", "import.state.running": "идёт", "import.state.done": "готово", "import.state.error": "ошибка", "import.state.cancelled": "отменено", "import.featuredTitle": "Рекомендуемые готовые .cmf модели", "import.featuredSub": "Готовые .cmf модели из аккаунта infosave на HuggingFace — список читается вживую, новые модели появляются здесь сами.", "import.readyCmfBadge": "Готовая .cmf", "import.directDownload": "Скачать", "import.q.q8_2f": "8-бит двухполевой (𝒲×θ) — рекомендуется: лучшее качество/размер.", "import.q.q8_row": "8-бит построчно — просто, надёжно.", "import.q.q4": "4-бит блочно — компактнее, ниже качество.", "import.q.q4_tiled": "4-бит тайловый (Q4_TILED) — х1.66 быстрее на Metal GPU.", "import.q.vbit": "Переменная 3–8 бит — per-expert бюджеты.", "import.q.q1t": "1.58-бит тернарный (Q1T) — BitNet b1.58 с оутлайерами.", "import.q.q1s": "1-бит спарс (Q1S) — 1-бит база с голографическими оутлайерами.", "import.q.q1p": "1-бит PTQ (Q1P) — 1-бит с переносом ошибки (error diffusion).", "import.q.q1": "1-бит (Q1) — чистый бинарный формат.", "import.q.f16": "16-бит — без квантования.", "import.q.f32": "32-бит — полная точность (большой файл).", "import.adv.title": "Расширенные настройки", "import.adv.auto": "авто", "import.adv.linearCore": "Линейное ядро", "import.adv.linearHint": "Как переносятся/сворачиваются линейные слои внимания.", "import.adv.nphase": "vmf_phase фаз/голову", "import.adv.vbitShape": "Форма бюджета VBIT", "import.adv.meanBits": "VBIT средних бит", "import.adv.shard": "Шард макс (ГБ)", "import.adv.noShard": "без шардинга", "import.adv.skipMtp": "пропустить MTP-голову", "import.adv.o1": "O(1)-внимание", "import.adv.o1Hint": "Потоковое внимание с постоянной памятью: KV-кэш освобождается после prefill, длинный контекст не раздувает память. Веса не меняются — записывается лишь подсказка на загрузку; вернуться можно всегда (запуск с --o1 off). Проверено на Qwen3-0.6B: все слои ≈ ×1.18 перплексии.", "import.adv.o1Off": "выкл — точное внимание (по умолчанию)", "import.adv.o1All": "all — конвертировать все softmax-слои", "import.adv.o1Deep": "deep N — только N самых глубоких слоёв", "import.adv.o1Custom": "вручную — явный список слоёв", "import.adv.o1DeepN": "N глубоких слоёв", "import.adv.o1Layers": "Слои (через запятую)", "import.adv.o1mHint": "число опорных точек (по умолчанию 32)", "import.adv.o1windowHint": "ширина точного окна (по умолчанию 128)", "import.adv.o1sinkHint": "постоянные точные sink-ключи (по умолчанию 4)", // онбординг (первый запуск) "onboarding.title": "Первоначальная настройка", "onboarding.welcome": "Добро пожаловать в Cortiq Gateway", "onboarding.welcomeSub": "Выберите язык — его можно сменить в шапке в любой момент.", "onboarding.next": "Далее", "onboarding.back": "Назад", "onboarding.skip": "Пропустить", "onboarding.skipSetup": "Пропустить", "onboarding.finish": "Завершить", "onboarding.featuredTitle": "Готовые модели в один клик", "onboarding.featuredSub": "Это уже сконвертированные .cmf модели от infosave на HuggingFace — просто Скачать, без конвертации. Выберите одну или несколько для мгновенного старта.", "onboarding.download": "Скачать", "onboarding.hfTitle": "Любая модель с HuggingFace — автоконвертация", "onboarding.hfSub": "Найдите любую модель, выберите квантизацию — мы автоматически сконвертируем её в .cmf. Никаких ручных правок конфига.", "onboarding.noJobs": "Пока нет загрузок.", "onboarding.doneTitle": "Готово", "onboarding.doneSub": "Скачанные модели зарегистрируются автоматически. Добавить ещё можно во вкладке Импорт или Модели.", "onboarding.doneHint": "Кнопка «Завершить» подключит все скачанные модели как локальные, поднимет для них .cmf сервер и настроит роутинг. Всё это потом можно изменить во вкладке Модели.", "onboarding.willRegister": "Будут подключены как локальные модели", "onboarding.nothingToRegister": "Завершённых загрузок пока нет — подключать нечего. Вернитесь на шаг назад и выберите модель.", "onboarding.registeredN": "Подключено моделей: {n} — {ids}", "onboarding.runtimeMissing": "Среда cortiq не установлена — установите её в Настройки → Локальные модели, чтобы запускать эти модели.", "onboarding.downloaded": "скачана", "onboarding.update": "Обновить", "onboarding.deleteFile": "Удалить файл .cmf с диска", "onboarding.confirmDelete": "Удалить «{id}»? Файл .cmf будет удалён с диска.", "onboarding.unregistered": "Также отключено из моделей: {ids}", // playground: media generation + streaming metrics "pg.tab.chat": "Чат", "pg.tab.image": "Изображение", "pg.tab.video": "Видео", "pg.generate": "Сгенерировать", "pg.generating": "Генерация…", "pg.genFailed": "Генерация не удалась — смотрите лог.", "pg.result": "Результат", "pg.genMetrics": "Метрики генерации", "pg.imagePromptPlaceholder": "рыжая лиса в снегу на закате, фотореалистично, детальный мех", "pg.videoPromptPlaceholder": "корги в поварском колпаке подбрасывает блин, шипение сковороды и весёлый лай", "pg.imageEmpty": "Сгенерированное изображение появится здесь.", "pg.videoEmpty": "Сгенерированный ролик (со звуком) появится здесь.", "pg.width": "Ширина", "pg.height": "Высота", "pg.steps": "Шаги", "pg.seed": "Seed", "pg.randomSeed": "Случайный seed", "pg.cfgHint": "Сила guidance; ≤ 1 отключает CFG и вдвое ускоряет генерацию.", "pg.frames": "Кадры", "pg.framesHint": "При 24 fps; округляется до сетки модели.", "pg.quality": "Качество JPEG", "pg.videoSizeHint": "Кратно 32; обученная короткая сторона — 768.", "pg.videoStepsHint": "Turbo LoRA обучена на 4 шага.", "pg.firstFrame": "Первый кадр (необязательно)", "pg.lastFrame": "Последний кадр (необязательно)", "pg.keyframeHint": "Превращает запуск в keyframe-to-video.", "pg.resolution": "Разрешение", "pg.genTime": "Время генерации", "pg.timePerStep": "На шаг", "pg.timePerFrame": "На кадр", "pg.fileSize": "Размер файла", "pg.duration": "Длительность", "pg.play": "Играть", "pg.noMediaModels": "Локальной модели ({kind}) ещё нет. Скачайте её (например, из коллекции infosave) во вкладке Импорт:", "pg.tokSpeed": "Скорость", "pg.ttft": "Первый токен", // ops: logs, system, notices, gallery, chat, snippets, bench "nav.logs": "Логи", "logs.subtitle": "Последние записи журнала шлюза — то, что показал бы терминал.", "logs.filterPlaceholder": "фильтр…", "logs.pause": "Пауза", "logs.resume": "Продолжить", "logs.empty": "Ничего не найдено.", "notice.openAdmin": "Панель управления открыта без токена и доступна с других машин. Задайте токен, если эта машина не приватная.", "notice.update": "Доступно обновление: v{v}.", "dash.sys.title": "Система", "dash.sys.cores": "ядер", "dash.sys.disk": "Диск (модели)", "dash.sys.free": "свободно", "dash.sys.gateway": "шлюз", "fit.disk": "не хватит места", "fit.diskTitle": "Загрузка больше свободного места на диске с моделями.", "fit.ram": "может не влезть в RAM", "fit.ramTitle": "Модель сравнима с объёмом RAM этой машины или больше — может не запуститься.", "pg.eta": "осталось", "pg.min": "мин", "pg.queued": "В очереди — позиция {n}. Стартует, как только закончится текущая генерация.", "pg.gallery": "Последние генерации", "pg.galDeleteConfirm": "Удалить эту генерацию и её файлы?", "pg.clearChat": "Очистить", "keys.snip.title": "Подключите ваше приложение", "keys.snip.hint": "Вставьте один из примеров в свой проект — заменить нужно только плейсхолдер ключа.", "keys.snip.withKey": "В примерах ниже уже подставлен только что созданный ключ.", "keys.snip.openMode": "API-ключи не настроены — шлюз принимает любое значение ключа.", "keys.snip.keyPh": "ваш API-ключ", "settings.restart": "Перезапустить шлюз", "settings.restartConfirm": "Перезапустить шлюз? Текущие запросы оборвутся; серверы локальных моделей тоже перезапустятся.", "settings.restarting": "Перезапуск — страница обновится, когда шлюз поднимется…", "bench.title": "Скорость локальных моделей", "bench.hint": "Запускает `cortiq bench` на этой машине — реальные tok/s, по одной модели за раз.", "bench.run": "Замерить", "bench.running": "замер…", "bench.failed": "ошибка", "bench.none": "Локальных чат-моделей .cmf пока нет.", // task-based routing "task.chitchat": "Светская беседа", "task.code": "Код", "task.creative-writing": "Творческие тексты", "task.extraction": "Извлечение данных", "task.math": "Математика", "task.qa": "Вопросы и ответы", "task.summarization": "Суммаризация", "task.translation": "Перевод", "routing.tasks.title": "Распределение по задачам", "routing.tasks.hint": "Модели правила идут первыми для своей задачи; цепочка по сложности остаётся резервом. Пусто = только по сложности.", "routing.tasks.inherit": "по сложности (без правила)", "routing.tasks.share": "{p}% запросов (7д)", "routing.tasks.fromRouter": "метки получены с роутера", "routing.tasks.builtin": "роутер недоступен — встроенный набор меток", "routing.tasks.addCustom": "Добавить задачу", "routing.tasks.addPlaceholder": "своя метка…", // benchmark view "nav.benchmark": "Бенчмарк", "bm.title": "Бенчмарк", "bm.subtitle": "Проверки качества и скорости через живой пайплайн: ответы сверяются по ключевым словам, ловится зацикливание, замеряются tok/s и время первого токена.", "bm.models": "Какие модели тестировать", "bm.quickMode": "Быстрый тест", "bm.quickHint": "Короткое подмножество с краткими ответами — около минуты на локальную модель.", "bm.suiteInfo": "Встроенный набор: {q} быстрых / {f} полных тестов, плюс ваши собственные.", "bm.run": "Запустить", "bm.pickModel": "Выберите хотя бы одну модель.", "bm.testOf": "тест {i} из {n}", "bm.results": "Результаты", "bm.quick": "быстрый", "bm.test": "Тест", "bm.cellHint": "Клик по ячейке — полный ответ модели.", "bm.history": "Прошлые прогоны (хранятся в этом браузере)", "bm.custom": "Свои тесты", "bm.customHint": "Промпт + ключевые слова через запятую, которые должны быть в ответе (| — синонимы). Хранятся в этом браузере.", "bm.promptPh": "промпт…", "bm.checkPh": "ключевые слова через запятую", "bm.addTest": "Добавить тест", "bm.emptyAnswer": "пустой ответ", "bm.loopDetected": "зацикливание", // benchmark: routing mode, cost, live "bm.mode.routing": "Умный роутинг", "bm.mode.models": "Отдельные модели", "bm.mode.routingDesc": "Проверка главной фишки продукта: каждый тест идёт через cortiq-auto — видно, какую задачу распознал роутер, какую модель выбрал, совпало ли это с ожиданием и сколько это стоило.", "bm.mode.modelsDesc": "Тот же набор тестов, но закреплённый за выбранными моделями — сравнение их качества, скорости и стоимости напрямую, мимо роутера.", "bm.answersOk": "ответы верны", "bm.classAcc": "классификация задач", "bm.modelDist": "Запросы ушли в", "bm.expectedLbl": "ожидалось:", "bm.answer": "Ответ", "bm.liveRunning": "идёт…", "bm.spent": "потрачено", "bm.verdict": "🏁 Готово: ответы {p}, потрачено {s}", };