diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index b2dcac5028..b9ddbb4a22 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -17,21 +17,21 @@ "submit": "提交", "reset": "重置", "copy": "复制", - "copied": "复制了!", + "copied": "已复制!", "enabled": "启用", - "disabled": "残疾人", - "active": "活跃", + "disabled": "已禁用", + "active": "启用中", "inactive": "不活跃", "noData": "无可用数据", "configure": "配置", "manage": "管理", "name": "名称", - "actions": "行动", + "actions": "操作", "status": "状态", "type": "类型", - "model": "型号", - "models": "型号", - "provider": "提供者", + "model": "模型", + "models": "模型", + "provider": "提供商", "account": "账户", "time": "时间", "details": "详情", @@ -46,9 +46,9 @@ "testConnection": "测试连接", "enable": "启用", "disable": "禁用", - "columns": "专栏", + "columns": "列", "newest": "最新", - "oldest": "最古老的", + "oldest": "最早", "all": "全部", "none": "无", "yes": "是的", @@ -61,118 +61,120 @@ "sidebar": { "home": "首页", "dashboard": "仪表板", - "providers": "供应商", + "providers": "提供商", "combos": "组合", - "usage": "用途", + "autoCombo": "自动组合", + "usage": "用量", "analytics": "分析", "costs": "成本", "health": "健康", - "limits": "限制和配额", - "cliTools": "CLI工具", + "limits": "限制与配额", + "cliTools": "CLI 工具", "media": "媒体", "settings": "设置", - "translator": "翻译者", + "translator": "翻译器", + "playground": "演练场", + "searchTools": "搜索工具", + "agents": "智能体", "docs": "文档", - "issues": "问题", - "apiManager": "API管理器", + "issues": "问题反馈", + "endpoints": "端点", + "apiManager": "API 管理", "logs": "日志", - "auditLog": "审核日志", - "shutdown": "关机", - "restart": "重新启动", - "shutdownConfirm": "关闭 OmniRoute?", - "restartConfirm": "重新启动 OmniRoute?", + "auditLog": "审计日志", + "shutdown": "停止服务", + "restart": "重启服务", + "shutdownConfirm": "确定要停止 OmniRoute 吗?", + "restartConfirm": "确定要重启 OmniRoute 吗?", "version": "v{version}", "debug": "调试", "system": "系统", "help": "帮助", "serverDisconnected": "服务器已断开连接", - "serverDisconnectedMsg": "代理服务器已停止或正在重新启动。", + "serverDisconnectedMsg": "代理服务器已停止,或正在重启。", "expandSidebar": "展开侧边栏", - "collapseSidebar": "折叠侧边栏", - "themes": "Themes", - "presetColors": "Popular colors", - "createTheme": "Create theme", - "chooseColor": "Pick one color", - "themeCoral": "Coral", - "themeBlue": "Blue", - "themeRed": "Red", - "themeGreen": "Green", - "themeViolet": "Violet", - "themeOrange": "Orange", - "themeCyan": "Cyan", - "endpoints": "端点", - "playground": "模型试验场", - "agents": "代理", + "collapseSidebar": "收起侧边栏", + "themes": "主题", + "presetColors": "热门配色", + "createTheme": "创建主题", + "chooseColor": "选择一种颜色", + "themeCoral": "珊瑚", + "themeBlue": "蓝色", + "themeRed": "红色", + "themeGreen": "绿色", + "themeViolet": "紫罗兰", + "themeOrange": "橙色", + "themeCyan": "青色", "cliToolsShort": "工具" }, "themesPage": { - "title": "Themes", - "description": "Choose a preset theme or create your own with a single color", - "presetColors": "Popular colors", - "customTheme": "Custom theme", - "customThemeDesc": "Click create theme and pick one color", - "createTheme": "Create theme", - "activePreset": "Active theme" + "title": "主题", + "description": "选择预设主题,或仅用一种颜色创建自定义主题", + "presetColors": "热门配色", + "customTheme": "自定义主题", + "customThemeDesc": "点击创建主题,然后选择一种颜色", + "createTheme": "创建主题", + "activePreset": "当前主题" }, "header": { - "logout": "退出", + "logout": "退出登录", "language": "语言", - "providers": "供应商", - "providerDescription": "管理您的 AI 提供商连接", + "providers": "提供商", + "providerDescription": "管理 AI 提供商连接", "combos": "组合", - "comboDescription": "具有后备功能的模型组合", - "usage": "使用与分析", - "usageDescription": "监控您的 API 使用情况、令牌消耗和请求日志", + "comboDescription": "支持故障回退的模型组合", + "usage": "用量与分析", + "usageDescription": "监控 API 用量、Token 消耗和请求日志", "analytics": "分析", - "analyticsDescription": "图表、趋势和评估见解", - "cliTools": "CLI工具", + "analyticsDescription": "查看图表、趋势和评测洞察", + "cliTools": "CLI 工具", "cliToolsDescription": "配置 CLI 工具", "home": "首页", - "homeDescription": "欢迎来到 OmniRoute", + "homeDescription": "欢迎使用 OmniRoute", "endpoint": "端点", - "endpointDescription": "管理代理端点、MCP、A2A и API端点", - "settings": "设置", - "settingsDescription": "管理您的偏好", - "openaiCompatible": "兼容 OpenAI", - "anthropicCompatible": "人择兼容", - "media": "Media", - "mediaDescription": "Generate images, videos, and music", - "themes": "Themes", - "themesDescription": "Choose a color theme for the whole dashboard panel", + "endpointDescription": "管理代理端点、MCP、A2A 和 API 端点", "mcp": "MCP", - "mcpDescription": "Model Context Protocol server management and tools", + "mcpDescription": "Model Context Protocol 服务管理与工具", "a2a": "A2A", - "a2aDescription": "Agent-to-Agent protocol tasks and observability" + "a2aDescription": "Agent-to-Agent 协议任务与可观测性", + "settings": "设置", + "settingsDescription": "管理你的偏好设置", + "openaiCompatible": "OpenAI 兼容", + "anthropicCompatible": "Anthropic 兼容", + "media": "媒体", + "mediaDescription": "生成图像、视频和音乐", + "themes": "主题", + "themesDescription": "为整个仪表板选择颜色主题" }, "home": { "quickStart": "快速入门", - "quickStartDesc": "只需 4 个步骤即可启动并运行。连接提供商、路线模型、监控一切。", + "quickStartDesc": "4 个步骤快速上手:连接提供商、路由模型并监控全局运行情况。", "fullDocs": "完整文档", - "step1Title": "1. 创建API密钥", - "step1Desc": "转至 Endpoint -> 注册密钥。每个环境生成一个密钥。", + "step1Title": "1. 创建 API 密钥", + "step1Desc": "前往 Endpoint -> Registered Keys。为每个环境生成一个独立密钥。", "step2Title": "2. 连接提供商", - "step2Desc": "在 Providers 中添加帐户。支持 OAuth、API 密钥和免费套餐。", - "step3Title": "3. 指出你的客户", + "step2Desc": "在 Providers 中添加账户。支持 OAuth、API Key 和免费套餐。", + "step3Title": "3. 配置客户端", "step3Desc": "在 IDE 或 API 客户端中将基本 URL 设置为 {url}。", - "step4Title": "4. 监控和优化", - "step4Desc": "在请求日志Analytics中跟踪令牌、成本和错误。", - "providersOverview": "供应商概览", - "configuredOf": "{configured} 配置了 {total} 可用提供程序", - "noModelsAvailable": "该提供商没有可用的型号。", + "step4Title": "4. 监控与优化", + "step4Desc": "在 请求日志分析 中跟踪 Token、成本与错误。", + "providersOverview": "提供商概览", + "configuredOf": "{total} 个可用提供商中已配置 {configured} 个", + "noModelsAvailable": "该提供商当前没有可用模型。", "configureFirst": "首先在 {providers} 中配置连接", "configureProvider": "配置提供商", "modelAvailable": "{count} 模型可用", - "modelsAvailable": "{count} 可用型号", + "modelsAvailable": "{count} 个模型可用", "connectionsActive": "{count} 连接处于活动状态", "connectionsActivePlural": "{count} 连接处于活动状态", - "copyModelName": "复制型号名称", + "copyModelName": "复制模型名称", "documentation": "文档", "healthMonitor": "健康监测", "reportIssue": "报告问题", "activeError": "{active} 有效 · {errors} 错误", - "oauthLabel": "开放认证", + "oauthLabel": "OAuth", "apiKeyLabel": "API密钥", - "requestsShort": "{count} 要求", + "requestsShort": "{count} 次请求", "providerModelsTitle": "{provider} - 模型", "copiedModel": "已复制:{model}", "aliasLabel": "别名" @@ -182,98 +184,118 @@ "overviewDescription": "监控所有提供商和模型的 API 使用模式、令牌消耗、成本和活动趋势。", "evalsDescription": "运行评估套件来测试和验证您的 LLM 端点。比较模型质量、检测回归和基准延迟。", "overview": "概述", - "evals": "埃瓦尔斯" + "evals": "评测" }, "apiManager": { "title": "API 密钥", "createKey": "创建 API 密钥", - "key": "钥匙", + "key": "密钥", "revokeKey": "撤销密钥", - "revokeConfirm": "您确定要撤销此 API 密钥吗?", + "revokeConfirm": "确定要撤销这个 API 密钥吗?", "noKeys": "还没有 API 密钥", - "noKeysDesc": "创建您的第一个 API 密钥以验证对端点的请求", - "keyLabel": "钥匙标签", + "noKeysDesc": "创建你的第一个 API 密钥,用于验证发往端点的请求", + "keyLabel": "密钥标签", "permissions": "权限", - "expiresAt": "过期", - "never": "从来没有", + "expiresAt": "过期时间", + "never": "永不过期", "revoke": "撤销", "showKey": "显示密钥", - "hideKey": "隐藏键", + "hideKey": "隐藏密钥", "copyKey": "复制 API 密钥", - "allModels": "所有型号", - "selectedModels": "选定型号", + "allModels": "全部模型", + "selectedModels": "已选模型", "readOnly": "只读", - "fullAccess": "完全访问权限", - "keyManagement": "API密钥管理", - "keyManagementDesc": "创建和管理 API 密钥以验证对端点的请求", - "totalKeys": "总按键数", + "fullAccess": "完全访问", + "keyManagement": "API 密钥管理", + "keyManagementDesc": "创建和管理用于访问端点的 API 密钥", + "totalKeys": "密钥总数", "restricted": "受限", "totalRequests": "请求总数", - "modelsAvailable": "可用型号", - "registeredKeys": "注册密钥", - "keysRegistered": "{count} 已注册密钥", - "keyRegistered": "{count} 密钥已注册", - "keysSecurityNote": "每个密钥都隔离使用情况跟踪,并且可以独立撤销。为了安全起见,密钥在创建后会被屏蔽。", - "createFirstKey": "创建你的第一把钥匙", + "modelsAvailable": "可用模型", + "registeredKeys": "已注册密钥", + "keysRegistered": "已注册 {count} 个密钥", + "keyRegistered": "已注册 {count} 个密钥", + "keysSecurityNote": "每个密钥的用量跟踪彼此隔离,并且可以单独撤销。出于安全考虑,密钥创建后会被遮罩显示。", + "createFirstKey": "创建第一个密钥", "name": "名称", - "usage": "用途", - "created": "已创建", - "actions": "行动", - "reqs": "要求", - "neverUsed": "从未使用过", - "deleteConfirm": "删除此 API 密钥吗?", - "usageTips": "使用技巧", - "tipAuth": "使用授权标头中的 API 密钥作为 Bearer YOUR_KEY", - "tipSecure": "密钥在创建过程中仅显示一次 - 安全地存储它们", - "tipSeparate": "为不同的客户端或环境创建单独的密钥", - "tipRestrict": "将密钥限制为特定型号,以实现更好的安全性和成本控制", - "keyName": "按键名称", - "keyNamePlaceholder": "例如,生产密钥、开发密钥", - "keyNameDesc": "选择一个描述性名称来标识此密钥的用途", + "usage": "用量", + "created": "创建时间", + "actions": "操作", + "reqs": "请求", + "neverUsed": "从未使用", + "deleteConfirm": "删除这个 API 密钥?", + "usageTips": "使用提示", + "tipAuth": "在 Authorization 请求头中以 Bearer YOUR_KEY 的形式使用 API 密钥", + "tipSecure": "密钥只会在创建时显示一次,请妥善保存", + "tipSeparate": "建议为不同客户端或环境创建独立密钥", + "tipRestrict": "将密钥限制到特定模型,可提升安全性并更好控制成本", + "keyName": "密钥名称", + "keyNamePlaceholder": "例如:生产环境密钥、开发环境密钥", + "keyNameDesc": "使用清晰的名称标识该密钥的用途", "keyCreated": "API 密钥已创建", "keyCreatedSuccess": "密钥创建成功!", - "keyCreatedNote": "立即复制并存储此密钥 - 它不会再次显示。", + "keyCreatedNote": "请立即复制并保存此密钥,它不会再次显示。", "done": "完成", "savePermissions": "保存权限", + "autoResolve": "自动解析", + "autoResolveDesc": "为这个 API 密钥自动将有歧义的模型名解析到原生提供商。", + "keyActive": "密钥启用状态", + "keyActiveDesc": "启用或禁用此 API 密钥。被禁用的密钥会立即返回 403。", + "accessSchedule": "访问时段", + "accessScheduleDesc": "将访问限制在一周中的特定日期和时段。", + "scheduleFrom": "开始时间", + "scheduleUntil": "结束时间", + "scheduleDays": "日期", + "scheduleTimezone": "时区", + "scheduleTimezoneHint": "使用 IANA 时区名称,例如 America/New_York、Europe/Berlin", + "scheduleActive": "时段限制", + "disabled": "已禁用", + "daySun": "周日", + "dayMon": "周一", + "dayTue": "周二", + "dayWed": "周三", + "dayThu": "周四", + "dayFri": "周五", + "daySat": "周六", "allowAll": "允许全部", - "restrict": "限制", - "allowAllInfo": "该键可以访问所有可用的模型。", - "restrictInfo": "此密钥可以访问 {total} 模型中的 {selected}。", - "selected": "已选择 {count}", + "restrict": "限制访问", + "allowAllInfo": "该密钥可访问所有可用模型。", + "restrictInfo": "该密钥可访问 {total} 个模型中的 {selected} 个。", + "selected": "已选择 {count} 个", "all": "全部", - "clear": "清除", + "clear": "清空", "searchModels": "按名称或提供商搜索模型...", - "noModelsFound": "没有找到型号", - "keyNameRequired": "密钥名称为必填项", - "keyNameTooLong": "键名不得超过 {max} 个字符", - "keyNameInvalid": "键名只能包含字母、数字、空格、连字符和下划线", - "invalidKeyName": "键名无效", + "noModelsFound": "未找到模型", + "keyNameRequired": "密钥名称不能为空", + "keyNameTooLong": "密钥名称长度不能超过 {max} 个字符", + "keyNameInvalid": "密钥名称只能包含字母、数字、空格、连字符和下划线", + "invalidKeyName": "密钥名称无效", "failedCreateKey": "创建密钥失败", - "failedCreateKeyRetry": "创建密钥失败。请再试一次。", + "failedCreateKeyRetry": "创建密钥失败,请重试。", "invalidKeyId": "密钥 ID 无效", "failedDeleteKey": "删除密钥失败", - "failedDeleteKeyRetry": "删除密钥失败。请再试一次。", - "invalidModelsSelection": "型号选择无效", - "cannotSelectMoreThanModels": "无法选择超过 {max} 个型号", + "failedDeleteKeyRetry": "删除密钥失败,请重试。", + "invalidModelsSelection": "模型选择无效", + "cannotSelectMoreThanModels": "最多只能选择 {max} 个模型", "failedUpdatePermissions": "更新权限失败", - "failedUpdatePermissionsRetry": "更新权限失败。请再试一次。", + "failedUpdatePermissionsRetry": "更新权限失败,请重试。", "unknownProvider": "未知", - "copyMaskedKey": "复制屏蔽密钥", - "modelsCount": "{count, plural, one {# model} other {# models}}", - "lastUsedOn": "最后:{date}", + "copyMaskedKey": "复制遮罩后的密钥", + "modelsCount": "{count} 个模型", + "lastUsedOn": "最近使用:{date}", "editPermissions": "编辑权限", - "deleteKey": "删除键", - "model": "{count} 模型", - "models": "{count} 模型", + "deleteKey": "删除密钥", + "model": "{count} 个模型", + "models": "{count} 个模型", "permissionsTitle": "权限:{name}", - "allowAllDesc": "该键可以访问所有可用的模型。", - "restrictDesc": "此密钥可以访问 {totalModels} 模型中的 {selectedCount}。", - "selectedCount": "已选择 {count}" + "allowAllDesc": "该密钥可访问所有可用模型。", + "restrictDesc": "该密钥可访问 {totalModels} 个模型中的 {selectedCount} 个。", + "selectedCount": "已选择 {count} 个" }, "auditLog": { "title": "审核日志", "searchPlaceholder": "搜索操作...", - "action": "行动", + "action": "操作", "actor": "演员", "target": "目标", "ipAddress": "IP地址", @@ -293,19 +315,55 @@ "previous": "上一页" }, "media": { - "title": "媒体工作台", + "title": "媒体", "subtitle": "生成图像、视频和音乐", - "model": "Model", - "prompt": "Prompt", + "model": "模型", + "prompt": "提示词", "generate": "生成", - "generating": "Generating...", - "loadingModels": "Loading available models...", - "noModels": "No models available. Configure providers with media capabilities first.", - "error": "Generation Failed", - "result": "Result", - "imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.", - "videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.", - "musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI." + "generating": "生成中...", + "loadingModels": "正在加载可用模型...", + "noModels": "暂无可用模型。请先配置支持媒体能力的提供商。", + "error": "生成失败", + "result": "结果", + "imageDescription": "使用 OpenAI、xAI、Together、Hyperbolic、SD WebUI、ComfyUI 等根据文本提示生成图像。", + "videoDescription": "通过 ComfyUI 或 SD WebUI 使用 AnimateDiff、Stable Video Diffusion 创建视频。", + "musicDescription": "通过 ComfyUI 使用 Stable Audio Open 或 MusicGen 生成音乐。" + }, + "search": { + "searchQuery": "搜索词", + "searchResults": "搜索结果", + "cachedResult": "已缓存", + "searchCost": "成本", + "searchTools": "搜索工具", + "searchToolsDesc": "支持提供商对比的高级搜索测试", + "compareProviders": "对比提供商", + "rerankResults": "结果重排", + "searchHistory": "搜索历史", + "urlOverlap": "URL 重叠度", + "noSearchProviders": "尚未配置搜索提供商。请前往设置添加。", + "noRerankModels": "没有可用的重排模型", + "webSearch": "网页搜索", + "provider": "提供商", + "searchType": "搜索类型", + "maxResults": "最大结果数", + "filters": "筛选条件", + "country": "国家", + "language": "语言", + "timeRange": "时间范围", + "includeDomains": "包含域名", + "excludeDomains": "排除域名", + "safeSearch": "安全搜索", + "formatted": "格式化视图", + "rawJson": "JSON", + "cacheMiss": "未命中缓存", + "cacheHit": "命中缓存", + "latency": "延迟", + "cost": "成本", + "results": "结果", + "rerank": "重排", + "rerankModel": "重排模型", + "positionDelta": "排名变化", + "emptyState": "发送搜索请求后即可查看结果" }, "cliTools": { "title": "CLI工具", @@ -334,12 +392,12 @@ "yearsAgoShort": "{count}年前", "runtimeCheckFailed": "运行时检查失败", "yourApiKeyPlaceholder": "你的 api 密钥", - "modelPlaceholder": "提供商/型号 ID", + "modelPlaceholder": "provider/model-id", "configurationSaved": "配置保存成功。", "failedToSave": "保存配置失败。", "noApiKeysCreateOne": "无 API 密钥 - 在“密钥”页面创建一个", "defaultOmnirouteKey": "sk_omniroute(默认)", - "selectModel": "选择型号", + "selectModel": "选择模型", "selectModelForAlias": "选择 {alias} 的模型", "selectModelForTool": "选择 {tool} 的模型", "select": "选择", @@ -366,23 +424,23 @@ "inactive": "不活跃", "startMitm": "启动中间人", "stopMitm": "停止中间人", - "mitmStarted": "MITM启动成功!", - "mitmStopped": "MITM 成功停止!", - "failedStart": "无法启动 MITM", - "failedStop": "未能阻止 MITM", + "mitmStarted": "MITM 启动成功!", + "mitmStopped": "MITM 已成功停止!", + "failedStart": "启动 MITM 失败", + "failedStop": "停止 MITM 失败", "saveMappings": "保存映射", "mappingsSaved": "映射已保存!", "failedSaveMappings": "保存映射失败", "howItWorks": "工作原理:", - "antigravityHowWorksDesc": "Antigravity 向 Google 端点发送请求。 MITM 拦截并将它们重定向到 OmniRoute。", - "antigravityStep1": "1. 启动 MITM 通过 OmniRoute 路由请求。", + "antigravityHowWorksDesc": "Antigravity 会向 Google 端点发起请求,MITM 会拦截这些请求并重定向到 OmniRoute。", + "antigravityStep1": "1. 启动 MITM,让请求通过 OmniRoute 路由。", "antigravityStep2Prefix": "2. 添加", "antigravityStep2Suffix": "添加到您的主机文件中作为 127.0.0.1。", - "antigravityStep3": "3. 开放Antigravity,请求将被代理。", + "antigravityStep3": "3. 打开 Antigravity,请求就会被代理。", "sudoPasswordRequiredTitle": "需要 sudo 密码", "sudoPasswordHint": "修改主机文件和系统代理设置需要管理员密码。", - "enterSudoPassword": "输入sudo密码", - "sudoPasswordRequiredError": "需要 sudo 密码。", + "enterSudoPassword": "输入 sudo 密码", + "sudoPasswordRequiredError": "必须提供 sudo 密码。", "cancel": "取消", "confirm": "确认", "settingsApplied": "设置应用成功!", @@ -398,7 +456,7 @@ "cliDetectedReady": "{tool} CLI 已检测到并准备就绪", "cliFoundFailedHealthcheck": "找到 {tool} CLI,但运行时运行状况检查失败{reason}。", "installCliPrompt": "请安装 {tool} CLI 以使用此功能。", - "installCodexPrompt": "请安装 Codex CLI 以使用自动应用功能。", + "installCodexPrompt": "请先安装 Codex CLI,才能使用自动应用功能。", "hide": "隐藏", "howToInstall": "如何安装", "installationGuide": "安装指南", @@ -408,7 +466,7 @@ "current": "当前", "baseUrlPlaceholder": "https://.../v1", "resetToDefault": "重置为默认值", - "providerModelPlaceholder": "提供商/型号 ID", + "providerModelPlaceholder": "提供商/模型 ID", "apply": "申请", "reset": "重置", "manualConfig": "手动配置", @@ -421,10 +479,10 @@ "applied": "已应用!", "failed": "失败", "resetDone": "重置!", - "omnirouteConfiguredOpenAiCompatible": "OmniRoute 配置为 OpenAI 兼容提供商", - "provider": "提供者", - "model": "型号", - "providers": "供应商", + "omnirouteConfiguredOpenAiCompatible": "OmniRoute 已配置为 OpenAI 兼容提供商", + "provider": "提供商", + "model": "模型", + "providers": "提供商", "auth": "授权", "noApiKeysAvailable": "没有可用的 API 密钥", "usingDefaultOmniroute": "使用默认值:sk_omniroute", @@ -442,17 +500,17 @@ "deleteProfile": "删除个人资料", "profileNamePlaceholder": "个人资料名称(例如个人帐户)", "saveCurrent": "保存当前", - "codexAuthNotePrefix": "法典用途", + "codexAuthNotePrefix": "Codex 使用", "codexAuthNoteMiddle": "与", "codexAuthNoteSuffix": "单击“应用”进行自动配置。", "claudeManualConfiguration": "Claude CLI - 手动配置", "codexManualConfiguration": "Codex CLI - 手动配置", "droidManualConfiguration": "Factory Droid - 手动配置", "openClawManualConfiguration": "开爪 - 手动配置", - "clineManualConfiguration": "Cline手动配置", + "clineManualConfiguration": "Cline - 手动配置", "kiloManualConfiguration": "千码手动配置", "toolDescriptions": { - "antigravity": "带有 MITM 的 Google 反重力 IDE", + "antigravity": "带 MITM 的 Google Antigravity IDE", "claude": "人类克劳德代码 CLI", "codex": "OpenAI Codex CLI", "droid": "工厂机器人AI助手", @@ -461,14 +519,14 @@ "kilo": "Kilo Code AI 助手 CLI", "cursor": "光标AI代码编辑器", "continue": "继续AI助手", - "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "opencode": "OpenCode AI 编码智能体(终端)", + "kiro": "Amazon Kiro — AI 驱动 IDE" }, "guides": { "cursor": { "notes": { - "0": "需要 Cursor Pro 帐户才能使用此功能。", - "1": "Cursor 通过自己的服务器路由请求,因此不支持本地端点。请在“设置”中启用云端点。" + "0": "使用该功能需要 Cursor Pro 账户。", + "1": "Cursor 会通过自己的服务器转发请求,因此不支持本地端点。请在设置中启用云端点。" }, "steps": { "1": { @@ -477,7 +535,7 @@ }, "2": { "title": "启用 OpenAI API", - "desc": "启用“OpenAI API 密钥”选项" + "desc": "开启 “OpenAI API key” 选项" }, "3": { "title": "基本网址" @@ -490,7 +548,7 @@ "desc": "点击“查看所有模型”->“添加自定义模型”" }, "6": { - "title": "选择型号" + "title": "选择模型" } } }, @@ -504,7 +562,7 @@ "title": "API密钥" }, "3": { - "title": "选择型号" + "title": "选择模型" }, "4": { "title": "添加模型配置", @@ -515,36 +573,36 @@ "opencode": { "steps": { "1": { - "title": "Install OpenCode", - "desc": "Install via npm: npm install -g opencode-ai" + "title": "安装 OpenCode", + "desc": "通过 npm 安装:npm install -g opencode-ai" }, "2": { - "title": "API Key" + "title": "API 密钥" }, "3": { - "title": "Set Base URL", + "title": "设置 Base URL", "desc": "opencode config set baseUrl {{baseUrl}}" }, "4": { - "title": "Select Model" + "title": "选择模型" } } }, "kiro": { "steps": { "1": { - "title": "Open Kiro Settings", - "desc": "Go to Settings → AI Provider" + "title": "打开 Kiro 设置", + "desc": "前往 Settings → AI Provider" }, "2": { "title": "Base URL", - "desc": "Paste your OmniRoute endpoint URL" + "desc": "粘贴你的 OmniRoute 端点 URL" }, "3": { - "title": "API Key" + "title": "API 密钥" }, "4": { - "title": "Select Model" + "title": "选择模型" } } } @@ -552,25 +610,25 @@ }, "combos": { "title": "组合", - "description": "创建具有加权路由和后备支持的模型组合", + "description": "创建支持权重路由与故障回退的模型组合", "createCombo": "创建组合", "editCombo": "编辑组合", "deleteCombo": "删除组合", - "noModels": "没有型号", - "noModelsYet": "尚未添加型号", - "addModel": "添加型号", - "addModelToCombo": "将模型添加到组合", + "noModels": "没有模型", + "noModelsYet": "尚未添加模型", + "addModel": "添加模型", + "addModelToCombo": "向组合中添加模型", "routingStrategy": "路由策略", "maxRetries": "最大重试次数", - "timeout": "超时(毫秒)", + "timeout": "超时时间(毫秒)", "healthcheck": "健康检查", "priority": "优先级", "fallback": "回退", - "roundRobin": "循环赛", + "roundRobin": "轮询", "random": "随机", "leastLatency": "最低延迟", "comboName": "组合名称", - "comboNamePlaceholder": "我的组合", + "comboNamePlaceholder": "my-combo", "deleteConfirm": "删除这个组合?", "noCombosYet": "还没有组合", "comboCreated": "组合创建成功", @@ -582,175 +640,175 @@ "errorUpdating": "更新组合时出错", "errorDeleting": "删除组合时出错", "testFailed": "测试请求失败", - "failedToggle": "无法切换组合", + "failedToggle": "切换组合状态失败", "testResults": "测试结果 — {name}", - "resolvedBy": "解决方法:", - "more": "+{count} 更多", - "reqs": "要求", + "resolvedBy": "最终由以下模型处理:", + "more": "另有 +{count} 个", + "reqs": "请求", "success": "成功", - "proxyConfigured": "代理已配置", + "proxyConfigured": "已配置代理", "copyComboName": "复制组合名称", "enableCombo": "启用组合", "disableCombo": "禁用组合", "testCombo": "测试组合", - "duplicate": "重复", + "duplicate": "复制", "proxyConfig": "代理配置", - "nameRequired": "姓名为必填项", - "nameInvalid": "仅限字母、数字、-、_、/ 和 。允许", - "nameHint": "字母、数字、-、_、/ 和 。允许", - "priorityDesc": "顺序回退:首先尝试模型 1,然后尝试模型 2,依此类推。", - "weightedDesc": "按权重百分比分配流量并进行回退", - "roundRobinDesc": "循环分发:每个请求轮流转到下一个模型", - "randomDesc": "统一随机选择,然后回退到剩余模型", - "leastUsedDesc": "选择请求最少的模型,随着时间的推移平衡负载", - "costOptimizedDesc": "首先根据定价路由至最便宜的型号", - "strictRandom": "Strict Random", - "strictRandomDesc": "Shuffle deck — uses each model once before reshuffling", - "models": "型号", + "nameRequired": "名称不能为空", + "nameInvalid": "仅允许字母、数字、-、_、/ 和 .", + "nameHint": "仅允许字母、数字、-、_、/ 和 .", + "priorityDesc": "顺序回退:优先尝试模型 1,其次模型 2,以此类推", + "weightedDesc": "按照权重百分比分配流量,并支持失败回退", + "roundRobinDesc": "循环分发:每个请求按顺序轮到下一个模型", + "randomDesc": "均匀随机选择,失败后回退到剩余模型", + "leastUsedDesc": "优先选择请求数最少的模型,随时间平衡负载", + "costOptimizedDesc": "根据定价优先路由到最便宜的模型", + "strictRandom": "严格随机", + "strictRandomDesc": "洗牌池模式:每个模型使用一次后再重新洗牌", + "models": "模型", "autoBalance": "自动平衡", "advancedSettings": "高级设置", "retryDelay": "重试延迟(毫秒)", - "concurrencyPerModel": "并发/模型", - "queueTimeout": "队列超时(毫秒)", - "advancedHint": "留空以使用全局默认值。这些会覆盖每个提供商的设置。", - "moveUp": "向上移动", + "concurrencyPerModel": "每模型并发数", + "queueTimeout": "排队超时(毫秒)", + "advancedHint": "留空则使用全局默认值。这些设置会覆盖每个提供商的配置。", + "moveUp": "上移", "moveDown": "下移", - "removeModel": "删除", - "saving": "正在保存...", + "removeModel": "移除", + "saving": "保存中...", "weighted": "加权", - "leastUsed": "最少使用的", - "costOpt": "成本选择", - "strategyGuideTitle": "How to use this strategy", - "strategyGuideWhen": "When to use", - "strategyGuideAvoid": "Avoid when", - "strategyGuideExample": "Example", + "leastUsed": "最少使用", + "costOpt": "成本优化", + "strategyGuideTitle": "如何使用这种策略", + "strategyGuideWhen": "适用场景", + "strategyGuideAvoid": "不适用场景", + "strategyGuideExample": "示例", "strategyGuide": { "priority": { - "when": "You have one preferred model and only want fallback on failure.", - "avoid": "You need request distribution across models.", - "example": "Primary coding model with cheaper backup for outages." + "when": "你有一个首选模型,只希望在失败时才切换到备用模型。", + "avoid": "你需要在多个模型之间分配流量。", + "example": "主力编码模型 + 发生故障时切换到更便宜的备份模型。" }, "weighted": { - "when": "You need controlled traffic split across models.", - "avoid": "You cannot maintain accurate weights over time.", - "example": "80% stable model + 20% canary model rollout." + "when": "你需要在多个模型之间按比例分配流量。", + "avoid": "你无法长期维护准确的权重。", + "example": "80% 稳定模型 + 20% 金丝雀模型的发布方案。" }, "round-robin": { - "when": "You want predictable and even distribution.", - "avoid": "Models differ too much in latency or cost.", - "example": "Same model on multiple accounts to spread throughput." + "when": "你希望流量分布可预测且均匀。", + "avoid": "模型之间的延迟或成本差异很大。", + "example": "同一模型挂在多个账号上,用于分摊吞吐。" }, "random": { - "when": "You want simple distribution with minimal setup.", - "avoid": "You need strict traffic guarantees.", - "example": "Quick prototyping with equivalent models." + "when": "你只需要简单分流,且不想做太多配置。", + "avoid": "你需要严格的流量保证。", + "example": "对等模型之间的快速原型验证。" }, "least-used": { - "when": "You want adaptive balancing based on live demand.", - "avoid": "Traffic is too low to benefit from usage balancing.", - "example": "Mixed workloads where one model often gets overloaded." + "when": "你希望根据实时负载动态均衡。", + "avoid": "流量太低,无法体现按使用量均衡的价值。", + "example": "混合负载场景下,某个模型常常更容易过载。" }, "cost-optimized": { - "when": "Cost reduction is your top priority.", - "avoid": "Pricing data is missing or outdated.", - "example": "Background or batch jobs where lower cost is preferred." + "when": "降低成本是你的首要目标。", + "avoid": "定价数据缺失或已经过期。", + "example": "后台任务或批处理作业,优先考虑更低成本。" } }, "advancedHelp": { - "maxRetries": "How many retries are attempted before failing a request.", - "retryDelay": "Initial wait between retries. Higher values reduce burst pressure.", - "timeout": "Maximum request duration before aborting.", - "healthcheck": "Skips unhealthy models/providers from routing decisions.", - "concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.", - "queueTimeout": "How long a request can wait in queue before timing out." + "maxRetries": "请求失败前最多会尝试多少次重试。", + "retryDelay": "两次重试之间的初始等待时间。值越大越能降低突发压力。", + "timeout": "请求被中止前允许的最长持续时间。", + "healthcheck": "路由决策时跳过不健康的模型或提供商。", + "concurrencyPerModel": "轮询模式下每个模型允许的最大并发请求数。", + "queueTimeout": "请求在队列中等待超时前允许停留的最长时间。" }, - "templatesTitle": "Quick templates", - "templatesDescription": "Apply a starting profile, then adjust models and config.", - "templateApply": "Apply template", - "templateHighAvailability": "High availability", - "templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.", - "templateCostSaver": "Cost saver", - "templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.", - "templateBalanced": "Balanced load", - "templateBalancedDesc": "Least-used routing to spread demand over time.", - "usageGuideHide": "Hide", - "usageGuideDontShowAgain": "Don't show again", - "usageGuideShow": "Show guide", - "quickTestTitle": "Combo ready to validate", - "quickTestDescription": "Run a test now to confirm fallback and latency behavior.", - "testNow": "Test now", - "pricingCoverage": "Pricing coverage", - "pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.", - "pricingAvailable": "Pricing available", - "pricingMissing": "No pricing", - "pricingAvailableShort": "priced", - "pricingMissingShort": "无价格", - "warningRoundRobinSingleModel": "循环法对于至少 2 个模型最有用。", - "warningCostOptimizedPartialPricing": "只有{priced} 和{total} 型号有定价。路由可能是部分成本感知的。", - "warningCostOptimizedNoPricing": "没有找到该组合的定价数据。成本优化的路线可能会出乎意料。", - "readinessTitle": "准备好保存了吗?", - "readinessDescription": "在创建或更新此组合之前查看清单。", + "templatesTitle": "快捷模板", + "templatesDescription": "先套用一个初始模板,再按需调整模型和配置。", + "templateApply": "应用模板", + "templateHighAvailability": "高可用", + "templateHighAvailabilityDesc": "优先级路由,配合健康检查和安全重试。", + "templateCostSaver": "节省成本", + "templateCostSaverDesc": "面向预算优先场景的成本优化路由。", + "templateBalanced": "均衡负载", + "templateBalancedDesc": "使用最少使用策略,随时间均衡需求。", + "usageGuideHide": "隐藏", + "usageGuideDontShowAgain": "不再显示", + "usageGuideShow": "显示指南", + "quickTestTitle": "组合已准备好验证", + "quickTestDescription": "现在运行一次测试,确认回退与延迟行为是否符合预期。", + "testNow": "立即测试", + "pricingCoverage": "定价覆盖率", + "pricingCoverageHint": "成本优化策略在组合内所有模型都有定价信息时效果最佳。", + "pricingAvailable": "已有定价", + "pricingMissing": "无定价", + "pricingAvailableShort": "已定价", + "pricingMissingShort": "无定价", + "warningRoundRobinSingleModel": "轮询策略至少有 2 个模型时才最有价值。", + "warningCostOptimizedPartialPricing": "在 {total} 个模型中,只有 {priced} 个有定价信息。路由可能只具备部分成本感知能力。", + "warningCostOptimizedNoPricing": "该组合未找到任何定价数据。成本优化策略的路由结果可能不符合预期。", + "readinessTitle": "可以保存了吗?", + "readinessDescription": "在创建或更新组合前,请先检查以下项目。", "readinessCheckName": "组合名称有效", - "readinessCheckModels": "至少选择一种型号", - "readinessCheckWeights": "加权总和为100%", - "readinessCheckWeightsOptional": "不需要重量规则", - "readinessCheckPricing": "定价数据可用", - "readinessCheckPricingOptional": "不需要定价规则", - "saveBlockedTitle": "在修复以下项目之前,保存将被阻止:", - "saveBlockName": "定义组合名称。", - "saveBlockModels": "添加至少一种模型。", - "saveBlockWeighted": "将权重设置为 100%(当前:{total}%)。", - "saveBlockPricing": "添加至少一种型号的定价或选择不同的策略。", - "recommendationsLabel": "Recommended setup", - "applyRecommendations": "Apply recommendations", - "recommendationsUpdated": "Recommendations updated for {strategy}.", - "recommendationsApplied": "Recommendations applied to this combo.", + "readinessCheckModels": "至少选择了一个模型", + "readinessCheckWeights": "加权总和为 100%", + "readinessCheckWeightsOptional": "当前策略无需权重规则", + "readinessCheckPricing": "已有定价数据", + "readinessCheckPricingOptional": "当前策略无需定价规则", + "saveBlockedTitle": "以下问题修复前无法保存:", + "saveBlockName": "请先填写组合名称。", + "saveBlockModels": "请至少添加一个模型。", + "saveBlockWeighted": "请将权重总和设置为 100%(当前:{total}%)。", + "saveBlockPricing": "请至少为一个模型补充定价信息,或改用其他策略。", + "recommendationsLabel": "推荐配置", + "applyRecommendations": "应用推荐", + "recommendationsUpdated": "已为 {strategy} 更新推荐配置。", + "recommendationsApplied": "推荐配置已应用到当前组合。", "strategyRecommendations": { "priority": { - "title": "Fail-safe baseline", - "description": "Use one primary model and keep fallback chain short and reliable.", - "tip1": "Put your most reliable model first.", - "tip2": "Keep 1-2 backup models with similar quality.", - "tip3": "Use safe retries to absorb transient provider failures." + "title": "稳妥基线", + "description": "使用一个主模型,并保持回退链路简短且可靠。", + "tip1": "把最可靠的模型放在第一位。", + "tip2": "保留 1 到 2 个质量相近的备用模型。", + "tip3": "开启安全重试,吸收临时性的提供商故障。" }, "weighted": { - "title": "Controlled traffic split", - "description": "Great for canary rollouts and gradual migration between models.", - "tip1": "Start with conservative split like 90/10.", - "tip2": "Keep the total at 100% and auto-balance after changes.", - "tip3": "Monitor success and latency before increasing canary weight." + "title": "可控流量分配", + "description": "非常适合金丝雀发布和模型渐进迁移。", + "tip1": "建议从 90/10 这样的保守配比开始。", + "tip2": "始终保持总权重为 100%,并在调整后自动平衡。", + "tip3": "在提高金丝雀权重前,先观察成功率和延迟。" }, "round-robin": { - "title": "Predictable load sharing", - "description": "Best when models are equivalent and you need smooth distribution.", - "tip1": "Use at least 2 models.", - "tip2": "Set concurrency limits to avoid burst overload.", - "tip3": "Use queue timeout to fail fast under saturation." + "title": "可预测的负载分摊", + "description": "适合模型能力接近、且需要平滑分布流量的场景。", + "tip1": "至少使用 2 个模型。", + "tip2": "设置并发限制,避免突发流量打满单个模型。", + "tip3": "结合队列超时,在饱和时快速失败。" }, "random": { - "title": "Quick spread with low setup", - "description": "Use when you need simple distribution without strict guarantees.", - "tip1": "Use models with similar latency profiles.", - "tip2": "Keep retries enabled to absorb random misses.", - "tip3": "Prefer this for experimentation, not strict SLAs." + "title": "低配置快速分散", + "description": "适用于不需要严格保证、只想简单分流的场景。", + "tip1": "尽量选择延迟特征相近的模型。", + "tip2": "保留重试机制,以吸收随机命中的失败。", + "tip3": "更适合实验场景,不建议用于严格 SLA。" }, "least-used": { - "title": "Adaptive balancing", - "description": "Routes to less-used models to reduce hotspots over time.", - "tip1": "Works better under continuous traffic.", - "tip2": "Combine with health checks for safer balancing.", - "tip3": "Track per-model usage to validate distribution gains." + "title": "自适应均衡", + "description": "优先路由到使用更少的模型,随着时间降低热点。", + "tip1": "持续稳定流量下效果更好。", + "tip2": "结合健康检查,能获得更稳妥的均衡效果。", + "tip3": "跟踪各模型用量,验证分布改善情况。" }, "cost-optimized": { - "title": "Budget-first routing", - "description": "Routes to lower-cost models when pricing metadata is available.", - "tip1": "Ensure pricing coverage for all selected models.", - "tip2": "Keep a quality fallback for hard prompts.", - "tip3": "Use for batch/background jobs where cost is the main KPI." + "title": "预算优先路由", + "description": "在具备定价元数据时,优先路由到成本更低的模型。", + "tip1": "确保所有已选模型都具备定价信息。", + "tip2": "为高难度提示保留一个质量更高的回退模型。", + "tip3": "适合批处理或后台任务等成本是主要指标的场景。" } }, - "templateFreeStack": "Free Stack ($0)", - "templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding." + "templateFreeStack": "免费栈($0)", + "templateFreeStackDesc": "在所有免费提供商之间进行轮询:Kiro(Claude)、iFlow(5 个模型)、Qwen(4 个模型)、Gemini CLI。零成本,编码不中断。" }, "costs": { "title": "成本", @@ -758,242 +816,259 @@ "totalCost": "总成本", "breakdown": "成本明细", "noData": "无成本数据", - "byModel": "按型号", + "byModel": "按模型", "byProvider": "按提供商" }, "endpoint": { - "title": "API端点", + "title": "API 端点", "available": "可用端点", "cloudProxy": "云代理", - "disableConfirm": "您确定要禁用云代理吗?", - "baseUrl": "基本网址", - "apiKeyLabel": "API密钥", - "registeredKeys": "注册密钥", - "chatCompletions": "聊天完成", - "responses": "回应", - "listModels": "列出型号", - "usingCloudProxy": "使用云代理", - "usingLocalServer": "使用本地服务器", + "disableConfirm": "确定要禁用云代理吗?", + "baseUrl": "Base URL", + "apiKeyLabel": "API 密钥", + "registeredKeys": "已注册密钥", + "chatCompletions": "Chat Completions", + "responses": "Responses", + "listModels": "列出模型", + "usingCloudProxy": "当前使用云代理", + "usingLocalServer": "当前使用本地服务器", "machineId": "机器 ID:{id}...", - "disableCloud": "禁用云", - "enableCloud": "启用云", - "modelsAcrossEndpoints": "跨 {endpoints} 端点的 {models} 模型", - "chatDesc": "与所有提供商的流式和非流式聊天", - "embeddings": "嵌入", - "embeddingsDesc": "用于搜索和 RAG 管道的文本嵌入", + "disableCloud": "禁用云端", + "enableCloud": "启用云端", + "modelsAcrossEndpoints": "{endpoints} 个端点共提供 {models} 个模型", + "chatDesc": "支持所有提供商的流式与非流式聊天", + "embeddings": "Embeddings", + "embeddingsDesc": "用于搜索和 RAG 流程的文本向量", "imageGeneration": "图像生成", "imageDesc": "根据文本提示生成图像", - "rerank": "重新排序", - "rerankDesc": "按与查询的相关性对文档重新排序", + "rerank": "重排", + "rerankDesc": "按与查询的相关性重新排序文档", "audioTranscription": "音频转录", "audioTranscriptionDesc": "将音频文件转录为文本(Whisper)", - "textToSpeech": "文字转语音", - "textToSpeechDesc": "将文本转换为听起来自然的语音", - "moderations": "节制", - "moderationsDesc": "内容审核和安全分级", - "responsesDesc": "用于 Codex 和高级智能体工作流的 OpenAI Responses API", - "listModelsDesc": "列出所有已连接提供商的所有可用模型", + "textToSpeech": "文本转语音", + "textToSpeechDesc": "将文本转换为自然语音", + "moderations": "内容审核", + "moderationsDesc": "内容安全审核与分类", + "responsesDesc": "适用于 Codex 和高级智能体工作流的 OpenAI Responses API", + "listModelsDesc": "列出所有已连接提供商下的可用模型", "settingsApiDesc": "通过 API 读取和修改 OmniRoute 配置", - "settingsApi": "Settings API", + "settingsApi": "设置 API", "categoryCore": "核心 API", - "categoryMedia": "媒体和多模态", - "categoryUtility": "实用工具和管理", + "categoryMedia": "媒体与多模态", + "categorySearch": "搜索与发现", + "categoryUtility": "工具与管理", + "webSearch": "网页搜索", + "webSearchDesc": "统一接入多个提供商的网页搜索,支持自动故障转移与缓存", + "searchProvider": "搜索提供商", + "searchProviderDesc": "该提供商会用于 `POST /v1/search` 的网页搜索。无需配置模型,只要连接 API 密钥即可使用。", "enableCloudTitle": "启用云代理", - "whatYouGet": "你会得到什么", - "cloudBenefitAccess": "从世界任何地方访问您的 API", - "cloudBenefitShare": "轻松与您的团队共享端点", + "whatYouGet": "启用后可获得", + "cloudBenefitAccess": "从世界任何地方访问你的 API", + "cloudBenefitShare": "方便与团队共享端点", "cloudBenefitPorts": "无需开放端口或配置防火墙", - "cloudBenefitEdge": "快速的全球边缘网络", - "cloudSessionNote": "云会将您的身份验证会话保留 1 天。如果不使用,它将被自动删除。", - "cloudUnstableNote": "目前,云在某些情况下使用 Claude Code OAuth 不稳定。", + "cloudBenefitEdge": "全球边缘网络加速", + "cloudSessionNote": "云端会保留你的认证会话 1 天;若未使用,将自动删除。", + "cloudUnstableNote": "目前云端在部分 Claude Code OAuth 场景下仍不够稳定。", "cloudConnected": "云代理已连接!", - "connectingToCloud": "正在连接到云...", + "connectingToCloud": "正在连接云端...", "verifyingConnection": "正在验证连接...", - "connecting": "正在连接...", - "verifying": "正在验证...", + "connecting": "连接中...", + "verifying": "验证中...", "connected": "已连接!", "disableCloudTitle": "禁用云代理", - "disableWarning": "所有身份验证会话都将从云中删除。", + "disableWarning": "所有认证会话都会从云端删除。", "syncingData": "正在同步最新数据...", - "disablingCloud": "禁用云...", - "syncing": "正在同步...", - "disabling": "禁用...", - "cloudConnectedVerified": "云代理已连接并已验证!", - "connectedVerificationPending": "已连接 — 待验证", - "connectedVerificationPendingWithError": "已连接 — 验证待处理:{error}", - "cloudDisabledSuccess": "云禁用成功", + "disablingCloud": "正在禁用云端...", + "syncing": "同步中...", + "disabling": "禁用中...", + "cloudConnectedVerified": "云代理已连接并验证成功!", + "connectedVerificationPending": "已连接,等待验证", + "connectedVerificationPendingWithError": "已连接,等待验证:{error}", + "cloudDisabledSuccess": "云端已成功禁用", "syncedSuccess": "同步成功", - "failedDisable": "禁用云失败", - "failedEnable": "启用云失败", - "cloudRequestTimeout": "云请求超时", - "cloudRequestFailed": "云请求失败", - "cloudWorkerUnreachable": "无法联系云工作人员。确保云服务正在运行(npm run dev in /cloud)。", + "failedDisable": "禁用云端失败", + "failedEnable": "启用云端失败", + "cloudRequestTimeout": "云端请求超时", + "cloudRequestFailed": "云端请求失败", + "cloudWorkerUnreachable": "无法连接到云 Worker。请确认云服务已运行(在 `/cloud` 中执行 `npm run dev`)。", "connectionFailed": "连接失败", - "syncFailed": "云数据同步失败", + "syncFailed": "同步云端数据失败", "providerModelsTitle": "{provider} — 模型", - "noModelsForProvider": "该提供商没有可用的型号。", + "noModelsForProvider": "该提供商当前没有可用模型。", "chat": "聊天", - "embedding": "嵌入", - "image": "图片", - "custom": "定制", - "modelsCount": "{count, plural, one {# model} other {# models}}", - "sectionTitle": "积分面", - "sectionDescription": "OpenAI 兼容的 API 和操作协议端点", - "tabApis": "兼容 OpenAI 的 API", + "embedding": "向量", + "image": "图像", + "custom": "自定义", + "modelsCount": "{count} 个模型", + "sectionTitle": "集成入口", + "sectionDescription": "OpenAI 兼容 API 与操作协议端点", + "tabApis": "OpenAI 兼容 API", "tabProtocols": "协议", - "tabsAria": "端点部分", + "tabsAria": "端点分区", "protocolsTitle": "协议", - "protocolsDescription": "MCP 和 A2A 是具有专用可观察性和控制功能的一流端点。", - "mcpCardTitle": "MCP服务器", - "mcpCardDescription": "基于 stdio 的模型上下文协议", - "a2aCardTitle": "A2A服务器", - "a2aCardDescription": "Agent2Agent JSON-RPC endpoint", - "protocolToolsLabel": "Tools", - "protocolTasksLabel": "Tasks", - "protocolActiveStreamsLabel": "Active streams", - "protocolLastActivity": "Last activity", - "quickStart": "Quick Start", - "openMcpDashboard": "Open MCP management", - "openA2aDashboard": "Open A2A management", - "mcpQuickStartTitle": "MCP Quick Start", - "mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.", - "mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.", - "mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.", - "a2aQuickStartTitle": "A2A Quick Start", - "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", - "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", - "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "protocolsDescription": "MCP 和 A2A 是一等端点,具备专用的可观测与控制能力。", + "mcpCardTitle": "MCP 服务", + "mcpCardDescription": "基于 stdio 的 Model Context Protocol", + "a2aCardTitle": "A2A 服务", + "a2aCardDescription": "Agent2Agent JSON-RPC 端点", + "protocolToolsLabel": "工具数", + "protocolTasksLabel": "任务数", + "protocolActiveStreamsLabel": "活跃流数", + "protocolLastActivity": "最近活动", + "quickStart": "快速开始", + "openMcpDashboard": "打开 MCP 管理", + "openA2aDashboard": "打开 A2A 管理", + "mcpQuickStartTitle": "MCP 快速开始", + "mcpQuickStartStep1": "通过 `omniroute --mcp` 启动 MCP 服务。", + "mcpQuickStartStep2": "将你的 MCP 客户端配置为通过 stdio 传输连接。", + "mcpQuickStartStep3": "调用 `omniroute_get_health`、`omniroute_list_combos` 等工具验证连通性。", + "a2aQuickStartTitle": "A2A 快速开始", + "a2aQuickStartStep1": "通过 `/.well-known/agent.json` 发现 Agent Card。", + "a2aQuickStartStep2": "向 `POST /a2a` 发送 `message/send` 或 `message/stream` JSON-RPC 请求。", + "a2aQuickStartStep3": "使用 `tasks/get` 与 `tasks/cancel` 跟踪和控制任务。", + "completionsLegacy": "Completions(旧版)", + "completionsLegacyDesc": "旧版 OpenAI 文本补全接口,同时接受 `prompt` 字符串和 `messages` 数组格式" + }, + "endpoints": { + "tabProxy": "端点代理", + "tabApiEndpoints": "API 端点", + "apiEndpointsTitle": "API 端点", + "apiEndpointsDescription": "可被其他应用程序和服务使用的后端API端点。", + "comingSoon": "即将推出", + "plannedFeatures": "计划的功能", + "featureRestApi": "REST API目录与交互式文档", + "featureWebhooks": "Webhook配置和事件订阅", + "featureSwagger": "OpenAPI / Swagger规范自动生成", + "featureAuth": "每个端点的API密钥和OAuth范围管理" }, "mcpDashboard": { - "loading": "Loading MCP dashboard...", - "activate": "activate", - "deactivate": "deactivate", - "confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?", - "switchComboFailed": "Failed to switch combo state.", - "switchComboSuccess": "Combo \"{combo}\" updated.", - "confirmApplyProfile": "Apply resilience profile \"{profile}\"?", - "applyProfileFailed": "Failed to apply resilience profile.", - "applyProfileSuccess": "Profile \"{profile}\" applied.", - "confirmResetBreakers": "Reset all circuit breakers?", - "resetBreakersFailed": "Failed to reset circuit breakers.", - "resetBreakersSuccess": "Circuit breakers reset.", - "processStatus": "Process status", - "online": "Online", - "offline": "Offline", + "loading": "正在加载 MCP 仪表板...", + "activate": "启用", + "deactivate": "停用", + "confirmSwitchCombo": "确定要将组合“{combo}”设为{action}吗?", + "switchComboFailed": "切换组合状态失败。", + "switchComboSuccess": "组合“{combo}”已更新。", + "confirmApplyProfile": "确定要应用弹性配置“{profile}”吗?", + "applyProfileFailed": "应用弹性配置失败。", + "applyProfileSuccess": "已应用配置“{profile}”。", + "confirmResetBreakers": "确定要重置全部断路器吗?", + "resetBreakersFailed": "重置断路器失败。", + "resetBreakersSuccess": "断路器已重置。", + "processStatus": "进程状态", + "online": "在线", + "offline": "离线", "pid": "PID", - "sessionUptime": "Session uptime", - "lastHeartbeat": "Last heartbeat", - "activity24h": "Activity (24h)", - "totalCalls": "Total calls", - "successRate": "Success rate", - "avgLatency": "Avg latency", - "topTools": "Top tools", - "noToolCalls24h": "No tool calls in the last 24 hours.", - "runtimeDetails": "Runtime details", - "transport": "Transport", - "scopesEnforced": "Scopes enforced", - "yes": "yes", - "no": "no", - "lastCall": "Last call", - "heartbeatPath": "Heartbeat path", - "operationalControls": "Operational controls", - "switchCombo": "Switch combo", - "inactive": "inactive", - "active": "active", - "activateCombo": "Activate combo", - "deactivateCombo": "Deactivate combo", - "applyResilienceProfile": "Apply resilience profile", - "profileAggressive": "aggressive", - "profileBalanced": "balanced", - "profileConservative": "conservative", - "applyProfile": "Apply profile", - "resetCircuitBreakers": "Reset circuit breakers", - "resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.", - "resetAllBreakers": "Reset all breakers", - "toolsAndScopes": "Tools and scopes", - "tableTool": "Tool", - "tableScopes": "Scopes", - "tablePhase": "Phase", - "tableAudit": "Audit", - "auditLog": "Audit log", - "auditSummary": "Calls: {total} | page {page} of {totalPages}", - "allTools": "All tools", - "allResults": "All results", - "success": "Success", - "failure": "Failure", + "sessionUptime": "会话运行时长", + "lastHeartbeat": "最近心跳", + "activity24h": "近 24 小时活动", + "totalCalls": "调用总数", + "successRate": "成功率", + "avgLatency": "平均延迟", + "topTools": "热门工具", + "noToolCalls24h": "最近 24 小时没有工具调用。", + "runtimeDetails": "运行时详情", + "transport": "传输方式", + "scopesEnforced": "已启用作用域控制", + "yes": "是", + "no": "否", + "lastCall": "最近调用", + "heartbeatPath": "心跳文件路径", + "operationalControls": "运行控制", + "switchCombo": "切换组合", + "inactive": "未启用", + "active": "已启用", + "activateCombo": "启用组合", + "deactivateCombo": "停用组合", + "applyResilienceProfile": "应用弹性配置", + "profileAggressive": "激进", + "profileBalanced": "平衡", + "profileConservative": "保守", + "applyProfile": "应用配置", + "resetCircuitBreakers": "重置断路器", + "resetCircuitBreakersHelp": "清除当前断路器状态及提供商失败计数。", + "resetAllBreakers": "重置全部断路器", + "toolsAndScopes": "工具与作用域", + "tableTool": "工具", + "tableScopes": "作用域", + "tablePhase": "阶段", + "tableAudit": "审计", + "auditLog": "审计日志", + "auditSummary": "调用数:{total}|第 {page} / {totalPages} 页", + "allTools": "全部工具", + "allResults": "全部结果", + "success": "成功", + "failure": "失败", "apiKeyIdPlaceholder": "apiKeyId", - "loadingAuditEntries": "Loading audit entries...", - "noAuditEntriesForFilters": "No audit entries found for current filters.", - "tableTimestamp": "Timestamp", - "tableDuration": "Duration", - "tableResult": "Result", - "tableApiKey": "API key", - "failed": "failed", - "previous": "Previous", - "next": "Next" + "loadingAuditEntries": "正在加载审计记录...", + "noAuditEntriesForFilters": "当前筛选条件下没有审计记录。", + "tableTimestamp": "时间戳", + "tableDuration": "耗时", + "tableResult": "结果", + "tableApiKey": "API 密钥", + "failed": "失败", + "previous": "上一页", + "next": "下一页" }, "a2aDashboard": { - "loading": "Loading A2A dashboard...", - "confirmCancelTask": "Cancel task {taskId}?", - "cancelTaskFailed": "Failed to cancel task.", - "cancelTaskSuccess": "Task {taskId} cancelled.", - "smokeSendFailed": "message/send smoke test failed.", - "smokeSendSuccessWithTask": "message/send ok (task {taskId}).", - "smokeSendSuccess": "message/send ok.", - "smokeStreamFailed": "message/stream smoke test failed.", - "smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).", - "smokeStreamNoTaskId": "message/stream finished without task id.", - "health": "Health", - "ok": "ok", - "totalTasks": "Total tasks", - "activeStreams": "Active streams", - "lastTask": "Last task", - "taskStateOverview": "Task state overview", + "loading": "正在加载 A2A 仪表板...", + "confirmCancelTask": "确定要取消任务 {taskId} 吗?", + "cancelTaskFailed": "取消任务失败。", + "cancelTaskSuccess": "任务 {taskId} 已取消。", + "smokeSendFailed": "`message/send` 冒烟测试失败。", + "smokeSendSuccessWithTask": "`message/send` 调用成功(任务 {taskId})。", + "smokeSendSuccess": "`message/send` 调用成功。", + "smokeStreamFailed": "`message/stream` 冒烟测试失败。", + "smokeStreamSuccessWithTask": "`message/stream` 调用成功(任务 {taskId}{stateSuffix})。", + "smokeStreamNoTaskId": "`message/stream` 完成,但未返回任务 ID。", + "health": "健康状态", + "ok": "正常", + "totalTasks": "任务总数", + "activeStreams": "活跃流数", + "lastTask": "最近任务", + "taskStateOverview": "任务状态概览", "state": { - "submitted": "submitted", - "working": "working", - "completed": "completed", - "failed": "failed", - "cancelled": "cancelled" + "submitted": "已提交", + "working": "处理中", + "completed": "已完成", + "failed": "失败", + "cancelled": "已取消" }, - "agentCard": "Agent card", - "version": "Version", + "agentCard": "智能体卡片", + "version": "版本", "url": "URL", - "capabilities": "Capabilities", - "agentCardNotAvailable": "Agent card not available.", - "quickValidation": "Quick validation", - "quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.", - "runMessageSend": "Run message/send", - "runMessageStream": "Run message/stream", - "taskManagement": "Task management", - "taskSummary": "{total} tasks | page {page} of {totalPages}", - "allStates": "all", - "allSkills": "all skills", - "loadingTasks": "Loading tasks...", - "noTasksForFilters": "No tasks found for current filters.", - "tableTask": "Task", - "tableSkill": "Skill", - "tableState": "State", - "tableUpdated": "Updated", - "tableActions": "Actions", - "view": "View", - "cancel": "Cancel", - "previous": "Previous", - "next": "Next", - "taskDetail": "Task detail", - "close": "Close", - "metadata": "Metadata", - "events": "Events", - "artifacts": "Artifacts" + "capabilities": "能力", + "agentCardNotAvailable": "Agent Card 不可用。", + "quickValidation": "快速验证", + "quickValidationDescription": "通过实时 `/a2a` 端点执行冒烟调用。", + "runMessageSend": "运行 message/send", + "runMessageStream": "运行 message/stream", + "taskManagement": "任务管理", + "taskSummary": "任务总数:{total}|第 {page} / {totalPages} 页", + "allStates": "全部状态", + "allSkills": "全部技能", + "loadingTasks": "正在加载任务...", + "noTasksForFilters": "当前筛选条件下没有任务。", + "tableTask": "任务", + "tableSkill": "技能", + "tableState": "状态", + "tableUpdated": "更新时间", + "tableActions": "操作", + "view": "查看", + "cancel": "取消", + "previous": "上一页", + "next": "下一页", + "taskDetail": "任务详情", + "close": "关闭", + "metadata": "元数据", + "events": "事件", + "artifacts": "产物" }, "health": { "title": "系统健康状况", "description": "实时监控您的 OmniRoute 实例", "healthy": "健康", "degraded": "降级", - "down": "向下", + "down": "下线", "uptime": "正常运行时间", "memory": "内存", "memoryRss": "记忆 (RSS)", @@ -1002,7 +1077,7 @@ "database": "数据库", "version": "版本", "lastCheck": "最后检查", - "providerHealth": "提供者健康", + "providerHealth": "提供商健康", "systemMetrics": "系统指标", "tokenHealth": "令牌健康", "refreshAll": "全部刷新", @@ -1029,13 +1104,13 @@ "signatureDefaults": "默认值", "signatureTool": "工具", "signatureFamily": "家庭", - "signatureSession": "会议", + "signatureSession": "会话", "recovering": "正在恢复中", "noCBData": "没有可用的断路器数据。先提出一些要求。", - "providerHealthStatusAria": "提供者健康状况", + "providerHealthStatusAria": "提供商健康状况", "issuesLabel": "检测到的问题", "operational": "运营中", - "providers": "供应商", + "providers": "提供商", "healthyCount": "{count} 健康", "nodeVersion": "节点 {version}", "failures": "{count} 失败", @@ -1050,7 +1125,7 @@ "runningCount": "{count} 正在运行", "ok": "好的", "activeLockouts": "主动锁定", - "resetConfirm": "将所有断路器重置为正常状态?这将清除所有故障计数并将所有提供程序恢复到运行状态。", + "resetConfirm": "将所有断路器重置为正常状态?这将清除所有故障计数并将所有提供商恢复到运行状态。", "resetAllTitle": "将所有断路器重置为正常状态", "resetting": "正在重置...", "resetAll": "全部重置", @@ -1084,7 +1159,7 @@ "showing": "显示 {count} 条目(偏移量 {offset})", "search": "搜索", "timestamp": "时间戳", - "action": "行动", + "action": "操作", "actor": "演员", "target": "目标", "details": "详情", @@ -1125,7 +1200,7 @@ "runTest": "运行连接测试", "testingConnection": "测试连接...", "connectionSuccessful": "连接成功!您的提供商已准备就绪。", - "noProviderFound": "未找到提供者。您可以稍后从仪表板添加一个。", + "noProviderFound": "未找到提供商。您可以稍后从仪表板添加一个。", "testFailed": "测试失败,但您可以稍后配置。", "couldNotTest": "现在无法测试。您可以从仪表板进行测试。", "doneDesc": "你都准备好了!您的 OmniRoute 实例已配置并准备好代理 AI 请求。", @@ -1135,15 +1210,15 @@ "failedSetPassword": "设置密码失败。再试一次。", "failedAddProvider": "添加提供商失败。再试一次。", "connectionError": "连接错误。请再试一次。", - "provider": "提供者" + "provider": "提供商" }, "providers": { - "title": "供应商", + "title": "提供商", "addProvider": "添加提供商", "editProvider": "编辑提供商", "deleteProvider": "删除提供商", "noProviders": "没有配置提供商", - "modelAvailability": "型号可供选择", + "modelAvailability": "模型可用性", "accounts": "账户", "newAccount": "新账户", "deleteConfirm": "您确定要删除该提供商吗?", @@ -1155,7 +1230,7 @@ "cooldown": "冷却时间", "unavailable": "不可用", "unknown": "未知", - "oauthLabel": "开放认证", + "oauthLabel": "OAuth", "compatibleLabel": "兼容", "chat": "聊天", "responses": "回应", @@ -1173,18 +1248,18 @@ "errorCount": "{count} 错误 ({code})", "errorCountNoCode": "{count} 错误", "noConnections": "无连接", - "disabled": "残疾人", + "disabled": "已禁用", "enableProvider": "启用提供商", "disableProvider": "禁用提供商", "testResults": "测试结果", "noCompatibleYet": "尚未添加兼容的提供商", "compatibleHint": "使用上面的按钮添加 OpenAI 或 Anthropic 兼容端点", "addOpenAICompatible": "添加 OpenAI 兼容", - "addAnthropicCompatible": "添加人择兼容", + "addAnthropicCompatible": "添加 Anthropic 兼容端点", "addNewProvider": "添加新提供商", "backToProviders": "返回提供商", - "configureNewProvider": "配置新的 AI 提供程序以与您的应用程序一起使用。", - "providerLabel": "提供者", + "configureNewProvider": "配置新的 AI 提供商以与您的应用程序一起使用。", + "providerLabel": "提供商", "selectProvider": "选择提供商", "selectedProvider": "选定的提供商", "authMethod": "认证方式", @@ -1200,15 +1275,15 @@ "displayNamePlaceholder": "例如,生产 API、开发环境", "displayNameHint": "可选。用于标识此配置的友好名称。", "active": "活跃", - "activeDescription": "启用此提供程序以在您的应用程序中使用", + "activeDescription": "启用此提供商以在您的应用程序中使用", "cancel": "取消", - "createProvider": "创建提供者", + "createProvider": "创建提供商", "failedCreate": "创建提供商失败", "errorOccurred": "发生错误。请再试一次。", - "modelStatus": "型号状态", - "allModelsOperational": "所有型号均可运行", + "modelStatus": "模型状态", + "allModelsOperational": "所有模型运行正常", "modelsWithIssues": "{count} 有问题的模型", - "allModelsNormal": "所有型号均响应正常。", + "allModelsNormal": "所有模型当前响应正常。", "cooldownCleared": "{model} 的冷却时间已清除", "failedClearCooldown": "无法清除冷却时间", "loadingAvailability": "正在加载模型可用性...", @@ -1216,6 +1291,7 @@ "clearing": "清算...", "until": "直到 {time}", "providerTestFailed": "提供商测试失败", + "providerTestTimeout": "提供商测试超时,可能是同时测试的连接过多", "modeTest": "{mode} 测试", "passedCount": "{count} 通过", "failedCount": "{count} 失败", @@ -1230,7 +1306,7 @@ "prefixLabel": "前缀", "baseUrlLabel": "基本网址", "apiTypeLabel": "API类型", - "prefixHint": "必填。型号名称的唯一前缀。", + "prefixHint": "必填。模型名称使用的唯一前缀。", "nameHint": "必填。该节点的友好标签。", "baseUrlHint": "必填。  提供商 API 基本 URL。", "anthropicPrefixPlaceholder": "交流产品", @@ -1243,26 +1319,26 @@ "connectionFailed": "连接失败。检查 URL 和密钥。", "testKeyLabel": "测试 API 密钥", "testKeyPlaceholder": "sk-...(仅用于验证)", - "providerNotFound": "找不到提供者", + "providerNotFound": "未找到提供商", "deleteConnectionConfirm": "删除这个连接吗?", "failedSetAlias": "设置别名失败", "failedSaveConnection": "保存连接失败", "failedSaveConnectionRetry": "无法保存连接。请再试一次。", "failedRetestConnection": "重新测试连接失败", "deleteCompatibleNodeConfirm": "删除此 {type} 兼容节点?", - "anthropicCompatibleDetails": "人择兼容细节", - "openaiCompatibleDetails": "OpenAI 兼容详细信息", - "messagesApi": "消息API", - "responsesApi": "响应API", + "anthropicCompatibleDetails": "Anthropic 兼容详情", + "openaiCompatibleDetails": "OpenAI 兼容详情", + "messagesApi": "Messages API", + "responsesApi": "Responses API", "chatCompletions": "聊天完成", "importingModels": "正在导入...", "importFromModels": "从 /models 导入", "addConnectionToImport": "添加连接以启用导入。", - "noModelsConfigured": "没有配置型号", + "noModelsConfigured": "尚未配置模型", "connectionCount": "{count} 连接", "fetchingModels": "正在获取可用模型...", "failedFetchModels": "获取模型失败", - "noModelsFound": "没有找到型号", + "noModelsFound": "未找到模型", "importFailed": "导入失败", "noNewModelsAdded": "没有添加新模型。", "adding": "添加...", @@ -1276,25 +1352,25 @@ "productionKey": "生产密钥", "enterNewApiKey": "输入新的 API 密钥", "optional": "可选", - "anthropicCompatibleName": "人择兼容", + "anthropicCompatibleName": "Anthropic 兼容", "openaiCompatibleName": "兼容 OpenAI", "failedImportModels": "导入模型失败", "noModelsReturnedFromEndpoint": "/models 端点没有返回任何模型。", "importingModelsProgress": "正在导入 {current} 个模型(共 {total} 个)...", "foundModelsStartingImport": "找到 {count} 模型。开始导入...", "importingModelById": "正在导入 {modelId}...", - "importSuccessCount": "成功导入{count, plural, one {# model} other {# models}}!", + "importSuccessCount": "成功导入 {count, plural, one {# 个模型} other {# 个模型}}!", "noNewModelsAddedExisting": "没有添加新模型(全部已存在)。", - "importDoneCount": "✓ 完成! {count, plural, one {# model imported.} other {# models imported.}}", + "importDoneCount": "✓ 完成!共导入 {count, plural, one {# 个模型。} other {# 个模型。}}", "unexpectedErrorOccurred": "发生意外错误", - "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}", + "connectionCountLabel": "{count} 个连接", "messagesPath": "消息", "responsesPath": "回应", "chatCompletionsPath": "聊天/完成", "add": "添加", "edit": "编辑", "delete": "删除", - "anthropic": "人择", + "anthropic": "Anthropic", "openai": "开放人工智能", "singleConnectionPerCompatible": "每个兼容节点仅允许一个连接。如果需要更多连接,请添加另一个节点。", "connections": "连接", @@ -1305,9 +1381,9 @@ "noConnectionsYet": "还没有连接", "addFirstConnectionHint": "添加您的第一个连接以开始使用", "addConnection": "添加连接", - "availableModels": "可用型号", + "availableModels": "可用模型", "pageAutoRefresh": "页面会自动刷新...", - "statusDisabled": "残疾人", + "statusDisabled": "已禁用", "statusConnected": "已连接", "statusRuntimeIssue": "运行时问题", "statusAuthFailed": "验证失败", @@ -1329,8 +1405,8 @@ "errorTypeTestUnsupported": "测试不支持", "errorTypeUpstreamError": "上游错误", "proxySourceGlobal": "全球", - "proxySourceProvider": "提供者", - "proxySourceKey": "钥匙", + "proxySourceProvider": "提供商", + "proxySourceKey": "密钥", "proxyConfiguredBySource": "代理 ({source}):{host}", "autoPriority": "自动:{priority}", "proxy": "代理", @@ -1341,28 +1417,28 @@ "reauthenticateConnection": "重新验证此连接", "proxyConfig": "代理配置", "aliasExistsAlert": "别名“{alias}”已存在。请使用不同的模型或编辑现有别名。", - "openRouterAnyModelHint": "OpenRouter 支持任何型号。添加模型并创建别名以便快速访问。", - "modelIdFromOpenRouter": "型号 ID(来自 OpenRouter)", - "openRouterModelPlaceholder": "人类/claude-3-opus", - "customModels": "定制型号", - "customModelsHint": "添加不在默认列表中的型号 ID。这些将可用于路由。", - "modelId": "型号编号", - "customModelPlaceholder": "例如GPT-4.5-涡轮", + "openRouterAnyModelHint": "OpenRouter 支持任意模型。添加模型并创建别名后即可快速访问。", + "modelIdFromOpenRouter": "模型 ID(来自 OpenRouter)", + "openRouterModelPlaceholder": "anthropic/claude-3-opus", + "customModels": "自定义模型", + "customModelsHint": "添加默认列表中没有的模型 ID,这些模型也能参与路由。", + "modelId": "模型 ID", + "customModelPlaceholder": "例如:gpt-4.5-turbo", "loading": "正在加载...", "removeCustomModel": "删除自定义模型", "noCustomModels": "尚未添加自定义模型。", - "allSuggestedAliasesExist": "所有建议的别名均已存在。请选择不同的型号或删除有冲突的别名。", + "allSuggestedAliasesExist": "所有建议别名都已存在。请选择其他模型,或删除冲突的别名。", "failedSaveCustomModel": "保存自定义模型失败", "modelAddedSuccess": "模型 {modelId} 添加成功", - "failedAddModelTryAgain": "添加型号失败。请再试一次。", + "failedAddModelTryAgain": "添加模型失败,请重试。", "failedSaveImportedModel": "无法将导入的模型保存到自定义数据库", "failedImportModelsTryAgain": "导入模型失败。请再试一次。", "failedRemoveModelFromDatabase": "无法从数据库中删除模型", "modelRemovedSuccess": "模型删除成功", "failedDeleteModelTryAgain": "删除模型失败。请再试一次。", - "compatibleModelsDescription": "手动添加 {type} 兼容模型或从 /models 端点导入它们。", - "anthropicCompatibleModelPlaceholder": "克劳德-3-opus-20240229", - "openaiCompatibleModelPlaceholder": "GPT-4O", + "compatibleModelsDescription": "可手动添加 {type} 兼容模型,或从 `/models` 端点导入。", + "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229", + "openaiCompatibleModelPlaceholder": "gpt-4o", "apiKeyValidationFailed": "API 密钥验证失败。请检查您的密钥并重试。", "addProviderApiKeyTitle": "添加 {provider} API 密钥", "checking": "正在检查...", @@ -1370,8 +1446,8 @@ "valid": "有效", "invalid": "无效", "creating": "创造...", - "validationChecksAnthropicCompatible": "验证通过验证 API 密钥来检查 {provider}。", - "validationChecksOpenAiCompatible": "验证通过基本 URL 上的 /models 检查 {provider}。", + "validationChecksAnthropicCompatible": "验证会通过检查 API 密钥来确认 {provider} 是否可用。", + "validationChecksOpenAiCompatible": "验证会通过你填写的 Base URL 上的 `/models` 接口来检查 {provider}。", "priorityLabel": "优先级", "saving": "正在保存...", "save": "保存", @@ -1380,23 +1456,24 @@ "email": "电子邮件", "healthCheckMinutes": "健康检查(分钟)", "healthCheckHint": "主动令牌刷新间隔。 0 = 禁用。", - "groupLabel": "Environment", - "groupPlaceholder": "e.g. eKaizen, Personal", + "groupLabel": "环境", + "groupPlaceholder": "例如:eKaizen、Personal", "failedTestConnection": "测试连接失败", "failed": "失败", "leaveBlankKeepCurrentApiKey": "留空以保留当前的 API 密钥。", "editCompatibleTitle": "编辑 {type} 兼容", - "compatibleBaseUrlHint": "Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.", + "compatibleBaseUrlHint": "{type} 兼容 API 的根 URL。若端点路径是自定义的,请在高级设置中配置。", "apiKeyForCheck": "API 密钥(用于检查)", "compatibleProdPlaceholder": "{type} 兼容(产品)", - "providerTestTimeout": "Provider test timed out — too many connections to test at once", - "advancedSettings": "Advanced Settings", - "chatPathLabel": "Chat Endpoint Path", + "tokenRefreshed": "Token 刷新成功", + "tokenRefreshFailed": "Token 刷新失败", + "advancedSettings": "高级设置", + "chatPathLabel": "聊天端点路径", "chatPathPlaceholder": "/chat/completions", - "chatPathHint": "Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)", - "modelsPathLabel": "Models Endpoint Path", + "chatPathHint": "为非标准 API 的提供商自定义聊天路径(例如:/v4/chat/completions)", + "modelsPathLabel": "模型端点路径", "modelsPathPlaceholder": "/models", - "modelsPathHint": "Custom models path for validation (e.g. /v4/models)" + "modelsPathHint": "为验证流程自定义模型路径(例如:/v4/models)" }, "settings": { "title": "设置", @@ -1472,7 +1549,7 @@ "themeDark": "黑暗", "themeSystem": "系统", "hideHealthLogs": "隐藏健康检查日志", - "hideHealthLogsDesc": "当打开时,抑制服务器控制台中的 [HealthCheck] 消息", + "hideHealthLogsDesc": "开启后,将抑制服务器控制台中的 [HealthCheck] 消息", "themeAccent": "主题颜色", "themeAccentDesc": "选择预设颜色,或使用单一颜色创建你自己的主题", "themeCreate": "创建主题", @@ -1491,7 +1568,7 @@ "evictions": "驱逐", "loadingCacheStats": "正在加载缓存统计信息...", "globalProxy": "全球代理", - "globalProxyDesc": "为所有 API 调用配置全局出站代理。单独的提供程序、组合和键可以覆盖此设置。", + "globalProxyDesc": "为所有 API 调用配置全局出站代理。单独的提供商、组合和键可以覆盖此设置。", "noGlobalProxy": "没有配置全局代理", "globalLabel": "全球", "configure": "配置", @@ -1535,12 +1612,17 @@ "setPassword": "设置密码", "apiEndpointProtection": "API端点保护", "requireAuthModels": "/models 需要 API 密钥", - "requireAuthModelsDesc": "当打开时,/v1/models 端点针对未经身份验证的请求返回 404。防止未经授权的用户发现模型。", + "requireAuthModelsDesc": "开启后,`/v1/models` 对未认证请求返回 404,从而阻止未授权用户发现模型。", "blockedProviders": "被阻止的提供商", - "blockedProvidersDesc": "从 /v1/models 响应中隐藏特定提供程序。被阻止的提供商不会出现在模型列表中。", + "blockedProvidersDesc": "在 `/v1/models` 响应中隐藏指定提供商。被隐藏的提供商不会出现在模型列表中。", "providersBlocked": "{count} 提供商被阻止/模型", "blockProviderTitle": "区块 {provider}", "unblockProviderTitle": "解锁 {provider}", + "cliFingerprint": "CLI 指纹匹配", + "cliFingerprintDesc": "在代理请求时模拟原生 CLI 二进制的请求特征。会重新排列请求头和请求体字段,使其与官方 CLI 工具更一致,同时保留你的代理 IP。", + "cliFingerprintEnabled": "已有 {count} 个提供商启用了 CLI 指纹", + "enableFingerprintTitle": "为 {provider} 启用指纹", + "disableFingerprintTitle": "为 {provider} 禁用指纹", "routingStrategy": "路由策略", "fillFirst": "先填写", "fillFirstDesc": "按优先顺序使用帐户", @@ -1554,8 +1636,8 @@ "leastUsedDesc": "选择最近最少使用的帐户", "costOpt": "成本选择", "costOptDesc": "更喜欢最便宜的可用帐户", - "strictRandom": "Strict Random", - "strictRandomDesc": "Shuffle deck — uses each account once before reshuffling", + "strictRandom": "严格随机", + "strictRandomDesc": "洗牌池模式:每个账户使用一次后再重新洗牌", "stickyLimit": "粘性限制", "stickyLimitDesc": "切换前每个账户的通话次数", "modelAliases": "模型别名", @@ -1581,8 +1663,8 @@ "pattern": "图案", "targetModel": "目标模型", "add": "+ 添加", - "session": "会议", - "sessionDetailsAria": "会议详情", + "session": "会话", + "sessionDetailsAria": "会话详情", "status": "状态", "authenticated": "已认证", "guest": "嘉宾", @@ -1596,7 +1678,7 @@ "systemActor": "系统", "ipAccessControl": "IP访问控制", "ipAccessControlDesc": "阻止或允许特定 IP 地址", - "ipModeDisabled": "残疾人", + "ipModeDisabled": "已禁用", "ipModeBlacklist": "黑名单", "ipModeWhitelist": "白名单", "ipModeWhitelistPriority": "WL优先级", @@ -1612,20 +1694,20 @@ "searchAuditLogs": "搜索审核日志...", "failedLoadAuditLog": "无法加载审核日志", "noAuditEvents": "未找到审核事件", - "action": "行动", + "action": "操作", "actor": "演员", "details": "详情", "time": "时间", "fallbackChainsTitle": "后备链", - "fallbackChainsDesc": "定义每个模型的提供者后备顺序", + "fallbackChainsDesc": "定义每个模型的提供商后备顺序", "addChain": "+ 添加链", - "modelName": "型号名称", + "modelName": "模型名称", "modelNamePlaceholder": "克劳德十四行诗-4-20250514", - "providersCommaSeparated": "提供者(以逗号分隔,按优先顺序排列)", - "providersCommaSeparatedPlaceholder": "人类、openai、双子座", + "providersCommaSeparated": "提供商(用逗号分隔,按优先级排序)", + "providersCommaSeparatedPlaceholder": "anthropic, openai, gemini", "createChain": "创建链", "noFallbackChains": "无后备链", - "noFallbackChainsDesc": "创建一个链来定义模型的提供者回退顺序。", + "noFallbackChainsDesc": "创建一条链路,用于定义某个模型的提供商回退顺序。", "loadingFallbackChains": "正在加载后备链...", "deleteChainConfirm": "删除“{model}”的后备链?", "chainCreated": "为 {model} 创建的链", @@ -1633,7 +1715,7 @@ "failedCreateChain": "创建链失败", "failedDeleteChain": "删除链失败", "deleteChain": "删除链", - "fillModelAndProviders": "请填写型号名称和提供商", + "fillModelAndProviders": "请填写模型名称和提供商", "addAtLeastOneProvider": "添加至少一个提供商", "comboDefaultsTitle": "组合默认值", "globalComboConfig": "全局组合配置", @@ -1649,8 +1731,8 @@ "healthCheckDesc": "预先检查提供商的可用性", "trackMetrics": "跟踪指标", "trackMetricsDesc": "记录每个组合请求指标", - "providerOverrides": "提供者覆盖", - "providerOverridesDesc": "覆盖每个提供商的超时和重试。提供程序设置会覆盖全局默认设置。", + "providerOverrides": "提供商覆盖", + "providerOverridesDesc": "覆盖每个提供商的超时和重试。提供商设置会覆盖全局默认设置。", "providerMaxRetriesAria": "{provider} 最大重试次数", "providerTimeoutAria": "{provider} 超时毫秒", "removeProviderOverrideAria": "删除 {provider} 覆盖", @@ -1662,8 +1744,8 @@ "maxNestingDepth": "最大嵌套深度", "concurrencyPerModel": "并发/模型", "queueTimeout": "队列超时(毫秒)", - "providerProfiles": "供应商简介", - "providerProfilesDesc": "OAuth(基于会话)和 API 密钥(计量)提供商的单独弹性设置。由于速率限制较低,OAuth 提供商具有更严格的阈值。", + "providerProfiles": "提供商简介", + "providerProfilesDesc": "为 OAuth(基于会话)和 API Key(计费型)提供商分别设置弹性策略。由于速率限制更低,OAuth 提供商通常采用更严格的阈值。", "oauthProviders": "OAuth 提供商", "apiKeyProviders": "API 密钥提供商", "transientCooldown": "短暂冷却", @@ -1672,7 +1754,7 @@ "cbThreshold": "CB阈值", "cbResetTime": "CB 复位时间", "rateLimiting": "速率限制", - "rateLimitingDesc": "API 密钥提供程序会自动受到安全默认值的速率限制。限制是从响应标头中学习的,并随着时间的推移进行调整。", + "rateLimitingDesc": "API 密钥提供商会自动受到安全默认值的速率限制。限制是从响应标头中学习的,并随着时间的推移进行调整。", "defaultSafetyNet": "默认安全网", "rpm": "转速", "minGap": "最小间隙", @@ -1730,7 +1812,7 @@ "yes": "是的", "no": "否", "restore": "恢复", - "invalidFileType": "文件类型无效。仅接受 .sqlite 文件。", + "invalidFileType": "文件类型无效,仅接受 `.sqlite` 文件。", "exportFailed": "导出失败", "exportFailedWithError": "导出失败:{error}", "fullExportFailedWithError": "完全导出失败:{error}", @@ -1741,31 +1823,31 @@ "minutesAgo": "{count} 分钟前", "hoursAgo": "{count} 小时前", "daysAgo": "{count} 天前", - "backupReasonManual": "手册", + "backupReasonManual": "手动", "backupReasonPreRestore": "预恢复", - "connectionsCount": "{count, plural, one {# connection} other {# connections}}", + "connectionsCount": "{count} 个连接", "noChangesSinceBackup": "自上次备份以来没有任何变化", "backupFailed": "备份失败", "restoreFailed": "恢复失败", "importFailed": "导入失败", "errorDuringRestore": "恢复期间发生错误", "errorDuringImport": "导入时发生错误", - "modelPricing": "型号定价", + "modelPricing": "模型定价", "modelPricingDesc": "配置每个模型的成本费率 • 所有费率均以美元/100 万代币为单位", - "providers": "供应商", + "providers": "提供商", "registry": "登记处", "priced": "定价", - "searchProvidersModels": "搜索供应商或型号...", + "searchProvidersModels": "搜索提供商或模型...", "showAll": "显示全部", "noProvidersMatch": "没有与您的搜索匹配的提供商。", "howPricingWorks": "定价如何运作", "cacheWrite": "缓存写入", "unsaved": "未保存", "resetDefaults": "重置默认值", - "saveProvider": "保存提供者", + "saveProvider": "保存提供商", "saving": "正在保存...", - "model": "型号", - "models": "型号", + "model": "模型", + "models": "模型", "moreProviders": "{count} 更多提供商", "withPricing": "配置定价", "policiesCircuitBreakers": "政策与断路器", @@ -1779,7 +1861,7 @@ "pricingDescCacheWrite": "缓存写入:创建缓存条目(回退到输入)", "pricingDescFormula": "成本 = (输入 × 输入率) + (输出 × 输出率) + (缓存 × 缓存率) 每百万代币。", "pricingSettingsTitle": "定价设置", - "totalModels": "型号总数", + "totalModels": "模型总数", "active": "活跃", "costCalculation": "成本计算", "costCalculationDesc": "成本是根据为每个模型配置的令牌使用情况和定价费率计算的。", @@ -1791,15 +1873,10 @@ "cachedTokenDesc": "缓存输入令牌(通常为输入速率的 50%)", "reasoningTokenDesc": "特殊推理/思维标记(回退到输出率)", "cacheCreationTokenDesc": "用于创建缓存条目的令牌(回退到输入速率)", - "customPricingNote": "您可以覆盖特定型号的默认定价。自定义覆盖优先于自动检测的定价。", + "customPricingNote": "你可以覆盖特定模型的默认定价。自定义覆盖会优先于自动检测到的定价。", "editPricing": "编辑定价", "viewFullDetails": "查看完整详情", - "themeCoral": "珊瑚色", - "cliFingerprint": "CLI Fingerprint Matching", - "cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.", - "cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active", - "enableFingerprintTitle": "Enable fingerprint for {provider}", - "disableFingerprintTitle": "Disable fingerprint for {provider}" + "themeCoral": "珊瑚色" }, "translator": { "title": "翻译者", @@ -1811,17 +1888,17 @@ "chatTester": "聊天测试仪", "testBench": "测试台", "liveMonitor": "实时监控", - "modeDescriptionPlayground": "粘贴任何 API 请求正文,然后查看 OmniRoute 如何在提供程序格式之间进行转换(OpenAI ↔ Claude ↔ Gemini ↔ Responses API)", - "modeDescriptionChatTester": "通过 OmniRoute 发送真实的聊天请求并检查完整的往返过程:输入、翻译后的请求、提供商响应和翻译后的输出。", + "modeDescriptionPlayground": "粘贴任意 API 请求体,查看 OmniRoute 如何在不同提供商格式之间进行转换(OpenAI ↔ Claude ↔ Gemini ↔ Responses API)。", + "modeDescriptionChatTester": "通过 OmniRoute 发送真实聊天请求,并检查完整往返流程:输入、转换后的请求、提供商响应以及转换后的输出。", "modeDescriptionTestBench": "运行预定义的场景并比较提供商和模型之间的兼容性。", - "modeDescriptionLiveMonitor": "当请求流经 OmniRoute 时,实时观看翻译事件。", - "modeDescriptionFallback": "调试、测试和可视化 OmniRoute 如何在提供者之间转换 API 请求。", + "modeDescriptionLiveMonitor": "实时查看请求流经 OmniRoute 时产生的翻译事件。", + "modeDescriptionFallback": "调试、测试并可视化 OmniRoute 如何在提供商之间转换 API 请求。", "recentTranslations": "最近的翻译", "noTranslations": "还没有翻译", "source": "来源", "target": "目标", "time": "时间", - "model": "型号", + "model": "模型", "status": "状态", "latency": "延迟", "totalTranslations": "总翻译数", @@ -1832,7 +1909,7 @@ "notAvailableSymbol": "—", "liveAutoRefreshing": "直播 — 自动刷新", "paused": "已暂停", - "eventsAppearHint": "当请求流经 OmniRoute 时,翻译事件会出现在此处。使用以下任意方法生成事件:", + "eventsAppearHint": "请求流经 OmniRoute 时,翻译事件会显示在这里。你可以通过下面任一方式生成事件:", "chatTesterTab": "聊天测试选项卡", "testBenchTab": "测试台选项卡", "externalApiCalls": "外部API调用", @@ -1841,7 +1918,7 @@ "ok": "好的", "errorShort": "错误率", "formatConverter": "格式转换器", - "formatConverterDescription": "粘贴或输入 JSON 请求正文。翻译器将自动检测源格式并将其转换为目标格式。使用它来调试 OmniRoute 如何在格式之间转换请求(OpenAI ↔ Claude ↔ Gemini ↔ Responses API)。", + "formatConverterDescription": "粘贴或输入 JSON 请求体。翻译器会自动识别源格式并将其转换为目标格式。你可以借此调试 OmniRoute 在各种格式之间的转换行为(OpenAI ↔ Claude ↔ Gemini ↔ Responses API)。", "input": "输入", "output": "输出", "auto": "汽车", @@ -1854,7 +1931,7 @@ "templateLoadHint": "模板以 {format} 格式加载请求。更改源格式以以不同的格式加载。", "compatibilityTester": "兼容性测试仪", "compatibilityReport": "兼容性报告", - "testBenchDescription": "运行预定义的场景(简单聊天、工具调用等)以验证翻译和提供程序兼容性。选择源格式和目标提供程序,然后运行所有测试以查看兼容性百分比。使用它来查找哪些功能可以跨提供商使用。", + "testBenchDescription": "运行预定义的场景(简单聊天、工具调用等)以验证翻译和提供商兼容性。选择源格式和目标提供商,然后运行所有测试以查看兼容性百分比。使用它来查找哪些功能可以跨提供商使用。", "targetProvider": "目标提供商", "runAllTests": "运行所有测试", "runTest": "运行测试", @@ -1898,23 +1975,23 @@ }, "multiTurn": { "system": "你是一名编码助理。", - "userInitial": "在 Python 中编写一个函数对数组进行排序。", - "assistantExample": "这是一个简单的排序函数:\n\n````蟒蛇\ndef sort_array(arr):\n 返回已排序(arr)\n````", + "userInitial": "请用 Python 写一个对数组进行排序的函数。", + "assistantExample": "这是一个简单的排序函数:\n\n```python\ndef sort_array(arr):\n return sorted(arr)\n```", "userFollowUp": "现在将其按降序排序。" }, "thinking": { "question": "前 100 个质数之和是多少?" }, "systemPrompt": { - "systemInstruction": "您是一名专门研究分布式系统的高级软件工程师。使用行业最佳实践简洁地回答问题。始终提供相关的代码示例。使用 Markdown 格式化您的回复。", + "systemInstruction": "你是一名专注于分布式系统的高级软件工程师。请使用行业最佳实践简洁作答,并在合适时提供代码示例。回复请使用 Markdown 格式。", "question": "如何实现断路器模式?" }, "streaming": { "prompt": "给我讲一个关于机器人学习绘画的小故事。" } }, - "openaiCompatibleLabel": "兼容 OpenAI", - "anthropicCompatibleLabel": "人择兼容", + "openaiCompatibleLabel": "OpenAI 兼容", + "anthropicCompatibleLabel": "Anthropic 兼容", "noTemplateForFormat": "没有此格式的模板", "translationFailed": "翻译失败:{error}", "pipelineDebugger": "管道调试器", @@ -1922,27 +1999,27 @@ "pipelineVisualization": "管道可视化", "pipelineVisualizationHint": "发送消息以查看您的请求如何经过检测 → 翻译 → 提供商调用。", "chatTesterDescription": "以特定客户端格式发送消息并检查翻译管道的每个步骤。", - "chatTesterFlow": "客户端请求 → 格式检测 → OpenAI Intermediate → 提供者格式 → 响应", + "chatTesterFlow": "客户端请求 → 格式检测 → OpenAI 中间格式 → 提供商格式 → 响应", "clickStepToInspect": "单击任意步骤即可检查该阶段的数据。", "clientFormat": "客户端格式", - "provider": "提供者", - "modelPlaceholder": "选择或输入型号名称...", + "provider": "提供商", + "modelPlaceholder": "选择或输入模型名称...", "sendMessageToSeePipeline": "发送消息查看翻译管道", "chatMessageHintPrefix": "您的消息将被格式化为", - "chatMessageHintSuffix": "请求,通过管道进行翻译,然后发送给选定的提供者。", + "chatMessageHintSuffix": "请求,通过管道进行翻译,然后发送给选定的提供商。", "youWithFormat": "您 ({format})", "assistant": "助理", "typeMessage": "输入消息...", "send": "发送", - "clientRequest": "客户要求", + "clientRequest": "客户端请求", "clientRequestDescription": "您的客户端发送的请求正文", "formatDetected": "检测到格式", - "formatDetectedDescription": "OmniRoute 自动从请求结构中检测 API 格式", - "openaiIntermediate": "OpenAI 中级", - "openaiIntermediateDescription": "所有格式首先标准化为 OpenAI 格式(通用桥)", - "providerFormat": "提供者格式", - "providerFormatDescription": "OpenAI 格式转换为提供商的本机格式", - "providerResponse": "供应商回应", + "formatDetectedDescription": "OmniRoute 会根据请求结构自动识别 API 格式", + "openaiIntermediate": "OpenAI 中间格式", + "openaiIntermediateDescription": "所有格式都会先归一化为 OpenAI 格式(通用桥接层)", + "providerFormat": "提供商格式", + "providerFormatDescription": "随后再把 OpenAI 格式转换为提供商原生格式", + "providerResponse": "提供商回应", "providerResponseRawDescription": "来自提供商 API 的原始响应", "providerResponseSseDescription": "来自提供商 API 的原始 SSE 流", "unexpectedError": "发生意外错误", @@ -1950,11 +2027,11 @@ "errorMessage": "错误:{message}", "requestFailed": "请求失败", "noTextExtracted": "(未提取文字)", - "liveMonitorDescriptionPrefix": "当 API 调用流经 OmniRoute 时显示翻译事件。事件来自内存缓冲区(重新启动时重置)。使用", + "liveMonitorDescriptionPrefix": "这里会显示 API 调用流经 OmniRoute 时产生的翻译事件。事件来自内存缓冲区(重启后会重置)。使用", "liveMonitorDescriptionSuffix": ",或外部 API 调用来生成事件。" }, "usage": { - "title": "用途", + "title": "用量", "loggerTab": "记录器", "proxyTab": "代理", "budgetManagement": "预算管理", @@ -1992,38 +2069,38 @@ "circuitBreakers": "断路器", "lockedIPs": "锁定IP", "lockoutsAutoRefreshHint": "每个模型速率限制锁定 • 自动刷新 10 秒", - "lockedCount": "{count, plural, one {# locked} other {# locked}}", + "lockedCount": "{count} 个锁定", "timeLeft": "剩余 {time}", - "howItWorks": "它是如何运作的", + "howItWorks": "工作原理", "howItWorksSubtitle": "了解评估如何验证您的 LLM 回答", "define": "定义", "defineStepDescription": "使用包含、正则表达式或完全匹配等策略创建带有输入提示和预期输出标准的测试用例。", "run": "运行", - "runStepDescription": "通过 OmniRoute 针对您的 LLM 端点执行测试用例。每个案例都作为真实的 API 请求发送。", - "evaluate": "评价", + "runStepDescription": "通过 OmniRoute 对你的 LLM 端点执行测试用例。每个案例都会作为真实 API 请求发送。", + "evaluate": "评估", "evaluateStepDescription": "将响应与预期标准进行比较。查看每种情况的通过/失败情况以及延迟指标和详细反馈。", "evalSuites": "评估套件", - "evalSuitesHint": "单击套件查看测试用例,然后运行以评估您的 LLM 端点", + "evalSuitesHint": "点击套件可查看测试用例,然后运行以评估你的 LLM 端点", "evalsLoading": "正在加载评估套件...", "noEvalSuitesFound": "未找到评估套件", - "noEvalSuitesDescription": "评估套件可以通过 API 或代码来定义。他们使用包含、正则表达式、精确匹配和自定义函数等策略根据预期结果测试模型输出。", + "noEvalSuitesDescription": "评测套件可以通过 API 或代码定义。它们会使用包含、正则表达式、精确匹配和自定义函数等策略,根据预期结果验证模型输出。", "columnCase": "案例", "columnStatus": "状态", "columnLatency": "延迟", "columnDetails": "详情", - "columnModel": "型号", + "columnModel": "模型", "columnStrategy": "策略", - "columnExpected": "预计", - "statsSuites": "套房", + "columnExpected": "预期", + "statsSuites": "套件", "statsTestCases": "测试用例", - "statsModels": "型号", + "statsModels": "模型", "statsCoverage": "覆盖范围", "statsStrategiesCount": "{count} 策略", "evaluationStrategies": "评估策略", "modelsUnderTest": "测试中的模型", - "searchSuitesPlaceholder": "搜索套房...", + "searchSuitesPlaceholder": "搜索套件...", "passSuffix": "通过", - "casesCount": "{count, plural, one {# case} other {# cases}}", + "casesCount": "{count} 个案例", "runEval": "运行评估", "runningProgress": "正在运行 {current}/{total}...", "passRate": "通过率", @@ -2036,27 +2113,27 @@ "noResultsYet": "还没有结果", "testCasesCount": "测试用例 ({count})", "noTestCasesDefined": "没有定义测试用例", - "runEvalHint": "单击“运行评估”以针对您的 LLM 端点执行所有案例。每个测试都通过 OmniRoute 发送真实请求。", + "runEvalHint": "点击“运行评测”即可对你的 LLM 端点执行所有案例。每次测试都会通过 OmniRoute 发送真实请求。", "notifyNoTestCases": "没有为此套件定义测试用例", "notifyAllCasesPassed": "所有 {total} 案例均已通过 ✅", "notifySomeCasesFailed": "{passed}/{total} 通过,{failed} 失败", "notifyEvalRunFailed": "评估运行失败", "notifyEvalTitle": "评估:{name}", "modelEvals": "模型评估", - "evalsHeroDescription": "通过运行预定义的评估套件来测试和验证您的 LLM 端点。每个套件都包含测试用例,这些测试用例通过 OmniRoute 发送真实提示并将响应与预期标准进行比较 - 帮助您检测回归、比较模型并确保跨提供商的响应质量。", + "evalsHeroDescription": "通过运行预定义评测套件来测试和验证你的 LLM 端点。每个套件都包含多个测试用例,会经由 OmniRoute 发送真实提示,并将响应与预期标准进行比较,帮助你发现回归、比较模型,并确保跨提供商的响应质量。", "qualityValidation": "质量验证", - "modelComparison": "型号对比", + "modelComparison": "模型对比", "regressionDetection": "回归检测", "latencyBenchmarks": "延迟基准", "modelLockouts": "模型锁定", - "noLockouts": "目前没有锁定型号", + "noLockouts": "当前没有被锁定的模型", "activeSessions": "活跃会话", "noSessions": "没有活动会话", "sessionsHint": "会话显示为请求流经代理", "sessionsTrackedHint": "通过请求指纹跟踪 • 自动刷新 5 秒", - "session": "会议", + "session": "会话", "age": "年龄", - "requests": "要求", + "requests": "请求", "connection": "连接方式", "durationMillisecondsShort": "{value}ms", "durationSecondsShort": "{value}s", @@ -2066,8 +2143,8 @@ "notAvailableSymbol": "-", "providerLimits": "提供商限制", "noProviders": "没有连接提供商", - "connectProvidersForQuota": "使用 OAuth 连接到提供商以跟踪您的 API 配额限制和使用情况。", - "accountsCount": "{count, plural, one {# account} other {# accounts}}", + "connectProvidersForQuota": "通过 OAuth 连接提供商,以跟踪 API 配额限制和使用情况。", + "accountsCount": "{count} 个账户", "filteredFromCount": "(从 {count} 过滤)", "autoRefresh": "自动刷新", "refreshAll": "全部刷新", @@ -2075,7 +2152,7 @@ "account": "账户", "modelQuotas": "模型配额", "lastUsed": "最后使用", - "actions": "行动", + "actions": "操作", "refreshQuota": "刷新配额", "today": "今天", "tomorrow": "明天", @@ -2085,9 +2162,9 @@ "rawPlanWithValue": "原始计划:{plan}", "noPlanFromProvider": "提供商没有计划", "noQuotaData": "无配额数据", - "ungrouped": "Ungrouped", - "viewFlat": "Flat", - "viewByEnvironment": "By Environment", + "ungrouped": "未分组", + "viewFlat": "平铺视图", + "viewByEnvironment": "按环境分组", "noQuotaDataAvailable": "无可用配额数据", "noAccountsForTierFilter": "未找到适用于层过滤器的帐户", "tierAll": "全部", @@ -2123,16 +2200,16 @@ "loadingPricing": "正在加载定价数据...", "pricingRatesFormat": "定价格式", "noPricingData": "无可用定价数据", - "noModelsFound": "没有找到型号" + "noModelsFound": "没有找到模型" }, "loggers": { "allProviders": "所有提供商", - "allModels": "所有型号", + "allModels": "所有模型", "allAccounts": "所有账户", "allApiKeys": "所有 API 密钥", "allTypes": "所有类型", "allLevels": "所有级别", - "modelAZ": "型号 A-Z", + "modelAZ": "模型 A-Z", "modelZA": "Z-A型", "loadingLogs": "正在加载日志...", "loadingProxyLogs": "正在加载代理日志...", @@ -2150,7 +2227,7 @@ "usageOverview": "使用概述", "outputTokens": "输出代币", "totalCost": "总成本", - "usageByModel": "按型号使用", + "usageByModel": "按模型使用", "usageByAccount": "按帐户使用情况", "failedToLoad": "无法加载使用情况统计信息。", "tokenHealth": "令牌健康", @@ -2216,7 +2293,8 @@ "orRemovePasswordHashField": "或删除passwordHash字段", "restartServerWithNewPassword": "重新启动服务器 - 它将使用新密码", "backToLogin": "返回登录", - "forgotPassword": "忘记密码?" + "forgotPassword": "忘记密码?", + "defaultPasswordHint": "默认密码:123456(除非已设置 INITIAL_PASSWORD)" }, "landing": { "brandName": "全方位路由", @@ -2228,7 +2306,7 @@ "versionLive": "v1.0 现已上线", "oneEndpoint": "一个端点", "allProviders": "所有人工智能提供商", - "heroDescription": "带有 Web 仪表板的 AI 端点代理 - CLIProxyAPI 的 JavaScript 端口。与 Claude Code、OpenAI Codex、Cline、RooCode 和其他 CLI 工具无缝协作。", + "heroDescription": "带 Web 仪表板的 AI 端点代理,是 CLIProxyAPI 的 JavaScript 版本。可与 Claude Code、OpenAI Codex、Cline、RooCode 等 CLI 工具无缝配合。", "getStarted": "开始使用", "viewOnGithub": "在 GitHub 上查看", "powerfulFeatures": "强大的功能", @@ -2241,24 +2319,24 @@ "featureModelFallbackDesc": "发生故障或高延迟时自动切换提供商。", "featureUsageTrackingTitle": "使用情况追踪", "featureUsageTrackingDesc": "所有模型的详细分析和成本监控。", - "featureOAuthApiKeysTitle": "OAuth 和 API 密钥", + "featureOAuthApiKeysTitle": "OAuth 与 API 密钥", "featureOAuthApiKeysDesc": "在一个保管库中安全地管理凭据。", "featureCloudSyncTitle": "云同步", "featureCloudSyncDesc": "立即跨设备同步您的配置。", "featureCliSupportTitle": "CLI 支持", - "featureCliSupportDesc": "适用于 Claude Code、Codex、Cline、Cursor 等。", + "featureCliSupportDesc": "适用于 Claude Code、Codex、Cline、Cursor 等工具。", "featureDashboardTitle": "仪表板", "featureDashboardDesc": "用于实时流量分析的可视化仪表板。", - "howItWorks": "OmniRoute 的工作原理", + "howItWorks": "OmniRoute 工作原理", "howItWorksDescription": "数据从您的应用程序通过我们的智能路由层无缝流向最适合该工作的提供商。", "howItWorksStep1Title": "1. CLI 和 SDK", "howItWorksStep1Description": "您的请求从您最喜欢的工具或我们的统一 SDK 开始。只需更改基本 URL 即可。", - "howItWorksStep2Title": "2.OmniRoute 中心", + "howItWorksStep2Title": "2. OmniRoute 中枢", "howItWorksStep2Description": "我们的引擎分析提示、检查提供商的运行状况以及最低延迟或成本的路线。", "howItWorksStep3Title": "3.人工智能提供商", - "howItWorksStep3Description": "OpenAI、Anthropic、Gemini 或其他公司会立即满足该请求。", + "howItWorksStep3Description": "请求会被立即转发给 OpenAI、Anthropic、Gemini 或其他提供商完成处理。", "getStartedIn30Seconds": "30 秒内开始", - "getStartedDescription": "安装 OmniRoute,通过 Web 仪表板配置您的提供商,并开始路由 AI 请求。", + "getStartedDescription": "安装 OmniRoute,通过 Web 仪表板配置你的提供商,然后开始路由 AI 请求。", "installOmniRoute": "安装 OmniRoute", "installStepDescription": "运行 npx 命令立即启动服务器", "openDashboard": "打开仪表板", @@ -2272,7 +2350,7 @@ "serverRunningOnLabel": "服务器运行于", "dashboardLabel": "仪表板", "readyToRoute": "准备好路线! ✓", - "configureProvidersNote": "📝 在仪表板中配置提供程序或使用环境变量", + "configureProvidersNote": "📝 在仪表板中配置提供商或使用环境变量", "dataLocation": "数据位置:", "dataLocationMacLinux": " macOS/Linux:", "dataLocationWindows": " 窗户:", @@ -2285,18 +2363,18 @@ "legal": "法律", "mitLicense": "麻省理工学院许可证", "footerTagline": "AI 生成的统一端点。轻松连接、路由和管理您的 AI 提供商。", - "copyright": "© {year} OmniRoute。版权所有。", + "copyright": "© {year} OmniRoute。保留所有权利。", "flowToolClaudeCode": "克劳德·科德", - "flowToolOpenAICodex": "OpenAI 法典", + "flowToolOpenAICodex": "OpenAI Codex", "flowToolCline": "克莱因", "flowToolCursor": "光标", "flowProviderOpenAI": "开放人工智能", - "flowProviderAnthropic": "人择", + "flowProviderAnthropic": "Anthropic", "flowProviderGemini": "双子座", - "flowProviderGithubCopilot": "GitHub 副驾驶", + "flowProviderGithubCopilot": "GitHub Copilot", "interactiveDiagram": "桌面上可见的交互式图表", "ctaTitle": "准备好简化您的人工智能基础设施了吗?", - "ctaDescription": "与开发人员一起简化 AI 与 OmniRoute 的集成。开源且免费启动。", + "ctaDescription": "加入更多开发者,一起用 OmniRoute 简化 AI 集成流程。开源且可免费开始使用。", "startFree": "免费开始", "readDocumentation": "阅读文档" }, @@ -2305,22 +2383,24 @@ "quickStart": "快速入门", "features": "特点", "supportedProviders": "支持的提供商", - "supportedProvidersToc": "供应商", + "supportedProvidersToc": "提供商", "commonUseCases": "常见用例", "clientCompatibility": "客户端兼容性", "protocolsToc": "协议", "apiReference": "API参考", + "managementApiReference": "管理 API 参考", + "managementApiDescription": "用于代理注册表、作用域绑定以及旧版代理迁移的自动化接口。", "method": "方法", "path": "路径", "notes": "注释", - "modelPrefixes": "型号前缀", + "modelPrefixes": "模型前缀", "prefix": "前缀", "troubleshooting": "故障排除", "supportsChat": "支持聊天和响应端点。", - "oauthAutoRefresh": "具有自动令牌刷新功能的 OAuth 连接。", - "fullStreaming": "对所有型号的完全流媒体支持。", + "oauthAutoRefresh": "支持自动刷新 Token 的 OAuth 连接。", + "fullStreaming": "所有模型都支持完整流式输出。", "docsLabel": "文档", - "docsHeroDescription": "适用于多提供商法学硕士的人工智能网关。 OpenAI、Anthropic、Gemini、GitHub Copilot、Claude Code、Cursor 以及 20 多个提供商的一个端点。", + "docsHeroDescription": "面向多提供商 LLM 的 AI 网关。一个端点即可统一接入 OpenAI、Anthropic、Gemini、GitHub Copilot、Claude Code、Cursor 等 20+ 提供商。", "openDashboard": "打开仪表板", "endpointPage": "端点页面", "github": "GitHub", @@ -2333,12 +2413,12 @@ "quickStartStep2Title": "2. 创建API密钥", "quickStartStep2Text": "转至端点 -> 注册密钥。每个环境生成一个密钥。", "quickStartStep3Title": "3. 连接提供商", - "quickStartStep3Text": "通过 OAuth 登录、API 密钥或免费层自动连接添加提供商帐户。", + "quickStartStep3Text": "通过 OAuth 登录、API 密钥或免费套餐自动接入来添加提供商账户。", "quickStartStep4Title": "4. 设置客户端基本 URL", "quickStartStep4Prefix": "将您的 IDE 或 API 客户端指向", - "quickStartStep4Suffix": "例如,使用提供者前缀", + "quickStartStep4Suffix": "例如使用提供商前缀", "featureRoutingTitle": "多提供商路由", - "featureRoutingText": "通过单个 OpenAI 兼容端点将请求路由到 30 多个 AI 提供商。支持聊天、响应、音频和图像 API。", + "featureRoutingText": "通过单一 OpenAI 兼容端点将请求路由到 30+ AI 提供商,支持聊天、Responses、音频和图像 API。", "featureCombosTitle": "组合和平衡", "featureCombosText": "使用后备链和平衡策略创建模型组合:循环、优先级、随机、最少使用和成本优化。", "featureUsageTitle": "使用情况和成本跟踪", @@ -2348,19 +2428,19 @@ "featureHealthTitle": "健康监测", "featureHealthText": "实时健康检查、提供商状态、断路器状态以及具有指数退避功能的自动速率限制检测。", "featureCliTitle": "CLI工具", - "featureCliText": "管理 IDE 配置、导出/导入备份、发现 Codex 配置文件以及从仪表板配置设置。", + "featureCliText": "可在仪表板中管理 IDE 配置、导出/导入备份、发现 Codex 配置文件并修改设置。", "featureSecurityTitle": "安全和政策", "featureSecurityText": "API 密钥身份验证、IP 过滤、提示注入防护、域策略、会话管理和审核日志记录。", "featureCloudSyncTitle": "云同步", - "featureCloudSyncText": "将您的配置同步到 Cloudflare Workers,以便通过加密凭据和自动故障转移进行远程访问。", - "providersAcrossConnectionTypes": "跨三种连接类型的 {count} 提供程序。", + "featureCloudSyncText": "将配置同步到 Cloudflare Workers,以便通过加密凭据和自动故障转移实现远程访问。", + "providersAcrossConnectionTypes": "跨三种连接类型的 {count} 提供商。", "manageProviders": "管理提供商", "providersCount": "{count} 提供商", "providerTypeFree": "免费套餐", - "providerTypeOAuth": "开放认证", + "providerTypeOAuth": "OAuth", "providerTypeApiKey": "API密钥", "useCaseSingleEndpointTitle": "许多提供商的单一端点", - "useCaseSingleEndpointText": "将客户端指向一个基本 URL 并按模型前缀进行路由(例如:gh/、cc/、kr/、openai/)。", + "useCaseSingleEndpointText": "将客户端统一指向一个 Base URL,再通过模型前缀进行路由(例如:gh/、cc/、kr/、openai/)。", "useCaseFallbackTitle": "使用组合进行回退和模型切换", "useCaseFallbackText": "在仪表板中创建组合模型,并在提供商内部轮换时保持客户端配置稳定。", "useCaseUsageVisibilityTitle": "使用情况、成本和调试可见性", @@ -2368,53 +2448,60 @@ "clientCherryStudioTitle": "樱桃工作室", "baseUrlLabel": "基本网址", "chatEndpointLabel": "聊天端点", - "modelRecommendationLabel": "型号推荐:显式前缀", - "clientCodexTitle": "Codex / GitHub 副驾驶模型", + "modelRecommendationLabel": "模型建议:显式前缀", + "clientCodexTitle": "Codex / GitHub Copilot 模型", "clientCodexBullet1": "使用模型 ID", - "clientCodexBullet2": "Codex 系列模型自动路由至", + "clientCodexBullet2": "Codex 系列模型会自动路由到", "clientCodexBullet3": "非法典模型继续", "clientCursorTitle": "光标集成开发环境", "clientCursorBullet1": "使用", "clientCursorBullet1Suffix": "光标模型的前缀。", - "clientCursorBullet2": "OAuth 连接 - 从提供商页面登录。", + "clientCursorBullet2": "OAuth 连接方式:在 Providers 页面中登录。", "clientClaudeTitle": "克劳德·代码 / 反重力", "clientClaudeBullet1Prefix": "使用", "clientClaudeBullet1Middle": "(克劳德)或", "clientClaudeBullet1Suffix": "(反重力)前缀。", - "protocolsTitle": "Protocols: MCP & A2A", - "protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.", - "protocolMcpTitle": "MCP (Model Context Protocol)", - "protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.", - "protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.", - "protocolMcpStep2": "Point your MCP client to stdio transport.", - "protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.", - "protocolA2aTitle": "A2A (Agent2Agent)", - "protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.", - "protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.", - "protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.", - "protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.", - "protocolTroubleshootingTitle": "Protocol Troubleshooting", - "protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.", - "protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.", - "protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.", - "endpointChatNote": "与 OpenAI 兼容的聊天端点(默认)。", - "endpointResponsesNote": "响应 API 端点(Codex、o 系列)。", + "protocolsTitle": "协议:MCP 与 A2A", + "protocolsDescription": "除了 OpenAI 兼容 API 之外,OmniRoute 还提供两类操作协议:用于工具执行的 MCP,以及用于智能体协作工作流的 A2A。", + "protocolMcpTitle": "MCP(Model Context Protocol)", + "protocolMcpDesc": "通过 stdio 使用 MCP,让客户端发现并调用 OmniRoute 工具,同时具备审计可见性。", + "protocolMcpStep1": "使用 `omniroute --mcp` 启动 MCP 传输。", + "protocolMcpStep2": "将你的 MCP 客户端指向 stdio 传输。", + "protocolMcpStep3": "调用 `omniroute_get_health` 和 `omniroute_list_combos` 验证连通性。", + "protocolA2aTitle": "A2A(Agent2Agent)", + "protocolA2aDesc": "使用 A2A JSON-RPC 以同步方式或通过 SSE 流式方式提交任务。", + "protocolA2aStep1": "读取 `/.well-known/agent.json` 进行智能体发现。", + "protocolA2aStep2": "向 `POST /a2a` 发送 `message/send` 或 `message/stream` 请求。", + "protocolA2aStep3": "通过 `tasks/get` 和 `tasks/cancel` 管理任务生命周期。", + "protocolTroubleshootingTitle": "协议故障排查", + "protocolTroubleshooting1": "如果 MCP 状态为离线,请确认 stdio 进程正在运行,且心跳文件持续更新。", + "protocolTroubleshooting2": "如果 A2A 任务长时间停留在 `working`,请检查 `/api/a2a/tasks/:id` 和流事件中是否出现终态。", + "protocolTroubleshooting3": "可使用 `/dashboard/mcp` 和 `/dashboard/a2a` 进行运行控制并查看审计信息。", + "endpointChatNote": "OpenAI 兼容聊天端点(默认)。", + "endpointResponsesNote": "Responses API 端点(Codex、o 系列)。", "endpointModelsNote": "所有连接的提供商的模型目录。", "endpointAudioNote": "音频转录(Deepgram、AssemblyAI)。", "endpointImagesNote": "图像生成(NanoBanana)。", "endpointRewriteChatNote": "为没有 /v1 的客户端重写帮助程序。", "endpointRewriteResponsesNote": "重写不带 /v1 的响应帮助程序。", "endpointRewriteModelsNote": "重写模型发现助手,无需 /v1。", - "modelPrefixesDescriptionStart": "在模型名称之前使用提供程序前缀可路由到特定提供程序。示例:", - "modelPrefixesDescriptionEnd": "路由至 GitHub Copilot。", - "provider": "提供者", + "mgmtProxiesListNote": "列出已保存的代理注册项(支持分页)。", + "mgmtProxiesCreateNote": "在注册表中创建可复用的代理项。", + "mgmtProxiesHealthNote": "基于代理日志获取每个已保存代理的 24 小时 / 滚动健康指标。", + "mgmtProxiesBulkAssignNote": "一次请求即可为多个 scope ID 统一分配或清除同一个代理。", + "mgmtAssignmentsListNote": "按 scope、scope_id 或 proxy_id 列出代理绑定关系。", + "mgmtAssignmentsUpdateNote": "为 global/provider/account/combo 作用域分配或清除代理。", + "mgmtLegacyMigrationNote": "将旧版 proxyConfig 映射导入为注册表绑定关系。", + "modelPrefixesDescriptionStart": "在模型名称之前使用提供商前缀可路由到特定提供商。示例:", + "modelPrefixesDescriptionEnd": "会被路由到 GitHub Copilot。", + "provider": "提供商", "type": "类型", - "troubleshootingModelRouting": "如果客户端模型路由失败,请使用显式提供程序/模型(例如:gh/gpt-5.1-codex)。", - "troubleshootingAmbiguousModels": "如果您收到不明确的模型错误,请选择提供程序前缀而不是裸模型 ID。", - "troubleshootingCodexFamily": "对于 GitHub Codex 系列模型,将模型保留为 gh/codex-model;路由器自动选择/响应。", - "troubleshootingTestConnection": "在从 IDE 或外部客户端进行测试之前,请使用仪表板 > 提供程序 > 测试连接。", + "troubleshootingModelRouting": "如果客户端在模型路由上失败,请使用显式 provider/model(例如:gh/gpt-5.1-codex)。", + "troubleshootingAmbiguousModels": "如果您收到不明确的模型错误,请选择提供商前缀而不是裸模型 ID。", + "troubleshootingCodexFamily": "对于 GitHub Codex 系列模型,请保持模型名为 `gh/codex-model`;路由器会自动选择 `/responses`。", + "troubleshootingTestConnection": "在从 IDE 或外部客户端进行测试之前,请使用仪表板 > 提供商 > 测试连接。", "troubleshootingCircuitBreaker": "如果提供商显示断路器已打开,请等待冷却或查看运行状况页面以了解详细信息。", - "troubleshootingOAuth": "对于 OAuth 提供商,如果令牌过期,请重新进行身份验证。检查提供商卡状态指示灯。" + "troubleshootingOAuth": "对于 OAuth 提供商,如果 Token 过期,请重新认证,并检查提供商卡片上的状态指示器。" }, "legal": { "privacyPolicy": "隐私政策", @@ -2436,21 +2523,21 @@ "policyLastUpdatedDate": "2026 年 2 月 13 日", "listSeparator": "-", "questionsVisit": "有问题吗?访问我们的", - "githubRepository": "GitHub 存储库", + "githubRepository": "GitHub 仓库", "privacySection1Title": "1. 本地优先架构", - "privacySection1Text": "OmniRoute 被设计为本地优先的应用程序。所有数据处理和存储完全发生在您的机器上。没有集中服务器收集您的信息。", + "privacySection1Text": "OmniRoute 是一款本地优先的应用。所有数据处理和存储都只发生在你的设备上,不存在集中式服务器收集你的信息。", "privacySection2Title": "2. 我们存储的数据", "privacyDataStoredIn": "以下数据存储在本地", - "privacyDataProviderConfigurationsDesc": "连接 URL、提供程序类型和优先级设置", + "privacyDataProviderConfigurationsDesc": "连接 URL、提供商类型和优先级设置", "privacyDataApiKeysDesc": "加密并存储在本地,以便与人工智能提供商进行身份验证", "privacyDataUsageLogsDesc": "请求计数、令牌使用情况、模型名称、时间戳和响应时间", "privacyDataApplicationSettingsDesc": "主题偏好、路由策略和组合配置", "privacySection3Title": "3. 无遥测", - "privacySection3Text": "OmniRoute 不收集遥测、分析或崩溃报告。不会向我们或任何第三方发送任何数据。您的使用模式、API 调用和配置完全保密。", + "privacySection3Text": "OmniRoute 不收集遥测、分析或崩溃报告。不会向我们或任何第三方发送数据。你的使用模式、API 调用和配置都会保持私密。", "privacySection4Title": "4. 第三方人工智能提供商", - "privacySection4Text": "当您通过 OmniRoute 进行 API 调用时,您的请求将转发到您已配置的 AI 提供商(例如:OpenAI、Anthropic、Google)。这些提供商有自己的隐私政策来管理他们如何处理您的数据。请查看:", + "privacySection4Text": "当你通过 OmniRoute 发起 API 调用时,请求会被转发到你配置的 AI 提供商(例如:OpenAI、Anthropic、Google)。这些提供商有各自的隐私政策,请查阅:", "privacyOpenAiPolicy": "OpenAI 隐私政策", - "privacyAnthropicPolicy": "人择隐私政策", + "privacyAnthropicPolicy": "Anthropic 隐私政策", "privacyGooglePolicy": "谷歌隐私政策", "privacySection5Title": "5. 云同步(可选)", "privacySection5Text": "如果您启用可选的云同步功能,提供商配置和 API 密钥可能会传输到配置的云端点。此功能默认处于禁用状态,需要明确选择加入。", @@ -2460,72 +2547,60 @@ "privacySection7TextStart": "由于所有数据都存储在本地,因此您拥有完全的控制权。您可以随时删除您的数据,方法是删除", "privacySection7TextEnd": "目录或使用仪表板中的数据库备份和恢复功能。", "termsSection1Title": "1. 概述", - "termsSection1Text": "OmniRoute 是本地优先的 AI API 代理路由器,完全在您的计算机上运行。它通过负载平衡、故障转移和使用情况跟踪将请求路由到多个 AI 提供商。", + "termsSection1Text": "OmniRoute 是一款本地优先的 AI API 代理路由器,完全运行在你的设备上。它通过负载均衡、故障回退和用量跟踪,将请求路由到多个 AI 提供商。", "termsSection2Title": "2. 用户的责任", - "termsResponsibilityApiKeys": "您全权负责管理您自己的 API 密钥和第三方 AI 提供商(OpenAI、Anthropic、Google 等)的凭证。", - "termsResponsibilityCompliance": "您必须遵守您通过 OmniRoute 访问其 API 的每个 AI 提供商的服务条款。", - "termsResponsibilitySecurity": "您负责本地 OmniRoute 安装的安全,包括设置密码和限制网络访问。", + "termsResponsibilityApiKeys": "你需要自行负责管理自己的 API 密钥,以及第三方 AI 提供商(OpenAI、Anthropic、Google 等)的凭证。", + "termsResponsibilityCompliance": "你必须遵守通过 OmniRoute 访问的每个 AI 提供商的服务条款。", + "termsResponsibilitySecurity": "你需要负责本地 OmniRoute 安装的安全,包括设置密码和限制网络访问。", "termsSection3Title": "3. 工作原理", - "termsSection3Text": "OmniRoute 充当中间代理。发送到 OmniRoute 的 API 调用将被转换并转发到您配置的 AI 提供商。除了必要的协议转换之外,OmniRoute 不会修改您的请求或响应的内容。", + "termsSection3Text": "OmniRoute 充当中间代理。发送到 OmniRoute 的 API 调用会被转换后转发到你配置的 AI 提供商。除必要的协议转换外,OmniRoute 不会修改你的请求或响应内容。", "termsSection4Title": "4. 数据处理", - "termsDataStoredLocally": "所有数据都存储在您本地计算机上的 SQLite 数据库中。", - "termsNoTransmission": "除非您明确启用云同步功能,否则 OmniRoute 不会将任何数据传输到外部服务器。", + "termsDataStoredLocally": "所有数据都保存在你本机上的 SQLite 数据库中。", + "termsNoTransmission": "除非你明确启用云同步功能,否则 OmniRoute 不会将任何数据传输到外部服务器。", "termsDataLocationText": "使用日志、API 密钥和配置存储在", "termsSection5Title": "5. 免责声明", - "termsSection5Text": "OmniRoute 按“原样”提供,不提供任何形式的保证。我们不对因 API 使用、服务中断或数据丢失而产生的任何费用负责。始终维护配置的备份。", + "termsSection5Text": "OmniRoute 按“原样”提供,不附带任何形式的保证。我们不对 API 使用成本、服务中断或数据丢失造成的任何损失负责。请始终为配置做好备份。", "termsSection6Title": "6. 开源", "termsSection6Text": "OmniRoute 是开源软件。您可以根据其许可条款自由检查、修改和分发它。" }, - "endpoints": { - "tabProxy": "端点代理", - "tabApiEndpoints": "API 端点", - "apiEndpointsTitle": "API 端点", - "apiEndpointsDescription": "可被其他应用程序和服务使用的后端API端点。", - "comingSoon": "即将推出", - "plannedFeatures": "计划的功能", - "featureRestApi": "REST API目录与交互式文档", - "featureWebhooks": "Webhook配置和事件订阅", - "featureSwagger": "OpenAPI / Swagger规范自动生成", - "featureAuth": "每个端点的API密钥和OAuth范围管理" - }, "agents": { - "title": "CLI Agents", - "description": "Discover installed CLI agents on your system. Add custom agents for auto-detection.", - "refresh": "Refresh", - "installed": "Installed", - "notFound": "Not Found", - "builtIn": "Built-in", - "custom": "Custom", - "remove": "Remove", - "addCustomAgent": "Add Custom Agent", - "addCustomAgentDesc": "Register any CLI tool for detection. It will be scanned automatically on refresh.", - "agentName": "Agent Name", - "binaryName": "Binary Name", - "versionCommand": "Version Command", - "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "title": "CLI 智能体", + "description": "发现系统中已安装的 CLI 智能体,并支持添加自定义智能体以便自动检测。", + "refresh": "刷新", + "installed": "已安装", + "notFound": "未找到", + "builtIn": "内置", + "custom": "自定义", + "remove": "移除", + "addCustomAgent": "添加自定义智能体", + "addCustomAgentDesc": "注册任意 CLI 工具用于检测,刷新时会自动扫描。", + "agentName": "智能体名称", + "binaryName": "可执行文件名", + "versionCommand": "版本命令", + "spawnArgs": "启动参数", + "addAgent": "添加智能体" }, "autoCombo": { - "title": "Auto-Combo Engine", - "statusNormal": "Normal", - "statusIncident": "Incident Mode", - "modePack": "Mode Pack", - "providerScores": "Provider Scores", - "noAutoCombo": "No auto-combo configured.", - "excludedProviders": "Excluded Providers", - "noExclusions": "No providers currently excluded.", - "factorQuota": "Quota", - "factorHealth": "Health", - "factorCost": "Cost", - "factorLatency": "Latency", - "factorTaskFit": "Task Fit", - "factorStability": "Stability", - "factorTierPriority": "Tier Priority", - "factorTierPriorityDesc": "Prefers accounts with higher quota tiers (Ultra/Pro over Free)", - "scoreFactorBreakdown": "Scoring Factors", - "modePackShipFast": "Ship Fast", - "modePackCostSaver": "Cost Saver", - "modePackQualityFirst": "Quality First", - "modePackOfflineFriendly": "Offline Friendly" + "title": "自动组合引擎", + "statusNormal": "正常", + "statusIncident": "事件模式", + "modePack": "模式包", + "providerScores": "提供商得分", + "noAutoCombo": "尚未配置自动组合。", + "excludedProviders": "已排除的提供商", + "noExclusions": "当前没有被排除的提供商。", + "factorQuota": "配额", + "factorHealth": "健康度", + "factorCost": "成本", + "factorLatency": "延迟", + "factorTaskFit": "任务匹配度", + "factorStability": "稳定性", + "factorTierPriority": "套餐优先级", + "factorTierPriorityDesc": "优先选择配额等级更高的账户(Ultra/Pro 高于 Free)", + "scoreFactorBreakdown": "评分因子", + "modePackShipFast": "快速交付", + "modePackCostSaver": "节省成本", + "modePackQualityFirst": "质量优先", + "modePackOfflineFriendly": "离线友好" } }