Files
cortiq-gateway/web/js/i18n/ru.js
T

423 lines
30 KiB
JavaScript
Vendored
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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": "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": "Запросов ещё нет. Попробуйте 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": "недоступен",
"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.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": "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.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.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)",
};