diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 4aa13b6441..3d55bf1cc4 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -54,8 +54,8 @@ "none": "无", "yes": "是的", "no": "否", - "on": "__MISSING__:ON", - "off": "__MISSING__:OFF", + "on": "开启", + "off": "关闭", "warning": "警告", "note": "注意事项", "free": "免费", @@ -160,7 +160,7 @@ "noLockouts": "无锁定", "webSearchDesc": "Web Search 功能说明", "audioProvidersHeading": "音频 Provider", - "cloudAgentProviders": "__MISSING__:Cloud Agent Providers", + "cloudAgentProviders": "云代理提供商", "minutesAgo": "分钟前", "a": "A", "liveAutoRefreshing": "实时自动刷新中", @@ -367,10 +367,10 @@ "apiKeyForCheck": "用于检查的 API 密钥", "cloudRequestTimeout": "云端请求超时", "showConfiguredOnly": "显示已配置仅", - "showFreeOnly": "__MISSING__:Free only", - "addFirstProvider": "__MISSING__:Add your first provider", - "addFirstProviderDesc": "__MISSING__:Connect an AI provider to start routing requests through OmniRoute. You can use free providers, API keys, or OAuth accounts.", - "learnMore": "__MISSING__:Learn more", + "showFreeOnly": "仅显示免费", + "addFirstProvider": "添加你的第一个提供商", + "addFirstProviderDesc": "连接 AI 提供商,通过 OmniRoute 路由请求。可以使用免费提供商、API 密钥或 OAuth 账号。", + "learnMore": "了解更多", "includeDomains": "包含域名", "promptCache": "提示缓存", "cloudConnected": "Cloud 已连接", @@ -659,56 +659,56 @@ "learnedFromHeaders": "从响应头学习", "totalRequests": "总计请求", "cloudUnstableNote": "Cloud 连接不稳定,部分功能可能受影响。", - "gamificationAdmin": "__MISSING__:Gamification Admin", - "monitorAnomaliesAndHealth": "__MISSING__:Monitor anomalies and system health", - "flaggedAnomalies": "__MISSING__:Flagged Anomalies", - "noAnomaliesDetected": "__MISSING__:No anomalies detected", - "apiKey": "__MISSING__:API Key", - "xpLastHour": "__MISSING__:XP (1h)", - "zScore": "__MISSING__:Z-Score", - "tokensCommunityServers": "__MISSING__:Community Servers", - "tokensServerNamePlaceholder": "__MISSING__:Server name", - "tokensApiKeyPlaceholder": "__MISSING__:API key", - "tokensTokenBalance": "__MISSING__:Token Balance", - "tokensSendTokens": "__MISSING__:Send Tokens", - "tokensRecipientApiKeyId": "__MISSING__:Recipient API Key ID", - "tokensRecipientApiKeyIdPlaceholder": "__MISSING__:Enter recipient API key ID", - "tokensReasonOptional": "__MISSING__:Reason (optional)", - "tokensReasonPlaceholder": "__MISSING__:e.g. bonus, reward", - "tokensTransactionHistory": "__MISSING__:Transaction History", - "tokensNoTransactionsYet": "__MISSING__:No transactions yet", - "tokensInviteCodes": "__MISSING__:Invite Codes", - "tokensMaxUses": "__MISSING__:Max Uses", - "tokensRedeemCode": "__MISSING__:Redeem Code", - "tokensRedeemCodePlaceholder": "__MISSING__:Enter invite code", - "tokensYourActiveInvites": "__MISSING__:Your Active Invites", - "tierCoverageTitle": "__MISSING__:Tier coverage", - "tierCoverageSubtitle": "__MISSING__:Providers configured per fallback tier", - "batchDetailCopyId": "__MISSING__:Copy ID", - "batchDetailClose": "__MISSING__:Close", - "batchDetailEndpoint": "__MISSING__:Endpoint", - "batchDetailModel": "__MISSING__:Model", - "batchDetailWindow": "__MISSING__:Window", - "batchDetailCreated": "__MISSING__:Created", - "providerTopologyEmpty": "__MISSING__:No providers connected yet", - "badgeToastUnlocked": "__MISSING__:Badge Unlocked!", - "batchListSearchPlaceholder": "__MISSING__:Search by ID, endpoint, model…", - "batchListDeleteAllCompletedTitle": "__MISSING__:Delete all completed batches", - "batchListBatchesTable": "__MISSING__:Batches", - "changelogViewerLoading": "__MISSING__:Loading changelog from GitHub...", - "profileLoading": "__MISSING__:Loading profile...", - "profileHowToEarn": "__MISSING__:How to earn", - "bootstrapBannerDismiss": "__MISSING__:Dismiss", - "batchListDeleteBatchTitle": "__MISSING__:Delete batch and its files", - "leaderboardYourRank": "__MISSING__:Your Rank", - "leaderboardLoading": "__MISSING__:Loading leaderboard...", - "batchFileDetailCopyId": "__MISSING__:Copy ID", - "batchFileDetailClose": "__MISSING__:Close", - "batchFileDetailFailedToLoad": "__MISSING__:Failed to load file contents", - "batchFilesListSearchPlaceholder": "__MISSING__:Search by ID or filename…", - "batchFilesListFilesTable": "__MISSING__:Files", - "batchPageLoadingMore": "__MISSING__:Loading more…", - "recommended": "__MISSING__:Recommended" + "gamificationAdmin": "游戏化管理", + "monitorAnomaliesAndHealth": "监控异常情况与系统健康", + "flaggedAnomalies": "已标记的异常", + "noAnomaliesDetected": "未检测到异常", + "apiKey": "API 密钥", + "xpLastHour": "经验值(1 小时)", + "zScore": "Z 分数", + "tokensCommunityServers": "社区服务器", + "tokensServerNamePlaceholder": "服务器名称", + "tokensApiKeyPlaceholder": "API 密钥", + "tokensTokenBalance": "Token 余额", + "tokensSendTokens": "发送 Token", + "tokensRecipientApiKeyId": "接收方 API 密钥 ID", + "tokensRecipientApiKeyIdPlaceholder": "输入接收方 API 密钥 ID", + "tokensReasonOptional": "原因(可选)", + "tokensReasonPlaceholder": "例如:奖励、感谢", + "tokensTransactionHistory": "交易历史", + "tokensNoTransactionsYet": "暂无交易记录", + "tokensInviteCodes": "邀请码", + "tokensMaxUses": "最大使用次数", + "tokensRedeemCode": "兑换邀请码", + "tokensRedeemCodePlaceholder": "输入邀请码", + "tokensYourActiveInvites": "你的有效邀请", + "tierCoverageTitle": "层级覆盖率", + "tierCoverageSubtitle": "每个回退层级所配置的提供商数", + "batchDetailCopyId": "复制 ID", + "batchDetailClose": "关闭", + "batchDetailEndpoint": "端点", + "batchDetailModel": "模型", + "batchDetailWindow": "窗口", + "batchDetailCreated": "创建时间", + "providerTopologyEmpty": "尚未连接任何提供商", + "badgeToastUnlocked": "解锁徽章!", + "batchListSearchPlaceholder": "按 ID、端点或模型搜索…", + "batchListDeleteAllCompletedTitle": "删除所有已完成批次", + "batchListBatchesTable": "批次列表", + "changelogViewerLoading": "正在从 GitHub 加载更新日志...", + "profileLoading": "正在加载个人资料...", + "profileHowToEarn": "如何获取", + "bootstrapBannerDismiss": "关闭", + "batchListDeleteBatchTitle": "删除批次及其文件", + "leaderboardYourRank": "你的排名", + "leaderboardLoading": "正在加载排行榜...", + "batchFileDetailCopyId": "复制 ID", + "batchFileDetailClose": "关闭", + "batchFileDetailFailedToLoad": "加载文件内容失败", + "batchFilesListSearchPlaceholder": "按 ID 或文件名搜索…", + "batchFilesListFilesTable": "文件列表", + "batchPageLoadingMore": "正在加载更多…", + "recommended": "推荐" }, "sidebar": { "home": "首页", @@ -728,24 +728,24 @@ "playground": "演练场", "searchTools": "搜索工具", "agents": "智能体", - "cloudAgents": "__MISSING__:Cloud Agents", + "cloudAgents": "云代理", "memory": "记忆", "skills": "技能", - "omniSkills": "__MISSING__:OmniSkills", - "agentSkills": "__MISSING__:AgentSkills", + "omniSkills": "OmniSkills", + "agentSkills": "代理技能", "docs": "文档", "issues": "问题反馈", "endpoints": "端点", - "endpointsSubtitle": "__MISSING__:Your AI connection URLs", + "endpointsSubtitle": "你的 AI 连接 URL", "apiManager": "API 管理", - "apiManagerSubtitle": "__MISSING__:Manage API keys and access", + "apiManagerSubtitle": "管理 API 密钥与访问权限", "logs": "日志", "webhooks": "Webhook", - "webhooksSubtitle": "__MISSING__:Get notified of events", - "combosSubtitle": "__MISSING__:Group providers for failover", - "batchSubtitle": "__MISSING__:Process multiple requests", - "contextCavemanSubtitle": "__MISSING__:Prompt compression", - "contextRtkSubtitle": "__MISSING__:Output filtering", + "webhooksSubtitle": "事件通知", + "combosSubtitle": "组合提供商以实现故障切换", + "batchSubtitle": "批量处理多个请求", + "contextCavemanSubtitle": "提示压缩", + "contextRtkSubtitle": "输出过滤", "auditLog": "审计日志", "shutdown": "停止服务", "restart": "重启服务", @@ -839,13 +839,13 @@ "logsConsole": "Console", "logsActivity": "Activity", "auditMcp": "MCP Audit", - "auditA2a": "__MISSING__:A2A Audit", + "auditA2a": "A2A 审计", "settingsGeneral": "General", "settingsAppearance": "Appearance", "settingsAi": "AI Settings", "settingsSecurity": "Security", - "settingsFeatureFlags": "__MISSING__:Feature Flags", - "settingsAuthz": "__MISSING__:Authz", + "settingsFeatureFlags": "特性开关", + "settingsAuthz": "授权", "settingsRouting": "Routing", "settingsResilience": "Resilience", "settingsAdvanced": "Advanced", @@ -879,12 +879,12 @@ "proxySubtitle": "HTTP proxy settings", "mitmProxySubtitle": "MITM interception", "oneProxySubtitle": "Public proxy gateway", - "leaderboard": "__MISSING__:Leaderboard", - "profile": "__MISSING__:Profile", - "tokens": "__MISSING__:Tokens", - "leaderboardSubtitle": "__MISSING__:Gamification rankings", - "profileSubtitle": "__MISSING__:User achievements", - "tokensSubtitle": "__MISSING__:Manage token balance", + "leaderboard": "排行榜", + "profile": "个人资料", + "tokens": "Token 管理", + "leaderboardSubtitle": "游戏化排名", + "profileSubtitle": "用户成就", + "tokensSubtitle": "管理 Token 余额", "usageSubtitle": "Traffic and usage stats", "analyticsComboHealthSubtitle": "Combo target reliability", "analyticsUtilizationSubtitle": "Provider utilization", @@ -922,8 +922,8 @@ "settingsResilienceSubtitle": "Retries and breakers", "settingsAdvancedSubtitle": "Power user options", "settingsSecuritySubtitle": "Auth and encryption", - "settingsFeatureFlagsSubtitle": "__MISSING__:Toggle system capabilities", - "settingsAuthzSubtitle": "__MISSING__:Route inventory and bypass policy", + "settingsFeatureFlagsSubtitle": "切换系统能力", + "settingsAuthzSubtitle": "路由清单与绕过策略", "docsSubtitle": "Documentation", "issuesSubtitle": "Report a bug", "changelogSubtitle": "Release notes", @@ -1026,23 +1026,23 @@ "success": "成功", "failure": "失败", "noMcpEvents": "尚未记录 MCP 审计事件。", - "a2aAudit": "__MISSING__:A2A Audit", - "a2aAuditDesc": "__MISSING__:Task execution audit trail recorded by the A2A server.", - "a2aShowingTasks": "__MISSING__:Showing {count} of {total} tasks", - "a2aSkill": "__MISSING__:Skill", - "a2aSkillPlaceholder": "__MISSING__:Filter by skill name", - "a2aState": "__MISSING__:State", - "a2aAllStates": "__MISSING__:All states", - "a2aStateSubmitted": "__MISSING__:Submitted", - "a2aStateWorking": "__MISSING__:Working", - "a2aStateCompleted": "__MISSING__:Completed", - "a2aStateFailed": "__MISSING__:Failed", - "a2aStateCancelled": "__MISSING__:Cancelled", - "a2aTaskId": "__MISSING__:Task ID", - "a2aEvents": "__MISSING__:Events", - "a2aArtifacts": "__MISSING__:Artifacts", - "a2aNoTasks": "__MISSING__:No A2A tasks recorded.", - "a2aLoadingTasks": "__MISSING__:Loading A2A tasks..." + "a2aAudit": "A2A 审计", + "a2aAuditDesc": "由 A2A 服务器记录的任务执行审计跟踪。", + "a2aShowingTasks": "显示 {count} / {total} 个任务", + "a2aSkill": "技能", + "a2aSkillPlaceholder": "按技能名筛选", + "a2aState": "状态", + "a2aAllStates": "所有状态", + "a2aStateSubmitted": "已提交", + "a2aStateWorking": "执行中", + "a2aStateCompleted": "已完成", + "a2aStateFailed": "已失败", + "a2aStateCancelled": "已取消", + "a2aTaskId": "任务 ID", + "a2aEvents": "事件", + "a2aArtifacts": "产物", + "a2aNoTasks": "暂无 A2A 任务记录。", + "a2aLoadingTasks": "正在加载 A2A 任务..." }, "themesPage": { "title": "主题", @@ -1118,35 +1118,35 @@ "logsConsoleDescription": "Application console output and debug logs", "logsActivityDescription": "Audit trail of user actions and system events", "auditMcpDescription": "MCP tool invocation audit trail and compliance records", - "auditA2a": "__MISSING__:A2A Audit", - "auditA2aDescription": "__MISSING__:A2A task execution audit trail, state transitions, and skill invocation records", + "auditA2a": "A2A 审计", + "auditA2aDescription": "A2A 任务执行审计跟踪、状态变更与技能调用记录", "settingsGeneralDescription": "Storage, database, and general instance configuration", "settingsAppearanceDescription": "Theme, branding, and visual customization", "settingsAiDescription": "AI behaviors, thinking budgets, vision, and memory settings", "settingsSecurityDescription": "Authentication, authorization, and access control settings", - "featureFlags": "__MISSING__:Feature Flags", - "featureFlagsDescription": "__MISSING__:Control system capabilities and experimental features", - "featureFlagsActive": "__MISSING__:{count} active", - "featureFlagsInactive": "__MISSING__:{count} inactive", - "featureFlagsOverrides": "__MISSING__:{count} DB overrides", - "featureFlagsSearch": "__MISSING__:Search flags...", - "featureFlagsCategoryAll": "__MISSING__:All", - "featureFlagsCategorySecurity": "__MISSING__:Security", - "featureFlagsCategoryNetwork": "__MISSING__:Network", - "featureFlagsCategoryPolicies": "__MISSING__:Policies", - "featureFlagsCategoryRuntime": "__MISSING__:Runtime", - "featureFlagsCategoryCli": "__MISSING__:CLI", - "featureFlagsCategoryHealth": "__MISSING__:Health", - "featureFlagsSourceDb": "__MISSING__:DB", - "featureFlagsSourceEnv": "__MISSING__:ENV", - "featureFlagsSourceDefault": "__MISSING__:DEF", - "featureFlagsReset": "__MISSING__:Reset", - "featureFlagsResetAll": "__MISSING__:Reset All Overrides", - "featureFlagsResetAllConfirm": "__MISSING__:Are you sure you want to reset all feature flag overrides? This will revert all flags to their ENV or default values.", - "featureFlagsRestartRequired": "__MISSING__:Restart required to apply", - "featureFlagsNoResults": "__MISSING__:No flags match your search", - "featureFlagsSaved": "__MISSING__:Flag updated", - "featureFlagsError": "__MISSING__:Failed to update flag", + "featureFlags": "特性开关", + "featureFlagsDescription": "控制系统能力与实验性功能", + "featureFlagsActive": "{count} 个已启用", + "featureFlagsInactive": "{count} 个未启用", + "featureFlagsOverrides": "{count} 个数据库覆盖", + "featureFlagsSearch": "搜索特性开关...", + "featureFlagsCategoryAll": "全部", + "featureFlagsCategorySecurity": "安全", + "featureFlagsCategoryNetwork": "网络", + "featureFlagsCategoryPolicies": "策略", + "featureFlagsCategoryRuntime": "运行时", + "featureFlagsCategoryCli": "CLI", + "featureFlagsCategoryHealth": "健康", + "featureFlagsSourceDb": "数据库", + "featureFlagsSourceEnv": "环境变量", + "featureFlagsSourceDefault": "默认值", + "featureFlagsReset": "重置", + "featureFlagsResetAll": "重置所有覆盖", + "featureFlagsResetAllConfirm": "确定要重置所有特性开关覆盖吗?所有开关将恢复为环境变量或默认值。", + "featureFlagsRestartRequired": "需要重启才能生效", + "featureFlagsNoResults": "没有匹配的特性开关", + "featureFlagsSaved": "已更新特性开关", + "featureFlagsError": "更新特性开关失败", "settingsRoutingDescription": "Routing rules, model aliases, combo defaults, and degradation settings", "settingsResilienceDescription": "Circuit breaker, retry, and fallback configuration", "settingsAdvancedDescription": "Advanced payload rules, request limits, and proxy API settings", @@ -1168,8 +1168,8 @@ "providersOverview": "提供商概览", "configuredOf": "{total} 个可用提供商中已配置 {configured} 个", "noModelsAvailable": "该提供商当前没有可用模型。", - "noProvidersConfigured": "__MISSING__:No providers configured yet", - "addProvider": "__MISSING__:Add a provider", + "noProvidersConfigured": "尚未配置任何提供商", + "addProvider": "添加提供商", "configureFirst": "首先在 {providers} 中配置连接", "configureProvider": "配置提供商", "modelAvailable": "{count} 模型可用", @@ -1191,86 +1191,86 @@ "updating": "更新中...", "updateAvailableDesc": "有新版本可用。点击更新。", "updateStarted": "更新已开始...", - "reloadingPageAutomatically": "__MISSING__:Reloading page automatically...", + "reloadingPageAutomatically": "正在自动重新加载页面...", "providerTopology": "提供商拓扑" }, "analytics": { "title": "分析", - "usageAnalyticsTitle": "__MISSING__:Usage Analytics", - "diversityScoreTitle": "__MISSING__:Provider Diversity", - "diversityScoreDesc": "__MISSING__:Provider concentration snapshot for the recent traffic window.", - "diversityShannonEntropy": "__MISSING__:Shannon entropy", - "diversityWindow": "__MISSING__:Window: {count} reqs · Last {mins} mins", - "diversityHealthy": "__MISSING__:Healthy Distribution", - "diversityRiskHigh": "__MISSING__:High Vendor Lock-in Risk", - "diversityRiskModerate": "__MISSING__:Moderate Distribution", - "diversityScoreLabel": "__MISSING__:score", - "diversityHigherExplanation": "__MISSING__:Higher values mean traffic is spread across multiple providers.", - "diversityNoData": "__MISSING__:No recent usage data available.", - "chartRequests": "__MISSING__:Requests", - "chartInput": "__MISSING__:Input", - "chartOutput": "__MISSING__:Output", - "chartTotal": "__MISSING__:Total", - "chartCost": "__MISSING__:Cost", - "chartShare": "__MISSING__:Share", - "chartServiceTier": "__MISSING__:Service Tier", - "chartServiceTierSplit": "__MISSING__:Fast / Standard cost split", - "chartCostPct": "__MISSING__:{pct}% of cost", - "chartUsageDetail": "__MISSING__:Usage Detail", - "chartCacheRead": "__MISSING__:Cache read", - "chartCostByProvider": "__MISSING__:Cost by Provider", - "chartNoCostData": "__MISSING__:No cost data", - "chartModelUsageOverTime": "__MISSING__:Model Usage Over Time", - "chartNoData": "__MISSING__:No data", - "chartWeekly": "__MISSING__:Weekly", - "chartModelBreakdown": "__MISSING__:Model Breakdown", - "chartModel": "__MISSING__:Model", - "chartProvider": "__MISSING__:Provider", - "chartProviderBreakdown": "__MISSING__:Provider Breakdown", - "filterAllKeys": "__MISSING__:All Keys", - "filterSearchKeys": "__MISSING__:Search keys…", - "filterNoKeysMatch": "__MISSING__:No keys match", - "filterOneKey": "__MISSING__:1 key", - "filterMultipleKeys": "__MISSING__:{count} keys", - "rangeToday": "__MISSING__:Today", - "rangeYesterday": "__MISSING__:Yesterday", - "rangeLast3Days": "__MISSING__:Last 3 days", - "rangeThisWeek": "__MISSING__:This week", - "rangeLast14Days": "__MISSING__:Last 14 days", - "rangeThisMonth": "__MISSING__:This month", - "rangeQuickSelect": "__MISSING__:Quick Select", - "rangeStart": "__MISSING__:Start", - "rangeEnd": "__MISSING__:End", - "rangeCancel": "__MISSING__:Cancel", - "rangeApply": "__MISSING__:Apply", - "rangeErrorInvalid": "__MISSING__:Start must be before end", - "period1D": "__MISSING__:1D", - "period7D": "__MISSING__:7D", - "period30D": "__MISSING__:30D", - "period90D": "__MISSING__:90D", - "periodYTD": "__MISSING__:YTD", - "periodAll": "__MISSING__:All", - "totalTokens": "__MISSING__:Total Tokens", - "inputTokens": "__MISSING__:Input Tokens", - "outputTokens": "__MISSING__:Output Tokens", - "estCost": "__MISSING__:Est. Cost", - "infraTitle": "__MISSING__:Infrastructure", - "infraAccounts": "__MISSING__:Accounts", - "infraProviders": "__MISSING__:Providers", - "infraApiKeys": "__MISSING__:API Keys", - "infraModels": "__MISSING__:Models", - "perfTitle": "__MISSING__:Performance", - "perfAvgTokens": "__MISSING__:Avg Tokens/Req", - "perfCostReq": "__MISSING__:Cost/Req", - "perfIoRatio": "__MISSING__:I/O Ratio", - "perfFastReq": "__MISSING__:Fast Requests", - "highlightsTitle": "__MISSING__:Highlights", - "highlightsTopModel": "__MISSING__:Top Model", - "highlightsTopProvider": "__MISSING__:Top Provider", - "highlightsBusiestDay": "__MISSING__:Busiest Day", - "highlightsDiversity": "__MISSING__:Diversity", - "highlightsFallbackRate": "__MISSING__:Fallback Rate", - "customRange": "__MISSING__:Custom", + "usageAnalyticsTitle": "用量分析", + "diversityScoreTitle": "提供商多样性", + "diversityScoreDesc": "近期流量窗口内提供商集中度的快照。", + "diversityShannonEntropy": "香农熵", + "diversityWindow": "窗口:{count} 次请求 · 最近 {mins} 分钟", + "diversityHealthy": "分布健康", + "diversityRiskHigh": "供应商锁定风险高", + "diversityRiskModerate": "分布一般", + "diversityScoreLabel": "得分", + "diversityHigherExplanation": "数值越高,表示流量分散到的提供商越多。", + "diversityNoData": "暂无近期用量数据。", + "chartRequests": "请求数", + "chartInput": "输入", + "chartOutput": "输出", + "chartTotal": "合计", + "chartCost": "成本", + "chartShare": "占比", + "chartServiceTier": "服务层级", + "chartServiceTierSplit": "Fast / Standard 成本拆分", + "chartCostPct": "占成本 {pct}%", + "chartUsageDetail": "用量明细", + "chartCacheRead": "缓存读取", + "chartCostByProvider": "按提供商划分的成本", + "chartNoCostData": "无成本数据", + "chartModelUsageOverTime": "模型用量趋势", + "chartNoData": "无数据", + "chartWeekly": "每周", + "chartModelBreakdown": "按模型拆分", + "chartModel": "模型", + "chartProvider": "提供商", + "chartProviderBreakdown": "按提供商拆分", + "filterAllKeys": "全部密钥", + "filterSearchKeys": "搜索密钥…", + "filterNoKeysMatch": "没有匹配的密钥", + "filterOneKey": "1 个密钥", + "filterMultipleKeys": "{count} 个密钥", + "rangeToday": "今天", + "rangeYesterday": "昨天", + "rangeLast3Days": "最近 3 天", + "rangeThisWeek": "本周", + "rangeLast14Days": "最近 14 天", + "rangeThisMonth": "本月", + "rangeQuickSelect": "快速选择", + "rangeStart": "起始", + "rangeEnd": "结束", + "rangeCancel": "取消", + "rangeApply": "应用", + "rangeErrorInvalid": "起始时间必须早于结束时间", + "period1D": "1 天", + "period7D": "7 天", + "period30D": "30 天", + "period90D": "90 天", + "periodYTD": "年初至今", + "periodAll": "全部", + "totalTokens": "总 Token 数", + "inputTokens": "输入 Token", + "outputTokens": "输出 Token", + "estCost": "预估成本", + "infraTitle": "基础设施", + "infraAccounts": "账号", + "infraProviders": "提供商", + "infraApiKeys": "API 密钥", + "infraModels": "模型", + "perfTitle": "性能", + "perfAvgTokens": "平均 Token / 请求", + "perfCostReq": "成本 / 请求", + "perfIoRatio": "输入/输出比", + "perfFastReq": "Fast 请求", + "highlightsTitle": "亮点", + "highlightsTopModel": "热门模型", + "highlightsTopProvider": "热门提供商", + "highlightsBusiestDay": "最繁忙的一天", + "highlightsDiversity": "多样性", + "highlightsFallbackRate": "回退率", + "customRange": "自定义", "overviewDescription": "监控所有提供商和模型的 API 使用模式、令牌消耗、成本和活动趋势。", "evalsDescription": "运行评估套件来测试和验证您的 LLM 端点。比较模型质量、检测回归和基准延迟。", "overview": "概述", @@ -1285,49 +1285,49 @@ "comboHealthDescription": "组合级别配额、使用分布和性能指标", "compressionAnalyticsTitle": "压缩分析", "compressionAnalyticsDescription": "压缩分析 — token 节省、模式分布和提供商统计。", - "autoRoutingTotalAutoRequests": "__MISSING__:Total Auto Requests", - "autoRoutingAvgSelectionScore": "__MISSING__:Avg Selection Score", - "autoRoutingExplorationRate": "__MISSING__:Exploration Rate", - "autoRoutingLkgpHitRate": "__MISSING__:LKGP Hit Rate", - "autoRoutingRequestsByVariant": "__MISSING__:Requests by Variant", - "autoRoutingTopRoutedProviders": "__MISSING__:Top Routed Providers", - "comboHealthWorstQuotaLeft": "__MISSING__:Worst quota left", - "comboHealthUsageSkew": "__MISSING__:Usage skew", - "comboHealthSuccessRate": "__MISSING__:Success rate", - "comboHealthQuotaHealth": "__MISSING__:Quota health", - "comboHealthRequests": "__MISSING__:Requests", - "comboHealthTokens": "__MISSING__:Tokens", - "comboHealthAvgLatency": "__MISSING__:Avg latency", - "comboHealthTotalRequests": "__MISSING__:Total requests", - "comboHealthExecutionTargets": "__MISSING__:Execution targets", - "comboHealthSuccess": "__MISSING__:Success", - "comboHealthLatency": "__MISSING__:Latency", - "comboHealthQuota": "__MISSING__:Quota", - "comboHealthTitle": "__MISSING__:Combo health", - "comboHealthUnableToLoad": "__MISSING__:Unable to load combo health", - "comboHealthGettingStarted": "__MISSING__:Getting started", - "compressionAnalyticsTotalRequests": "__MISSING__:Total Requests", - "compressionAnalyticsTokensSaved": "__MISSING__:Tokens Saved", - "compressionAnalyticsAvgSavings": "__MISSING__:Avg Savings", - "compressionAnalyticsAvgDuration": "__MISSING__:Avg Duration", - "compressionAnalyticsReceipts": "__MISSING__:Receipts", - "compressionAnalyticsFallbacks": "__MISSING__:Fallbacks", - "compressionAnalyticsPromptTokens": "__MISSING__:Prompt tokens", - "compressionAnalyticsCompletionTokens": "__MISSING__:Completion tokens", - "compressionAnalyticsTotalTokens": "__MISSING__:Total tokens", - "compressionAnalyticsCacheTokens": "__MISSING__:Cache tokens", - "compressionAnalyticsNoDataYet": "__MISSING__:No compression data yet", - "searchAnalyticsTotalSearches": "__MISSING__:Total Searches", - "searchAnalyticsCacheHitRate": "__MISSING__:Cache Hit Rate", - "searchAnalyticsTotalCost": "__MISSING__:Total Cost", - "searchAnalyticsAvgResponse": "__MISSING__:Avg Response", - "searchAnalyticsNoSearchesYet": "__MISSING__:No searches yet", - "providerUtilizationTitle": "__MISSING__:Provider utilization", - "providerUtilizationFailedToLoad": "__MISSING__:Failed to load utilization data", - "providerUtilizationNoData": "__MISSING__:No utilization data available", - "providerUtilizationGettingStarted": "__MISSING__:Getting started", - "providerUtilizationLatestSnapshot": "__MISSING__:Latest quota snapshot", - "providerUtilizationRemainingCapacity": "__MISSING__:Remaining capacity" + "autoRoutingTotalAutoRequests": "自动路由请求总数", + "autoRoutingAvgSelectionScore": "平均选择得分", + "autoRoutingExplorationRate": "探索率", + "autoRoutingLkgpHitRate": "LKGP 命中率", + "autoRoutingRequestsByVariant": "按变体划分的请求数", + "autoRoutingTopRoutedProviders": "路由次数最多的提供商", + "comboHealthWorstQuotaLeft": "最低剩余配额", + "comboHealthUsageSkew": "用量偏斜", + "comboHealthSuccessRate": "成功率", + "comboHealthQuotaHealth": "配额健康", + "comboHealthRequests": "请求数", + "comboHealthTokens": "Token 数", + "comboHealthAvgLatency": "平均延迟", + "comboHealthTotalRequests": "请求总数", + "comboHealthExecutionTargets": "执行目标", + "comboHealthSuccess": "成功", + "comboHealthLatency": "延迟", + "comboHealthQuota": "配额", + "comboHealthTitle": "组合健康", + "comboHealthUnableToLoad": "无法加载组合健康数据", + "comboHealthGettingStarted": "快速开始", + "compressionAnalyticsTotalRequests": "请求总数", + "compressionAnalyticsTokensSaved": "节省的 Token", + "compressionAnalyticsAvgSavings": "平均节省", + "compressionAnalyticsAvgDuration": "平均耗时", + "compressionAnalyticsReceipts": "回执", + "compressionAnalyticsFallbacks": "回退次数", + "compressionAnalyticsPromptTokens": "提示 Token", + "compressionAnalyticsCompletionTokens": "补全 Token", + "compressionAnalyticsTotalTokens": "总 Token", + "compressionAnalyticsCacheTokens": "缓存 Token", + "compressionAnalyticsNoDataYet": "暂无压缩数据", + "searchAnalyticsTotalSearches": "搜索总数", + "searchAnalyticsCacheHitRate": "缓存命中率", + "searchAnalyticsTotalCost": "总成本", + "searchAnalyticsAvgResponse": "平均响应时间", + "searchAnalyticsNoSearchesYet": "暂无搜索记录", + "providerUtilizationTitle": "提供商利用率", + "providerUtilizationFailedToLoad": "加载利用率数据失败", + "providerUtilizationNoData": "暂无利用率数据", + "providerUtilizationGettingStarted": "快速开始", + "providerUtilizationLatestSnapshot": "最新配额快照", + "providerUtilizationRemainingCapacity": "剩余容量" }, "apiManager": { "title": "API 密钥", @@ -1375,7 +1375,7 @@ "keyName": "密钥名称", "keyNamePlaceholder": "例如:生产环境密钥、开发环境密钥", "keyNameDesc": "使用清晰的名称标识该密钥的用途", - "managementAccessDesc": "__MISSING__:Allow this API key to manage OmniRoute configuration.", + "managementAccessDesc": "允许此 API 密钥管理 OmniRoute 配置。", "keyCreated": "API 密钥已创建", "keyCreatedSuccess": "密钥创建成功!", "keyCreatedNote": "请立即复制并保存此密钥,它不会再次显示。", @@ -1430,30 +1430,30 @@ "lastUsedOn": "最近使用:{date}", "editPermissions": "编辑权限", "deleteKey": "删除密钥", - "regenerateKey": "__MISSING__:Regenerate key", - "regenerateConfirm": "__MISSING__:Are you sure you want to regenerate this API key? The old key will be immediately invalidated.", - "failedRegenerateKey": "__MISSING__:Failed to regenerate API key", - "failedRegenerateKeyRetry": "__MISSING__:Failed to regenerate API key. Please try again.", + "regenerateKey": "重新生成密钥", + "regenerateConfirm": "确定要重新生成此 API 密钥吗?旧密钥将立即失效。", + "failedRegenerateKey": "重新生成 API 密钥失败", + "failedRegenerateKeyRetry": "重新生成 API 密钥失败,请重试。", "model": "{count} 个模型", "models": "{count} 个模型", "permissionsTitle": "权限:{name}", "allowAllDesc": "该密钥可访问所有可用模型。", "restrictDesc": "该密钥可访问 {totalModels} 个模型中的 {selectedCount} 个。", "selectedCount": "已选择 {count} 个", - "maxActiveSessions": "__MISSING__:Max Active Sessions", - "apiManagerCustomRateLimits": "__MISSING__:Custom Rate Limits", - "apiManagerCustomRateLimitsDesc": "__MISSING__:Override global default limits. Leave empty to use defaults.", - "apiManagerRateLimitRequestsPlaceholder": "__MISSING__:Requests", - "apiManagerRateLimitReqPer": "__MISSING__:req /", - "apiManagerRateLimitSecondsPlaceholder": "__MISSING__:Seconds", - "apiManagerRemoveLimitTitle": "__MISSING__:Remove limit", - "apiManagerTimezonePlaceholder": "__MISSING__:America/Sao_Paulo", - "noLogPayloadPrivacy": "__MISSING__:No-Log Payload Privacy", - "bannedStatus": "__MISSING__:Banned Status", - "managementApiAccess": "__MISSING__:Management API Access", - "expirationDate": "__MISSING__:Expiration Date", - "managementAccess": "__MISSING__:Management Access", - "allowedConnections": "__MISSING__:Allowed Connections" + "maxActiveSessions": "最大活跃会话数", + "apiManagerCustomRateLimits": "自定义速率限制", + "apiManagerCustomRateLimitsDesc": "覆盖全局默认限制,留空则使用默认值。", + "apiManagerRateLimitRequestsPlaceholder": "请求数", + "apiManagerRateLimitReqPer": "次请求 /", + "apiManagerRateLimitSecondsPlaceholder": "秒", + "apiManagerRemoveLimitTitle": "移除限制", + "apiManagerTimezonePlaceholder": "America/Sao_Paulo", + "noLogPayloadPrivacy": "禁用日志负载(隐私模式)", + "bannedStatus": "封禁状态", + "managementApiAccess": "管理 API 访问", + "expirationDate": "过期日期", + "managementAccess": "管理访问权限", + "allowedConnections": "允许的连接" }, "auditLog": { "title": "审核日志", @@ -1542,8 +1542,8 @@ "rerankModel": "重排模型", "positionDelta": "排名变化", "emptyState": "发送搜索请求后即可查看结果", - "copy": "__MISSING__:Copy", - "resetToDefault": "__MISSING__:Reset to default" + "copy": "复制", + "resetToDefault": "恢复默认值" }, "cliTools": { "title": "CLI 工具", @@ -1713,7 +1713,7 @@ "amp": "当您想要 Amp 简写工作流,但仍需要 OmniRoute 别名和路由规则支持时使用。", "qwen": "当您需要使用阿里云 Qwen Code CLI 进行编码任务时使用。", "hermes": "当您需要轻量级终端原生 AI 助手来处理快速任务时使用。", - "hermes-agent": "__MISSING__:Use when you need Hermes Agent (by Nousresearch) with default, delegation, vision and auxiliary models routed through OmniRoute.", + "hermes-agent": "需要使用 Hermes Agent (by Nousresearch) 时使用,默认、委派、视觉与辅助模型均通过 OmniRoute 路由。", "custom": "用于自定义工具实现或通用 OpenAI 兼容配置。" }, "toolDescriptions": { @@ -1733,7 +1733,7 @@ "qwen": "Alibaba Qwen Code CLI", "amp": "Sourcegraph Amp 编程助手 CLI", "hermes": "Hermes AI 终端助手", - "hermes-agent": "__MISSING__:Hermes Agent (by Nousresearch) - Advanced terminal AI with multi-model support (delegation, vision, compression, etc.)", + "hermes-agent": "Hermes Agent (by Nousresearch) — 支持多模型(委派、视觉、压缩等)的高级终端 AI。", "custom": "通用 OpenAI 兼容 CLI 或 SDK 配置生成器" }, "guides": { @@ -1867,33 +1867,33 @@ "customCliTab": "自定义 CLI", "toolCategories": "工具分类", "visibleToolsCount": "{count} 个工具可用", - "customCliBuilderTitle": "__MISSING__:OpenAI-compatible CLI builder", - "customCliBuilderDescription": "__MISSING__:Generate env vars and JSON snippets for any CLI or SDK that accepts an OpenAI-compatible base URL, API key, and model ID.", - "customCliNoModels": "__MISSING__:Connect at least one provider to populate the model selectors.", - "customCliNameLabel": "__MISSING__:CLI name", - "customCliNamePlaceholder": "__MISSING__:e.g. My Team CLI", - "customCliDefaultModelLabel": "__MISSING__:Default model", - "customCliDefaultModelHelp": "__MISSING__:Use any OmniRoute model ID or combo. Most OpenAI-compatible CLIs only need the /v1 base URL plus a model string.", - "customCliKeyHelper": "__MISSING__:For local installs OmniRoute can use sk_omniroute. In cloud mode, pick one of your management API keys.", - "customCliAliasMappingsLabel": "__MISSING__:Alias mappings", - "customCliAliasMappingsHelp": "__MISSING__:Optional helper aliases for wrapper scripts or config files that want stable shorthand names.", - "customCliAddAlias": "__MISSING__:Add alias", - "customCliNoMappings": "__MISSING__:No alias mappings yet. Add one if your wrapper or team scripts use stable short names.", - "customCliAliasPlaceholder": "__MISSING__:e.g. review", - "customCliTargetModelLabel": "__MISSING__:Target model", - "customCliEndpointHintLabel": "__MISSING__:How to wire the endpoint", - "customCliEndpointHint": "__MISSING__:Point any OpenAI-compatible client to the OmniRoute /v1 base URL. The raw chat completions endpoint is {endpoint}. Use the JSON block when the tool wants a provider object, or the env script when it reads OPENAI_* variables.", - "customCliEnvBlockTitle": "__MISSING__:Env / shell snippet", - "customCliJsonBlockTitle": "__MISSING__:Provider JSON block", - "copilotConfigGenerator": "__MISSING__:GitHub Copilot Config Generator", - "copilotApiKey": "__MISSING__:API Key", - "copilotFilterModelsPlaceholder": "__MISSING__:Filter models...", - "copilotMaxInputTokens": "__MISSING__:Max Input Tokens", - "copilotMaxOutputTokens": "__MISSING__:Max Output Tokens", - "copilotToolCalling": "__MISSING__:Tool Calling", - "copilotPasteInto": "__MISSING__:Paste into: ", - "wireApiChatCompletions": "__MISSING__:Chat Completions (/chat/completions)", - "wireApiResponses": "__MISSING__:Responses API (/responses)" + "customCliBuilderTitle": "OpenAI 兼容 CLI 构建器", + "customCliBuilderDescription": "为任何接受 OpenAI 兼容 base URL、API 密钥和模型 ID 的 CLI 或 SDK 生成环境变量与 JSON 配置片段。", + "customCliNoModels": "请至少连接一个提供商,以填充模型选择器。", + "customCliNameLabel": "CLI 名称", + "customCliNamePlaceholder": "例如:My Team CLI", + "customCliDefaultModelLabel": "默认模型", + "customCliDefaultModelHelp": "可填任意 OmniRoute 模型 ID 或组合。多数 OpenAI 兼容 CLI 仅需 /v1 base URL 与模型字符串。", + "customCliKeyHelper": "本地安装时 OmniRoute 可使用 sk_omniroute,云端模式请选择一个管理 API 密钥。", + "customCliAliasMappingsLabel": "别名映射", + "customCliAliasMappingsHelp": "可选别名,用于偏好稳定短名称的包装脚本或配置文件。", + "customCliAddAlias": "添加别名", + "customCliNoMappings": "暂无别名映射,如果你的包装器或团队脚本使用稳定短名,可以添加一个。", + "customCliAliasPlaceholder": "例如:review", + "customCliTargetModelLabel": "目标模型", + "customCliEndpointHintLabel": "端点接入说明", + "customCliEndpointHint": "将 OpenAI 兼容客户端指向 OmniRoute 的 /v1 base URL。原始 chat completions 端点为 {endpoint}。需要提供商对象时使用 JSON 块,需要读取 OPENAI_* 环境变量时使用 env 脚本。", + "customCliEnvBlockTitle": "环境变量 / Shell 片段", + "customCliJsonBlockTitle": "提供商 JSON 配置块", + "copilotConfigGenerator": "GitHub Copilot 配置生成器", + "copilotApiKey": "API 密钥", + "copilotFilterModelsPlaceholder": "筛选模型...", + "copilotMaxInputTokens": "最大输入 Token", + "copilotMaxOutputTokens": "最大输出 Token", + "copilotToolCalling": "工具调用", + "copilotPasteInto": "粘贴到:", + "wireApiChatCompletions": "Chat Completions(/chat/completions)", + "wireApiResponses": "Responses API(/responses)" }, "combos": { "title": "组合", @@ -1956,8 +1956,8 @@ "randomDesc": "均匀随机选择,失败后回退到剩余模型", "leastUsedDesc": "优先选择请求数最少的模型,随时间平衡负载", "costOptimizedDesc": "根据定价优先路由到最便宜的模型", - "resetAware": "__MISSING__:Reset-Aware RR", - "resetAwareDesc": "__MISSING__:Balances remaining quota against 5h and weekly resets, then round-robins similar scores", + "resetAware": "Reset-Aware 轮询", + "resetAwareDesc": "在剩余配额、5 小时与每周重置之间取得平衡,然后对得分相近的目标进行轮询", "strictRandom": "严格随机", "strictRandomDesc": "洗牌池模式:每个模型使用一次后再重新洗牌", "models": "模型", @@ -1974,9 +1974,9 @@ "contextRelaySummaryModelHelp": "仅用于生成交接摘要的可选覆盖模型。留空则复用当前活跃的 combo 模型。", "contextRelayProviderNote": "Context Relay 当前主要为 Codex 账户轮换生成交接摘要。与同一提供商的多个账户配合使用时,连续性效果最佳。", "advancedHint": "留空则使用全局默认值。这些设置会覆盖每个提供商的配置。", - "failoverBeforeRetry": "__MISSING__:Failover Before Retry", - "maxSetRetries": "__MISSING__:Max Set Retries", - "setRetryDelayMs": "__MISSING__:Set Retry Delay (ms)", + "failoverBeforeRetry": "重试前先故障转移", + "maxSetRetries": "最大目标集重试次数", + "setRetryDelayMs": "目标集重试间隔(ms)", "moveUp": "上移", "moveDown": "下移", "removeModel": "移除", @@ -2020,9 +2020,9 @@ "example": "后台任务或批处理作业,优先考虑更低成本。" }, "reset-aware": { - "when": "__MISSING__:You route across multiple accounts with quota telemetry and different reset windows.", - "avoid": "__MISSING__:Quota telemetry is unavailable for most accounts.", - "example": "__MISSING__:Prefer a 60% weekly account resetting tomorrow over an 80% account resetting later." + "when": "你跨多个具备配额遥测且重置窗口不同的账号路由时使用。", + "avoid": "大多数账号没有配额遥测时不要使用。", + "example": "优先选择明天就重置的 60% 周配额账号,而非稍后重置的 80% 账号。" }, "strict-random": { "when": "适用于希望实现绝对均匀分配的场景,每个模型在重复前都会恰好使用一次。", @@ -2067,9 +2067,9 @@ "healthcheck": "路由决策时跳过不健康的模型或提供商。", "concurrencyPerModel": "轮询模式下每个模型允许的最大并发请求数。", "queueTimeout": "请求在队列中等待超时前允许停留的最长时间。", - "failoverBeforeRetry": "__MISSING__:When enabled, any upstream error triggers immediate failover to the next combo target, skipping all retries and fallback URLs.", - "maxSetRetries": "__MISSING__:Number of times to retry the full target set when every target fails. 0 = no set-level retry.", - "setRetryDelayMs": "__MISSING__:Delay between set-level retry attempts, giving transient issues time to resolve." + "failoverBeforeRetry": "启用后,任何上游错误都会立即切换到下一个组合目标,跳过所有重试与回退 URL。", + "maxSetRetries": "所有目标失败后整组重试的次数。0 表示不进行集级重试。", + "setRetryDelayMs": "每次集级重试之间的间隔,留出时间让瞬时问题恢复。" }, "templatesTitle": "快捷模板", "templatesDescription": "先套用一个初始模板,再按需调整模型和配置。", @@ -2120,17 +2120,17 @@ "recommendationsApplied": "推荐配置已应用到当前组合。", "intelligentPanelTitle": "智能路由仪表盘", "intelligentPanelDesc": "此自动路由组合的实时评分和健康状态。", - "configOnlyStatus": "__MISSING__:Configuration View", - "configOnlyHint": "__MISSING__:This panel shows routing inputs only. Live breaker state is available on the Health page.", - "routingInputs": "__MISSING__:Routing Inputs", - "routingInputsHint": "__MISSING__:Mode pack and weighting stay here; breaker runtime state stays on the Health page.", - "emailVisibilityHint": "__MISSING__:Account emails here follow the global privacy toggle.", - "emailVisibilityTooltip": "__MISSING__:Use the eye icon to reveal or hide account emails globally across combos, providers and quota screens.", - "manualModel": "__MISSING__:Manual model", - "manualModelInvalid": "__MISSING__:Enter a model as provider/model.", - "manualModelUnknownProvider": "__MISSING__:Unknown provider prefix.", - "builderDynamicAccountShort": "__MISSING__:Dynamic account", - "builderNeedValidName": "__MISSING__:Define a valid combo name before continuing.", + "configOnlyStatus": "配置视图", + "configOnlyHint": "此面板仅显示路由输入,实时熔断器状态请到健康页面查看。", + "routingInputs": "路由输入", + "routingInputsHint": "模式包与权重保留在此处;熔断器运行状态保留在健康页面。", + "emailVisibilityHint": "此处账号邮箱遵循全局隐私开关。", + "emailVisibilityTooltip": "使用眼睛图标可在组合、提供商与配额页面间全局切换账号邮箱的显示与隐藏。", + "manualModel": "手动模型", + "manualModelInvalid": "请按 provider/model 格式填写。", + "manualModelUnknownProvider": "未知的提供商前缀。", + "builderDynamicAccountShort": "动态账号", + "builderNeedValidName": "请先填写有效的组合名称再继续。", "statusOverview": "状态概览", "normalOperation": "正常运行", "allProvidersHealthy": "供应商报告路由状况良好。", @@ -2211,11 +2211,11 @@ "tip3": "适合批处理或后台任务等成本是主要指标的场景。" }, "reset-aware": { - "title": "__MISSING__:Reset-aware account rotation", - "description": "__MISSING__:Balances remaining provider quota against reset timing.", - "tip1": "__MISSING__:Use explicit account steps or account-tag routing for providers with quota telemetry.", - "tip2": "__MISSING__:Tune session vs weekly weights when short-term exhaustion is more risky.", - "tip3": "__MISSING__:Keep the tie band small so equivalent accounts still rotate fairly." + "title": "重置感知账号轮换", + "description": "在剩余配额与重置时机之间取得平衡。", + "tip1": "对具备配额遥测的提供商使用显式账号步骤或账号标签路由。", + "tip2": "若短期耗尽风险更高,可调高会话权重而非每周权重。", + "tip3": "保持平局区间较小,等价账号才能公平轮换。" }, "strict-random": { "title": "洗牌池分配", @@ -2370,13 +2370,13 @@ "agentFeaturesToolFilterHint": "只有名称匹配此正则的工具才会转发给供应商。留空则转发所有工具。", "agentFeaturesContextCacheHint": "跨轮次锁定供应商/模型以保持缓存会话。内部标签在转发给供应商前会被移除。", "agentFeaturesContextCacheProtection": "上下文缓存保护", - "agentFeaturesContextLength": "__MISSING__:Context length", - "agentFeaturesContextLengthPlaceholder": "__MISSING__:e.g. 128000", - "agentFeaturesContextLengthHint": "__MISSING__:Defines the context window for this combo in /v1/models.", - "agentFeaturesContextLengthErrorInteger": "__MISSING__:Context length must be a valid integer", - "agentFeaturesContextLengthErrorRange": "__MISSING__:Context length must be between 1000 and 2000000", - "compressionOverride": "__MISSING__:Compression Override", - "modePack": "__MISSING__:Mode Pack" + "agentFeaturesContextLength": "上下文长度", + "agentFeaturesContextLengthPlaceholder": "例如:128000", + "agentFeaturesContextLengthHint": "用于在 /v1/models 中声明该组合的上下文窗口。", + "agentFeaturesContextLengthErrorInteger": "上下文长度必须是有效的整数", + "agentFeaturesContextLengthErrorRange": "上下文长度必须介于 1000 到 2000000 之间", + "compressionOverride": "压缩覆盖", + "modePack": "模式包" }, "costs": { "title": "成本", @@ -2441,7 +2441,7 @@ "currentPeriod": "当前半期", "exportCSV": "导出为 CSV", "exportJSON": "导出为 JSON", - "legacyFreeLabel": "__MISSING__:Legacy / Free" + "legacyFreeLabel": "旧版 / 免费" }, "endpoint": { "title": "API 端点", @@ -2574,14 +2574,14 @@ "a2aQuickStartStep3": "使用 `tasks/get` 与 `tasks/cancel` 跟踪和控制任务。", "completionsLegacy": "Completions(旧版)", "completionsLegacyDesc": "旧版 OpenAI 文本补全接口,同时接受 `prompt` 字符串和 `messages` 数组格式", - "messagesApi": "__MISSING__:Messages", - "messagesApiDesc": "__MISSING__:Native Anthropic Messages API format for Claude-compatible providers", - "imageEdits": "__MISSING__:Image Edits", - "imageEditsDesc": "__MISSING__:Edit and modify existing images with AI (inpainting, outpainting, variations)", - "batchApi": "__MISSING__:Batch API", - "batchApiDesc": "__MISSING__:Process large batches of requests asynchronously (OpenAI-compatible)", - "filesApi": "__MISSING__:Files API", - "filesApiDesc": "__MISSING__:Upload and manage files for batch processing", + "messagesApi": "Messages", + "messagesApiDesc": "面向 Claude 兼容提供商的原生 Anthropic Messages API 格式", + "imageEdits": "图像编辑", + "imageEditsDesc": "使用 AI 编辑和修改已有图像(局部修复、外延扩展、变体生成)", + "batchApi": "批处理 API", + "batchApiDesc": "异步处理大批量请求(兼容 OpenAI)", + "filesApi": "文件 API", + "filesApiDesc": "为批处理上传与管理文件", "videoGeneration": "视频生成", "videoDesc": "使用 ComfyUI 和 Stable Video Diffusion 等 AI 模型生成视频。", "tailscaleRequestFailed": "加载 Tailscale 状态失败", @@ -2634,17 +2634,17 @@ "ngrokStarted": "ngrok 隧道已启动", "ngrokStopped": "ngrok 隧道已停止", "ngrokRequestFailed": "更新 ngrok 隧道失败", - "tokenSaverSubtitle": "__MISSING__:Spend less tokens on every request.", - "tokenSaverToolOutput": "__MISSING__:Tool output", - "tokenSaverLlmOutput": "__MISSING__:LLM output", - "tokenSaverInputCompression": "__MISSING__:Input compression", - "apiEndpointsCatalogUnavailable": "__MISSING__:API catalog unavailable", - "apiEndpointsSearchPlaceholder": "__MISSING__:Search endpoints...", - "apiEndpointsRequiresAuth": "__MISSING__:Requires auth", - "apiEndpointsNoMatch": "__MISSING__:No endpoints match your filter", - "localServer": "__MISSING__:Local Server", - "cloudOmniroute": "__MISSING__:Cloud OmniRoute", - "copyUrl": "__MISSING__:Copy URL" + "tokenSaverSubtitle": "为每次请求节省 Token。", + "tokenSaverToolOutput": "工具输出", + "tokenSaverLlmOutput": "LLM 输出", + "tokenSaverInputCompression": "输入压缩", + "apiEndpointsCatalogUnavailable": "API 目录不可用", + "apiEndpointsSearchPlaceholder": "搜索端点...", + "apiEndpointsRequiresAuth": "需要认证", + "apiEndpointsNoMatch": "没有匹配的端点", + "localServer": "本地服务器", + "cloudOmniroute": "云端 OmniRoute", + "copyUrl": "复制 URL" }, "endpoints": { "tabProxy": "端点代理", @@ -2674,20 +2674,20 @@ "processStatus": "进程状态", "online": "在线", "offline": "离线", - "disableLabel": "__MISSING__:Disable {label}", - "enableLabel": "__MISSING__:Enable {label}", - "transportMode": "__MISSING__:Transport Mode", - "transportStdioDesc": "__MISSING__:Local — IDE spawns process via omniroute --mcp", - "transportSseDesc": "__MISSING__:Remote — Server-Sent Events over HTTP", - "transportStreamableHttpDesc": "__MISSING__:Remote — Modern bidirectional HTTP", - "copy": "__MISSING__:Copy", - "mcpDashboardCopyUrl": "__MISSING__:Copy URL", - "mcpDisabledTitle": "__MISSING__:MCP is disabled", - "mcpDisabledDesc": "__MISSING__:Enable MCP above to configure transport mode and view server telemetry.", - "mcpIntro": "__MISSING__:Model Context Protocol — {tools} tools across {scopes} scopes, {transports} transports (stdio / SSE / Streamable HTTP).", - "mcpStep1": "__MISSING__:Run via {code}", - "mcpStep2": "__MISSING__:Configure your MCP client to connect over stdio transport.", - "mcpStep3": "__MISSING__:Invoke tools like {code1} and {code2}.", + "disableLabel": "禁用 {label}", + "enableLabel": "启用 {label}", + "transportMode": "传输模式", + "transportStdioDesc": "本地 — IDE 通过 omniroute --mcp 启动进程", + "transportSseDesc": "远程 — 基于 HTTP 的 Server-Sent Events", + "transportStreamableHttpDesc": "远程 — 现代双向 HTTP", + "copy": "复制", + "mcpDashboardCopyUrl": "复制 URL", + "mcpDisabledTitle": "MCP 已禁用", + "mcpDisabledDesc": "在上方启用 MCP 后即可配置传输模式并查看服务器遥测。", + "mcpIntro": "Model Context Protocol — {tools} 个工具,覆盖 {scopes} 个作用域,支持 {transports} 种传输方式(stdio / SSE / Streamable HTTP)。", + "mcpStep1": "通过 {code} 运行", + "mcpStep2": "将 MCP 客户端配置为通过 stdio 传输连接。", + "mcpStep3": "调用 {code1} 和 {code2} 等工具。", "pid": "PID", "sessionUptime": "会话运行时长", "lastHeartbeat": "最近心跳", @@ -2769,7 +2769,7 @@ "cancelled": "已取消" }, "agentCard": "智能体卡片", - "agentCardPath": "__MISSING__:/.well-known/agent.json", + "agentCardPath": "/.well-known/agent.json", "version": "版本", "url": "URL", "capabilities": "能力", @@ -2802,22 +2802,22 @@ "offset": "偏移量", "limit": "限制", "skill": "Skill", - "rpcEndpoint": "__MISSING__:POST /a2a", - "rpcMethodSend": "__MISSING__:message/send", - "rpcMethodStream": "__MISSING__:message/stream", - "rpcMethodGet": "__MISSING__:tasks/get", - "rpcMethodCancel": "__MISSING__:tasks/cancel", - "serviceLabel": "__MISSING__:A2A", - "online": "__MISSING__:Online", - "offline": "__MISSING__:Offline", - "disableLabel": "__MISSING__:Disable {label}", - "enableLabel": "__MISSING__:Enable {label}", - "a2aDisabledTitle": "__MISSING__:A2A is disabled", - "a2aDisabledDesc": "__MISSING__:Enable A2A above to view task telemetry, agent details, and validation tools.", - "a2aIntro": "__MISSING__:Agent2Agent JSON-RPC 2.0 endpoint — send tasks, stream responses, cancel in-flight jobs.", - "a2aStep1": "__MISSING__:Discover the agent card at {code}.", - "a2aStep2": "__MISSING__:Send JSON-RPC to {code1} using {code2} or {code3}.", - "a2aStep3": "__MISSING__:Track and cancel tasks with {code1} and {code2}." + "rpcEndpoint": "POST /a2a", + "rpcMethodSend": "message/send", + "rpcMethodStream": "message/stream", + "rpcMethodGet": "tasks/get", + "rpcMethodCancel": "tasks/cancel", + "serviceLabel": "A2A", + "online": "在线", + "offline": "离线", + "disableLabel": "禁用 {label}", + "enableLabel": "启用 {label}", + "a2aDisabledTitle": "A2A 已禁用", + "a2aDisabledDesc": "在上方启用 A2A 后即可查看任务遥测、代理详情与校验工具。", + "a2aIntro": "Agent2Agent JSON-RPC 2.0 端点 — 发送任务、流式响应、取消执行中的任务。", + "a2aStep1": "在 {code} 处发现代理卡片。", + "a2aStep2": "向 {code1} 发送 JSON-RPC,使用 {code2} 或 {code3}。", + "a2aStep3": "使用 {code1} 和 {code2} 跟踪并取消任务。" }, "memory": { "title": "记忆管理", @@ -2844,18 +2844,18 @@ "procedural": "程序型", "semantic": "语义型", "a": "A", - "pipelineOk": "__MISSING__:Pipeline OK ({latencyMs}ms)", - "pipelineError": "__MISSING__:Pipeline error", - "healthUnknown": "__MISSING__:Health unknown", - "checkingHealth": "__MISSING__:Checking…", - "checkHealth": "__MISSING__:Check health", - "pageInfo": "__MISSING__:Page {page} of {totalPages} ({total} total)", - "previous": "__MISSING__:Previous", - "next": "__MISSING__:Next", - "cancel": "__MISSING__:Cancel", - "save": "__MISSING__:Save", - "keyPlaceholder": "__MISSING__:e.g. user.preferences.theme", - "contentPlaceholder": "__MISSING__:Value or JSON content to remember" + "pipelineOk": "流水线正常({latencyMs} ms)", + "pipelineError": "流水线出错", + "healthUnknown": "健康状况未知", + "checkingHealth": "检查中…", + "checkHealth": "检查健康", + "pageInfo": "第 {page} / {totalPages} 页(共 {total} 条)", + "previous": "上一页", + "next": "下一页", + "cancel": "取消", + "save": "保存", + "keyPlaceholder": "例如:user.preferences.theme", + "contentPlaceholder": "要记忆的值或 JSON 内容" }, "skills": { "title": "技能", @@ -2885,44 +2885,44 @@ "networkAccessDesc": "允许发起出站网络请求", "mode": "模式", "q": "Q", - "filterSkillsPlaceholder": "__MISSING__:Filter skills by name, description, or tag", - "allModes": "__MISSING__:All modes", - "totalSkills": "__MISSING__:Total Skills", - "enabledSkills": "__MISSING__:Enabled", - "totalExecutions": "__MISSING__:Executions", - "successRate": "__MISSING__:Success Rate", - "marketplaceTab": "__MISSING__:Marketplace", - "applyFilters": "__MISSING__:Apply filters", - "popularDefaultsLabel": "__MISSING__:Popular by default for selected provider:", - "onMode": "__MISSING__:ON", - "offMode": "__MISSING__:OFF", - "autoMode": "__MISSING__:AUTO", - "installSkillButton": "__MISSING__:Install Skill", - "installSkillModalTitle": "__MISSING__:Install Skill", - "installJsonPlaceholder": "__MISSING__:Paste skill manifest JSON here...", - "installing": "__MISSING__:Installing...", - "installSuccess": "__MISSING__:Skill installed ({id})", - "installError": "__MISSING__:Install failed", - "invalidJson": "__MISSING__:Invalid JSON", - "searchMarketplacePlaceholder": "__MISSING__:Search skills...", - "searchMarketplace": "__MISSING__:Search Marketplace", - "marketplaceEmpty": "__MISSING__:No skills found in marketplace", - "marketplaceError": "__MISSING__:Search failed", - "installingFromMarketplace": "__MISSING__:Installing from marketplace...", - "popularSkills": "__MISSING__:Popular Skills", - "skillsMarketplace": "__MISSING__:Skills Marketplace", - "searching": "__MISSING__:Searching...", - "pageInfo": "__MISSING__:Page {page} of {totalPages} ({total} total)", - "previous": "__MISSING__:Previous", - "next": "__MISSING__:Next", - "activeProvider": "__MISSING__:Active provider:", - "changeInSettings": "__MISSING__:Change this in Settings → Memory & Skills.", - "installs": "__MISSING__:installs", - "marketplaceSkillsMpHint": "__MISSING__:Configure your SkillsMP API key in Settings to browse the marketplace.", - "marketplaceSkillsShHint": "__MISSING__:Search the skills.sh open directory to discover and install agent skills.", - "installSkillModalDesc": "__MISSING__:Paste a skill manifest JSON or upload a .json file.", - "uploadJson": "__MISSING__:Upload JSON", - "cancel": "__MISSING__:Cancel" + "filterSkillsPlaceholder": "按名称、描述或标签筛选技能", + "allModes": "所有模式", + "totalSkills": "技能总数", + "enabledSkills": "已启用", + "totalExecutions": "执行次数", + "successRate": "成功率", + "marketplaceTab": "市场", + "applyFilters": "应用筛选", + "popularDefaultsLabel": "所选提供商的默认热门技能:", + "onMode": "ON", + "offMode": "OFF", + "autoMode": "AUTO", + "installSkillButton": "安装技能", + "installSkillModalTitle": "安装技能", + "installJsonPlaceholder": "在此粘贴技能清单 JSON...", + "installing": "正在安装...", + "installSuccess": "技能已安装({id})", + "installError": "安装失败", + "invalidJson": "无效的 JSON", + "searchMarketplacePlaceholder": "搜索技能...", + "searchMarketplace": "搜索市场", + "marketplaceEmpty": "市场中未找到技能", + "marketplaceError": "搜索失败", + "installingFromMarketplace": "正在从市场安装...", + "popularSkills": "热门技能", + "skillsMarketplace": "技能市场", + "searching": "正在搜索...", + "pageInfo": "第 {page} / {totalPages} 页(共 {total} 条)", + "previous": "上一页", + "next": "下一页", + "activeProvider": "当前提供商:", + "changeInSettings": "可在 设置 → 记忆与技能 中修改。", + "installs": "安装", + "marketplaceSkillsMpHint": "请在设置中配置 SkillsMP API 密钥以浏览市场。", + "marketplaceSkillsShHint": "搜索 skills.sh 公开目录以发现并安装代理技能。", + "installSkillModalDesc": "粘贴技能清单 JSON 或上传 .json 文件。", + "uploadJson": "上传 JSON", + "cancel": "取消" }, "health": { "title": "系统健康状况", @@ -3002,12 +3002,12 @@ "remainingOfLimit": "剩余 {remaining}/{limit}", "throttleStatus": "限流:{value}", "lastHeaderUpdate": "响应头更新:{age}", - "databaseHealth": "__MISSING__:Database Health", - "stickyBoundSessions": "__MISSING__:Sticky-bound sessions", - "sessionsByApiKey": "__MISSING__:Sessions by API key", - "noActiveSessionsTracked": "__MISSING__:No active sessions tracked yet.", - "noSessionQuotaMonitorsActive": "__MISSING__:No session quota monitors active.", - "gracefulDegradationStatus": "__MISSING__:Graceful Degradation Status" + "databaseHealth": "数据库健康", + "stickyBoundSessions": "已粘性绑定的会话", + "sessionsByApiKey": "按 API 密钥划分的会话", + "noActiveSessionsTracked": "暂无被跟踪的活跃会话。", + "noSessionQuotaMonitorsActive": "暂无活跃的会话配额监控。", + "gracefulDegradationStatus": "优雅降级状态" }, "telemetry": { "title": "系统遥测", @@ -3196,24 +3196,24 @@ "failedAddProvider": "添加提供商失败。再试一次。", "connectionError": "连接错误。请再试一次。", "provider": "提供商", - "apiKeyHelp": "__MISSING__:An API key is a password for AI services. Get one from your provider's website (e.g., platform.openai.com, console.anthropic.com).", + "apiKeyHelp": "API 密钥相当于 AI 服务的密码,可在提供商网站获取(例如 platform.openai.com、console.anthropic.com)。", "tier": { - "subtitle": "__MISSING__:OmniRoute organises providers into three tiers so routing prefers the most reliable, lowest-cost path first.", + "subtitle": "OmniRoute 将提供商分为三层,以便优先选择最稳定、成本最低的路径。", "tier1": { - "label": "__MISSING__:Premium clients", - "description": "__MISSING__:First-class CLIs with native auth flows and reasoning models." + "label": "高端客户端", + "description": "支持原生身份验证流程与推理模型的一线 CLI。" }, "tier2": { - "label": "__MISSING__:Cost-optimised", - "description": "__MISSING__:Cheap, high-throughput providers used for everyday traffic." + "label": "成本优化", + "description": "用于日常流量的高吞吐量、低成本提供商。" }, "tier3": { - "label": "__MISSING__:Fallback & specialty", - "description": "__MISSING__:Locally-hosted or specialty endpoints used as fallbacks." + "label": "回退与专用", + "description": "本地部署或专用端点,作为回退使用。" }, - "configure": "__MISSING__:Configure providers" + "configure": "配置提供商" }, - "tierFlowDiagramAlt": "__MISSING__:OmniRoute 3-tier fallback diagram" + "tierFlowDiagramAlt": "OmniRoute 三层回退示意图" }, "providers": { "title": "提供商", @@ -3221,9 +3221,9 @@ "audioProviders": "音频提供商", "showFreeOnly": "仅显示免费", "addProvider": "添加提供商", - "addFirstProvider": "__MISSING__:Add your first provider", - "addFirstProviderDesc": "__MISSING__:Connect an AI provider to start routing requests through OmniRoute. You can use free providers, API keys, or OAuth accounts.", - "learnMore": "__MISSING__:Learn more", + "addFirstProvider": "添加你的第一个提供商", + "addFirstProviderDesc": "连接 AI 提供商,通过 OmniRoute 路由请求。可以使用免费提供商、API 密钥或 OAuth 账号。", + "learnMore": "了解更多", "editProvider": "编辑提供商", "deleteProvider": "删除提供商", "noProviders": "没有配置提供商", @@ -3256,7 +3256,7 @@ "connected": "{count} 已连接", "errorCount": "{count} 错误 ({code})", "errorCountNoCode": "{count} 错误", - "warningCount": "__MISSING__:{count} Warning", + "warningCount": "{count} 条警告", "noConnections": "无连接", "expiredBadge": "已过期", "expiringSoonBadge": "即将过期", @@ -3393,12 +3393,12 @@ "disableRateLimitProtection": "单击以禁用速率限制保护", "productionKey": "生产密钥", "enterNewApiKey": "输入新的 API 密钥", - "codexApplyModalTitle": "__MISSING__:Apply to Local Codex", - "codexApplyTargetLabel": "__MISSING__:Target path", - "codexApplyBackupLabel": "__MISSING__:Backups", - "codexApplyWarning": "__MISSING__:This will replace the existing auth.json. Continue?", - "codexApplyConfirmCheckbox": "__MISSING__:I confirm I want to replace the existing auth.json", - "codexApply": "__MISSING__:Apply", + "codexApplyModalTitle": "应用到本地 Codex", + "codexApplyTargetLabel": "目标路径", + "codexApplyBackupLabel": "备份", + "codexApplyWarning": "这将覆盖现有的 auth.json,继续吗?", + "codexApplyConfirmCheckbox": "我确认要替换现有的 auth.json", + "codexApply": "应用", "bulkTabSingle": "单个", "bulkTabBulkAdd": "批量添加", "bulkAddFormatHint": "每行一个密钥。格式:名称|API密钥 或仅 API密钥(按序号自动命名)。", @@ -3558,127 +3558,127 @@ "tokenRefreshFailed": "Token 刷新失败", "applyCodexAuthLocal": "应用认证", "exportCodexAuthFile": "导出认证", - "applyClaudeAuthLocal": "__MISSING__:Apply auth", - "exportClaudeAuthFile": "__MISSING__:Export auth", - "importClaudeAuth": "__MISSING__:Import auth", - "claudeApplyModalTitle": "__MISSING__:Apply to Local Claude Code", - "claudeApplyTargetLabel": "__MISSING__:Target path", - "claudeApplyBackupLabel": "__MISSING__:Backups", - "claudeApplyMcpHint": "__MISSING__:Existing MCP OAuth state will be preserved.", - "claudeApplyWarning": "__MISSING__:This will replace the existing claudeAiOauth section. Continue?", - "claudeApplyConfirmCheckbox": "__MISSING__:I confirm I want to replace the existing claudeAiOauth section", - "claudeApply": "__MISSING__:Apply", - "claudeAuthAppliedLocal": "__MISSING__:Claude auth applied locally", - "claudeAuthApplyFailed": "__MISSING__:Failed to apply Claude auth locally", - "claudeAuthExported": "__MISSING__:Claude auth file exported", - "claudeAuthExportFailed": "__MISSING__:Failed to export Claude auth file", - "claudeImportModalTitle": "__MISSING__:Import Claude Auth", - "claudeImportTabSingle": "__MISSING__:Single", - "claudeImportTabBulk": "__MISSING__:Bulk", - "claudeImportTabUpload": "__MISSING__:Upload file", - "claudeImportTabPaste": "__MISSING__:Paste JSON", - "claudeImportFileLabel": "__MISSING__:Choose .credentials.json", - "claudeImportPasteLabel": "__MISSING__:Paste the JSON content", - "claudeImportEmailLabel": "__MISSING__:Account email", - "claudeImportNameLabel": "__MISSING__:Connection name (optional)", - "claudeImportOverwriteLabel": "__MISSING__:Replace existing connection if account already exists", - "claudeImportSubmit": "__MISSING__:Import", - "claudeImportSuccess": "__MISSING__:Claude connection imported successfully", - "claudeImportInvalidJson": "__MISSING__:Could not parse the file as JSON", - "claudeImportInvalidShape": "__MISSING__:The file is not a valid .credentials.json", - "claudeImportDuplicate": "__MISSING__:Account already exists — enable \"Replace existing\" to overwrite", - "claudeImportIdentityUnverified": "__MISSING__:Bootstrap could not verify the account. Enable \"Replace existing\" or provide an email.", - "claudeImportFailed": "__MISSING__:Failed to import Claude auth", - "claudeImportBulkModeUpload": "__MISSING__:Upload files", - "claudeImportBulkModePaste": "__MISSING__:Paste JSON array", - "claudeImportBulkModeZip": "__MISSING__:Upload ZIP", - "claudeImportBulkUploadHint": "__MISSING__:Drop or pick up to 50 .credentials.json files (256KB each, 10MB total).", - "claudeImportBulkPasteHint": "__MISSING__:Paste an array of objects: [{ json, name?, email? }, ...]", - "claudeImportBulkZipHint": "__MISSING__:ZIP containing .json entries. Max 50 entries, 10MB unpacked.", - "claudeImportBulkSubmit": "__MISSING__:Import all", - "claudeImportBulkSuccess": "__MISSING__:Imported {count} Claude connections", - "claudeImportBulkFailed": "__MISSING__:Some entries failed to import", - "claudeImportBulkZipExtracting": "__MISSING__:Extracting ZIP…", - "claudeImportBulkZipError": "__MISSING__:Failed to extract ZIP", - "applyGeminiAuthLocal": "__MISSING__:Apply auth", - "exportGeminiAuthFile": "__MISSING__:Export auth", - "importGeminiAuth": "__MISSING__:Import auth", - "geminiApplyModalTitle": "__MISSING__:Apply to Local Gemini CLI", - "geminiApplyTargetLabel": "__MISSING__:Target path", - "geminiApplyBackupLabel": "__MISSING__:Backups", - "geminiApplyAccountsHint": "__MISSING__:The google_accounts.json active account will be updated to match this connection.", - "geminiApplyWarning": "__MISSING__:This will replace the existing oauth_creds.json and update google_accounts.json. Continue?", - "geminiApplyConfirmCheckbox": "__MISSING__:I confirm I want to replace the existing oauth_creds.json", - "geminiApply": "__MISSING__:Apply", - "geminiAuthAppliedLocal": "__MISSING__:Gemini auth applied locally", - "geminiAuthApplyFailed": "__MISSING__:Failed to apply Gemini auth locally", - "geminiAuthExported": "__MISSING__:Gemini auth file exported", - "geminiAuthExportFailed": "__MISSING__:Failed to export Gemini auth file", - "geminiImportModalTitle": "__MISSING__:Import Gemini Auth", - "geminiImportTabSingle": "__MISSING__:Single", - "geminiImportTabBulk": "__MISSING__:Bulk", - "geminiImportTabUpload": "__MISSING__:Upload file", - "geminiImportTabPaste": "__MISSING__:Paste JSON", - "geminiImportFileLabel": "__MISSING__:Choose oauth_creds.json", - "geminiImportPasteLabel": "__MISSING__:Paste the JSON content", - "geminiImportEmailLabel": "__MISSING__:Account email", - "geminiImportNameLabel": "__MISSING__:Connection name (optional)", - "geminiImportOverwriteLabel": "__MISSING__:Replace existing connection if account already exists", - "geminiImportSubmit": "__MISSING__:Import", - "geminiImportSuccess": "__MISSING__:Gemini connection imported successfully", - "geminiImportInvalidJson": "__MISSING__:Could not parse the file as JSON", - "geminiImportInvalidShape": "__MISSING__:The file is not a valid oauth_creds.json", - "geminiImportDuplicate": "__MISSING__:Account already exists — enable \"Replace existing\" to overwrite", - "geminiImportIdentityUnverified": "__MISSING__:Could not verify identity from id_token. Enable \"Replace existing\" or provide an email.", - "geminiImportFailed": "__MISSING__:Failed to import Gemini auth", - "geminiImportBulkModeUpload": "__MISSING__:Upload files", - "geminiImportBulkModePaste": "__MISSING__:Paste JSON array", - "geminiImportBulkModeZip": "__MISSING__:Upload ZIP", - "geminiImportBulkUploadHint": "__MISSING__:Drop or pick up to 50 oauth_creds.json files (256KB each, 10MB total).", - "geminiImportBulkPasteHint": "__MISSING__:Paste an array of objects: [{ json, name?, email? }, ...]", - "geminiImportBulkZipHint": "__MISSING__:ZIP containing oauth_creds.json entries. Max 50 entries, 10MB unpacked.", - "geminiImportBulkSubmit": "__MISSING__:Import all", - "geminiImportBulkSuccess": "__MISSING__:Imported {count} Gemini connections", - "geminiImportBulkFailed": "__MISSING__:Some entries failed to import", - "geminiImportBulkZipExtracting": "__MISSING__:Extracting ZIP…", - "geminiImportBulkZipError": "__MISSING__:Failed to extract ZIP", + "applyClaudeAuthLocal": "应用认证", + "exportClaudeAuthFile": "导出认证", + "importClaudeAuth": "导入认证", + "claudeApplyModalTitle": "应用到本地 Claude Code", + "claudeApplyTargetLabel": "目标路径", + "claudeApplyBackupLabel": "备份", + "claudeApplyMcpHint": "现有 MCP OAuth 状态会被保留。", + "claudeApplyWarning": "这将覆盖现有的 claudeAiOauth 部分,继续吗?", + "claudeApplyConfirmCheckbox": "我确认要替换现有的 claudeAiOauth 部分", + "claudeApply": "应用", + "claudeAuthAppliedLocal": "已在本地应用 Claude 认证", + "claudeAuthApplyFailed": "在本地应用 Claude 认证失败", + "claudeAuthExported": "已导出 Claude 认证文件", + "claudeAuthExportFailed": "导出 Claude 认证文件失败", + "claudeImportModalTitle": "导入 Claude 认证", + "claudeImportTabSingle": "单个", + "claudeImportTabBulk": "批量", + "claudeImportTabUpload": "上传文件", + "claudeImportTabPaste": "粘贴 JSON", + "claudeImportFileLabel": "选择 .credentials.json", + "claudeImportPasteLabel": "粘贴 JSON 内容", + "claudeImportEmailLabel": "账号邮箱", + "claudeImportNameLabel": "连接名称(可选)", + "claudeImportOverwriteLabel": "若账号已存在则替换现有连接", + "claudeImportSubmit": "导入", + "claudeImportSuccess": "Claude 连接导入成功", + "claudeImportInvalidJson": "无法将文件解析为 JSON", + "claudeImportInvalidShape": "该文件不是有效的 .credentials.json", + "claudeImportDuplicate": "账号已存在 — 启用「替换现有」以覆盖", + "claudeImportIdentityUnverified": "Bootstrap 无法验证账号,请启用「替换现有」或提供邮箱。", + "claudeImportFailed": "导入 Claude 认证失败", + "claudeImportBulkModeUpload": "上传文件", + "claudeImportBulkModePaste": "粘贴 JSON 数组", + "claudeImportBulkModeZip": "上传 ZIP", + "claudeImportBulkUploadHint": "拖入或选取最多 50 个 .credentials.json 文件(每个 256 KB,合计 10 MB)。", + "claudeImportBulkPasteHint": "粘贴对象数组:[{ json, name?, email? }, ...]", + "claudeImportBulkZipHint": "包含 .json 条目的 ZIP,最多 50 个条目,解压后 10 MB 以内。", + "claudeImportBulkSubmit": "全部导入", + "claudeImportBulkSuccess": "已导入 {count} 个 Claude 连接", + "claudeImportBulkFailed": "部分条目导入失败", + "claudeImportBulkZipExtracting": "正在解压 ZIP…", + "claudeImportBulkZipError": "解压 ZIP 失败", + "applyGeminiAuthLocal": "应用认证", + "exportGeminiAuthFile": "导出认证", + "importGeminiAuth": "导入认证", + "geminiApplyModalTitle": "应用到本地 Gemini CLI", + "geminiApplyTargetLabel": "目标路径", + "geminiApplyBackupLabel": "备份", + "geminiApplyAccountsHint": "google_accounts.json 中的活动账号将更新为该连接对应的账号。", + "geminiApplyWarning": "这将覆盖现有的 oauth_creds.json 并更新 google_accounts.json,继续吗?", + "geminiApplyConfirmCheckbox": "我确认要替换现有的 oauth_creds.json", + "geminiApply": "应用", + "geminiAuthAppliedLocal": "已在本地应用 Gemini 认证", + "geminiAuthApplyFailed": "在本地应用 Gemini 认证失败", + "geminiAuthExported": "已导出 Gemini 认证文件", + "geminiAuthExportFailed": "导出 Gemini 认证文件失败", + "geminiImportModalTitle": "导入 Gemini 认证", + "geminiImportTabSingle": "单个", + "geminiImportTabBulk": "批量", + "geminiImportTabUpload": "上传文件", + "geminiImportTabPaste": "粘贴 JSON", + "geminiImportFileLabel": "选择 oauth_creds.json", + "geminiImportPasteLabel": "粘贴 JSON 内容", + "geminiImportEmailLabel": "账号邮箱", + "geminiImportNameLabel": "连接名称(可选)", + "geminiImportOverwriteLabel": "若账号已存在则替换现有连接", + "geminiImportSubmit": "导入", + "geminiImportSuccess": "Gemini 连接导入成功", + "geminiImportInvalidJson": "无法将文件解析为 JSON", + "geminiImportInvalidShape": "该文件不是有效的 oauth_creds.json", + "geminiImportDuplicate": "账号已存在 — 启用「替换现有」以覆盖", + "geminiImportIdentityUnverified": "无法从 id_token 验证身份,请启用「替换现有」或提供邮箱。", + "geminiImportFailed": "导入 Gemini 认证失败", + "geminiImportBulkModeUpload": "上传文件", + "geminiImportBulkModePaste": "粘贴 JSON 数组", + "geminiImportBulkModeZip": "上传 ZIP", + "geminiImportBulkUploadHint": "拖入或选取最多 50 个 oauth_creds.json 文件(每个 256 KB,合计 10 MB)。", + "geminiImportBulkPasteHint": "粘贴对象数组:[{ json, name?, email? }, ...]", + "geminiImportBulkZipHint": "包含 oauth_creds.json 条目的 ZIP,最多 50 个条目,解压后 10 MB 以内。", + "geminiImportBulkSubmit": "全部导入", + "geminiImportBulkSuccess": "已导入 {count} 个 Gemini 连接", + "geminiImportBulkFailed": "部分条目导入失败", + "geminiImportBulkZipExtracting": "正在解压 ZIP…", + "geminiImportBulkZipError": "解压 ZIP 失败", "codexAuthAppliedLocal": "Codex auth.json 已在本地应用", "codexAuthApplyFailed": "在本地应用 Codex auth.json 失败", "codexAuthExported": "Codex auth.json 已导出", "codexAuthExportFailed": "导出 Codex auth.json 失败", - "importCodexAuth": "__MISSING__:Import auth", - "codexImportModalTitle": "__MISSING__:Import Codex Auth", - "codexImportTabSingle": "__MISSING__:Single", - "codexImportTabBulk": "__MISSING__:Bulk", - "codexImportTabUpload": "__MISSING__:Upload file", - "codexImportTabPaste": "__MISSING__:Paste JSON", - "codexImportFileLabel": "__MISSING__:Choose auth.json", - "codexImportFileHint": "__MISSING__:Select the auth.json file exported from Codex or from OmniRoute.", - "codexImportPasteLabel": "__MISSING__:Paste the JSON content", - "codexImportEmailLabel": "__MISSING__:Account email", - "codexImportEmailHint": "__MISSING__:Auto-detected from the file; edit if needed.", - "codexImportNameLabel": "__MISSING__:Connection name (optional)", - "codexImportOverwriteLabel": "__MISSING__:Replace existing connection if account already exists", - "codexImportSubmit": "__MISSING__:Import", - "codexImportSuccess": "__MISSING__:Codex connection imported successfully", - "codexImportInvalidJson": "__MISSING__:Could not parse the file as JSON", - "codexImportInvalidShape": "__MISSING__:The file is not a valid Codex auth.json", - "codexImportDuplicate": "__MISSING__:Account already exists — enable \"Replace existing\" to overwrite", - "codexImportFailed": "__MISSING__:Failed to import Codex auth", - "codexImportDetectedEmail": "__MISSING__:Detected: {email}", - "codexImportNoEmailDetected": "__MISSING__:No email detected in file", - "codexImportBulkModeUpload": "__MISSING__:Upload files", - "codexImportBulkModePaste": "__MISSING__:Paste list", - "codexImportBulkModeZip": "__MISSING__:ZIP archive", - "codexImportBulkUploadHint": "__MISSING__:Select multiple .json files or drag and drop", - "codexImportBulkPasteHint": "__MISSING__:JSON array [ {...}, {...} ] or multiple JSONs separated by --- on its own line", - "codexImportBulkZipHint": "__MISSING__:Upload a .zip containing auth.json files (max 50 files, 10 MB)", - "codexImportBulkSubmit": "__MISSING__:Import {count} accounts", - "codexImportBulkLimit": "__MISSING__:Max 50 files per import", - "codexImportBulkSuccess": "__MISSING__:{count} imported", - "codexImportBulkFailed": "__MISSING__:{count} failed", - "codexImportBulkZipExtracting": "__MISSING__:Extracting ZIP…", - "codexImportBulkZipError": "__MISSING__:Failed to extract ZIP", + "importCodexAuth": "导入认证", + "codexImportModalTitle": "导入 Codex 认证", + "codexImportTabSingle": "单个", + "codexImportTabBulk": "批量", + "codexImportTabUpload": "上传文件", + "codexImportTabPaste": "粘贴 JSON", + "codexImportFileLabel": "选择 auth.json", + "codexImportFileHint": "选择从 Codex 或 OmniRoute 导出的 auth.json 文件。", + "codexImportPasteLabel": "粘贴 JSON 内容", + "codexImportEmailLabel": "账号邮箱", + "codexImportEmailHint": "已从文件自动检测,如有需要可编辑。", + "codexImportNameLabel": "连接名称(可选)", + "codexImportOverwriteLabel": "若账号已存在则替换现有连接", + "codexImportSubmit": "导入", + "codexImportSuccess": "Codex 连接导入成功", + "codexImportInvalidJson": "无法将文件解析为 JSON", + "codexImportInvalidShape": "该文件不是有效的 Codex auth.json", + "codexImportDuplicate": "账号已存在 — 启用「替换现有」以覆盖", + "codexImportFailed": "导入 Codex 认证失败", + "codexImportDetectedEmail": "检测到:{email}", + "codexImportNoEmailDetected": "未在文件中检测到邮箱", + "codexImportBulkModeUpload": "上传文件", + "codexImportBulkModePaste": "粘贴列表", + "codexImportBulkModeZip": "ZIP 压缩包", + "codexImportBulkUploadHint": "选择多个 .json 文件或拖放上传", + "codexImportBulkPasteHint": "JSON 数组 [ {...}, {...} ],或多个 JSON 用单独一行的 --- 分隔", + "codexImportBulkZipHint": "上传包含 auth.json 的 .zip(最多 50 个文件,10 MB)", + "codexImportBulkSubmit": "导入 {count} 个账号", + "codexImportBulkLimit": "每次最多导入 50 个文件", + "codexImportBulkSuccess": "已导入 {count} 个", + "codexImportBulkFailed": "失败 {count} 个", + "codexImportBulkZipExtracting": "正在解压 ZIP…", + "codexImportBulkZipError": "解压 ZIP 失败", "advancedSettings": "高级设置", "chatPathLabel": "聊天端点路径", "chatPathPlaceholder": "/chat/completions", @@ -3711,14 +3711,14 @@ "apikey": "API key", "audio": "音频", "audioProvidersHeading": "音频 Provider", - "cloudAgentProviders": "__MISSING__:Cloud Agent Providers", + "cloudAgentProviders": "云代理提供商", "audioShortLabel": "音频", "azureOpenAiBaseUrlHint": "Azure OpenAI 资源的 Base URL。", "bailianBaseUrlHint": "阿里云百炼服务的 Base URL。", "blackboxWebCookieHint": "从 Blackbox Web 会话复制 Cookie。", "blackboxWebCookiePlaceholder": "Blackbox Web Cookie", - "t3ChatWebCookieHint": "__MISSING__:Open t3.chat → DevTools → Application → Local Storage → https://t3.chat, copy 'convex-session-id'. Then open DevTools → Network, copy the full Cookie header from any chat request. Paste both values in the fields below.", - "t3ChatWebCookiePlaceholder": "__MISSING__:convex-session-id=abc123...", + "t3ChatWebCookieHint": "打开 t3.chat → DevTools → Application → Local Storage → https://t3.chat,复制 'convex-session-id'。然后在 DevTools → Network 中,从任意聊天请求复制完整的 Cookie 头,将两个值粘贴到下面的输入框。", + "t3ChatWebCookiePlaceholder": "convex-session-id=abc123...", "blockClaudeExtraUsageDescription": "隐藏部分 Provider 返回的重复 Claude 额外用量记录,避免和主 token 统计重复。", "blockClaudeExtraUsageLabel": "屏蔽重复 Claude 用量", "bulkPasteAdded": "{count, plural, one {已添加 1 个 key} other {已添加 # 个 key}}", @@ -3778,18 +3778,18 @@ "apiKeyWarningAlert": "{count} 个 API 密钥在以下连接中处于警告状态:{connections}。请检查以防止轮换问题。", "apiKeyWarningAlertTitle": "API 密钥警告", "googlePseInfo": "配置 Google Programmable Search Engine 以启用 Web Search。", - "geminiCliProjectIdHint": "__MISSING__:Your Google Cloud Project ID. Required for accounts with exceptions. Enter your GCP Project ID to use with Gemini CLI.", - "geminiCliProjectIdLabel": "__MISSING__:Google Cloud Project ID", - "geminiCliProjectIdPlaceholder": "__MISSING__:my-gcp-project-id", - "antigravityProjectIdHint": "__MISSING__:Optional override for Antigravity Cloud Code requests. Leave blank to use the project discovered during Google OAuth.", - "antigravityClientProfileLabel": "__MISSING__:Client profile", - "antigravityClientProfileHint": "__MISSING__:Choose which Antigravity client identity OmniRoute presents to the API.", - "antigravityClientProfileIde": "__MISSING__:IDE", - "antigravityClientProfileHarness": "__MISSING__:Harness / CLI", - "codexFastTierActiveChip": "__MISSING__:Codex Fast tier is active", - "tierFast": "__MISSING__:Fast", - "antigravityProjectIdLabel": "__MISSING__:Google Cloud Project ID", - "antigravityProjectIdPlaceholder": "__MISSING__:my-gcp-project-id", + "geminiCliProjectIdHint": "你的 Google Cloud 项目 ID。对于有例外配置的账号必填。请填写要与 Gemini CLI 一起使用的 GCP Project ID。", + "geminiCliProjectIdLabel": "Google Cloud 项目 ID", + "geminiCliProjectIdPlaceholder": "my-gcp-project-id", + "antigravityProjectIdHint": "Antigravity Cloud Code 请求的可选项目 ID 覆盖。留空则使用 Google OAuth 期间发现的项目。", + "antigravityClientProfileLabel": "客户端配置", + "antigravityClientProfileHint": "选择 OmniRoute 向 API 呈现的 Antigravity 客户端身份。", + "antigravityClientProfileIde": "IDE", + "antigravityClientProfileHarness": "Harness / CLI", + "codexFastTierActiveChip": "Codex Fast 层级已启用", + "tierFast": "Fast", + "antigravityProjectIdLabel": "Google Cloud 项目 ID", + "antigravityProjectIdPlaceholder": "my-gcp-project-id", "grokWebCookieHint": "从 Grok Web 会话复制 Cookie。", "grokWebCookiePlaceholder": "Grok Web Cookie", "herokuBaseUrlHint": "Heroku 部署的 Base URL。", @@ -3883,8 +3883,8 @@ "providerDetailCallbackUrl": "回调 URL", "providerDetailValidClaudeCredentialsFile": "有效的 Claude 凭据文件", "providerDetailPathAutoDetectedAllOs": "路径按操作系统自动检测(Linux/Mac/Windows)。", - "providerDetailMyClaudeAccountPlaceholder": "__MISSING__:My Claude account", - "providerDetailPathAutoDetected": "__MISSING__:Path is auto-detected per OS (Linux/Mac)." + "providerDetailMyClaudeAccountPlaceholder": "我的 Claude 账号", + "providerDetailPathAutoDetected": "路径按操作系统自动识别(Linux / Mac)。" }, "settings": { "title": "设置", @@ -3894,68 +3894,68 @@ "routing": "路由", "cache": "缓存", "resilience": "韧性", - "routingSettingsIntro": "__MISSING__:Controls how your requests are routed, transformed, and sent to AI providers.", - "routingOpDropParagraphContainsLabel": "__MISSING__:Drop paragraph (contains)", - "routingOpDropParagraphStartsWithLabel": "__MISSING__:Drop paragraph (starts with)", - "routingOpReplaceTextLabel": "__MISSING__:Replace text", - "routingOpReplaceRegexLabel": "__MISSING__:Replace regex", - "routingOpDropBlockContainsLabel": "__MISSING__:Drop block (contains)", - "routingOpPrependSystemBlockLabel": "__MISSING__:Prepend system block", - "routingOpAppendSystemBlockLabel": "__MISSING__:Append system block", - "routingOpInjectBillingHeaderLabel": "__MISSING__:Inject billing header", - "routingOpObfuscateWordsLabel": "__MISSING__:Obfuscate words (ZWJ)", - "routingOpDropParagraphContainsDesc": "__MISSING__:Removes any paragraph (text block split on blank lines) inside the system prompt whose text contains ANY of the listed substrings. Use to strip third-party client fingerprints like 'github.com/anomalyco/opencode' or 'docs.openwebui.com' that Anthropic's classifier flags.", - "routingOpDropParagraphStartsWithDesc": "__MISSING__:Removes any paragraph that STARTS WITH one of the listed prefixes. Use for identity lines like 'You are OpenCode' or 'You are Open WebUI' that announce the calling client.", - "routingOpReplaceTextDesc": "__MISSING__:Replaces a literal substring with another literal substring. Use for known trigger phrases — e.g. rewrite 'Here is some useful information about the environment you are running in:' to 'Environment context you are running in:' (an empirically-validated trigger phrase).", - "routingOpReplaceRegexDesc": "__MISSING__:Replaces text matching a regular expression. Use when you need patterns (character classes, optional whitespace, anchors) instead of literal substrings. A malformed pattern is caught at runtime when the op runs.", - "routingOpDropBlockContainsDesc": "__MISSING__:Removes ENTIRE system blocks (not just paragraphs) whose text contains any of the listed substrings. Use when a whole block is fingerprint-bearing and you want it gone — e.g. an injected MCP-server description.", - "routingOpPrependSystemBlockDesc": "__MISSING__:Inserts a new text block at the FRONT of the system array. Use to add the SDK identity 'You are a Claude agent, built on Anthropic's Claude Agent SDK.' that Anthropic's classifier expects.", - "routingOpAppendSystemBlockDesc": "__MISSING__:Inserts a new text block at the END of the system array. Use for cosmetic additions that don't need to be at position [0].", - "routingOpInjectBillingHeaderDesc": "__MISSING__:Prepends the special 'x-anthropic-billing-header: cc_version=...; cc_entrypoint=...; cch=...;' text block that Anthropic's classifier validates. Required for CC bridge relay endpoints; for the native claude provider OmniRoute already injects its own billing line so this op is usually redundant there.", - "routingOpObfuscateWordsDesc": "__MISSING__:Inserts a Zero-Width-Joiner character after the first letter of each listed word, so 'opencode' becomes 'o‍pencode'. Reads identical to humans but bypasses classifier word matches. Targets system blocks, user/assistant messages, and tool descriptions.", - "routingNeedlesHint": "__MISSING__:List of substrings. A paragraph matches if it contains ANY one of them. Add one per line via 'Add entry'.", - "routingPrefixesHint": "__MISSING__:List of strings. A paragraph matches if it starts with any one of them (leading whitespace is trimmed before matching).", - "routingCaseSensitiveHint": "__MISSING__:When ON, 'OpenCode' and 'opencode' are different strings. When OFF (default), the comparison ignores case.", - "routingMatchLiteralHint": "__MISSING__:Exact literal substring to find. No regex syntax — special chars like . * ? are treated as themselves.", - "routingReplacementTextHint": "__MISSING__:Replacement string. Leave blank to delete the match. The output preserves surrounding text.", - "routingAllOccurrencesHint": "__MISSING__:When ON (default), every instance is replaced. When OFF, only the first match is replaced.", - "routingPatternHint": "__MISSING__:JavaScript regex source. Don't wrap in slashes — just 'foo(.*)bar'. Server rejects patterns that fail to compile.", - "routingRegexFlagsHint": "__MISSING__:JavaScript regex flags (g = all matches, i = case-insensitive, s = dot matches newline, m = multiline). Default 'g'.", - "routingBlockTextHint": "__MISSING__:Full text of the new system block. Use a literal string; the system block stores text only.", - "routingIdempotencyKeyHint": "__MISSING__:Optional. If set, the op skips when a block whose text starts with this key is already present. Prevents double-prepend on retries.", - "routingBillingEntrypointHint": "__MISSING__:Value injected as 'cc_entrypoint='. Anthropic accepts 'sdk-cli' (Agent SDK), 'cli' (Claude Code CLI), or other documented values.", - "routingBillingVersionFormatHint": "__MISSING__:How the 3-char build hash after cc_version= is computed. 'ex-machina' = sha256 of CCH_SALT+chars-from-first-user-msg+version (per-message). 'omniroute-daystamp' = sha256 of YYYY-MM-DD+version (stable per-day).", - "routingBillingCchAlgoHint": "__MISSING__:How the 5-char cch= token is computed. 'sha256-first-user' = sha256 of first user message text. 'xxhash64-body' = body-level signing fills it later. 'static-zero' = literal '00000' placeholder.", - "routingObfuscateWordsHint": "__MISSING__:Lowercase words to obfuscate. ZWJ insertion is applied case-insensitively, so 'opencode' also matches 'OpenCode' and 'OPENCODE'.", - "routingObfuscateTargetsHint": "__MISSING__:Which body regions to scan for the words: system blocks, user/assistant messages, and/or tool descriptions.", - "routingObfuscateTargetsLabel": "__MISSING__:Targets", - "routingSummarizeDropParagraphContains": "__MISSING__:drop paragraphs containing: {items}", - "routingSummarizeDropParagraphStartsWith": "__MISSING__:drop paragraphs starting with: {items}", - "routingSummarizeReplaceText": "__MISSING__:replace \"{match}\" → \"{replacement}\"", - "routingSummarizeReplaceRegex": "__MISSING__:regex /{pattern}/{flags} → \"{replacement}\"", - "routingSummarizeDropBlockContains": "__MISSING__:drop blocks containing: {items}", - "routingSummarizePrependSystemBlock": "__MISSING__:prepend block: \"{text}\"", - "routingSummarizeAppendSystemBlock": "__MISSING__:append block: \"{text}\"", - "routingSummarizeInjectBillingHeader": "__MISSING__:inject billing header (entrypoint={entrypoint}, version={versionFormat}, cch={cchAlgo})", - "routingSummarizeObfuscateWords": "__MISSING__:obfuscate {count} word(s) via ZWJ in {targets}", - "routingDefaultAutoVariantLKGP": "__MISSING__:Last Known Good Provider", - "routingDefaultAutoVariantLKGPDesc": "__MISSING__:Last Known Good Provider", - "routingDefaultAutoVariantCoding": "__MISSING__:Quality-first for code", - "routingDefaultAutoVariantCodingDesc": "__MISSING__:Quality-first for code", - "routingDefaultAutoVariantFast": "__MISSING__:Low-latency routing", - "routingDefaultAutoVariantFastDesc": "__MISSING__:Low-latency routing", - "routingDefaultAutoVariantCheap": "__MISSING__:Cost-optimized", - "routingDefaultAutoVariantCheapDesc": "__MISSING__:Cost-optimized", - "routingDefaultAutoVariantOffline": "__MISSING__:High availability", - "routingDefaultAutoVariantOfflineDesc": "__MISSING__:High availability", - "routingDefaultAutoVariantSmart": "__MISSING__:Best discovery (10% explore)", - "routingDefaultAutoVariantSmartDesc": "__MISSING__:Best discovery (10% explore)", - "routingOpSummaryCount": "__MISSING__:{count, plural, =0 {no ops} one {# op} other {# ops}}", - "routingOpEnabled": "__MISSING__:enabled", - "routingOpDisabled": "__MISSING__:disabled", - "routingOpStatusSeparator": "__MISSING__: · ", - "resilienceSettingsIntro": "__MISSING__:Automatic retry, cooldown, and fallback when providers fail.", - "aiSettingsIntro": "__MISSING__:AI-specific settings for thinking budget, model behavior, and compression.", + "routingSettingsIntro": "控制请求被路由、转换并发送到 AI 提供商的方式。", + "routingOpDropParagraphContainsLabel": "丢弃段落(包含)", + "routingOpDropParagraphStartsWithLabel": "丢弃段落(开头匹配)", + "routingOpReplaceTextLabel": "替换文本", + "routingOpReplaceRegexLabel": "替换正则", + "routingOpDropBlockContainsLabel": "丢弃块(包含)", + "routingOpPrependSystemBlockLabel": "在系统块开头插入", + "routingOpAppendSystemBlockLabel": "在系统块末尾追加", + "routingOpInjectBillingHeaderLabel": "注入计费头", + "routingOpObfuscateWordsLabel": "混淆词语(ZWJ)", + "routingOpDropParagraphContainsDesc": "移除系统提示中包含任意指定子串的段落(以空行分割的文本块)。用于剥离 Anthropic 分类器会标记的第三方客户端指纹,例如 'github.com/anomalyco/opencode' 或 'docs.openwebui.com'。", + "routingOpDropParagraphStartsWithDesc": "移除以任一指定前缀开头的段落。用于剥离声明调用方客户端的身份行,例如 'You are OpenCode' 或 'You are Open WebUI'。", + "routingOpReplaceTextDesc": "用一个字面子串替换另一个字面子串。用于已知的触发短语 — 例如把 'Here is some useful information about the environment you are running in:' 改写为 'Environment context you are running in:'(经验证的触发短语)。", + "routingOpReplaceRegexDesc": "替换匹配正则表达式的文本。当你需要字符类、可选空白或锚点等模式时使用。运行时会捕获语法错误的正则。", + "routingOpDropBlockContainsDesc": "移除整个系统块(而非仅段落),只要其文本包含任一指定子串。当一整块带指纹时使用,例如注入的 MCP 服务器描述。", + "routingOpPrependSystemBlockDesc": "在系统数组的开头插入一个新的文本块。用于添加 Anthropic 分类器期望的 SDK 身份声明 'You are a Claude agent, built on Anthropic's Claude Agent SDK.'。", + "routingOpAppendSystemBlockDesc": "在系统数组末尾追加一个新文本块。用于不必置于 [0] 位置的修饰性内容。", + "routingOpInjectBillingHeaderDesc": "在前置位置插入特殊的 'x-anthropic-billing-header: cc_version=...; cc_entrypoint=...; cch=...;' 文本块,用于通过 Anthropic 分类器校验。CC 桥接转发端点必须使用;原生 claude 提供商已自带计费行,在那里通常无需此操作。", + "routingOpObfuscateWordsDesc": "在每个指定词的首字母后插入零宽连字符,例如 'opencode' 变为 'o‍pencode'。视觉上对人类完全相同,但能绕过分类器的词匹配。作用于系统块、用户/助手消息以及工具描述。", + "routingNeedlesHint": "子串列表。段落只要包含其中任一项即匹配。通过「添加条目」逐行添加。", + "routingPrefixesHint": "字符串列表。段落以其中任一项开头即匹配(匹配前会去除前导空白)。", + "routingCaseSensitiveHint": "开启时 'OpenCode' 与 'opencode' 视为不同字符串。关闭(默认)时忽略大小写。", + "routingMatchLiteralHint": "要查找的精确字面子串,不解析为正则 — . * ? 等特殊字符按字面处理。", + "routingReplacementTextHint": "替换字符串。留空则删除匹配项,周围文本保持不变。", + "routingAllOccurrencesHint": "开启(默认)时替换所有出现位置;关闭时仅替换第一次匹配。", + "routingPatternHint": "JavaScript 正则表达式源,不要用斜杠包裹 — 直接写 'foo(.*)bar'。无法编译的模式将被服务端拒绝。", + "routingRegexFlagsHint": "JavaScript 正则修饰符(g = 全部匹配,i = 忽略大小写,s = 点匹配换行,m = 多行)。默认 'g'。", + "routingBlockTextHint": "新系统块的完整文本。使用字面字符串;系统块仅存储文本。", + "routingIdempotencyKeyHint": "可选。设置后,如果已有以该键开头的块存在,则跳过此操作,避免重试时重复插入。", + "routingBillingEntrypointHint": "作为 'cc_entrypoint=' 注入的值。Anthropic 接受 'sdk-cli'(Agent SDK)、'cli'(Claude Code CLI)或其他文档化的值。", + "routingBillingVersionFormatHint": "cc_version= 后 3 字符构建哈希的计算方式。'ex-machina' = sha256(CCH_SALT + 第一条用户消息字符 + 版本)(每条消息独立)。'omniroute-daystamp' = sha256(YYYY-MM-DD + 版本)(按天稳定)。", + "routingBillingCchAlgoHint": "5 字符 cch= 令牌的计算方式。'sha256-first-user' = 第一条用户消息文本的 sha256;'xxhash64-body' = 由请求体级签名稍后填充;'static-zero' = 字面占位符 '00000'。", + "routingObfuscateWordsHint": "要混淆的小写词语。ZWJ 插入对大小写不敏感,所以 'opencode' 也会匹配 'OpenCode' 与 'OPENCODE'。", + "routingObfuscateTargetsHint": "扫描词语的请求体范围:系统块、用户/助手消息以及工具描述。", + "routingObfuscateTargetsLabel": "目标", + "routingSummarizeDropParagraphContains": "丢弃包含的段落:{items}", + "routingSummarizeDropParagraphStartsWith": "丢弃开头匹配的段落:{items}", + "routingSummarizeReplaceText": "将 \"{match}\" 替换为 \"{replacement}\"", + "routingSummarizeReplaceRegex": "正则 /{pattern}/{flags} → \"{replacement}\"", + "routingSummarizeDropBlockContains": "丢弃包含的块:{items}", + "routingSummarizePrependSystemBlock": "前置块:\"{text}\"", + "routingSummarizeAppendSystemBlock": "追加块:\"{text}\"", + "routingSummarizeInjectBillingHeader": "注入计费头(entrypoint={entrypoint},version={versionFormat},cch={cchAlgo})", + "routingSummarizeObfuscateWords": "通过 ZWJ 在 {targets} 中混淆 {count} 个词", + "routingDefaultAutoVariantLKGP": "上次正常的提供商", + "routingDefaultAutoVariantLKGPDesc": "上次正常的提供商", + "routingDefaultAutoVariantCoding": "代码场景质量优先", + "routingDefaultAutoVariantCodingDesc": "代码场景质量优先", + "routingDefaultAutoVariantFast": "低延迟路由", + "routingDefaultAutoVariantFastDesc": "低延迟路由", + "routingDefaultAutoVariantCheap": "成本优先", + "routingDefaultAutoVariantCheapDesc": "成本优先", + "routingDefaultAutoVariantOffline": "高可用", + "routingDefaultAutoVariantOfflineDesc": "高可用", + "routingDefaultAutoVariantSmart": "最佳探索(10% 探索率)", + "routingDefaultAutoVariantSmartDesc": "最佳探索(10% 探索率)", + "routingOpSummaryCount": "{count, plural, =0 {无操作} other {# 个操作}}", + "routingOpEnabled": "已启用", + "routingOpDisabled": "已禁用", + "routingOpStatusSeparator": " · ", + "resilienceSettingsIntro": "在提供商失败时进行自动重试、冷却与回退。", + "aiSettingsIntro": "针对思考预算、模型行为和压缩的 AI 专属设置。", "systemPrompt": "系统提示", "thinkingBudget": "思考预算", "proxy": "代理", @@ -4061,8 +4061,8 @@ "autoDisableDescription": "若提供商连接返回特定的永久封禁信号(如 HTTP 403\"请验证您的账户\"),则将其永久标记为停用。这会将其从组合轮换中移除。", "autoDisableThreshold": "封禁阈值", "autoDisableThresholdDesc": "触发永久停用所需的连续封禁信号次数。", - "resilienceStructureTitle": "__MISSING__:Resilience Structure", - "resilienceStructureDesc": "__MISSING__:This page only configures behavior. Live breaker state is shown on the Health page. Combo-specific retry and round-robin slot control remain on combo settings.", + "resilienceStructureTitle": "韧性体系", + "resilienceStructureDesc": "本页只配置行为。实时熔断器状态展示在健康页面,组合级重试与轮询槽控制保留在组合设置中。", "enableThinking": "激发思考", "maxThinkingTokens": "最大思考令牌", "enableProxy": "启用代理", @@ -4206,16 +4206,16 @@ "cliFingerprintEnabled": "已有 {count} 个提供商启用了 CLI 指纹", "enableFingerprintTitle": "为 {provider} 启用指纹", "disableFingerprintTitle": "为 {provider} 禁用指纹", - "systemTransforms": "__MISSING__:System-block Transform Pipeline", - "systemTransformsDesc": "__MISSING__:Per-provider ordered pipeline of transforms applied to the request body before forwarding. Supports any provider ID.", - "systemTransformsAddProvider": "__MISSING__:Add provider", - "systemTransformsAddProviderPlaceholder": "__MISSING__:Select a provider…", - "systemTransformsAddProviderAllConfigured": "__MISSING__:All providers already configured", - "systemTransformsRemoveProvider": "__MISSING__:Remove provider", - "systemTransformsNoProviders": "__MISSING__:No providers configured. Add a provider to get started.", - "systemTransformsOpMoveUp": "__MISSING__:Move up", - "systemTransformsOpMoveDown": "__MISSING__:Move down", - "systemTransformsOpDelete": "__MISSING__:Delete op", + "systemTransforms": "系统块转换流水线", + "systemTransformsDesc": "按提供商配置请求体在转发前的有序转换流水线,支持任意 provider ID。", + "systemTransformsAddProvider": "添加提供商", + "systemTransformsAddProviderPlaceholder": "选择一个提供商…", + "systemTransformsAddProviderAllConfigured": "所有提供商都已配置", + "systemTransformsRemoveProvider": "移除提供商", + "systemTransformsNoProviders": "尚未配置提供商,添加一个以开始。", + "systemTransformsOpMoveUp": "上移", + "systemTransformsOpMoveDown": "下移", + "systemTransformsOpDelete": "删除操作", "routingStrategy": "路由策略", "routingAdvancedGuideTitle": "高级路由指南", "routingAdvancedGuideHint1": "需要可预测优先级时使用 Fill First,需要公平分配时使用 Round Robin,需要延迟弹性时使用 P2C。", @@ -4232,8 +4232,8 @@ "leastUsedDesc": "优先选择最近使用最少的账户", "costOpt": "成本优化", "costOptDesc": "优先选择成本最低的可用账户", - "resetAware": "__MISSING__:Reset-Aware RR", - "resetAwareDesc": "__MISSING__:Prefer accounts with healthy remaining quota and nearer resets", + "resetAware": "Reset-Aware 轮询", + "resetAwareDesc": "优先选择剩余配额健康且离重置更近的账号", "strictRandom": "严格随机", "strictRandomDesc": "洗牌池模式:每个账户使用一次后再重新洗牌", "stickyLimit": "粘性限制", @@ -4597,304 +4597,304 @@ "compressionModeRtkDesc": "感知命令的工具输出过滤", "compressionModeStacked": "堆叠", "compressionModeStackedDesc": "先进行 RTK 工具输出过滤,再进行 Caveman 消息压缩", - "qdrantTitle": "__MISSING__:Qdrant (Vector memory)", - "qdrantDesc": "__MISSING__:Optional. Indexes semantic memories in an external vector database for faster retrieval.", - "qdrantStatusActive": "__MISSING__:Active", - "qdrantStatusError": "__MISSING__:Error", - "qdrantStatusDisabled": "__MISSING__:Disabled", - "qdrantEnable": "__MISSING__:Enable Qdrant", - "qdrantEnableDesc": "__MISSING__:When enabled, semantic/hybrid strategy can use Qdrant to retrieve memories.", - "qdrantTesting": "__MISSING__:Testing...", - "qdrantTestConnection": "__MISSING__:Test connection", - "qdrantSaved": "__MISSING__:Configuration saved", - "qdrantSaveError": "__MISSING__:Failed to save configuration", - "qdrantHostHint": "__MISSING__:Without port. Example: 127.0.0.1 or http://qdrant", - "qdrantPort": "__MISSING__:Port", - "qdrantPortHint": "__MISSING__:Qdrant default: 6333", - "qdrantCollectionHint": "__MISSING__:Where memory points will be stored.", - "qdrantEmbeddingModel": "__MISSING__:Embedding model", - "qdrantHelpTitle": "__MISSING__:Quick setup help", - "qdrantHelpQuickTitle": "__MISSING__:Quick setup (Qdrant + OpenRouter)", - "qdrantHelpStep1": "__MISSING__:1. Host: Qdrant IP/URL, Port: 6333, Collection: omniroute_memory.", - "qdrantHelpStep2": "__MISSING__:2. If using nvidia/llama-nemotron-embed-vl-1b-v2:free, use collection dimension 2048.", - "qdrantHelpStep3": "__MISSING__:3. Model field: openrouter/nvidia/llama-nemotron-embed-vl-1b-v2:free.", - "qdrantHelpStep4": "__MISSING__:4. Save, test connection, then test search.", - "qdrantEmbeddingQuickSelect": "__MISSING__:Quick select from discovered models...", - "qdrantEmbeddingInputPlaceholder": "__MISSING__:openai/text-embedding-3-small", - "qdrantEmbeddingHint": "__MISSING__:Format: provider/model. The provider credential must be configured.", - "qdrantApiKeyPlaceholderKeep": "__MISSING__:(leave empty to keep current key)", - "qdrantApiKeyPlaceholderOptional": "__MISSING__:(leave empty if not used)", - "qdrantSaveHint": "__MISSING__:Tip: edit host/port/collection/model and click Save. API key is optional.", - "qdrantSearchTestTitle": "__MISSING__:Search test", - "qdrantSearchTestDesc": "__MISSING__:Generates embedding and searches in Qdrant.", - "qdrantSearchPlaceholder": "__MISSING__:Example: user preferences, history, etc", - "qdrantNoResults": "__MISSING__:No results (or Qdrant is not configured).", - "qdrantCleanupTitle": "__MISSING__:Retention and cleanup", - "qdrantCleanupDesc": "__MISSING__:Removes expired and old points based on", - "searching": "__MISSING__:Searching...", - "cleaning": "__MISSING__:Cleaning...", - "cleanNow": "__MISSING__:Clean now", - "optional": "__MISSING__:Optional", - "current": "__MISSING__:Current", - "remove": "__MISSING__:Remove", - "search": "__MISSING__:Search", - "oneproxyTitle": "__MISSING__:1proxy Free Proxy Marketplace", - "oneproxyTotalProxies": "__MISSING__:Total Proxies", - "oneproxyAvgQuality": "__MISSING__:Avg Quality", - "resilienceScope": "__MISSING__:Scope:", - "resilienceTrigger": "__MISSING__:Trigger:", - "resilienceEffect": "__MISSING__:Effect:", - "resilienceRequestQueueTitle": "__MISSING__:Request Queue & Rate", - "resilienceAutoEnableApiKeyProviders": "__MISSING__:Auto-enable for API-key providers", - "resilienceRequestsPerMinute": "__MISSING__:Requests per minute", - "resilienceMinTimeBetweenRequests": "__MISSING__:Minimum time between requests", - "resilienceConcurrentRequests": "__MISSING__:Concurrent requests", - "resilienceMaxQueueWaitTime": "__MISSING__:Maximum queue wait time", - "resilienceBaseCooldown": "__MISSING__:Base cooldown", - "resilienceUseUpstreamRetryHints": "__MISSING__:Use upstream retry hints", - "resilienceDefaultPerProvider": "__MISSING__:Default (per provider)", - "resilienceAlwaysOn": "__MISSING__:Always on", - "resilienceAlwaysOff": "__MISSING__:Always off", - "routingRemoveEntry": "__MISSING__:Remove entry", - "routingNeedlesSubstrings": "__MISSING__:Needles (substrings to match)", - "routingCaseSensitive": "__MISSING__:Case sensitive", - "routingPrefixes": "__MISSING__:Prefixes", - "routingMatch": "__MISSING__:Match", - "routingReplacement": "__MISSING__:Replacement", - "routingReplaceAllOccurrences": "__MISSING__:Replace all occurrences", - "routingPatternRegex": "__MISSING__:Pattern (regex)", - "routingFlags": "__MISSING__:Flags", - "routingNeedles": "__MISSING__:Needles", - "routingBlockText": "__MISSING__:Block text", - "routingIdempotencyKey": "__MISSING__:Idempotency key", - "routingEntrypoint": "__MISSING__:Entrypoint", - "routingVersionFormat": "__MISSING__:Version format", - "routingCchAlgorithm": "__MISSING__:CCH algorithm", - "routingWordsToObfuscate": "__MISSING__:Words to obfuscate (ZWJ inserted after first char)", - "logsSettingsTitle": "__MISSING__:Logs Settings", - "detailedLogsLabel": "__MISSING__:Detailed Logs Enabled", - "detailedLogsDesc": "__MISSING__:Enable detailed request/response logging", - "callLogPipelineLabel": "__MISSING__:Call Log Pipeline", - "callLogPipelineDesc": "__MISSING__:Enable call log processing pipeline", - "maxDetailSizeLabel": "__MISSING__:Max Detail Size (KB)", - "maxDetailSizeDesc": "__MISSING__:Maximum size for detailed log entries", - "ringBufferSizeLabel": "__MISSING__:Ring Buffer Size", - "ringBufferSizeDesc": "__MISSING__:Size of the ring buffer for logs", - "semanticCacheEnabledLabel": "__MISSING__:Semantic Cache Enabled", - "semanticCacheMaxSizeLabel": "__MISSING__:Semantic Cache Max Size", - "semanticCacheMaxSizeDesc": "__MISSING__:Maximum number of semantic cache entries", - "semanticCacheTTLLabel": "__MISSING__:Semantic Cache TTL", - "promptCacheEnabledLabel": "__MISSING__:Prompt Cache Enabled", - "promptCacheEnabledDesc": "__MISSING__:Enable prompt caching", - "promptCacheStrategyLabel": "__MISSING__:Prompt Cache Strategy", - "promptCacheStrategyDesc": "__MISSING__:Strategy for prompt caching", - "alwaysPreserveClientCacheLabel": "__MISSING__:Always Preserve Client Cache", - "alwaysPreserveClientCacheDesc": "__MISSING__:Client cache preservation policy", - "logRetentionPolicyTitle": "__MISSING__:Log retention policy", - "resilienceUseUpstream429HintsForBreaker": "__MISSING__:Use upstream 429 hints (breaker)", - "appearanceLogoPreviewAlt": "__MISSING__:Logo preview", - "appearanceFaviconPreviewAlt": "__MISSING__:Favicon preview", - "oneproxyLastSync": "__MISSING__:Last Sync", - "oneproxyAllProtocols": "__MISSING__:All Protocols", - "oneproxyCountryCodePlaceholder": "__MISSING__:Country code (e.g. US)", - "oneproxyMinQualityPlaceholder": "__MISSING__:Min quality", - "oneproxyLoadingProxies": "__MISSING__:Loading proxies...", - "oneproxyLastSyncLabel": "__MISSING__:Last sync:", - "oneproxyProxiesFetched": "__MISSING__:Proxies fetched:", - "oneproxyConsecutiveFailures": "__MISSING__:Consecutive failures:", - "oneproxyErrorLabel": "__MISSING__:Error:", - "oneproxyNever": "__MISSING__:Never", - "oneproxySyncStatusTitle": "__MISSING__:Sync Status", - "oneproxySuccess": "__MISSING__:Success", - "oneproxyFailed": "__MISSING__:Failed", - "routingAntigravitySignatureTitle": "__MISSING__:Antigravity Signature Cache Mode", - "routingAntigravitySignatureDesc": "__MISSING__:Control whether OmniRoute reuses only stored Gemini thought signatures or accepts validated client-provided signatures in Antigravity-compatible tool-call flows.", - "routingAntigravitySignatureEnabledLabel": "__MISSING__:Enabled", - "routingAntigravitySignatureEnabledDesc": "__MISSING__:Current behavior. Ignore client-provided signatures and keep using the stored OmniRoute flow.", - "routingAntigravitySignatureBypassLabel": "__MISSING__:Bypass", - "routingAntigravitySignatureBypassDesc": "__MISSING__:Accept client-provided signatures after lightweight validation and fall back to the stored signature when invalid.", - "routingAntigravitySignatureBypassStrictLabel": "__MISSING__:Bypass Strict", - "routingAntigravitySignatureBypassStrictDesc": "__MISSING__:Require full protobuf validation before accepting a client-provided signature.", - "routingHeaderFingerprintTitle": "__MISSING__:Header fingerprint (per provider)", - "routingServerRejectedSave": "__MISSING__:⚠ Server rejected save:", - "routingAddTransformOp": "__MISSING__:Add a transform op", - "routingClientCacheControlTitle": "__MISSING__:Client Cache Control", - "routingClientCacheControlDesc": "__MISSING__:Configure whether OmniRoute preserves client-provided cache_control markers", - "routingClientCacheControlAutoDesc": "__MISSING__:For deterministic Claude-compatible flows, preserve client-provided cache_control as-is. If the request has no cache_control, OmniRoute does not inject any bridge-owned markers for CC-compatible third-party proxy compatibility.", - "routingClientCacheControlAlwaysLabel": "__MISSING__:Always Preserve", - "routingClientCacheControlAlwaysDesc": "__MISSING__:Always forward client-provided cache_control headers to upstream providers as-is.", - "routingClientCacheControlNeverLabel": "__MISSING__:Never Preserve", - "routingClientCacheControlNeverDesc": "__MISSING__:Always remove client cache_control headers and let OmniRoute manage caching where native provider flows support it.", - "routingZeroConfigTitle": "__MISSING__:Zero-Config Auto-Routing", - "routingZeroConfigDesc": "__MISSING__:Enable automatic provider selection using the auto/ prefix. When enabled, requests to auto, auto/coding, auto/fast, etc. will dynamically route across all connected providers.", - "routingDefaultAutoVariant": "__MISSING__:Default Auto Variant", - "visionBridge": "__MISSING__:Vision Bridge", - "visionBridgeDesc": "__MISSING__:Run an automatic vision-to-text fallback before routing image requests to text-only models.", - "visionBridgeEnabledLabel": "__MISSING__:Enabled", - "visionBridgeEnabledDesc": "__MISSING__:Toggle the pre-call bridge that replaces image parts with extracted text.", - "visionBridgeModel": "__MISSING__:Bridge Model", - "visionBridgeModelPlaceholder": "__MISSING__:openai/gpt-4o-mini", - "visionBridgeModelHint": "__MISSING__:Any OmniRoute model ID that supports vision can be used here.", - "visionBridgePrompt": "__MISSING__:Bridge Prompt", - "visionBridgePromptPlaceholder": "__MISSING__:Describe this image concisely.", - "visionBridgePromptHint": "__MISSING__:Sent to the vision model before the extracted description is injected back into the original request.", - "visionBridgeTimeoutMs": "__MISSING__:Timeout (ms)", - "visionBridgeMaxImagesPerRequest": "__MISSING__:Max Images Per Request", - "resilienceMaxBackoffSteps": "__MISSING__:Max backoff steps", - "resilienceProviderBreakerTitle": "__MISSING__:Circuit Breaker per Provider", - "resilienceFailureThreshold": "__MISSING__:Failure threshold", - "resilienceResetTimeout": "__MISSING__:Reset timeout", - "resilienceFailureThresholdLabel": "__MISSING__:Failure threshold", - "resilienceResetTimeoutLabel": "__MISSING__:Reset timeout", - "resilienceConnectionCooldownTitle": "__MISSING__:Connection Cooldown", - "resilienceUseUpstreamRetryHintsLabel": "__MISSING__:Use upstream retry hints", - "resilienceUseUpstream429BreakerLabel": "__MISSING__:Use upstream 429 hints (breaker)", - "resilienceMaxBackoffStepsLabel": "__MISSING__:Max backoff steps", - "resilienceYes": "__MISSING__:Yes", - "resilienceNo": "__MISSING__:No", - "resilienceDefault": "__MISSING__:Default", - "storageDatabaseBackupRetention": "__MISSING__:Database backup retention", - "storagePurgeData": "__MISSING__:Purge Data", - "retentionQuotaSnapshots": "__MISSING__:Quota Snapshots (days)", - "retentionMcpAudit": "__MISSING__:MCP Audit (days)", - "retentionA2aEvents": "__MISSING__:A2A Events (days)", - "retentionCallLogs": "__MISSING__:Call Logs (days)", - "retentionUsageHistory": "__MISSING__:Usage History (days)", - "retentionMemoryEntries": "__MISSING__:Memory Entries (days)", - "storageAutoVacuumMode": "__MISSING__:Auto Vacuum Mode", - "storageScheduledVacuum": "__MISSING__:Scheduled Vacuum", - "storageVacuumHour": "__MISSING__:Vacuum Hour (0-23)", - "storagePageSize": "__MISSING__:Page Size (bytes)", - "storageDatabaseSize": "__MISSING__:Database Size", - "storagePageCount": "__MISSING__:Page Count", - "storageFreelistCount": "__MISSING__:Freelist Count", - "storageLastVacuum": "__MISSING__:Last Vacuum", - "storageLastOptimization": "__MISSING__:Last Optimization", - "storageIntegrityCheck": "__MISSING__:Integrity Check", - "storageIntegrityOk": "__MISSING__:✓ OK", - "storageIntegrityError": "__MISSING__:✗ Error", - "storageUsageTokenBuffer": "__MISSING__:Usage Token Buffer", - "compressionSettingsAutoTriggerMode": "__MISSING__:Auto trigger mode", - "compressionSettingsMcpDescriptionCompression": "__MISSING__:MCP description compression", - "compressionSettingsCavemanIntensity": "__MISSING__:Caveman intensity", - "compressionSettingsCavemanOutputMode": "__MISSING__:Caveman output mode", - "compressionSettingsOutputIntensity": "__MISSING__:Output intensity", - "compressionSettingsAutoClarityBypass": "__MISSING__:Auto clarity bypass", - "resilienceWaitForCooldown": "__MISSING__:Wait for Cooldown", - "resilienceEnableServerSideWait": "__MISSING__:Enable server-side wait", - "resilienceMaximumRetries": "__MISSING__:Maximum retries", - "resilienceMaximumWaitPerRetry": "__MISSING__:Maximum wait per retry", - "memorySkillsSkillsmpMarketplace": "__MISSING__:SkillsMP Marketplace", - "memorySkillsFailedToSave": "__MISSING__:Failed to save", - "memorySkillsApiKey": "__MISSING__:API Key", - "memorySkillsActiveSkillsProvider": "__MISSING__:Active Skills Provider", - "cliproxyapiFallback": "__MISSING__:CLIProxyAPI Fallback", - "cliproxyapiEnableFallback": "__MISSING__:Enable CLIProxyAPI Fallback", - "cliproxyapiUrl": "__MISSING__:CLIProxyAPI URL", - "cliproxyapiStatus": "__MISSING__:CLIProxyAPI Status", - "cliproxyapiNotDetected": "__MISSING__:Not detected", - "payloadRulesTitle": "__MISSING__:Payload Rules", - "payloadRulesDesc": "__MISSING__:Configure request payload mutations by model and protocol. Changes are persisted in settings and hot reloaded into the runtime immediately after save.", - "payloadRuleDefaultTitle": "__MISSING__:default", - "payloadRuleDefaultDesc": "__MISSING__:Applies params only when the target path is missing from the outgoing payload.", - "payloadRuleOverrideTitle": "__MISSING__:override", - "payloadRuleOverrideDesc": "__MISSING__:Forces values onto the payload, replacing anything already present at that path.", - "payloadRuleFilterTitle": "__MISSING__:filter", - "payloadRuleFilterDesc": "__MISSING__:Removes blocked params from the payload before the upstream request is sent.", - "payloadRuleDefaultRawTitle": "__MISSING__:defaultRaw", - "payloadRuleDefaultRawDesc": "__MISSING__:Like default, but string values are parsed as JSON first when possible. The legacy input alias default-raw is also accepted on save.", - "payloadEditorTitle": "__MISSING__:Editor", - "payloadEditorDesc": "__MISSING__:Use the runtime schema shape: default, override, filter, defaultRaw. The API also accepts the legacy input key default-raw.", - "payloadEditorReady": "__MISSING__:Ready", - "payloadResetInfo": "__MISSING__:Editor reset to the neutral template. Save to apply it.", - "payloadSaveSuccess": "__MISSING__:Payload rules saved and hot reloaded.", - "payloadJsonParseError": "__MISSING__:JSON parse error: {error}", - "payloadMustBeObject": "__MISSING__:Payload rules must be a JSON object.", - "payloadInvalidJson": "__MISSING__:Invalid JSON payload.", - "payloadValidJsonRequired": "__MISSING__:Payload rules must be valid JSON before saving.", - "savePayloadRules": "__MISSING__:Save Payload Rules", - "requestLimitsTitle": "__MISSING__:Request Limits", - "requestLimitsDesc": "__MISSING__:Configure global request limits and concurrency guards.", - "maxRequestSizeLabel": "__MISSING__:Max Request Size (MB)", - "maxRequestSizeDesc": "__MISSING__:Maximum allowed size for incoming API requests.", - "maxResponseSizeLabel": "__MISSING__:Max Response Size (MB)", - "maxResponseSizeDesc": "__MISSING__:Maximum allowed size for outgoing API responses.", - "maxRequestTokensLabel": "__MISSING__:Max Request Tokens", - "maxRequestTokensDesc": "__MISSING__:Maximum total tokens allowed in a single request.", - "maxResponseTokensLabel": "__MISSING__:Max Response Tokens", - "maxResponseTokensDesc": "__MISSING__:Maximum total tokens allowed in a single response.", - "modelCooldownsTitle": "__MISSING__:Models in cooldown", - "modelCooldownsEmpty": "__MISSING__:No models in cooldown right now.", - "codexFastTierTitle": "__MISSING__:Codex Fast Tier", - "codexFastTierDesc": "__MISSING__:Globally inject service_tier=priority for OpenAI Codex requests.", - "codexFastTierHint": "__MISSING__:When enabled, OmniRoute adds service_tier=priority to outbound Codex requests for connections that don't already specify a tier. Priority tier requires an OpenAI Enterprise API key or the ChatGPT-auth Codex path; other key types will receive a tier-related error from OpenAI. Per-connection settings on the Codex provider page take precedence.", - "codexFastTierSaveError": "__MISSING__:Failed to update Codex Fast Tier setting", - "codexFastTierTierLabel": "__MISSING__:Service tier", - "codexFastTierTierPriority": "__MISSING__:Priority", - "codexFastTierTierFlex": "__MISSING__:Flex", - "codexFastTierTierDefault": "__MISSING__:Default", - "codexFastTierModelsLabel": "__MISSING__:Fast-tier models", - "codexFastTierModelsHint": "__MISSING__:Only checked models receive service_tier when Fast Tier is enabled.", - "codexFastTierModelCheckbox": "__MISSING__:Enable Fast Tier for {model}", - "claudeFastModeTitle": "__MISSING__:Claude Fast Mode", - "claudeFastModeDesc": "__MISSING__:Opt selected Claude requests into Anthropic Fast Mode (speed:\"fast\").", - "claudeFastModeHint": "__MISSING__:Anthropic does not officially support Fast Mode for SDK-style clients. When enabled, OmniRoute forwards an X-CPA-Force-Fast-Mode header so a paired CLIProxyAPI build can opt-in spoof the entrypoint. Only the listed Opus models are gated by Anthropic's client-side check. Subscription tier, Max plan, and Fast Mode credit balance are still enforced server-side — Anthropic may return out_of_credits even when the toggle is on.", - "claudeFastModeModelsLabel": "__MISSING__:Applied to models ({count})", - "claudeFastModeModelCheckbox": "__MISSING__:Enable Fast Mode for {model}", - "claudeFastModeSaveError": "__MISSING__:Failed to update Claude Fast Mode setting", + "qdrantTitle": "Qdrant(向量记忆)", + "qdrantDesc": "可选。在外部向量数据库中索引语义记忆,以加速检索。", + "qdrantStatusActive": "已启用", + "qdrantStatusError": "出错", + "qdrantStatusDisabled": "已禁用", + "qdrantEnable": "启用 Qdrant", + "qdrantEnableDesc": "启用后,语义/混合策略可使用 Qdrant 检索记忆。", + "qdrantTesting": "测试中...", + "qdrantTestConnection": "测试连接", + "qdrantSaved": "配置已保存", + "qdrantSaveError": "保存配置失败", + "qdrantHostHint": "不含端口。例如:127.0.0.1 或 http://qdrant", + "qdrantPort": "端口", + "qdrantPortHint": "Qdrant 默认端口:6333", + "qdrantCollectionHint": "记忆向量将存储于此集合。", + "qdrantEmbeddingModel": "嵌入模型", + "qdrantHelpTitle": "快速配置帮助", + "qdrantHelpQuickTitle": "快速配置(Qdrant + OpenRouter)", + "qdrantHelpStep1": "1. Host:Qdrant IP/URL,Port:6333,Collection:omniroute_memory。", + "qdrantHelpStep2": "2. 若使用 nvidia/llama-nemotron-embed-vl-1b-v2:free,集合维度请设为 2048。", + "qdrantHelpStep3": "3. 模型字段:openrouter/nvidia/llama-nemotron-embed-vl-1b-v2:free。", + "qdrantHelpStep4": "4. 保存,测试连接,然后测试搜索。", + "qdrantEmbeddingQuickSelect": "从已发现的模型中快速选择...", + "qdrantEmbeddingInputPlaceholder": "openai/text-embedding-3-small", + "qdrantEmbeddingHint": "格式:provider/model。该提供商的凭证必须已配置。", + "qdrantApiKeyPlaceholderKeep": "(留空以保留当前密钥)", + "qdrantApiKeyPlaceholderOptional": "(若不使用请留空)", + "qdrantSaveHint": "提示:修改 host/port/collection/model 后点击保存,API 密钥可选。", + "qdrantSearchTestTitle": "搜索测试", + "qdrantSearchTestDesc": "生成嵌入向量并在 Qdrant 中搜索。", + "qdrantSearchPlaceholder": "示例:用户偏好、历史等", + "qdrantNoResults": "无结果(或 Qdrant 未配置)。", + "qdrantCleanupTitle": "保留与清理", + "qdrantCleanupDesc": "基于以下设置删除过期与陈旧向量", + "searching": "搜索中...", + "cleaning": "清理中...", + "cleanNow": "立即清理", + "optional": "可选", + "current": "当前", + "remove": "移除", + "search": "搜索", + "oneproxyTitle": "1proxy 免费代理市场", + "oneproxyTotalProxies": "代理总数", + "oneproxyAvgQuality": "平均质量", + "resilienceScope": "范围:", + "resilienceTrigger": "触发条件:", + "resilienceEffect": "效果:", + "resilienceRequestQueueTitle": "请求队列与速率", + "resilienceAutoEnableApiKeyProviders": "对 API 密钥提供商自动启用", + "resilienceRequestsPerMinute": "每分钟请求数", + "resilienceMinTimeBetweenRequests": "请求间最小间隔", + "resilienceConcurrentRequests": "并发请求数", + "resilienceMaxQueueWaitTime": "队列最大等待时间", + "resilienceBaseCooldown": "基础冷却时间", + "resilienceUseUpstreamRetryHints": "使用上游重试提示", + "resilienceDefaultPerProvider": "默认(按提供商)", + "resilienceAlwaysOn": "始终启用", + "resilienceAlwaysOff": "始终关闭", + "routingRemoveEntry": "移除条目", + "routingNeedlesSubstrings": "匹配子串", + "routingCaseSensitive": "区分大小写", + "routingPrefixes": "前缀", + "routingMatch": "匹配", + "routingReplacement": "替换", + "routingReplaceAllOccurrences": "替换所有出现", + "routingPatternRegex": "模式(正则)", + "routingFlags": "修饰符", + "routingNeedles": "匹配子串", + "routingBlockText": "块文本", + "routingIdempotencyKey": "幂等键", + "routingEntrypoint": "入口", + "routingVersionFormat": "版本格式", + "routingCchAlgorithm": "CCH 算法", + "routingWordsToObfuscate": "要混淆的词(在首字符后插入 ZWJ)", + "logsSettingsTitle": "日志设置", + "detailedLogsLabel": "启用详细日志", + "detailedLogsDesc": "启用详细的请求/响应日志记录", + "callLogPipelineLabel": "调用日志流水线", + "callLogPipelineDesc": "启用调用日志处理流水线", + "maxDetailSizeLabel": "最大详细日志大小(KB)", + "maxDetailSizeDesc": "详细日志条目的最大大小", + "ringBufferSizeLabel": "环形缓冲区大小", + "ringBufferSizeDesc": "日志环形缓冲区的大小", + "semanticCacheEnabledLabel": "启用语义缓存", + "semanticCacheMaxSizeLabel": "语义缓存最大容量", + "semanticCacheMaxSizeDesc": "语义缓存条目的最大数量", + "semanticCacheTTLLabel": "语义缓存 TTL", + "promptCacheEnabledLabel": "启用提示缓存", + "promptCacheEnabledDesc": "启用提示缓存", + "promptCacheStrategyLabel": "提示缓存策略", + "promptCacheStrategyDesc": "提示缓存使用的策略", + "alwaysPreserveClientCacheLabel": "始终保留客户端缓存", + "alwaysPreserveClientCacheDesc": "客户端缓存保留策略", + "logRetentionPolicyTitle": "日志保留策略", + "resilienceUseUpstream429HintsForBreaker": "使用上游 429 提示(熔断器)", + "appearanceLogoPreviewAlt": "Logo 预览", + "appearanceFaviconPreviewAlt": "Favicon 预览", + "oneproxyLastSync": "上次同步", + "oneproxyAllProtocols": "所有协议", + "oneproxyCountryCodePlaceholder": "国家代码(例如 US)", + "oneproxyMinQualityPlaceholder": "最低质量", + "oneproxyLoadingProxies": "正在加载代理...", + "oneproxyLastSyncLabel": "上次同步:", + "oneproxyProxiesFetched": "已获取代理:", + "oneproxyConsecutiveFailures": "连续失败:", + "oneproxyErrorLabel": "错误:", + "oneproxyNever": "从未", + "oneproxySyncStatusTitle": "同步状态", + "oneproxySuccess": "成功", + "oneproxyFailed": "失败", + "routingAntigravitySignatureTitle": "Antigravity 签名缓存模式", + "routingAntigravitySignatureDesc": "控制 OmniRoute 在 Antigravity 兼容的工具调用流程中是仅复用已存储的 Gemini thought 签名,还是接受经校验的客户端提交签名。", + "routingAntigravitySignatureEnabledLabel": "启用", + "routingAntigravitySignatureEnabledDesc": "当前行为。忽略客户端提交的签名,继续使用 OmniRoute 已存储的流程。", + "routingAntigravitySignatureBypassLabel": "绕过", + "routingAntigravitySignatureBypassDesc": "经过轻量校验后接受客户端提交的签名,无效时回退到已存储的签名。", + "routingAntigravitySignatureBypassStrictLabel": "严格绕过", + "routingAntigravitySignatureBypassStrictDesc": "在接受客户端提交的签名前要求完整的 protobuf 校验。", + "routingHeaderFingerprintTitle": "请求头指纹(按提供商)", + "routingServerRejectedSave": "⚠ 服务端拒绝保存:", + "routingAddTransformOp": "添加转换操作", + "routingClientCacheControlTitle": "客户端 Cache Control", + "routingClientCacheControlDesc": "配置 OmniRoute 是否保留客户端提交的 cache_control 标记", + "routingClientCacheControlAutoDesc": "对于确定性的 Claude 兼容流程,按原样保留客户端提交的 cache_control。如果请求未携带 cache_control,OmniRoute 不会注入任何由桥接器拥有的标记,以兼容 CC 兼容的第三方代理。", + "routingClientCacheControlAlwaysLabel": "始终保留", + "routingClientCacheControlAlwaysDesc": "始终按原样将客户端提交的 cache_control 请求头转发给上游提供商。", + "routingClientCacheControlNeverLabel": "从不保留", + "routingClientCacheControlNeverDesc": "始终移除客户端的 cache_control 请求头,在原生提供商流程支持时由 OmniRoute 管理缓存。", + "routingZeroConfigTitle": "零配置自动路由", + "routingZeroConfigDesc": "启用使用 auto/ 前缀的自动提供商选择。启用后,发往 auto、auto/coding、auto/fast 等的请求将在所有已连接提供商之间动态路由。", + "routingDefaultAutoVariant": "默认 Auto 变体", + "visionBridge": "视觉桥接", + "visionBridgeDesc": "在将图像请求路由到纯文本模型之前,自动执行一次视觉到文本的回退。", + "visionBridgeEnabledLabel": "启用", + "visionBridgeEnabledDesc": "切换预调用桥接,将图像内容替换为提取出的文本。", + "visionBridgeModel": "桥接模型", + "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", + "visionBridgeModelHint": "可使用任何支持视觉的 OmniRoute 模型 ID。", + "visionBridgePrompt": "桥接提示词", + "visionBridgePromptPlaceholder": "简要描述此图像。", + "visionBridgePromptHint": "在将提取出的描述注入回原始请求前,先发送给视觉模型。", + "visionBridgeTimeoutMs": "超时(毫秒)", + "visionBridgeMaxImagesPerRequest": "单次请求最大图像数", + "resilienceMaxBackoffSteps": "最大退避步数", + "resilienceProviderBreakerTitle": "提供商熔断器", + "resilienceFailureThreshold": "失败阈值", + "resilienceResetTimeout": "重置超时", + "resilienceFailureThresholdLabel": "失败阈值", + "resilienceResetTimeoutLabel": "重置超时", + "resilienceConnectionCooldownTitle": "连接冷却", + "resilienceUseUpstreamRetryHintsLabel": "使用上游重试提示", + "resilienceUseUpstream429BreakerLabel": "使用上游 429 提示(熔断器)", + "resilienceMaxBackoffStepsLabel": "最大退避步数", + "resilienceYes": "是", + "resilienceNo": "否", + "resilienceDefault": "默认", + "storageDatabaseBackupRetention": "数据库备份保留", + "storagePurgeData": "清除数据", + "retentionQuotaSnapshots": "配额快照(天)", + "retentionMcpAudit": "MCP 审计(天)", + "retentionA2aEvents": "A2A 事件(天)", + "retentionCallLogs": "调用日志(天)", + "retentionUsageHistory": "使用历史(天)", + "retentionMemoryEntries": "记忆条目(天)", + "storageAutoVacuumMode": "自动 Vacuum 模式", + "storageScheduledVacuum": "计划 Vacuum", + "storageVacuumHour": "Vacuum 时段(0-23)", + "storagePageSize": "页大小(字节)", + "storageDatabaseSize": "数据库大小", + "storagePageCount": "页数", + "storageFreelistCount": "空闲页数", + "storageLastVacuum": "最近一次 Vacuum", + "storageLastOptimization": "最近一次优化", + "storageIntegrityCheck": "完整性检查", + "storageIntegrityOk": "✓ 正常", + "storageIntegrityError": "✗ 错误", + "storageUsageTokenBuffer": "使用 Token 缓冲", + "compressionSettingsAutoTriggerMode": "自动触发模式", + "compressionSettingsMcpDescriptionCompression": "MCP 描述压缩", + "compressionSettingsCavemanIntensity": "Caveman 强度", + "compressionSettingsCavemanOutputMode": "Caveman 输出模式", + "compressionSettingsOutputIntensity": "输出强度", + "compressionSettingsAutoClarityBypass": "自动清晰度绕过", + "resilienceWaitForCooldown": "等待冷却", + "resilienceEnableServerSideWait": "启用服务端等待", + "resilienceMaximumRetries": "最大重试次数", + "resilienceMaximumWaitPerRetry": "每次重试的最大等待时间", + "memorySkillsSkillsmpMarketplace": "SkillsMP 市场", + "memorySkillsFailedToSave": "保存失败", + "memorySkillsApiKey": "API 密钥", + "memorySkillsActiveSkillsProvider": "当前技能提供商", + "cliproxyapiFallback": "CLIProxyAPI 回退", + "cliproxyapiEnableFallback": "启用 CLIProxyAPI 回退", + "cliproxyapiUrl": "CLIProxyAPI 地址", + "cliproxyapiStatus": "CLIProxyAPI 状态", + "cliproxyapiNotDetected": "未检测到", + "payloadRulesTitle": "Payload 规则", + "payloadRulesDesc": "按模型与协议配置请求 payload 的变更。修改会持久化到设置中,并在保存后立即热加载到运行时。", + "payloadRuleDefaultTitle": "default", + "payloadRuleDefaultDesc": "仅在外发 payload 缺少目标路径时应用参数。", + "payloadRuleOverrideTitle": "override", + "payloadRuleOverrideDesc": "强制将值写入 payload,替换该路径上已存在的任何内容。", + "payloadRuleFilterTitle": "filter", + "payloadRuleFilterDesc": "在向上游发起请求前,从 payload 中移除被屏蔽的参数。", + "payloadRuleDefaultRawTitle": "defaultRaw", + "payloadRuleDefaultRawDesc": "与 default 类似,但会先尝试将字符串值解析为 JSON。保存时也接受旧的输入别名 default-raw。", + "payloadEditorTitle": "编辑器", + "payloadEditorDesc": "请使用运行时的 schema 形态:default、override、filter、defaultRaw。API 也接受旧的输入键名 default-raw。", + "payloadEditorReady": "就绪", + "payloadResetInfo": "编辑器已重置为中性模板,保存后生效。", + "payloadSaveSuccess": "Payload 规则已保存并热加载。", + "payloadJsonParseError": "JSON 解析错误:{error}", + "payloadMustBeObject": "Payload 规则必须是 JSON 对象。", + "payloadInvalidJson": "无效的 JSON payload。", + "payloadValidJsonRequired": "保存前 Payload 规则必须是合法 JSON。", + "savePayloadRules": "保存 Payload 规则", + "requestLimitsTitle": "请求限制", + "requestLimitsDesc": "配置全局请求限制与并发保护。", + "maxRequestSizeLabel": "最大请求大小(MB)", + "maxRequestSizeDesc": "传入 API 请求允许的最大大小。", + "maxResponseSizeLabel": "最大响应大小(MB)", + "maxResponseSizeDesc": "传出 API 响应允许的最大大小。", + "maxRequestTokensLabel": "最大请求 Token 数", + "maxRequestTokensDesc": "单次请求允许的总 Token 上限。", + "maxResponseTokensLabel": "最大响应 Token 数", + "maxResponseTokensDesc": "单次响应允许的总 Token 上限。", + "modelCooldownsTitle": "处于冷却中的模型", + "modelCooldownsEmpty": "当前没有处于冷却中的模型。", + "codexFastTierTitle": "Codex 快速层", + "codexFastTierDesc": "为 OpenAI Codex 请求全局注入 service_tier=priority。", + "codexFastTierHint": "启用后,对于尚未指定层级的连接,OmniRoute 会在外发的 Codex 请求中加入 service_tier=priority。priority 层级要求 OpenAI 企业版 API 密钥或 ChatGPT-auth Codex 路径,其他类型的密钥会从 OpenAI 收到与层级相关的错误。Codex 提供商页面上的连接级设置优先生效。", + "codexFastTierSaveError": "更新 Codex 快速层设置失败", + "codexFastTierTierLabel": "服务层级", + "codexFastTierTierPriority": "Priority", + "codexFastTierTierFlex": "Flex", + "codexFastTierTierDefault": "默认", + "codexFastTierModelsLabel": "快速层模型", + "codexFastTierModelsHint": "启用快速层后,只有勾选的模型会附带 service_tier。", + "codexFastTierModelCheckbox": "为 {model} 启用快速层", + "claudeFastModeTitle": "Claude 快速模式", + "claudeFastModeDesc": "让选中的 Claude 请求加入 Anthropic 快速模式(speed:\"fast\")。", + "claudeFastModeHint": "Anthropic 并未对 SDK 形态的客户端正式支持快速模式。启用后,OmniRoute 会转发 X-CPA-Force-Fast-Mode 请求头,以便配套构建的 CLIProxyAPI 选择性伪装入口点。Anthropic 的客户端校验只会拦截列出的 Opus 模型。订阅层级、Max 套餐与快速模式额度仍由服务端强制执行 —— 即便开关已开,Anthropic 仍可能返回 out_of_credits。", + "claudeFastModeModelsLabel": "应用到的模型({count})", + "claudeFastModeModelCheckbox": "为 {model} 启用快速模式", + "claudeFastModeSaveError": "更新 Claude 快速模式设置失败", "authz": { - "title": "__MISSING__:Authz Inventory", - "description": "__MISSING__:5-tier route classification with live bypass policy. Read shows the full taxonomy; mutations re-prompt for the management password.", - "loading": "__MISSING__:Loading inventory…", - "loadError": "__MISSING__:Failed to load authz inventory", + "title": "授权清单", + "description": "5 级路由分类与实时绕过策略。读取展示完整分类;变更操作需重新输入管理密码。", + "loading": "正在加载清单…", + "loadError": "加载授权清单失败", "tier": { - "LOCAL_ONLY": "__MISSING__:Local only", - "ALWAYS_PROTECTED": "__MISSING__:Always protected", - "MANAGEMENT": "__MISSING__:Management", - "CLIENT_API": "__MISSING__:Client API", - "PUBLIC": "__MISSING__:Public" + "LOCAL_ONLY": "仅本地", + "ALWAYS_PROTECTED": "始终受保护", + "MANAGEMENT": "管理", + "CLIENT_API": "客户端 API", + "PUBLIC": "公开" }, "bypass": { - "section": "__MISSING__:Manage-scope bypass", + "section": "管理范围绕过", "kill_switch": { - "label": "__MISSING__:Bypass kill-switch", - "desc": "__MISSING__:Master toggle. When off, no LOCAL_ONLY prefix is reachable from non-loopback regardless of the per-prefix list." + "label": "绕过总开关", + "desc": "总开关。关闭时,无论按前缀的列表如何,任何 LOCAL_ONLY 前缀都无法从非环回地址访问。" }, "prefix": { - "label": "__MISSING__:Bypassable prefixes", - "desc": "__MISSING__:LOCAL_ONLY prefixes that manage-scope API keys (or dashboard sessions) may reach from non-loopback hosts.", - "add": "__MISSING__:Add prefix", - "placeholder": "__MISSING__:/api/mcp/v2/", - "empty": "__MISSING__:No prefixes configured. Bypass effectively off." + "label": "可绕过的前缀", + "desc": "管理范围的 API 密钥(或仪表盘会话)可从非环回地址访问的 LOCAL_ONLY 前缀。", + "add": "添加前缀", + "placeholder": "/api/mcp/v2/", + "empty": "未配置任何前缀,绕过实际处于关闭状态。" }, - "cli_tools_runtime_note": "__MISSING__:Spawn-capable prefix. Compile-time deny; cannot be made bypassable. Shown read-only." + "cli_tools_runtime_note": "可创建子进程的前缀。编译期已禁用,无法设为可绕过。仅供查看。" }, "password": { "prompt": { - "label": "__MISSING__:Current password", - "desc": "__MISSING__:Re-confirm to apply security-impacting changes." + "label": "当前密码", + "desc": "重新确认以应用涉及安全的变更。" }, - "placeholder": "__MISSING__:Current management password", - "cancel": "__MISSING__:Cancel", - "submit": "__MISSING__:Apply" + "placeholder": "当前管理密码", + "cancel": "取消", + "submit": "应用" }, - "save": "__MISSING__:Save changes", - "saved": "__MISSING__:Authz settings updated", - "pending": "__MISSING__:Unsaved changes", + "save": "保存更改", + "saved": "授权设置已更新", + "pending": "存在未保存的更改", "badge": { - "bypassable": "__MISSING__:Bypassable via manage scope", - "strict": "__MISSING__:Strict loopback", - "auth_required": "__MISSING__:Auth required", - "public": "__MISSING__:Public", - "always_protected": "__MISSING__:Always protected", - "spawn_capable": "__MISSING__:Spawn-capable" + "bypassable": "可通过管理范围绕过", + "strict": "严格环回", + "auth_required": "需要鉴权", + "public": "公开", + "always_protected": "始终受保护", + "spawn_capable": "可创建子进程" }, "error": { - "PASSWORD_REQUIRED": "__MISSING__:Current password required to apply these changes.", - "PASSWORD_MISMATCH": "__MISSING__:Current password is incorrect.", - "INSUFFICIENT_SCOPE": "__MISSING__:API key lacks the manage scope.", - "BYPASS_PREFIX_NOT_ALLOWED": "__MISSING__:One or more prefixes target spawn-capable routes and cannot be bypassed.", - "GENERIC": "__MISSING__:Failed to update authz settings." + "PASSWORD_REQUIRED": "需要输入当前密码才能应用这些更改。", + "PASSWORD_MISMATCH": "当前密码不正确。", + "INSUFFICIENT_SCOPE": "API 密钥缺少 manage 范围。", + "BYPASS_PREFIX_NOT_ALLOWED": "其中一个或多个前缀指向可创建子进程的路由,无法被绕过。", + "GENERIC": "更新授权设置失败。" } } }, @@ -4909,17 +4909,17 @@ "toolResults": "工具结果", "assistantMessages": "助手消息", "codeBlocks": "代码块", - "filterCatalog": "__MISSING__:Filter Catalog", - "filterCatalogDesc": "__MISSING__:Available output filters by category", - "guidedConfig": "__MISSING__:Configuration", - "guidedConfigDesc": "__MISSING__:Adjust how RTK filters your terminal output", + "filterCatalog": "过滤器目录", + "filterCatalogDesc": "按类别划分的可用输出过滤器", + "guidedConfig": "配置", + "guidedConfigDesc": "调整 RTK 过滤终端输出的方式", "maxLines": "最大行数", "maxChars": "最大字符数", "deduplicateThreshold": "去重阈值", "customFilters": "自定义过滤器", - "detectedType": "__MISSING__:Detected type", - "confidence": "__MISSING__:Confidence", - "beforeAfter": "__MISSING__:Before / After", + "detectedType": "检测到的类型", + "confidence": "置信度", + "beforeAfter": "前 / 后对比", "trustProjectFilters": "信任项目过滤器", "rawOutputRetention": "原始输出保留", "rawOutputNever": "从不", @@ -4928,26 +4928,26 @@ "rawOutputMaxBytes": "原始输出最大字节数", "filterTesting": "过滤测试", "pasteOutput": "粘贴工具输出以测试过滤...", - "presetHigh": "__MISSING__:Aggressive", - "presetLow": "__MISSING__:Light", - "presetMaxChars": "__MISSING__:Max output characters", - "presetMaxLines": "__MISSING__:Max output lines", - "presetMedium": "__MISSING__:Standard", + "presetHigh": "激进", + "presetLow": "轻量", + "presetMaxChars": "最大输出字符数", + "presetMaxLines": "最大输出行数", + "presetMedium": "标准", "run": "运行", "result": "结果", "previewEmpty": "运行示例以预览 RTK 输出。", "detected": "已检测", - "masterSwitchOffAlert": "__MISSING__:Token Saver master switch is OFF — these settings will not affect requests until you turn it on from the Endpoint page.", + "masterSwitchOffAlert": "Token Saver 总开关已关闭 — 在端点页面打开它之前,这些设置不会影响请求。", "tokensFiltered": "已过滤 token", "filtersActive": "活动过滤器", "requests": "请求数", "avgSavings": "平均节省", - "simpleMode": "__MISSING__:Simple", - "advancedMode": "__MISSING__:Advanced", - "searchFilters": "__MISSING__:Search filters...", - "tooltipDedup": "__MISSING__:How aggressively to remove repeated lines.", - "tooltipMaxChars": "__MISSING__:Maximum characters per output block.", - "tooltipMaxLines": "__MISSING__:Maximum lines to keep from command output. Excess is truncated." + "simpleMode": "简单", + "advancedMode": "高级", + "searchFilters": "搜索过滤器...", + "tooltipDedup": "去除重复行的力度。", + "tooltipMaxChars": "每个输出块的最大字符数。", + "tooltipMaxLines": "保留命令输出的最大行数,超出部分将被截断。" }, "contextCombos": { "title": "压缩组合", @@ -4974,45 +4974,45 @@ "contextCaveman": { "title": "Caveman 引擎", "description": "基于规则的消息压缩,包含语言包、分析和输出模式控制。", - "advancedConfig": "__MISSING__:Advanced Configuration", - "advancedConfigDesc": "__MISSING__:Fine-tune compression behavior", - "aggressiveSettings": "__MISSING__:Aggressive Settings", - "aggressiveSettingsDesc": "__MISSING__:Maximum compression with potential quality trade-offs", + "advancedConfig": "高级配置", + "advancedConfigDesc": "微调压缩行为", + "aggressiveSettings": "激进设置", + "aggressiveSettingsDesc": "最大压缩,可能牺牲质量", "requests": "请求数", "tokensSaved": "已节省 token", "savingsPercent": "节省比例", "avgLatency": "平均延迟", "languagePacks": "语言包", "languagePacksDesc": "为特定语言启用压缩规则。", - "labelAutoTrigger": "__MISSING__:Auto-compress when context exceeds", - "labelCompressionRate": "__MISSING__:Compression strength", - "labelMaxTokens": "__MISSING__:Target tokens per message", - "labelMinLength": "__MISSING__:Minimum message length", - "labelMinSavings": "__MISSING__:Minimum tokens to save", + "labelAutoTrigger": "上下文超出后自动压缩", + "labelCompressionRate": "压缩强度", + "labelMaxTokens": "每条消息目标 Token 数", + "labelMinLength": "最小消息长度", + "labelMinSavings": "最小节省 Token 数", "enabled": "已启用", "autoDetect": "自动检测语言", "rulesCount": "{count} 条规则", - "inputCompressionTitle": "__MISSING__:Input compression", - "inputCompressionDesc": "__MISSING__:Rewrite chat history with shorter wording. Reduces input tokens by ~50%.", + "inputCompressionTitle": "输入压缩", + "inputCompressionDesc": "用更短的措辞重写聊天历史,可减少约 50% 的输入 Token。", "analyticsTitle": "压缩分析", "noAnalytics": "尚无压缩分析。", - "outputMode": "__MISSING__:Output Mode", + "outputMode": "输出模式", "outputModeDesc": "指示 LLM 以简洁、紧凑的格式回复。", "outputModeTitle": "输出模式", - "quickSettings": "__MISSING__:Quick Settings", - "quickSettingsDesc": "__MISSING__:Basic compression settings to get started", + "quickSettings": "快速设置", + "quickSettingsDesc": "用于上手的基础压缩设置", "autoClarity": "自动清晰度绕过", "bypassConditions": "绕过条件", "bypassConditionsList": "安全、不可逆、需澄清、顺序敏感", - "simpleMode": "__MISSING__:Simple", - "advancedMode": "__MISSING__:Advanced", - "tooltipAutoTrigger": "__MISSING__:Automatically compress when context exceeds this size.", - "tooltipCompressionRate": "__MISSING__:0.0 = none, 1.0 = maximum. 0.5 = balanced.", - "tooltipMaxTokens": "__MISSING__:Target token count after compression. Lower = more aggressive.", - "tooltipMinLength": "__MISSING__:Messages shorter than this are not compressed. Lower = more compression.", - "tooltipMinSavings": "__MISSING__:Only compress if it saves at least this many tokens.", - "ultraSettings": "__MISSING__:Ultra Settings", - "ultraSettingsDesc": "__MISSING__:SLM-powered semantic compression", + "simpleMode": "简单", + "advancedMode": "高级", + "tooltipAutoTrigger": "上下文超过此大小时自动压缩。", + "tooltipCompressionRate": "0.0 = 不压缩,1.0 = 最大压缩,0.5 = 平衡。", + "tooltipMaxTokens": "压缩后的目标 Token 数,数值越低越激进。", + "tooltipMinLength": "短于此长度的消息不会被压缩,数值越低压缩越多。", + "tooltipMinSavings": "只有至少能节省这么多 Token 才进行压缩。", + "ultraSettings": "超激进设置", + "ultraSettingsDesc": "由 SLM 驱动的语义压缩", "preview": { "lite": "回复要简洁。保留技术术语、代码、错误、URL 和标识符。", "full": "回复要简短紧凑。保留所有技术实质。", @@ -5117,8 +5117,8 @@ "thinking": "思考", "system-prompt": "系统提示", "streaming": "流媒体", - "vision": "__MISSING__:Vision", - "schema-coercion": "__MISSING__:Schema Coercion" + "vision": "视觉", + "schema-coercion": "结构化输出强制" }, "templateDescriptions": { "simple-chat": "基本短信", @@ -5127,8 +5127,8 @@ "thinking": "扩展思维/推理", "system-prompt": "复杂系统指令", "streaming": "SSE 流请求", - "vision": "__MISSING__:Multimodal request with image input", - "schema-coercion": "__MISSING__:Structured-output / JSON schema enforcement" + "vision": "包含图像输入的多模态请求", + "schema-coercion": "结构化输出 / JSON Schema 强制约束" }, "templatePayloads": { "simpleChat": { @@ -5157,14 +5157,14 @@ "prompt": "给我讲一个关于机器人学习绘画的小故事。" }, "vision": { - "system": "__MISSING__:You are an assistant that describes images precisely.", - "userPrompt": "__MISSING__:What is shown in this image?", - "imageUrl": "__MISSING__:https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/600px-PNG_transparency_demonstration_1.png" + "system": "你是一个能够精准描述图像的助手。", + "userPrompt": "图中显示了什么?", + "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/600px-PNG_transparency_demonstration_1.png" }, "schemaCoercion": { - "userPrompt": "__MISSING__:Look up the weather for Tokyo using metric units and include the hourly breakdown.", - "toolDescription": "__MISSING__:Fetch weather for a city with structured options.", - "cityDescription": "__MISSING__:The city to query, e.g. 'Tokyo' or 'New York'." + "userPrompt": "用公制单位查询东京天气,并包含每小时分解。", + "toolDescription": "以结构化选项获取某个城市的天气。", + "cityDescription": "要查询的城市,例如 'Tokyo' 或 'New York'。" } }, "openaiCompatibleLabel": "OpenAI 兼容", @@ -5211,33 +5211,33 @@ "eventSourceMainPipeline": "• 主请求流水线(CLI/IDE/API 流量)", "liveMonitorDescriptionPrefix": "这里会显示 API 调用流经 OmniRoute 时产生的翻译事件。事件来自内存缓冲区(重启后会重置)。使用", "liveMonitorDescriptionSuffix": ",或外部 API 调用来生成事件。", - "streamTransformer": "__MISSING__:Stream Transformer", - "modeDescriptionStreamTransformer": "__MISSING__:Run chat completions SSE streams through the Responses transformer.", - "streamTransformerTitle": "__MISSING__:Responses Stream Transformer", - "streamTransformerDescription": "__MISSING__:Paste a chat completions SSE stream, run it through OmniRoute's Responses transformer, and inspect the emitted response.* events before wiring a client.", - "loadTextSample": "__MISSING__:Load text sample", - "loadToolSample": "__MISSING__:Load tool-call sample", - "transformToResponses": "__MISSING__:Transform to Responses", - "rawChatSseInput": "__MISSING__:Raw chat completions SSE", - "transformedResponsesSse": "__MISSING__:Transformed Responses API SSE", - "noResultsYet": "__MISSING__:No results yet", - "transformedEvents": "__MISSING__:Transformed events", - "uniqueEventTypes": "__MISSING__:Unique event types", - "inputLines": "__MISSING__:Input lines", - "outputLines": "__MISSING__:Output lines", - "transformedEventTimeline": "__MISSING__:Transformed event timeline", - "transformerTimelineHint": "__MISSING__:Run the transformer to inspect emitted response.output_* events in order.", - "eventType": "__MISSING__:Event type", - "eventPreview": "__MISSING__:Preview", - "comboRouted": "__MISSING__:Combo routed", - "uniqueEndpoints": "__MISSING__:Unique endpoints", - "routeDetails": "__MISSING__:Route details", - "comboBadge": "__MISSING__:Combo", - "routeEndpointLabel": "__MISSING__:Endpoint", - "routeConnectionLabel": "__MISSING__:Connection", - "scenarioVision": "__MISSING__:Vision (image understanding)", - "scenarioSchemaCoercion": "__MISSING__:Schema coercion (structured output)", - "techniques": "__MISSING__:Techniques:" + "streamTransformer": "流式转换器", + "modeDescriptionStreamTransformer": "将 chat completions SSE 流通过 Responses 转换器运行。", + "streamTransformerTitle": "Responses 流转换器", + "streamTransformerDescription": "粘贴一段 chat completions SSE 流,通过 OmniRoute 的 Responses 转换器运行,在接入客户端前查看产生的 response.* 事件。", + "loadTextSample": "加载文本示例", + "loadToolSample": "加载工具调用示例", + "transformToResponses": "转换为 Responses", + "rawChatSseInput": "原始 chat completions SSE", + "transformedResponsesSse": "已转换的 Responses API SSE", + "noResultsYet": "尚无结果", + "transformedEvents": "已转换事件", + "uniqueEventTypes": "事件类型(去重)", + "inputLines": "输入行数", + "outputLines": "输出行数", + "transformedEventTimeline": "已转换事件时间线", + "transformerTimelineHint": "运行转换器以按顺序查看产生的 response.output_* 事件。", + "eventType": "事件类型", + "eventPreview": "预览", + "comboRouted": "已通过组合路由", + "uniqueEndpoints": "端点(去重)", + "routeDetails": "路由详情", + "comboBadge": "组合", + "routeEndpointLabel": "端点", + "routeConnectionLabel": "连接", + "scenarioVision": "视觉(图像理解)", + "scenarioSchemaCoercion": "结构化输出强制", + "techniques": "技术要点:" }, "usage": { "title": "用量", @@ -5288,19 +5288,19 @@ "runStepDescription": "通过 OmniRoute 对你的 LLM 端点执行测试用例。每个案例都会作为真实 API 请求发送。", "evaluate": "评估", "evaluateStepDescription": "将响应与预期标准进行比较。查看每种情况的通过/失败情况以及延迟指标和详细反馈。", - "evalsStrategyContainsLabel": "__MISSING__:Contains", - "evalsStrategyExactLabel": "__MISSING__:Exact Match", - "evalsStrategyRegexLabel": "__MISSING__:Regex", - "evalsStrategyCustomLabel": "__MISSING__:Custom Logic", - "evalsStrategyContainsDescription": "__MISSING__:Checks if the LLM output contains the expected substring.", - "evalsStrategyExactDescription": "__MISSING__:Checks if the LLM output exactly matches the expected value.", - "evalsStrategyRegexDescription": "__MISSING__:Validates the LLM output against a regular expression pattern.", - "evalsStrategyCustomDescription": "__MISSING__:Custom evaluation logic (configured via JSON).", - "historyColumnSuiteName": "__MISSING__:Suite Name", - "historyColumnTarget": "__MISSING__:Target", - "historyColumnPassRate": "__MISSING__:Pass Rate", - "historyColumnAvgLatencyMs": "__MISSING__:Avg Latency", - "historyColumnCreatedAt": "__MISSING__:Executed", + "evalsStrategyContainsLabel": "包含", + "evalsStrategyExactLabel": "精确匹配", + "evalsStrategyRegexLabel": "正则", + "evalsStrategyCustomLabel": "自定义逻辑", + "evalsStrategyContainsDescription": "检查 LLM 输出是否包含期望的子串。", + "evalsStrategyExactDescription": "检查 LLM 输出是否与期望值完全一致。", + "evalsStrategyRegexDescription": "通过正则表达式校验 LLM 输出。", + "evalsStrategyCustomDescription": "自定义评估逻辑(通过 JSON 配置)。", + "historyColumnSuiteName": "套件名称", + "historyColumnTarget": "目标", + "historyColumnPassRate": "通过率", + "historyColumnAvgLatencyMs": "平均延迟", + "historyColumnCreatedAt": "执行时间", "evalSuites": "评估套件", "evalSuitesHint": "点击套件可查看测试用例,然后运行以评估你的 LLM 端点", "evalsLoading": "正在加载评估套件...", @@ -5408,25 +5408,25 @@ "tierPro": "专业版", "tierPlus": "加号", "tierFree": "免费", - "tierLite": "__MISSING__:Lite", + "tierLite": "Lite", "tierUnknown": "未知", - "statTotal": "__MISSING__:Total", - "statCritical": "__MISSING__:Critical", - "statAlert": "__MISSING__:Alert", - "statHealthy": "__MISSING__:Healthy", - "filterPurchaseTypeLabel": "__MISSING__:Type", - "filterTierLabel": "__MISSING__:Tier", - "purchaseAll": "__MISSING__:All", - "purchaseOauthSub": "__MISSING__:Subscription", - "purchaseOauthFree": "__MISSING__:OAuth Free", - "purchaseApiKey": "__MISSING__:API Key", - "creditsLabel": "__MISSING__:Credits", - "creditBalanceHint": "__MISSING__:Remaining balance", - "unlimitedLabel": "__MISSING__:Unlimited", - "refreshing": "__MISSING__:Refreshing", - "resetsIn": "__MISSING__:Resets in", - "editCutoffs": "__MISSING__:Edit cutoffs", - "forceRefresh": "__MISSING__:Refresh now", + "statTotal": "总计", + "statCritical": "严重", + "statAlert": "警报", + "statHealthy": "健康", + "filterPurchaseTypeLabel": "类型", + "filterTierLabel": "层级", + "purchaseAll": "全部", + "purchaseOauthSub": "订阅", + "purchaseOauthFree": "OAuth 免费", + "purchaseApiKey": "API 密钥", + "creditsLabel": "额度", + "creditBalanceHint": "剩余额度", + "unlimitedLabel": "无限", + "refreshing": "刷新中", + "resetsIn": "重置倒计时", + "editCutoffs": "编辑阈值", + "forceRefresh": "立即刷新", "suiteBuilderSaveFailed": "保存套件失败", "clone": "克隆", "exportSuite": "导出", @@ -5534,47 +5534,47 @@ "suiteBuilderDescriptionLabel": "描述", "targetComparisonHint": "在目标之间并排比较评估结果。", "compareCompletedWithScore": "对比已完成 — 通过率 {score}%", - "staleQuotaTooltip": "__MISSING__:Last refresh failed — showing cached data", - "quotaThresholdLabel": "__MISSING__:Min left", - "quotaCutoffsColumnHelp": "__MISSING__:Stop requests when remaining quota falls to this percentage or below.", - "quotaCutoffsButtonDefault": "__MISSING__:Default", - "quotaCutoffsButtonHelp": "__MISSING__:Edit minimum remaining quota cutoffs for this account.", - "quotaCutoffsButtonDisabled": "__MISSING__:No quota windows are available for this account yet.", - "quotaCutoffsTitle": "__MISSING__:Quota cutoffs for {name} ({provider})", - "quotaCutoffsExplainer": "__MISSING__:Override the minimum remaining quota percentage where this account stops being selected for each quota window. Leave blank to inherit the provider default.", - "quotaCutoffsDefaultHint": "__MISSING__:Default min remaining: {default}%", - "quotaCutoffsResetAll": "__MISSING__:Reset all", - "quotaCutoffsNoWindows": "__MISSING__:No quota windows are available for this account yet.", - "quotaThresholdInvalid": "__MISSING__:Enter a whole number from 0 to 100.", - "budgetKpiToday": "__MISSING__:Today", - "budgetKpiThisMonth": "__MISSING__:This month", - "budgetKpiProjEom": "__MISSING__:Proj EOM", - "budgetKpiBlocked": "__MISSING__:Blocked", - "budgetKpiAtRisk": "__MISSING__:At risk", - "budgetKpiActiveKeys": "__MISSING__:Active keys", - "budgetSearchKeysPlaceholder": "__MISSING__:Search keys...", - "budgetSortPctUsed": "__MISSING__:Sort: % Used ↓", - "budgetSortTodayDollar": "__MISSING__:Sort: Today $ ↓", - "budgetSortMonthDollar": "__MISSING__:Sort: Month $ ↓", - "budgetSortNameAZ": "__MISSING__:Sort: Name (A–Z)", - "budgetColDailyLim": "__MISSING__:Daily lim", - "budgetColMonthlyLim": "__MISSING__:Monthly lim", - "budgetColUsedPct": "__MISSING__:Used %", - "budgetLoading": "__MISSING__:Loading…", - "budgetNoKeysMatch": "__MISSING__:No keys match filters", - "budgetLinearExtrapolation": "__MISSING__:linear extrapolation", - "budgetThisMonthSoFar": "__MISSING__:This month so far", - "budgetProjectedEndOfMonth": "__MISSING__:Projected end of month", - "budgetByProvider": "__MISSING__:by provider", - "budgetDailyDollar": "__MISSING__:Daily $", - "budgetWeeklyDollar": "__MISSING__:Weekly $", - "budgetMonthlyDollar": "__MISSING__:Monthly $", - "budgetWarnAtPct": "__MISSING__:Warn at %", - "quotaAlerts": "__MISSING__:Quota alerts", - "quotaTableRefreshing": "__MISSING__:⟳ Refreshing...", - "noSpendLast30Days": "__MISSING__:No spend in last 30 days", - "updatedShort": "__MISSING__:Updated", - "lastRefreshed": "__MISSING__:Last refreshed" + "staleQuotaTooltip": "上次刷新失败 — 当前显示缓存数据", + "quotaThresholdLabel": "最低剩余", + "quotaCutoffsColumnHelp": "当剩余配额低于该百分比时停止请求。", + "quotaCutoffsButtonDefault": "默认", + "quotaCutoffsButtonHelp": "编辑该账号的最低剩余配额阈值。", + "quotaCutoffsButtonDisabled": "该账号尚无可用的配额窗口。", + "quotaCutoffsTitle": "{name} ({provider}) 的配额阈值", + "quotaCutoffsExplainer": "为每个配额窗口覆盖最低剩余配额百分比,低于此值时该账号将不再被选中。留空则继承提供商默认值。", + "quotaCutoffsDefaultHint": "默认最低剩余:{default}%", + "quotaCutoffsResetAll": "全部重置", + "quotaCutoffsNoWindows": "该账号尚无可用的配额窗口。", + "quotaThresholdInvalid": "请输入 0 到 100 之间的整数。", + "budgetKpiToday": "今天", + "budgetKpiThisMonth": "本月", + "budgetKpiProjEom": "月底预测", + "budgetKpiBlocked": "已阻塞", + "budgetKpiAtRisk": "存在风险", + "budgetKpiActiveKeys": "活跃密钥", + "budgetSearchKeysPlaceholder": "搜索密钥...", + "budgetSortPctUsed": "排序:已用 % ↓", + "budgetSortTodayDollar": "排序:今天金额 ↓", + "budgetSortMonthDollar": "排序:本月金额 ↓", + "budgetSortNameAZ": "排序:名称(A–Z)", + "budgetColDailyLim": "日上限", + "budgetColMonthlyLim": "月上限", + "budgetColUsedPct": "已用 %", + "budgetLoading": "加载中…", + "budgetNoKeysMatch": "没有匹配的密钥", + "budgetLinearExtrapolation": "线性外推", + "budgetThisMonthSoFar": "本月至今", + "budgetProjectedEndOfMonth": "月底预测", + "budgetByProvider": "按提供商", + "budgetDailyDollar": "日金额", + "budgetWeeklyDollar": "周金额", + "budgetMonthlyDollar": "月金额", + "budgetWarnAtPct": "警告阈值 %", + "quotaAlerts": "配额警报", + "quotaTableRefreshing": "⟳ 刷新中...", + "noSpendLast30Days": "近 30 天无消费", + "updatedShort": "更新于", + "lastRefreshed": "上次刷新" }, "modals": { "waitingAuth": "等待授权", @@ -5829,18 +5829,18 @@ "quickStartStep4Title": "4. 设置客户端基本 URL", "quickStartStep4Prefix": "将您的 IDE 或 API 客户端指向", "quickStartStep4Suffix": "例如使用提供商前缀", - "deploySetupTitle": "__MISSING__:Setup Guide", - "deploySetupText": "__MISSING__:Step-by-step installation, environment configuration, and first-run walkthrough for OmniRoute.", - "deployElectronTitle": "__MISSING__:Electron Desktop", - "deployElectronText": "__MISSING__:Run OmniRoute as a native desktop application on Windows, macOS, and Linux.", - "deployDockerTitle": "__MISSING__:Docker", - "deployDockerText": "__MISSING__:Containerized deployment with Docker Compose; ready for production stacks and Kubernetes.", - "deployVmTitle": "__MISSING__:Virtual Machine", - "deployVmText": "__MISSING__:Self-host on any Linux VM. Includes systemd unit, log rotation, and backup tooling.", - "deployFlyTitle": "__MISSING__:Fly.io", - "deployFlyText": "__MISSING__:Deploy to Fly.io edge runtime with one fly.toml and a single deploy command.", - "deployPwaTitle": "__MISSING__:PWA", - "deployPwaText": "__MISSING__:Install OmniRoute as a Progressive Web App on Android, iOS, and desktop browsers.", + "deploySetupTitle": "部署指南", + "deploySetupText": "OmniRoute 的分步安装、环境配置以及首次运行流程。", + "deployElectronTitle": "Electron 桌面端", + "deployElectronText": "在 Windows、macOS 与 Linux 上以原生桌面应用形式运行 OmniRoute。", + "deployDockerTitle": "Docker", + "deployDockerText": "通过 Docker Compose 进行容器化部署,适用于生产堆栈与 Kubernetes。", + "deployVmTitle": "虚拟机", + "deployVmText": "在任意 Linux VM 上自托管,包含 systemd 单元、日志轮转与备份工具。", + "deployFlyTitle": "Fly.io", + "deployFlyText": "通过一份 fly.toml 与一条部署命令,部署到 Fly.io 边缘运行时。", + "deployPwaTitle": "PWA", + "deployPwaText": "在 Android、iOS 与桌面浏览器上以渐进式 Web 应用形式安装 OmniRoute。", "deployTermuxTitle": "Termux (Android)", "deployTermuxText": "通过 Termux 在 Android 上以无界面模式运行 OmniRoute,并从移动浏览器访问仪表盘。", "featureRoutingTitle": "多提供商路由", @@ -5974,10 +5974,10 @@ "mcpToolsOperationsDesc": "路由模拟、预算保护、策略切换、韧性配置和提供商指标。", "mcpToolsCacheTitle": "缓存管理", "mcpToolsCacheDesc": "查看缓存统计,并清空语义缓存或签名缓存。", - "mcpToolsCompressionTitle": "__MISSING__:Compression Engines", - "mcpToolsCompressionDesc": "__MISSING__:Configure RTK/Brotli compression, swap engines, and inspect compression analytics by combo.", - "mcpToolsOneProxyTitle": "__MISSING__:1Proxy / Tunnels", - "mcpToolsOneProxyDesc": "__MISSING__:Manage outbound proxies, rotate residential IPs, and inspect proxy health.", + "mcpToolsCompressionTitle": "压缩引擎", + "mcpToolsCompressionDesc": "配置 RTK / Brotli 压缩、切换引擎,并按组合查看压缩分析。", + "mcpToolsOneProxyTitle": "1Proxy / 隧道", + "mcpToolsOneProxyDesc": "管理出站代理、轮换住宅 IP 并查看代理健康状况。", "mcpToolsMemoryTitle": "记忆", "mcpToolsMemoryDesc": "搜索、添加和清除持久化对话记忆条目。", "mcpToolsSkillsTitle": "技能", @@ -6121,83 +6121,83 @@ "fingerprintSettingsHint": "CLI 指纹匹配(伪装成特定 CLI 工具的请求)可在以下位置配置:", "settingsRoutingLink": "设置/路由", "openSettings": "设置", - "copyRawUrlTitle": "__MISSING__:Copy raw URL to clipboard", - "copied": "__MISSING__:Copied!", - "copyUrl": "__MISSING__:Copy URL", - "startHere": "__MISSING__:Start Here", - "badgeNew": "__MISSING__:New", - "viewOnGithub": "__MISSING__:View on GitHub", - "howToUse": "__MISSING__:How to use", - "browseAllSkillsOnGithub": "__MISSING__:Browse all skills on GitHub", - "apiSkills": "__MISSING__:API Skills", - "cliSkills": "__MISSING__:CLI Skills", - "apiSkillsSubtitle": "__MISSING__:{count} skills — control OmniRoute via REST / HTTP", - "cliSkillsSubtitle": "__MISSING__:{count} skills — control OmniRoute via the omniroute terminal binary", - "howToUseStep1": "__MISSING__:Click {copyUrl} on the skill you want your agent to know about.", - "howToUseStep2": "__MISSING__:In your AI agent (Claude, Cursor, Cline…), say:", - "howToUseStep2Code": "__MISSING__:Use the skill at [pasted-url]", - "howToUseStep3": "__MISSING__:The agent fetches the SKILL.md and learns OmniRoute's API or CLI — no manual docs needed." + "copyRawUrlTitle": "复制原始 URL 到剪贴板", + "copied": "已复制!", + "copyUrl": "复制 URL", + "startHere": "从这里开始", + "badgeNew": "新", + "viewOnGithub": "在 GitHub 查看", + "howToUse": "使用方法", + "browseAllSkillsOnGithub": "在 GitHub 浏览所有技能", + "apiSkills": "API 技能", + "cliSkills": "CLI 技能", + "apiSkillsSubtitle": "{count} 个技能 — 通过 REST / HTTP 控制 OmniRoute", + "cliSkillsSubtitle": "{count} 个技能 — 通过 omniroute 终端可执行文件控制 OmniRoute", + "howToUseStep1": "在你想让代理了解的技能上点击 {copyUrl}。", + "howToUseStep2": "在你的 AI 代理(Claude、Cursor、Cline…)中输入:", + "howToUseStep2Code": "Use the skill at [pasted-url]", + "howToUseStep3": "代理会获取 SKILL.md 并学习 OmniRoute 的 API 或 CLI — 无需手动文档。" }, "cloudAgents": { - "title": "__MISSING__:Cloud Agents", - "description": "__MISSING__:Manage autonomous coding agents (Jules, Devin, Codex Cloud)", - "loading": "__MISSING__:Loading tasks...", - "aboutTitle": "__MISSING__:About Cloud Agents", - "aboutDescription": "__MISSING__:Cloud agents are remote AI coding assistants that can execute tasks autonomously. They work differently from local CLI agents - you interact with them through OmniRoute's API.", - "howItWorksTitle": "__MISSING__:How it works:", - "howItWorksDesc": "__MISSING__:Create a task → Agent analyzes and proposes a plan → You approve → Agent executes → Results returned", - "newTaskTitle": "__MISSING__:Create New Task", - "newTaskDescription": "__MISSING__:Start a new task with a cloud agent", - "selectAgent": "__MISSING__:Select Agent", - "taskDescription": "__MISSING__:Task Description", - "taskDescriptionPlaceholder": "__MISSING__:Describe what you want the agent to do...", - "startTask": "__MISSING__:Start Task", - "tasks": "__MISSING__:Tasks", - "taskDetail": "__MISSING__:Task Detail", - "noTasks": "__MISSING__:No tasks yet. Create one to get started.", - "noTasksTitle": "__MISSING__:No tasks yet", - "noTasksDesc": "__MISSING__:Create your first task to get started.", - "tasksTab": "__MISSING__:Tasks", - "agentsTab": "__MISSING__:Agents", - "settingsTab": "__MISSING__:Settings", - "agentsEnabled": "__MISSING__:Enabled", - "agentsDisabled": "__MISSING__:Disabled", - "filterAllProviders": "__MISSING__:All Providers", - "filterAll": "__MISSING__:All", - "autoRefreshing": "__MISSING__:Auto-refreshing", - "viewPR": "__MISSING__:View Pull Request", - "connected": "__MISSING__:Connected", - "notConnected": "__MISSING__:Not connected", - "configure": "__MISSING__:Configure", - "settingsTitle": "__MISSING__:Cloud Agent Settings", - "settingsDesc": "__MISSING__:Configure local preferences for cloud agents.", - "settingEnableAgents": "__MISSING__:Enable cloud agents", - "settingEnableAgentsDesc": "__MISSING__:Allow OmniRoute to orchestrate autonomous coding agents.", - "settingAutoPR": "__MISSING__:Auto-create PR", - "settingAutoPRDesc": "__MISSING__:When a task is completed, automatically create a Pull Request with the changes.", - "settingRequireApproval": "__MISSING__:Require plan approval", - "settingRequireApprovalDesc": "__MISSING__:Always wait for manual approval before an agent executes a proposed plan.", - "untitledTask": "__MISSING__:Untitled Task", - "created": "__MISSING__:Created", - "conversation": "__MISSING__:Conversation", - "result": "__MISSING__:Result", - "error": "__MISSING__:Error", - "planReady": "__MISSING__:Plan Ready for Approval", - "approvePlan": "__MISSING__:Approve Plan", - "rejectPlan": "__MISSING__:Reject & Cancel", - "sendMessagePlaceholder": "__MISSING__:Send a message to the agent...", - "cancel": "__MISSING__:Cancel", - "delete": "__MISSING__:Delete", - "selectTaskPrompt": "__MISSING__:Select a task to view details", - "statusPending": "__MISSING__:Pending", - "statusRunning": "__MISSING__:Running", - "statusWaitingApproval": "__MISSING__:Waiting Approval", - "statusCompleted": "__MISSING__:Completed", - "statusFailed": "__MISSING__:Failed", - "statusCancelled": "__MISSING__:Cancelled", - "repositoryName": "__MISSING__:Repository name", - "repositoryUrl": "__MISSING__:Repository URL", - "branch": "__MISSING__:Branch" + "title": "云代理", + "description": "管理自主编码代理(Jules、Devin、Codex Cloud)", + "loading": "正在加载任务...", + "aboutTitle": "关于云代理", + "aboutDescription": "云代理是可自主执行任务的远程 AI 编码助手,与本地 CLI 代理不同,你通过 OmniRoute API 与它们交互。", + "howItWorksTitle": "工作原理:", + "howItWorksDesc": "创建任务 → 代理分析并提出方案 → 你批准 → 代理执行 → 返回结果", + "newTaskTitle": "创建新任务", + "newTaskDescription": "向云代理发起一个新任务", + "selectAgent": "选择代理", + "taskDescription": "任务描述", + "taskDescriptionPlaceholder": "描述你希望代理做什么...", + "startTask": "开始任务", + "tasks": "任务", + "taskDetail": "任务详情", + "noTasks": "暂无任务,请创建一个开始使用。", + "noTasksTitle": "暂无任务", + "noTasksDesc": "创建你的第一个任务以开始使用。", + "tasksTab": "任务", + "agentsTab": "代理", + "settingsTab": "设置", + "agentsEnabled": "已启用", + "agentsDisabled": "已禁用", + "filterAllProviders": "所有提供商", + "filterAll": "全部", + "autoRefreshing": "自动刷新中", + "viewPR": "查看 Pull Request", + "connected": "已连接", + "notConnected": "未连接", + "configure": "配置", + "settingsTitle": "云代理设置", + "settingsDesc": "为云代理配置本地偏好。", + "settingEnableAgents": "启用云代理", + "settingEnableAgentsDesc": "允许 OmniRoute 编排自主编码代理。", + "settingAutoPR": "自动创建 PR", + "settingAutoPRDesc": "任务完成后自动创建包含变更的 Pull Request。", + "settingRequireApproval": "需要方案审批", + "settingRequireApprovalDesc": "代理执行所提方案前始终等待手动批准。", + "untitledTask": "未命名任务", + "created": "创建时间", + "conversation": "对话", + "result": "结果", + "error": "错误", + "planReady": "方案已就绪,等待审批", + "approvePlan": "批准方案", + "rejectPlan": "拒绝并取消", + "sendMessagePlaceholder": "向代理发送消息...", + "cancel": "取消", + "delete": "删除", + "selectTaskPrompt": "选择一个任务以查看详情", + "statusPending": "待处理", + "statusRunning": "执行中", + "statusWaitingApproval": "等待审批", + "statusCompleted": "已完成", + "statusFailed": "已失败", + "statusCancelled": "已取消", + "repositoryName": "仓库名称", + "repositoryUrl": "仓库 URL", + "branch": "分支" }, "templateNames": { "simple-chat": "简单对话", @@ -6206,8 +6206,8 @@ "thinking": "思考模式", "tool-calling": "工具调用", "multi-turn": "多轮对话", - "vision": "__MISSING__:Vision", - "schema-coercion": "__MISSING__:Schema Coercion" + "vision": "视觉", + "schema-coercion": "结构化输出强制" }, "templateDescriptions": { "simple-chat": "带系统消息的基础对话模板", @@ -6216,8 +6216,8 @@ "thinking": "带推理/思考预算的模板", "tool-calling": "用于工具/函数调用的模板", "multi-turn": "用于多轮对话的模板", - "vision": "__MISSING__:Multimodal template with image input", - "schema-coercion": "__MISSING__:Structured-output / JSON schema enforcement" + "vision": "包含图像输入的多模态模板", + "schema-coercion": "结构化输出 / JSON Schema 强制约束" }, "templatePayloads": { "simpleChat": { @@ -6277,7 +6277,7 @@ "clearError": "清除缓存失败。", "unavailable": "缓存不可用", "unavailableDesc": "无法获取缓存统计信息。请确保服务器正在运行。", - "loadingCacheAria": "__MISSING__:Loading cache", + "loadingCacheAria": "正在加载缓存", "promptCache": "Prompt 缓存(提供商侧)", "semanticCache": "语义缓存", "promptCacheSectionDesc": "基于 usage history 展示提供商侧 prompt cache 的活跃度,让你区分哪些请求真的启用了 cache control,以及实际复用了多少输入。", @@ -6319,9 +6319,9 @@ "peakCached": "峰值缓存量", "cached": "已缓存", "overview": "概览", - "tableProvider": "__MISSING__:Provider", - "tableModel": "__MISSING__:Model", - "performanceTitle": "__MISSING__:Performance", + "tableProvider": "提供商", + "tableModel": "模型", + "performanceTitle": "性能", "semanticCacheSectionDesc": "OmniRoute 自己维护的确定性响应缓存。开启后,重复的非流式、temperature=0 请求可以直接在本地命中,不再访问上游 provider。", "semanticCacheDisabledDesc": "Semantic Cache 当前已禁用。重新在设置中开启之前,OmniRoute 不会再做本地响应复用。", "semanticEntriesDesc": "这里展示的是保存在 SQLite 里的 semantic cache 记录,不包含 provider-side prompt cache 的活动。", @@ -6367,17 +6367,17 @@ "reasoningClearSuccess": "已清除 {count} 个推理缓存条目", "reasoningClearError": "清除推理缓存失败", "reasoningNoData": "尚未缓存推理条目。思考模型使用工具调用时会显示条目。", - "cachePerformanceRetry": "__MISSING__:Retry", - "cachePerformanceHitRate": "__MISSING__:Hit Rate", - "cachePerformanceAvgLatency": "__MISSING__:Avg Latency (ms)", - "cachePerformanceP95Latency": "__MISSING__:p95 Latency (ms)", - "retry": "__MISSING__:Retry", - "reasoningAvgChars": "__MISSING__:Avg Chars", - "tableShare": "__MISSING__:Share", - "justNow": "__MISSING__:just now", - "minutesAgo": "__MISSING__:{minutes}m ago", - "hoursAgo": "__MISSING__:{hours}h ago", - "daysAgo": "__MISSING__:{days}d ago" + "cachePerformanceRetry": "重试", + "cachePerformanceHitRate": "命中率", + "cachePerformanceAvgLatency": "平均延迟(ms)", + "cachePerformanceP95Latency": "p95 延迟(ms)", + "retry": "重试", + "reasoningAvgChars": "平均字符数", + "tableShare": "占比", + "justNow": "刚刚", + "minutesAgo": "{minutes} 分钟前", + "hoursAgo": "{hours} 小时前", + "daysAgo": "{days} 天前" }, "proxyConfigModal": { "levelGlobal": "全局", @@ -6522,12 +6522,12 @@ "bulkLabelScopeIds": "范围 ID(逗号或换行符分隔)", "bulkScopeIdsPlaceholder": "provider-openai,provider-anthropic", "bulkApply": "应用", - "labelScope": "__MISSING__:Scope", - "labelProxy": "__MISSING__:Proxy", - "scopeGlobal": "__MISSING__:global", - "scopeProvider": "__MISSING__:provider", - "scopeAccount": "__MISSING__:account", - "scopeCombo": "__MISSING__:combo", + "labelScope": "作用域", + "labelProxy": "代理", + "scopeGlobal": "全局", + "scopeProvider": "按提供商", + "scopeAccount": "按账号", + "scopeCombo": "按组合", "bulkImportErrorMissingName": "缺少 NAME", "bulkImportErrorMissingHost": "缺少 HOST", "bulkImportErrorInvalidPort": "PORT 无效(必须为 1-65535)", @@ -6564,8 +6564,8 @@ "bulkImportErrorLine": "第 {line} 行:{reason}", "bulkImportMaxExceeded": "每次最多导入 100 个代理", "bulkImportPreview": "预览", - "clearAssignment": "__MISSING__:(clear assignment)", - "bulkProxyAssignment": "__MISSING__:Bulk Proxy Assignment" + "clearAssignment": "(清除分配)", + "bulkProxyAssignment": "批量代理分配" }, "playground": { "title": "模型演练场", @@ -6607,9 +6607,9 @@ "rerank": "Rerank", "search": "网页搜索" }, - "conversationalChat": "__MISSING__:Conversational Chat", - "clearChat": "__MISSING__:Clear chat", - "typeMessagePlaceholder": "__MISSING__:Type a message... (Shift+Enter for new line)" + "conversationalChat": "对话式聊天", + "clearChat": "清空聊天", + "typeMessagePlaceholder": "输入消息...(Shift+Enter 换行)" }, "requestLogger": { "recording": "正在录制", @@ -6848,9 +6848,9 @@ "addKey": "+ Add key…", "equalSplit": "Equal split", "save": "Save allocations", - "betaPreviewLabel": "__MISSING__:Beta — UI preview.", - "betaConfigSavedPrefix": "__MISSING__:A configuração é salva em", - "betaConfigSavedSuffix": "__MISSING__:(não persiste no servidor ainda). A aplicação dos caps por request ainda não está conectada ao pipeline da proxy. Esta tela permite desenhar e visualizar a divisão de cota;", - "policyLabel": "__MISSING__:Policy:" + "betaPreviewLabel": "Beta — UI 预览。", + "betaConfigSavedPrefix": "配置已保存于", + "betaConfigSavedSuffix": "(尚未在服务器持久化)。每个请求的配额上限尚未接入代理流水线。此页面用于设计和预览配额拆分;", + "policyLabel": "策略:" } }