diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 17e19ec123..140064815b 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -158,7 +158,7 @@ "noLockouts": "无锁定", "webSearchDesc": "Web Search 功能说明", "audioProvidersHeading": "音频 Provider", - "cloudAgentProviders": "__MISSING__:Cloud Agent Providers", + "cloudAgentProviders": "云端 Agent 提供商", "minutesAgo": "分钟前", "a": "A", "liveAutoRefreshing": "实时自动刷新中", @@ -365,10 +365,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 已连接", @@ -598,9 +598,9 @@ "syncingData": "正在同步数据", "cloudBenefitPorts": "通过 Cloud 暴露端口", "compatibleProviders": "兼容 Provider", - "freeTierProviders": "__MISSING__:Free Tier Providers", - "freeTierLabel": "__MISSING__:Free tier available", - "freeTierProvidersDesc": "__MISSING__:Providers with free tiers — some require an API key signup, others need no credentials at all.", + "freeTierProviders": "免费层提供商", + "freeTierLabel": "提供免费层", + "freeTierProvidersDesc": "提供免费层的提供商:有些需要注册 API 密钥,有些完全不需要凭据。", "clearCache": "清除缓存", "reqs": "请求数", "addAnthropicCompatible": "添加 Anthropic 兼容 Provider", @@ -657,55 +657,55 @@ "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…" + "gamificationAdmin": "游戏化管理", + "monitorAnomaliesAndHealth": "监控异常和系统健康状态", + "flaggedAnomalies": "已标记异常", + "noAnomaliesDetected": "未检测到异常", + "apiKey": "API 密钥", + "xpLastHour": "XP(1 小时)", + "zScore": "Z 分数", + "tokensCommunityServers": "社区服务器", + "tokensServerNamePlaceholder": "服务器名称", + "tokensApiKeyPlaceholder": "API 密钥", + "tokensTokenBalance": "Token 余额", + "tokensSendTokens": "发送 Tokens", + "tokensRecipientApiKeyId": "接收方 API 密钥 ID", + "tokensRecipientApiKeyIdPlaceholder": "输入接收方 API 密钥 ID", + "tokensReasonOptional": "原因(可选)", + "tokensReasonPlaceholder": "例如:奖励、激励", + "tokensTransactionHistory": "交易历史", + "tokensNoTransactionsYet": "暂无交易", + "tokensInviteCodes": "邀请码", + "tokensMaxUses": "最大使用次数", + "tokensRedeemCode": "兑换代码", + "tokensRedeemCodePlaceholder": "输入邀请码", + "tokensYourActiveInvites": "你的有效邀请", + "tierCoverageTitle": "层级覆盖", + "tierCoverageSubtitle": "每个回退层级已配置的提供商", + "batchDetailCopyId": "复制 ID", + "batchDetailClose": "关闭", + "batchDetailEndpoint": "Endpoint", + "batchDetailModel": "模型", + "batchDetailWindow": "窗口", + "batchDetailCreated": "已创建", + "providerTopologyEmpty": "尚未连接提供商", + "badgeToastUnlocked": "已解锁徽章!", + "batchListSearchPlaceholder": "按 ID、Endpoint、模型搜索…", + "batchListDeleteAllCompletedTitle": "删除所有已完成批次", + "batchListBatchesTable": "批次", + "changelogViewerLoading": "正在从 GitHub 加载更新日志...", + "profileLoading": "正在加载个人资料...", + "profileHowToEarn": "如何获取", + "bootstrapBannerDismiss": "关闭", + "batchListDeleteBatchTitle": "删除批次及其文件", + "leaderboardYourRank": "你的排名", + "leaderboardLoading": "正在加载排行榜...", + "batchFileDetailCopyId": "复制 ID", + "batchFileDetailClose": "关闭", + "batchFileDetailFailedToLoad": "无法加载文件内容", + "batchFilesListSearchPlaceholder": "按 ID 或文件名搜索…", + "batchFilesListFilesTable": "文件", + "batchPageLoadingMore": "正在加载更多…" }, "sidebar": { "home": "首页", @@ -725,24 +725,24 @@ "playground": "演练场", "searchTools": "搜索工具", "agents": "智能体", - "cloudAgents": "__MISSING__:Cloud Agents", + "cloudAgents": "云端 Agents", "memory": "记忆", "skills": "技能", - "omniSkills": "__MISSING__:OmniSkills", - "agentSkills": "__MISSING__:AgentSkills", + "omniSkills": "OmniSkills", + "agentSkills": "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": "重启服务", @@ -836,12 +836,12 @@ "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", + "settingsFeatureFlags": "功能开关", "settingsRouting": "Routing", "settingsResilience": "Resilience", "settingsAdvanced": "Advanced", @@ -912,7 +912,7 @@ "settingsResilienceSubtitle": "Retries and breakers", "settingsAdvancedSubtitle": "Power user options", "settingsSecuritySubtitle": "Auth and encryption", - "settingsFeatureFlagsSubtitle": "__MISSING__:Toggle system capabilities", + "settingsFeatureFlagsSubtitle": "切换系统能力", "docsSubtitle": "Documentation", "issuesSubtitle": "Report a bug", "changelogSubtitle": "Release notes" @@ -1013,23 +1013,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": "正在显示 {total} 个任务中的 {count} 个", + "a2aSkill": "技能", + "a2aSkillPlaceholder": "按技能名称筛选", + "a2aState": "状态", + "a2aAllStates": "所有状态", + "a2aStateSubmitted": "已提交", + "a2aStateWorking": "进行中", + "a2aStateCompleted": "已完成", + "a2aStateFailed": "失败", + "a2aStateCancelled": "已取消", + "a2aTaskId": "任务 ID", + "a2aEvents": "事件", + "a2aArtifacts": "产物", + "a2aNoTasks": "暂无 A2A 任务记录。", + "a2aLoadingTasks": "正在加载 A2A 任务..." }, "themesPage": { "title": "主题", @@ -1105,35 +1105,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": "DB", + "featureFlagsSourceEnv": "ENV", + "featureFlagsSourceDefault": "DEF", + "featureFlagsReset": "重置", + "featureFlagsResetAll": "重置所有覆盖项", + "featureFlagsResetAllConfirm": "确定要重置所有功能开关覆盖项吗?这会将所有开关恢复为 ENV 或默认值。", + "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", @@ -1155,8 +1155,8 @@ "providersOverview": "提供商概览", "configuredOf": "{total} 个可用提供商中已配置 {configured} 个", "noModelsAvailable": "该提供商当前没有可用模型。", - "noProvidersConfigured": "__MISSING__:No providers configured yet", - "addProvider": "__MISSING__:Add a provider", + "noProvidersConfigured": "尚未配置提供商", + "addProvider": "添加提供商", "configureFirst": "首先在 {providers} 中配置连接", "configureProvider": "配置提供商", "modelAvailable": "{count} 模型可用", @@ -1178,7 +1178,7 @@ "updating": "更新中...", "updateAvailableDesc": "有新版本可用。点击更新。", "updateStarted": "更新已开始...", - "reloadingPageAutomatically": "__MISSING__:Reloading page automatically...", + "reloadingPageAutomatically": "正在自动重新加载页面...", "providerTopology": "提供商拓扑" }, "analytics": { @@ -1197,50 +1197,50 @@ "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", - "diversityScoreTitle": "__MISSING__:Provider Diversity" + "autoRoutingTotalAutoRequests": "Auto 请求总数", + "autoRoutingAvgSelectionScore": "平均选择分数", + "autoRoutingExplorationRate": "探索率", + "autoRoutingLkgpHitRate": "LKGP 命中率", + "autoRoutingRequestsByVariant": "按变体统计请求", + "autoRoutingTopRoutedProviders": "最常路由提供商", + "comboHealthWorstQuotaLeft": "最低剩余额度", + "comboHealthUsageSkew": "使用偏斜", + "comboHealthSuccessRate": "成功率", + "comboHealthQuotaHealth": "额度健康状态", + "comboHealthRequests": "请求", + "comboHealthTokens": "Tokens", + "comboHealthAvgLatency": "平均延迟", + "comboHealthTotalRequests": "请求总数", + "comboHealthExecutionTargets": "执行目标", + "comboHealthSuccess": "成功", + "comboHealthLatency": "延迟", + "comboHealthQuota": "额度", + "comboHealthTitle": "组合健康状态", + "comboHealthUnableToLoad": "无法加载组合健康状态", + "comboHealthGettingStarted": "快速开始", + "compressionAnalyticsTotalRequests": "请求总数", + "compressionAnalyticsTokensSaved": "已节省 Tokens", + "compressionAnalyticsAvgSavings": "平均节省量", + "compressionAnalyticsAvgDuration": "平均耗时", + "compressionAnalyticsReceipts": "回执", + "compressionAnalyticsFallbacks": "回退", + "compressionAnalyticsPromptTokens": "Prompt tokens", + "compressionAnalyticsCompletionTokens": "Completion tokens", + "compressionAnalyticsTotalTokens": "总 tokens", + "compressionAnalyticsCacheTokens": "缓存 tokens", + "compressionAnalyticsNoDataYet": "暂无压缩数据", + "searchAnalyticsTotalSearches": "搜索总数", + "searchAnalyticsCacheHitRate": "缓存命中率", + "searchAnalyticsTotalCost": "总成本", + "searchAnalyticsAvgResponse": "平均响应", + "searchAnalyticsNoSearchesYet": "暂无搜索", + "providerUtilizationTitle": "提供商使用率", + "providerUtilizationFailedToLoad": "无法加载使用率数据", + "providerUtilizationNoData": "暂无可用的使用率数据", + "providerUtilizationGettingStarted": "快速开始", + "providerUtilizationLatestSnapshot": "最新额度快照", + "providerUtilizationRemainingCapacity": "剩余容量", + "diversityScoreTitle": "提供商多样性" }, "apiManager": { "title": "API 密钥", @@ -1342,30 +1342,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": "Asia/Shanghai", + "noLogPayloadPrivacy": "无日志 Payload 隐私", + "bannedStatus": "封禁状态", + "managementApiAccess": "管理 API 访问", + "expirationDate": "过期日期", + "managementAccess": "管理访问", + "allowedConnections": "允许的连接" }, "auditLog": { "title": "审核日志", @@ -1454,8 +1454,8 @@ "rerankModel": "重排模型", "positionDelta": "排名变化", "emptyState": "发送搜索请求后即可查看结果", - "copy": "__MISSING__:Copy", - "resetToDefault": "__MISSING__:Reset to default" + "copy": "复制", + "resetToDefault": "重置为默认值" }, "cliTools": { "title": "CLI 工具", @@ -1777,33 +1777,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": "例如:我的团队 CLI", + "customCliDefaultModelLabel": "默认模型", + "customCliDefaultModelHelp": "使用任意 OmniRoute 模型 ID 或组合。大多数 OpenAI 兼容 CLI 只需要 /v1 base URL 和一个模型字符串。", + "customCliKeyHelper": "本地安装时 OmniRoute 可以使用 sk_omniroute。云模式下请选择一个管理 API 密钥。", + "customCliAliasMappingsLabel": "别名映射", + "customCliAliasMappingsHelp": "为需要稳定简写名称的包装脚本或配置文件提供可选辅助别名。", + "customCliAddAlias": "添加别名", + "customCliNoMappings": "暂无别名映射。如果你的包装脚本或团队脚本使用稳定短名称,可以添加一个。", + "customCliAliasPlaceholder": "例如:review", + "customCliTargetModelLabel": "目标模型", + "customCliEndpointHintLabel": "如何接入 Endpoint", + "customCliEndpointHint": "将任何 OpenAI 兼容客户端指向 OmniRoute 的 /v1 base URL。原始 chat completions Endpoint 为 {endpoint}。当工具需要 provider 对象时使用 JSON 块;当工具读取 OPENAI_* 变量时使用 env 脚本。", + "customCliEnvBlockTitle": "Env / shell 片段", + "customCliJsonBlockTitle": "提供商 JSON 块", + "copilotConfigGenerator": "GitHub Copilot 配置生成器", + "copilotApiKey": "API 密钥", + "copilotFilterModelsPlaceholder": "筛选模型...", + "copilotMaxInputTokens": "最大输入 Tokens", + "copilotMaxOutputTokens": "最大输出 Tokens", + "copilotToolCalling": "工具调用", + "copilotPasteInto": "粘贴到:", + "wireApiChatCompletions": "Chat Completions(/chat/completions)", + "wireApiResponses": "Responses API(/responses)" }, "combos": { "title": "组合", @@ -1866,8 +1866,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": "重置感知轮询", + "resetAwareDesc": "根据剩余额度、5 小时重置和每周重置进行平衡,然后对相近分数进行轮询", "strictRandom": "严格随机", "strictRandomDesc": "洗牌池模式:每个模型使用一次后再重新洗牌", "models": "模型", @@ -1884,9 +1884,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": "集合重试延迟(毫秒)", "moveUp": "上移", "moveDown": "下移", "removeModel": "移除", @@ -1930,9 +1930,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": "相比稍后重置的 80% 账号,优先选择明天重置的 60% 每周额度账号。" }, "strict-random": { "when": "适用于希望实现绝对均匀分配的场景,每个模型在重复前都会恰好使用一次。", @@ -1977,9 +1977,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": "先套用一个初始模板,再按需调整模型和配置。", @@ -2110,11 +2110,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": "洗牌池分配", @@ -2269,13 +2269,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": "成本", @@ -2472,14 +2472,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": "消息", + "messagesApiDesc": "面向 Claude 兼容提供商的原生 Anthropic Messages API 格式", + "imageEdits": "图像编辑", + "imageEditsDesc": "使用 AI 编辑和修改现有图像(局部重绘、扩图、变体)", + "batchApi": "Batch API", + "batchApiDesc": "异步处理大批量请求(OpenAI 兼容)", + "filesApi": "Files API", + "filesApiDesc": "上传并管理用于批处理的文件", "videoGeneration": "视频生成", "videoDesc": "使用 ComfyUI 和 Stable Video Diffusion 等 AI 模型生成视频。", "tailscaleRequestFailed": "加载 Tailscale 状态失败", @@ -2532,17 +2532,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": "让每次请求消耗更少 Tokens。", + "tokenSaverToolOutput": "工具输出", + "tokenSaverLlmOutput": "LLM 输出", + "tokenSaverInputCompression": "输入压缩", + "apiEndpointsCatalogUnavailable": "API 目录不可用", + "apiEndpointsSearchPlaceholder": "搜索 Endpoints...", + "apiEndpointsRequiresAuth": "需要认证", + "apiEndpointsNoMatch": "没有 Endpoint 匹配你的筛选条件", + "localServer": "本地服务器", + "cloudOmniroute": "云端 OmniRoute", + "copyUrl": "复制 URL" }, "endpoints": { "tabProxy": "端点代理", @@ -2627,7 +2627,7 @@ "offset": "偏移量", "limit": "限制", "tool": "工具", - "mcpDashboardCopyUrl": "__MISSING__:Copy URL" + "mcpDashboardCopyUrl": "复制 URL" }, "a2aDashboard": { "loading": "正在加载 A2A 仪表板...", @@ -2686,12 +2686,12 @@ "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" + "rpcEndpoint": "POST /a2a", + "rpcMethodSend": "message/send", + "rpcMethodStream": "message/stream", + "rpcMethodGet": "tasks/get", + "rpcMethodCancel": "tasks/cancel", + "serviceLabel": "A2A" }, "memory": { "title": "记忆管理", @@ -2718,18 +2718,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": "技能", @@ -2759,10 +2759,10 @@ "networkAccessDesc": "允许发起出站网络请求", "mode": "模式", "q": "Q", - "filterSkillsPlaceholder": "__MISSING__:Filter skills by name, description, or tag", - "allModes": "__MISSING__:All modes", - "skillsMarketplace": "__MISSING__:Skills Marketplace", - "installSkill": "__MISSING__:Install Skill" + "filterSkillsPlaceholder": "按名称、描述或标签筛选技能", + "allModes": "所有模式", + "skillsMarketplace": "技能市场", + "installSkill": "安装技能" }, "health": { "title": "系统健康状况", @@ -2842,12 +2842,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": "系统遥测", @@ -3036,24 +3036,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": "作为回退使用的本地托管或专用 Endpoints。" }, - "configure": "__MISSING__:Configure providers" + "configure": "配置提供商" }, - "tierFlowDiagramAlt": "__MISSING__:OmniRoute 3-tier fallback diagram" + "tierFlowDiagramAlt": "OmniRoute 三层回退图" }, "providers": { "title": "提供商", @@ -3061,9 +3061,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": "没有配置提供商", @@ -3096,7 +3096,7 @@ "connected": "{count} 已连接", "errorCount": "{count} 错误 ({code})", "errorCountNoCode": "{count} 错误", - "warningCount": "__MISSING__:{count} Warning", + "warningCount": "{count} 个警告", "noConnections": "无连接", "expiredBadge": "已过期", "expiringSoonBadge": "即将过期", @@ -3233,12 +3233,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密钥(按序号自动命名)。", @@ -3398,127 +3398,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 文件(每个 256KB,总计 10MB)。", + "claudeImportBulkPasteHint": "粘贴对象数组:[{ json, name?, email? }, ...]", + "claudeImportBulkZipHint": "包含 .json 条目的 ZIP。最多 50 个条目,解压后不超过 10MB。", + "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 文件(每个 256KB,总计 10MB)。", + "geminiImportBulkPasteHint": "粘贴对象数组:[{ json, name?, email? }, ...]", + "geminiImportBulkZipHint": "包含 oauth_creds.json 条目的 ZIP。最多 50 个条目,解压后不超过 10MB。", + "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", @@ -3551,14 +3551,14 @@ "apikey": "API key", "audio": "音频", "audioProvidersHeading": "音频 Provider", - "cloudAgentProviders": "__MISSING__:Cloud Agent Providers", + "cloudAgentProviders": "云端 Agent 提供商", "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 header。将两个值粘贴到下方字段。", + "t3ChatWebCookiePlaceholder": "convex-session-id=abc123...", "blockClaudeExtraUsageDescription": "隐藏部分 Provider 返回的重复 Claude 额外用量记录,避免和主 token 统计重复。", "blockClaudeExtraUsageLabel": "屏蔽重复 Claude 用量", "bulkPasteAdded": "{count, plural, one {已添加 1 个 key} other {已添加 # 个 key}}", @@ -3618,12 +3618,12 @@ "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.", - "antigravityProjectIdLabel": "__MISSING__:Google Cloud Project ID", - "antigravityProjectIdPlaceholder": "__MISSING__:my-gcp-project-id", + "geminiCliProjectIdHint": "你的 Google Cloud Project ID。带例外配置的账号需要此项。输入你的 GCP Project ID 以配合 Gemini CLI 使用。", + "geminiCliProjectIdLabel": "Google Cloud Project ID", + "geminiCliProjectIdPlaceholder": "my-gcp-project-id", + "antigravityProjectIdHint": "Antigravity Cloud Code 请求的可选覆盖项。留空则使用 Google OAuth 期间发现的项目。", + "antigravityProjectIdLabel": "Google Cloud Project ID", + "antigravityProjectIdPlaceholder": "my-gcp-project-id", "grokWebCookieHint": "从 Grok Web 会话复制 Cookie。", "grokWebCookiePlaceholder": "Grok Web Cookie", "herokuBaseUrlHint": "Heroku 部署的 Base URL。", @@ -3717,8 +3717,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": "设置", @@ -3728,9 +3728,9 @@ "routing": "路由", "cache": "缓存", "resilience": "韧性", - "routingSettingsIntro": "__MISSING__:Controls how your requests are routed, transformed, and sent to AI providers.", - "resilienceSettingsIntro": "__MISSING__:Automatic retry, cooldown, and fallback when providers fail.", - "aiSettingsIntro": "__MISSING__:AI-specific settings for thinking budget, model behavior, and compression.", + "routingSettingsIntro": "控制请求如何路由、转换并发送到 AI 提供商。", + "resilienceSettingsIntro": "当提供商失败时自动重试、冷却和回退。", + "aiSettingsIntro": "用于思考预算、模型行为和压缩的 AI 专用设置。", "systemPrompt": "系统提示", "thinkingBudget": "思考预算", "proxy": "代理", @@ -3836,8 +3836,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": "启用代理", @@ -3981,16 +3981,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": "System-block 转换管道", + "systemTransformsDesc": "按提供商配置的有序转换管道,会在转发前应用到请求体。支持任意提供商 ID。", + "systemTransformsAddProvider": "添加提供商", + "systemTransformsAddProviderPlaceholder": "选择提供商…", + "systemTransformsAddProviderAllConfigured": "所有提供商均已配置", + "systemTransformsRemoveProvider": "移除提供商", + "systemTransformsNoProviders": "尚未配置提供商。添加一个提供商即可开始。", + "systemTransformsOpMoveUp": "上移", + "systemTransformsOpMoveDown": "下移", + "systemTransformsOpDelete": "删除操作", "routingStrategy": "路由策略", "routingAdvancedGuideTitle": "高级路由指南", "routingAdvancedGuideHint1": "需要可预测优先级时使用 Fill First,需要公平分配时使用 Round Robin,需要延迟弹性时使用 P2C。", @@ -4007,8 +4007,8 @@ "leastUsedDesc": "优先选择最近使用最少的账户", "costOpt": "成本优化", "costOptDesc": "优先选择成本最低的可用账户", - "resetAware": "__MISSING__:Reset-Aware RR", - "resetAwareDesc": "__MISSING__:Prefer accounts with healthy remaining quota and nearer resets", + "resetAware": "重置感知轮询", + "resetAwareDesc": "优先选择剩余额度健康且更快重置的账号", "strictRandom": "严格随机", "strictRandomDesc": "洗牌池模式:每个账户使用一次后再重新洗牌", "stickyLimit": "粘性限制", @@ -4372,197 +4372,197 @@ "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", - "routingHeaderFingerprintTitle": "__MISSING__:Header fingerprint (per provider)", - "routingServerRejectedSave": "__MISSING__:⚠ Server rejected save:", - "routingAddTransformOp": "__MISSING__:Add a transform op", - "routingClientCacheControlTitle": "__MISSING__:Client Cache Control", - "visionBridge": "__MISSING__:Vision Bridge", - "routingZeroConfigTitle": "__MISSING__:Zero-Config Auto-Routing", - "routingDefaultAutoVariant": "__MISSING__:Default Auto Variant", - "visionBridgeModel": "__MISSING__:Bridge Model", - "resilienceMaxBackoffSteps": "__MISSING__:Max backoff steps", - "resilienceBaseCooldownLabel": "__MISSING__:Base cooldown", - "resilienceUseUpstreamRetryHintsLabel": "__MISSING__:Use upstream retry hints", - "resilienceYes": "__MISSING__:Yes", - "resilienceNo": "__MISSING__:No", - "resilienceUseUpstream429BreakerLabel": "__MISSING__:Use upstream 429 hints (breaker)", - "resilienceDefault": "__MISSING__:Default", - "resilienceMaxBackoffStepsLabel": "__MISSING__:Max backoff steps", - "visionBridgePrompt": "__MISSING__:Bridge Prompt", - "visionBridgeTimeoutMs": "__MISSING__:Timeout (ms)", - "resilienceConnectionCooldownTitle": "__MISSING__:Connection Cooldown", - "visionBridgeMaxImagesPerRequest": "__MISSING__:Max Images Per Request", - "resilienceFailureThreshold": "__MISSING__:Failure threshold", - "resilienceResetTimeout": "__MISSING__:Reset timeout", - "resilienceFailureThresholdLabel": "__MISSING__:Failure threshold", - "resilienceResetTimeoutLabel": "__MISSING__:Reset timeout", - "visionBridgeModelPlaceholder": "__MISSING__:openai/gpt-4o-mini", - "visionBridgePromptPlaceholder": "__MISSING__:Describe this image concisely.", - "resilienceProviderBreakerTitle": "__MISSING__:Circuit Breaker per Provider", - "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", - "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", - "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. Model 字段: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": "Needles(要匹配的子字符串)", + "routingCaseSensitive": "区分大小写", + "routingPrefixes": "前缀", + "routingMatch": "匹配", + "routingReplacement": "替换内容", + "routingReplaceAllOccurrences": "替换所有出现项", + "routingPatternRegex": "模式(正则)", + "routingFlags": "标志", + "routingNeedles": "Needles", + "routingBlockText": "块文本", + "routingIdempotencyKey": "幂等键", + "routingEntrypoint": "入口点", + "routingVersionFormat": "版本格式", + "routingCchAlgorithm": "CCH 算法", + "routingWordsToObfuscate": "要混淆的词(在首字符后插入 ZWJ)", + "logsSettingsTitle": "日志设置", + "detailedLogsLabel": "启用详细日志", + "detailedLogsDesc": "启用详细请求/响应日志", + "callLogPipelineLabel": "调用日志管道", + "callLogPipelineDesc": "启用调用日志处理管道", + "maxDetailSizeLabel": "最大详情大小(KB)", + "maxDetailSizeDesc": "详细日志条目的最大大小", + "ringBufferSizeLabel": "环形缓冲区大小", + "ringBufferSizeDesc": "日志环形缓冲区大小", + "semanticCacheEnabledLabel": "启用语义缓存", + "semanticCacheMaxSizeLabel": "语义缓存最大大小", + "semanticCacheMaxSizeDesc": "语义缓存条目的最大数量", + "semanticCacheTTLLabel": "语义缓存 TTL", + "promptCacheEnabledLabel": "启用 Prompt 缓存", + "promptCacheEnabledDesc": "启用 Prompt 缓存", + "promptCacheStrategyLabel": "Prompt 缓存策略", + "promptCacheStrategyDesc": "Prompt 缓存策略", + "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 签名缓存模式", + "routingHeaderFingerprintTitle": "Header 指纹(按提供商)", + "routingServerRejectedSave": "⚠ 服务器拒绝保存:", + "routingAddTransformOp": "添加转换操作", + "routingClientCacheControlTitle": "客户端缓存控制", + "visionBridge": "视觉桥接", + "routingZeroConfigTitle": "零配置自动路由", + "routingDefaultAutoVariant": "默认 Auto 变体", + "visionBridgeModel": "桥接模型", + "resilienceMaxBackoffSteps": "最大退避步数", + "resilienceBaseCooldownLabel": "基础冷却时间", + "resilienceUseUpstreamRetryHintsLabel": "使用上游重试提示", + "resilienceYes": "是", + "resilienceNo": "否", + "resilienceUseUpstream429BreakerLabel": "使用上游 429 提示(断路器)", + "resilienceDefault": "默认", + "resilienceMaxBackoffStepsLabel": "最大退避步数", + "visionBridgePrompt": "桥接 Prompt", + "visionBridgeTimeoutMs": "超时(毫秒)", + "resilienceConnectionCooldownTitle": "连接冷却", + "visionBridgeMaxImagesPerRequest": "每个请求最大图片数", + "resilienceFailureThreshold": "失败阈值", + "resilienceResetTimeout": "重置超时", + "resilienceFailureThresholdLabel": "失败阈值", + "resilienceResetTimeoutLabel": "重置超时", + "visionBridgeModelPlaceholder": "openai/gpt-4o-mini", + "visionBridgePromptPlaceholder": "简要描述这张图片。", + "resilienceProviderBreakerTitle": "按提供商设置断路器", + "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": "当前 Skills 提供商", + "cliproxyapiFallback": "CLIProxyAPI 回退", + "cliproxyapiEnableFallback": "启用 CLIProxyAPI 回退", + "cliproxyapiUrl": "CLIProxyAPI URL", + "cliproxyapiStatus": "CLIProxyAPI 状态", + "cliproxyapiNotDetected": "未检测到", + "payloadRulesTitle": "Payload 规则", + "modelCooldownsTitle": "冷却中的模型", + "modelCooldownsEmpty": "当前没有处于冷却中的模型。", + "codexFastTierTitle": "Codex 快速层级", + "codexFastTierDesc": "为 OpenAI Codex 请求全局注入 service_tier=priority。", + "codexFastTierHint": "启用后,OmniRoute 会为尚未指定层级的连接,在出站 Codex 请求中添加 service_tier=priority。Priority 层级需要 OpenAI Enterprise API 密钥或 ChatGPT-auth Codex 路径;其他密钥类型会收到 OpenAI 返回的层级相关错误。Codex 提供商页面中的单连接设置优先级更高。", + "codexFastTierSaveError": "更新 Codex 快速层级设置失败", + "claudeFastModeTitle": "Claude Fast Mode", + "claudeFastModeDesc": "将选定的 Claude 请求加入 Anthropic Fast Mode(speed:\"fast\")。", + "claudeFastModeHint": "Anthropic 官方并不支持 SDK 风格客户端使用 Fast Mode。启用后,OmniRoute 会转发 X-CPA-Force-Fast-Mode header,让配套的 CLIProxyAPI 构建可以选择性模拟入口点。只有列出的 Opus 模型受 Anthropic 客户端侧检查限制。订阅层级、Max 套餐和 Fast Mode 点数余额仍会在服务端强制执行——即使开关已开启,Anthropic 也可能返回 out_of_credits。", + "claudeFastModeModelsLabel": "应用到模型({count})", + "claudeFastModeModelCheckbox": "为 {model} 启用 Fast Mode", + "claudeFastModeSaveError": "更新 Claude Fast Mode 设置失败" }, "contextRtk": { "title": "RTK 引擎", @@ -4575,17 +4575,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": "从不", @@ -4594,11 +4594,11 @@ "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 输出。", @@ -4607,12 +4607,12 @@ "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": "压缩组合", @@ -4639,43 +4639,43 @@ "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": "每条消息的目标 Tokens", + "labelMinLength": "最小消息长度", + "labelMinSavings": "最少节省 Tokens", "enabled": "已启用", "autoDetect": "自动检测语言", "rulesCount": "{count} 条规则", "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": "只有至少节省这么多 Tokens 时才压缩。", + "ultraSettings": "Ultra 设置", + "ultraSettingsDesc": "由 SLM 驱动的语义压缩", "preview": { "lite": "回复要简洁。保留技术术语、代码、错误、URL 和标识符。", "full": "回复要简短紧凑。保留所有技术实质。", @@ -4780,8 +4780,8 @@ "thinking": "思考", "system-prompt": "系统提示", "streaming": "流媒体", - "vision": "__MISSING__:Vision", - "schema-coercion": "__MISSING__:Schema Coercion" + "vision": "视觉", + "schema-coercion": "Schema 强制转换" }, "templateDescriptions": { "simple-chat": "基本短信", @@ -4790,8 +4790,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": { @@ -4820,14 +4820,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 兼容", @@ -4874,33 +4874,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": "通过 Responses 转换器运行 chat completions SSE 流。", + "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": "唯一 Endpoint", + "routeDetails": "路由详情", + "comboBadge": "组合", + "routeEndpointLabel": "Endpoint", + "routeConnectionLabel": "连接", + "scenarioVision": "视觉(图像理解)", + "scenarioSchemaCoercion": "Schema 强制转换(结构化输出)", + "techniques": "技术:" }, "usage": { "title": "用量", @@ -5166,45 +5166,45 @@ "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" + "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 天无消费" }, "modals": { "waitingAuth": "等待授权", @@ -5459,18 +5459,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 虚拟机上自托管。包含 systemd 单元、日志轮转和备份工具。", + "deployFlyTitle": "Fly.io", + "deployFlyText": "通过一个 fly.toml 和一条部署命令即可部署到 Fly.io 边缘运行时。", + "deployPwaTitle": "PWA", + "deployPwaText": "可在 Android、iOS 和桌面浏览器上将 OmniRoute 安装为渐进式 Web 应用。", "deployTermuxTitle": "Termux (Android)", "deployTermuxText": "通过 Termux 在 Android 上以无界面模式运行 OmniRoute,并从移动浏览器访问仪表盘。", "featureRoutingTitle": "多提供商路由", @@ -5604,10 +5604,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": "技能", @@ -5751,55 +5751,55 @@ "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" + "copyRawUrlTitle": "复制原始 URL 到剪贴板", + "copied": "已复制!", + "copyUrl": "复制 URL", + "startHere": "从这里开始", + "badgeNew": "新增", + "viewOnGithub": "在 GitHub 上查看", + "howToUse": "使用方法", + "browseAllSkillsOnGithub": "在 GitHub 上浏览所有技能", + "apiSkills": "API 技能", + "cliSkills": "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.", - "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": "云端 Agents", + "description": "管理自主编码 Agent(Jules、Devin、Codex Cloud)", + "loading": "正在加载任务...", + "aboutTitle": "关于云端 Agents", + "aboutDescription": "云端 Agent 是远程 AI 编码助手,可以自主执行任务。它们与本地 CLI Agent 的工作方式不同——你通过 OmniRoute 的 API 与它们交互。", + "howItWorksTitle": "工作方式:", + "howItWorksDesc": "创建任务 → Agent 分析并提出方案 → 你批准 → Agent 执行 → 返回结果", + "newTaskTitle": "创建新任务", + "newTaskDescription": "使用云端 Agent 开始一个新任务", + "selectAgent": "选择 Agent", + "taskDescription": "任务描述", + "taskDescriptionPlaceholder": "描述你希望 Agent 执行的内容...", + "startTask": "开始任务", + "tasks": "任务", + "taskDetail": "任务详情", + "noTasks": "暂无任务。创建一个即可开始。", + "untitledTask": "未命名任务", + "created": "已创建", + "conversation": "对话", + "result": "结果", + "error": "错误", + "planReady": "方案已准备好等待批准", + "approvePlan": "批准方案", + "rejectPlan": "拒绝并取消", + "sendMessagePlaceholder": "向 Agent 发送消息...", + "cancel": "取消", + "delete": "删除", + "selectTaskPrompt": "选择要查看详情的任务", + "statusPending": "待处理", + "statusRunning": "运行中", + "statusWaitingApproval": "等待批准", + "statusCompleted": "已完成", + "statusFailed": "失败", + "statusCancelled": "已取消", + "repositoryName": "仓库名称", + "repositoryUrl": "仓库 URL", + "branch": "分支" }, "templateNames": { "simple-chat": "简单对话", @@ -5808,8 +5808,8 @@ "thinking": "思考模式", "tool-calling": "工具调用", "multi-turn": "多轮对话", - "vision": "__MISSING__:Vision", - "schema-coercion": "__MISSING__:Schema Coercion" + "vision": "视觉", + "schema-coercion": "Schema 强制转换" }, "templateDescriptions": { "simple-chat": "带系统消息的基础对话模板", @@ -5818,8 +5818,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": { @@ -5966,12 +5966,12 @@ "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" + "cachePerformanceRetry": "重试", + "cachePerformanceHitRate": "命中率", + "cachePerformanceAvgLatency": "平均延迟(ms)", + "cachePerformanceP95Latency": "p95 延迟(ms)", + "retry": "重试", + "reasoningAvgChars": "平均字符数" }, "proxyConfigModal": { "levelGlobal": "全局", @@ -6152,8 +6152,8 @@ "bulkImportErrorInvalidPort": "PORT 无效(必须为 1-65535)", "bulkImportErrorInvalidType": "TYPE 无效(使用 http、https 或 socks5)", "bulkImportErrorInvalidStatus": "STATUS 无效(使用 active 或 inactive)", - "clearAssignment": "__MISSING__:(clear assignment)", - "bulkProxyAssignment": "__MISSING__:Bulk Proxy Assignment" + "clearAssignment": "(清除分配)", + "bulkProxyAssignment": "批量代理分配" }, "playground": { "title": "模型演练场", @@ -6195,9 +6195,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": "正在录制", @@ -6436,9 +6436,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": "策略:" } }