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