Files
cortiq-gateway/web/js/i18n/zh.js
T
infosave2007 15de36be3b feat: ops & UX batch — jobs survive restarts, logs/system in the console, media queue, gallery, chat, exact stream tokens
Fifteen changes aimed at the first day of real use:

- Import and media jobs persist to <data>/jobs-*.json and reload on start
  (running ones settle as errors); the Register button no longer vanishes
  because the gateway restarted.
- Docker ships the cortiq binary (built in the builder stage) — local .cmf
  chat models and image/video generation now work in containers, where
  auto-install never could (no cargo in the runtime image). libvulkan1 added
  for optional GPU offload.
- Open admin console on 0.0.0.0 without a token now warns in the log and
  shows a dismissible banner — the VPS footgun is at least labeled.
- "Restart gateway" button in Settings: stops managed model servers, spawns
  a fresh copy (bind retried while the port frees), Docker relies on the
  container restart policy instead.
- Dashboard "System" panel: CPU sparkline + load, RAM (with the gateway's
  own RSS), free disk at the models dir — sampled by sysinfo every 2 s.
- Featured model cards warn "not enough disk" / "may not fit in RAM" before
  the download, from the same live snapshot.
- Log viewer in the sidebar: a 500-line in-memory ring fed by a second
  ANSI-free tracing layer; filter, level, pause, copy.
- Update check: crates.io polled twice a day, the console shows an
  "update available" notice.
- Media generations queue up (with position shown) instead of being
  rejected; progress gained an honest ETA from measured throughput.
- Generation gallery under the image/video tabs: lazy PPM thumbnails,
  click to reopen with seed/steps, delete.
- Playground chat is a real dialogue now: history is resent, bubbles,
  Clear, Cmd/Ctrl+Enter.
- "Connect your app" snippets (curl / Python / JS) on the keys page, with
  the real key inlined right after creation.
- One-click benchmark on the Models page via `cortiq bench --json`.
- Config export now downloads the actual gateway.toml (comments intact);
  import accepts TOML (validated, hot-reloaded) and the legacy JSON.
- Streaming token counts are exact when the model server provides usage
  (cortiq-server patch, shipped separately); the gateway fallback now
  counts content chunks (1/token on cortiq) instead of chars/4.

Wizard's Finish lands on the Playground. 37 new strings in all 7 languages.
2026-08-07 17:07:48 +03:00

549 lines
28 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.
// 简体中文 — Simplified Chinese translation. Keys must match en.js exactly.
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": "确定",
"common.refresh": "刷新",
"common.actions": "操作",
"common.optional": "可选",
"common.search": "搜索",
"common.all": "全部",
// nav
"nav.dashboard": "仪表盘",
"nav.models": "模型",
"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.range": "时间范围",
"dash.range.1h": "1小时",
"dash.range.24h": "24小时",
"dash.range.7d": "7天",
"dash.kpi.requests": "请求数",
"dash.kpi.tokens": "Token 数",
"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": "Token",
"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} 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": "API 密钥环境变量名",
"models.form.apiKeyEnvHint": "持有该提供商密钥的环境变量或存储机密名称。",
"models.form.caps": "能力",
"models.form.secret": "密钥值",
"models.form.secretStored": "已存储",
"models.form.secretEnv": "来自环境变量",
"models.form.secretMissing": "未设置",
"models.form.secretPlaceholder": "设置或替换密钥(只写)",
"models.deleteConfirm": "删除模型 \"{id}\"?",
// routing
"routing.title": "路由",
"routing.subtitle": "将复杂度层级映射到有序模型列表(优先级 = 回退顺序)。",
"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(模型上下文协议)",
"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": "最大 Token 数",
"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": "Token(输入/输出)",
"pg.failover": "故障转移",
"pg.error": "请求失败",
// settings
"settings.title": "设置",
"settings.subtitle": "网关连接、路由输入、可靠性与可观测性。",
"settings.router": "路由器连接",
"settings.router.url": "路由器 URL",
"settings.router.keyEnv": "路由器密钥环境变量名",
"settings.router.timeout": "超时(ms)",
"settings.router.verifyTls": "验证 TLS 证书",
"settings.router.taxonomy": "分类体系 ID",
"settings.router.getKey": "获取或充值路由器密钥:",
"settings.router.secret": "路由器密钥(值)",
"settings.router.test": "测试路由器",
"router.probe.ok": "路由器正常({ms} 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.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": "缓存设置将在重启后生效。",
// ── translated from en.js (previously falling back to English) ──
// nav
"nav.import": "导入模型",
// dash
"dash.clear": "清空日志",
"dash.clearConfirm": "清空所有已记录的统计与日志?此操作无法撤销。",
"dash.cleared": "日志已清空",
// models
"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)、MTP、温度)",
"models.form.temperature": "温度",
"models.form.temperatureHint": "生成温度(0.0 = 确定性,1.0+ = 更有创造性)。",
"models.form.topP": "Top-P(核采样)",
"models.form.topPHint": "采样阈值(0.0 .. 1.0)。",
"models.form.maxTokens": "最大 token 数",
"models.form.maxTokensHint": "生成内容的最大 token 数。",
"models.form.thinkBudget": "思考模式 / 思考预算",
"models.form.thinkBudgetHint": "推理 token 预算(0 = 关闭,N > 0 = 推理 token 上限)。",
"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 服务器提供(设置 → 本地模型)。请在那里配置。",
// settings
"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": "通过 cortiq 提供本地 .cmf 服务(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": "用于加载和运行 .cmf 模型的命令行工具 `cortiq`。启动本地服务器前先安装一次。",
"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 倍);0 表示交给运行时决定。",
"settings.cmf.gpuHelp": "把矩阵运算卸载到 GPU(Metal/wgpu)。在 Apple Silicon 上主要加速长提示词 — 解码受内存带宽限制。",
"settings.cmf.localOnlyHelp": "把每个请求都发往本地模型,忽略路由器和所有云端供应商。",
"settings.cmf.manageHelp": "网关启动时会为下面的 .cmf 启动 `cortiq serve` 并把请求路由过去。需要已安装 cortiq(第 1 步)。重启后生效。",
"settings.cmf.autoInstallHelp": "如果启动时缺少 cortiq,自动从 crates.io 安装。",
"settings.cmf.autoUpdateHelp": "启动时如有更新版本,将 cortiq 升级到最新发布版。",
"settings.router.enabledHelp": "让 cortiq 路由器对每个请求分类(任务类型 + 复杂度)并挑选模型。关闭 = 仅使用本地路由表。",
"settings.router.verifyTlsHelp": "校验路由器的 TLS 证书。仅在使用自签名或绑定 IP 的证书时关闭。",
"settings.telemetry.metricsHelp": "在 GET /metrics 暴露 Prometheus 指标。",
"settings.cortiq.echoHelp": "在每个响应体中加入 `cortiq` 字段(任务、模型、成本)。响应头始终会发送。",
"settings.stats.enabledHelp": "记录最近的请求,为仪表盘和图表提供数据。",
"settings.cache.enabledHelp": "语义缓存:当新提示词与过去的某个非常相似时直接返回已保存的回答,跳过模型调用。需要池中有一个嵌入模型。",
"settings.log.bodiesHelp": "记录请求/响应的完整消息体。出于隐私考虑默认关闭。",
"settings.router.saveKey": "保存密钥",
"settings.router.keySaved": "路由器密钥已保存",
"settings.router.keyEmpty": "请先粘贴密钥",
"settings.router.secretHelp": "粘贴 api.allaigate.com 邮件中的密钥,然后点击“保存密钥”。这不是“API 密钥”页中的值 — 那些是给调用你网关的客户端用的。",
"settings.router.keyStoredMask": "•••••••••••• — 密钥已保存(再次粘贴可替换)",
"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(最好的模型)。会影响路由器挑选哪个模型。",
// import
"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": "来自 HuggingFace 上 infosave 账号的预转换 .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)— 在 Metal GPU 上快 1.66 倍。",
"import.q.vbit": "可变 3–8 位 — 按专家分配位宽预算。",
"import.q.q1t": "1.58 位三值(Q1T)— BitNet b1.58,带稀疏离群值。",
"import.q.q1s": "1 位稀疏(Q1S)— 1 位基底,带全息离群值。",
"import.q.q1p": "1 位 PTQ(Q1P)— 1 位,带误差扩散。",
"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": "分片上限(GB)",
"import.adv.noShard": "不分片",
"import.adv.skipMtp": "跳过 MTP 头",
"import.adv.o1": "O(1) 注意力",
"import.adv.o1Hint": "常量内存的流式注意力:prefill 之后释放 KV 缓存,因此长上下文不会持续增加内存。权重保持逐字节一致 — 只记录一个加载时的提示;随时可以切回(启动时加 --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": "landmark 预算(默认 32)",
"import.adv.o1windowHint": "精确窗口宽度(默认 128)",
"import.adv.o1sinkHint": "常驻精确 sink key 数(默认 4)",
// onboarding
"onboarding.title": "初始设置",
"onboarding.welcome": "欢迎使用 Cortiq Gateway",
"onboarding.welcomeSub": "选择你的语言 — 随时可以在顶栏更改。",
"onboarding.next": "下一步",
"onboarding.back": "上一步",
"onboarding.skip": "暂时跳过",
"onboarding.skipSetup": "跳过",
"onboarding.finish": "完成设置",
"onboarding.featuredTitle": "开箱即用的模型(一键)",
"onboarding.featuredSub": "这些是 HuggingFace 上 infosave 发布的、已经转换好的 .cmf 模型 — 直接下载即可,无需转换。选择一个或多个即可立即开始。",
"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": "引导强度;≤ 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": "使运行变为关键帧生视频。",
"pg.resolution": "分辨率",
"pg.genTime": "生成耗时",
"pg.timePerStep": "每步",
"pg.timePerFrame": "每帧",
"pg.fileSize": "文件大小",
"pg.duration": "时长",
"pg.play": "播放",
"pg.noMediaModels": "还没有本地{kind}模型。请在“导入模型”中下载一个(例如 infosave 合集):",
"pg.tokSpeed": "速度",
"pg.ttft": "首个 token",
// 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": "可能超出内存",
"fit.ramTitle": "模型接近或超过本机内存 — 可能无法运行。",
"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 聊天模型。",
};