Files
cortiq-gateway/web/js/i18n/zh.js
T
infosave2007 255d989e83 feat(admin): power controls — stop everything & power off, restart everything
Settings gains a second service button next to restart: stop every managed
local model server and exit the gateway process (nothing is respawned; in
Docker the restart policy decides). The SPA replaces itself with a static
"gateway is off" screen since the API is gone. The restart button is
relabeled "Restart everything" to say what it always did — the gateway
re-execs itself and managed servers come back with it. Translated in all
seven languages.
2026-08-08 17:33:56 +03:00

654 lines
34 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": "正在重启 — 网关恢复后页面会自动刷新……",
"settings.shutdown": "全部停止并关机",
"settings.shutdownConfirm": "停止所有本地模型服务器并关闭网关?在你重新启动网关之前,API 和此面板都将无法响应。",
"settings.shutdownDone": "网关已关闭。",
"settings.shutdownHint": "所有本地模型服务器已停止,进程已退出。请在服务器上重新启动网关以恢复面板。",
"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 与首个 token 时间。",
"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}",
"bm.clearHistory": "全部清除",
// harness auto-setup (API keys view)
"keys.h.claude": "Claude Code — 粘贴到终端(网关原生支持 Anthropic 协议):",
"keys.h.codex": "Codex — 将提供商追加到 ~/.codex/config.toml 并启动:",
"keys.h.opencode": "OpenCode — 写入 ~/.config/opencode/opencode.json(会覆盖!)并启动:",
"keys.h.continue": "Continue(VS Code / JetBrains)— 将模型追加到 ~/.continue/config.yaml:",
"keys.h.cline1": "Cline(VS Code)— 在扩展设置中选择:",
"keys.h.cline2": "设置 → API Provider → OpenAI Compatible,然后粘贴上面的值。",
"keys.h.note": "cortiq-auto = 智能路由:路由器为每个请求选择模型。要固定某个模型,请填写其精确名称。Windows 上请在 Git Bash / WSL 中运行脚本,或通过系统环境变量设置相同的值。",
"keys.h.protoOff": "Anthropic 协议(/v1/messages)已关闭 — Claude Code 无法连接。",
"keys.h.enableProto": "启用",
"keys.h.st.installed": "已安装在网关所在机器上",
"keys.h.st.configured": "已配置为使用此网关",
"keys.h.st.notFound": "网关所在机器上未找到",
"bm.degraded": "路由器降级",
"bm.routerDegraded": "路由器未及时响应 — 请求走了备用链路;分类不计入统计。",
"bm.cutByCap": "预算全用于思考——未能给出答案",
"shell.uiStale": "网关已更新 — 此页面运行的是旧界面。",
"shell.reload": "重新加载",
"keys.col.requests": "请求数",
"keys.col.tokens": "Token 入/出",
"keys.col.costAll": "$ 累计",
"routing.tasks.tier": "复杂度",
"routing.tasks.tierAuto": "自动(路由器)",
"routing.tasks.tierHint": "哪个模型在哪个复杂度上处理该任务;「任意」在所有层级领先。顺序即回退顺序。high 判定仍会越过「任意」条目升级。",
"routing.tasks.tierAny": "任意复杂度",
"routing.tasks.addModel": "模型",
"routing.bands.enable": "自定义复杂度边界",
"routing.bands.hint": "拖动手柄设定 low 到哪里结束、high 从哪里开始 — 手柄会相互推动,数字实时更新。路由器的连续得分将按你的边界重新划分;取消勾选则使用路由器自身的边界。",
"tier.low": "简单",
"tier.medium": "中等",
"tier.high": "困难",
"bm.scoreHint": "路由器的连续复杂度得分(0..1)— 路由页面上的边界滑块将其划分为层级。",
"settings.cache.noEmbed": "缓存已启用,但没有可用的 embedding 模型 — 它没有任何作用。请向模型池添加 kind = \"embedding\" 的模型(如 OpenAI text-embedding),或在下方选择。",
"settings.cache.entries": "条目",
"settings.cache.hits": "命中",
"settings.cache.saved": "已节省",
"keys.form.budget": "每月预算,$(0 = 不限)",
"keys.form.budgetHint": "当账户当月支出超过上限时,请求将被拒绝并返回 429 insufficient_quota。",
"keys.budgetOf": "预算 {b}/月",
"dash.kpi.orBalance": "OpenRouter 余额",
"keys.h.install": "安装:",
"keys.snip.keyInputPh": "粘贴你的 API 密钥",
"keys.snip.apply": "插入密钥",
};