mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-09 12:40:20 +08:00
3620 lines
209 KiB
TypeScript
3620 lines
209 KiB
TypeScript
export const messages = {
|
||
'zh-CN': {
|
||
'common.loading': '加载中...',
|
||
'common.confirmRead': '确认已读',
|
||
'common.confirming': '确认中...',
|
||
'common.copy': '复制',
|
||
'common.copied': '已复制',
|
||
'common.cancel': '取消',
|
||
'common.githubRepository': 'GitHub 仓库',
|
||
'common.settings': '个人设置',
|
||
'common.logout': '退出登录',
|
||
'common.language': '语言',
|
||
'common.chinese': '简体中文',
|
||
'common.english': 'English',
|
||
'auth.expired': '认证已过期,请重新登录',
|
||
'auth.relogin': '重新登录',
|
||
'auth.role.admin': '管理员',
|
||
'auth.role.auditAdmin': '审计管理员',
|
||
'auth.role.user': '用户',
|
||
'auth.login.title': '登录到 {siteName}',
|
||
'auth.login.oauthWithProvider': '使用 {provider} 登录',
|
||
'auth.login.oauthOptions': '使用以下方式登录',
|
||
'auth.login.accountPassword': '或使用账号密码',
|
||
'auth.login.local': '本地登录',
|
||
'auth.login.ldap': 'LDAP 登录',
|
||
'auth.login.adminLocal': '管理员本地登录',
|
||
'auth.login.backToLdap': '返回 LDAP 登录',
|
||
'auth.login.usernameEmail': '用户名/邮箱',
|
||
'auth.login.usernamePlaceholder': '用户名或邮箱',
|
||
'auth.login.password': '密码',
|
||
'auth.login.passwordPlaceholder': '输入密码',
|
||
'auth.login.submit': '登录',
|
||
'auth.login.submitting': '登录中...',
|
||
'auth.login.contactAdmin': '如需开通账户,请联系管理员',
|
||
'auth.login.noAccount': '还没有账户?',
|
||
'auth.login.registerNow': '立即注册',
|
||
'auth.login.required': '请输入邮箱和密码',
|
||
'auth.login.successRedirecting': '登录成功,正在跳转...',
|
||
'auth.login.failed': '登录失败,请检查邮箱和密码',
|
||
'auth.login.demoMode': '演示模式',
|
||
'auth.register.successLogin': '注册成功!请登录',
|
||
'auth.register.title': '注册新账户',
|
||
'auth.register.fillEmailInfo': '请填写您的信息完成注册',
|
||
'auth.register.fillBasicInfo': '请填写用户名和密码完成注册',
|
||
'auth.register.email': '邮箱',
|
||
'auth.register.optional': '(可选)',
|
||
'auth.register.turnstile': '人机验证',
|
||
'auth.register.verificationCode': '验证码',
|
||
'auth.register.username': '用户名',
|
||
'auth.register.usernamePlaceholder': '请输入用户名',
|
||
'auth.register.password': '密码',
|
||
'auth.register.confirmPassword': '确认密码',
|
||
'auth.register.confirmPasswordPlaceholder': '再次输入密码',
|
||
'auth.register.passwordMismatch': '两次输入的密码不一致',
|
||
'auth.register.inviteCode': '已识别邀请码 {code}',
|
||
'auth.register.privacyPrefix': '我已阅读并同意',
|
||
'auth.register.openInNewWindow': '新窗口打开',
|
||
'auth.register.hasAccount': '已有账户?',
|
||
'auth.register.switchToLogin': '立即登录',
|
||
'auth.register.submit': '注册',
|
||
'auth.register.acknowledge': '我知道了',
|
||
'auth.register.sendingCode': '发送中...',
|
||
'auth.register.verified': '验证成功',
|
||
'auth.register.retryAfterSeconds': '{seconds}秒后重试',
|
||
'auth.register.completeTurnstile': '请先完成人机验证',
|
||
'auth.register.resendCode': '重新发送验证码',
|
||
'auth.register.sendCode': '发送验证码',
|
||
'auth.register.usernameTooShort': '用户名长度至少为3个字符',
|
||
'auth.register.usernameTooLong': '用户名长度不能超过30个字符',
|
||
'auth.register.usernameInvalid': '用户名只能包含字母、数字、下划线、连字符和点号',
|
||
'auth.register.emailRequired': '请输入邮箱',
|
||
'auth.register.emailInvalid': '请输入有效的邮箱地址',
|
||
'auth.register.emailFormatError': '邮箱格式错误',
|
||
'auth.register.codeSent': '请查收邮件,验证码有效期 {minutes} 分钟',
|
||
'auth.register.codeSentTitle': '验证码已发送',
|
||
'auth.register.tryAgainLater': '请稍后重试',
|
||
'auth.register.sendFailed': '发送失败',
|
||
'auth.register.networkRetry': '网络错误,请重试',
|
||
'auth.register.verifying': '验证中...',
|
||
'auth.register.emailVerified': '邮箱验证通过,请继续完成注册',
|
||
'auth.register.verifySuccess': '验证成功',
|
||
'auth.register.codeInvalid': '验证码错误',
|
||
'auth.register.verifyFailed': '验证失败',
|
||
'auth.register.codeRetry': '验证码错误,请重试',
|
||
'auth.register.passwordError': '密码错误',
|
||
'auth.register.completeEmailVerification': '请先完成邮箱验证',
|
||
'auth.register.agreePrivacy': '请先阅读并同意隐私政策',
|
||
'auth.register.submitting': '注册中...',
|
||
'auth.register.successMessage': '欢迎加入!请登录以继续',
|
||
'auth.register.successTitle': '注册成功',
|
||
'auth.register.submitRetry': '注册失败,请重试',
|
||
'auth.register.submitFailed': '注册失败',
|
||
'theme.system': '跟随系统',
|
||
'theme.dark': '深色模式',
|
||
'theme.light': '浅色模式',
|
||
'demo.mode': '演示模式',
|
||
'platform.macLinux': 'Mac / Linux',
|
||
'platform.windows': 'Windows',
|
||
'platform.nodejs': 'Node.js',
|
||
'platform.mac': 'Mac',
|
||
'platform.terminal': '终端',
|
||
'platform.powershell': 'PowerShell',
|
||
'platform.npm': 'npm',
|
||
'platform.homebrew': 'Homebrew',
|
||
'site.home.section.home': '首页',
|
||
'site.home.section.claude': 'Claude',
|
||
'site.home.section.codex': 'OpenAI',
|
||
'site.home.section.gemini': 'Gemini',
|
||
'site.home.section.more': '更多',
|
||
'site.home.hero.titlePrefix': '欢迎使用',
|
||
'site.home.hero.subtitle': 'AI 开发工具统一接入平台',
|
||
'site.home.hero.subtitleLine2': '整合 Claude Code、Codex CLI、Gemini CLI 等多个 AI 编程助手',
|
||
'site.home.docLink': '文档',
|
||
'site.home.projectProgress': '项目进度',
|
||
'site.home.featureProgress': '功能开发进度',
|
||
'site.home.featureProgressDesc': '核心 API 代理功能已完成,正在载入更多功能',
|
||
'site.home.startNow': '立即开始',
|
||
'site.home.login': '登录',
|
||
'site.home.enterDashboard': '进入控制台',
|
||
'site.home.status.completed': '已完成',
|
||
'site.home.status.inProgress': '开发中',
|
||
'site.home.feature.cards.multi': 'Claude / OpenAI / Gemini',
|
||
'site.home.feature.cards.multiDesc': '已完整接入三大主流 AI 编程助手的标准 API',
|
||
'site.home.feature.cards.format': '格式转换',
|
||
'site.home.feature.cards.formatDesc': '开启/关闭API格式相互转换、自定义请求头',
|
||
'site.home.feature.cards.collaboration': '协同开发',
|
||
'site.home.feature.cards.collaborationDesc': '远程开发、Skill分享、Playground等功能即将到来',
|
||
'site.home.cli.claudeDescription': '直接在您的终端中释放Claude的原始力量。瞬间搜索百万行代码库。将数小时的流程转化为单一命令。您的工具。您的流程。您的代码库,以思维速度进化。',
|
||
'site.home.cli.claudeTitle': 'Claude Code',
|
||
'site.home.cli.codexDescription': 'Codex CLI 是一款可在本地终端运行的编程助手工具,它能够读取、修改并执行用户指定目录中的代码。',
|
||
'site.home.cli.codexTitle': 'Codex CLI',
|
||
'site.home.cli.geminiDescription': 'Gemini CLI 是一款开源人工智能代理,可将 Gemini 的强大功能直接带入你的终端。它提供了对 Gemini 的轻量级访问,为你提供了从提示符到我们模型的最直接路径。',
|
||
'site.home.cli.geminiTitle': 'Gemini CLI',
|
||
'site.home.cli.terminal': '终端',
|
||
'site.home.cli.powershell': 'PowerShell',
|
||
'site.home.cli.npm': 'npm',
|
||
'site.home.cli.homebrew': 'Homebrew',
|
||
'site.home.cli.ideIntegration': 'IDE 集成',
|
||
'site.home.cli.commandLine': '命令行工具',
|
||
'site.home.cli.multimodalAi': '多模态 AI',
|
||
'site.home.copyConfig': '复制配置',
|
||
'site.home.backHome': '返回首页',
|
||
'site.home.applyScheme': '应用此方案',
|
||
'site.home.logoCompareTitle': 'Logo 颜色方案对比',
|
||
'site.home.logoCompareDesc': '点击任意方案可以放大预览',
|
||
'site.home.preview': '预览',
|
||
'site.home.previewHelp': '请将以下颜色值更新到代码中',
|
||
'site.home.previewFile1': 'AetherLineByLineLogo.vue - gradient 颜色',
|
||
'site.home.previewFile2': 'Home.vue - outlineColor 属性',
|
||
'site.auth.processing': '正在处理认证...',
|
||
'site.auth.waiting': '请稍候...',
|
||
'site.auth.cancelled': '你已取消授权',
|
||
'site.auth.providerDisabled': '该 OAuth Provider 已被禁用',
|
||
'site.auth.providerUnavailable': 'OAuth Provider 不可用',
|
||
'site.auth.invalidCallback': '回调参数无效',
|
||
'site.auth.invalidState': '登录状态已失效,请重试',
|
||
'site.auth.tokenExchangeFailed': '令牌兑换失败',
|
||
'site.auth.userinfoFetchFailed': '获取用户信息失败',
|
||
'site.auth.emailExistsLocal': '该邮箱已存在,请先登录后再绑定 OAuth',
|
||
'site.auth.emailIsLdap': '该邮箱属于 LDAP 账号,请使用 LDAP 登录',
|
||
'site.auth.emailIsOauth': '该邮箱已关联其他 OAuth 账号,请使用原账号登录',
|
||
'site.auth.registrationDisabled': '系统未开放注册,无法创建新账号',
|
||
'site.auth.oauthAlreadyBound': '该第三方账号已被其他用户绑定',
|
||
'site.auth.alreadyBoundProvider': '你已绑定该 Provider',
|
||
'site.auth.lastOauthBinding': '解绑失败:至少需要保留一个 OAuth 绑定',
|
||
'site.auth.lastLoginMethod': '解绑失败:解绑后将无法登录',
|
||
'site.auth.ldapNoOauth': 'LDAP 用户不支持 OAuth 绑定',
|
||
'site.auth.failed': '认证失败,请重试',
|
||
'site.auth.bound': '已绑定 {provider}',
|
||
'site.auth.noToken': '未获取到访问令牌',
|
||
'site.auth.writing': '正在写入登录态...',
|
||
'site.auth.fetchingUser': '正在获取用户信息...',
|
||
'site.auth.success': '登录成功',
|
||
'site.privacy.title': '隐私政策',
|
||
'site.privacy.backHome': '返回首页',
|
||
'site.privacy.currentVersion': '当前版本:{version}',
|
||
'site.privacy.loading': '正在加载...',
|
||
'site.privacy.empty': '暂无隐私政策内容。',
|
||
'site.privacy.loadError': '隐私政策加载失败,请稍后重试。',
|
||
'guide.title': '教程文档',
|
||
'guide.nav.overview': '快速开始',
|
||
'guide.nav.overview.description': '部署后的配置指南',
|
||
'guide.nav.overview.production': '部署',
|
||
'guide.nav.overview.configSteps': '配置流程',
|
||
'guide.nav.overview.reverseProxy': '反向代理',
|
||
'guide.nav.overview.asyncTasks': '异步任务',
|
||
'guide.nav.overview.proxyConfig': '代理配置',
|
||
'guide.nav.architecture': '架构说明',
|
||
'guide.nav.architecture.description': '系统架构',
|
||
'guide.nav.concepts': '相关概念',
|
||
'guide.nav.concepts.description': '核心概念',
|
||
'guide.nav.concepts.createModel': '创建统一模型',
|
||
'guide.nav.concepts.addProvider': '添加提供商',
|
||
'guide.nav.concepts.addEndpoint': '添加端点',
|
||
'guide.nav.concepts.addKey': '添加密钥',
|
||
'guide.nav.concepts.modelPermission': '模型权限',
|
||
'guide.nav.concepts.linkModel': '关联模型',
|
||
'guide.nav.concepts.modelMapping': '模型映射',
|
||
'guide.nav.concepts.priorityManagement': '优先级管理',
|
||
'guide.nav.strategy': '关键策略',
|
||
'guide.nav.strategy.description': '关键策略',
|
||
'guide.nav.strategy.requestLogging': '请求体记录',
|
||
'guide.nav.strategy.scheduling': '调度模式',
|
||
'guide.nav.strategy.rateLimit': '访问限制',
|
||
'guide.nav.strategy.payloadCleanup': '请求体清理',
|
||
'guide.nav.strategy.cronTasks': '定时任务',
|
||
'guide.nav.advanced': '高级功能',
|
||
'guide.nav.advanced.description': '高级功能',
|
||
'guide.nav.advanced.formatConversion': '格式转换',
|
||
'guide.nav.advanced.streamPolicy': '流式/非流式',
|
||
'guide.nav.advanced.headerBodyEdit': '请求头/体编辑',
|
||
'guide.nav.advanced.regexMapping': '正则映射',
|
||
'guide.nav.advanced.balanceMonitor': '余额监控',
|
||
'guide.nav.advanced.configExport': '配置导入/出',
|
||
'guide.nav.advanced.lockKey': '锁定用户密钥',
|
||
'guide.nav.modules': '模块管理',
|
||
'guide.nav.modules.description': '模块管理',
|
||
'guide.nav.modules.managementTokens': '访问令牌',
|
||
'guide.nav.modules.emailConfig': '邮件配置',
|
||
'guide.nav.modules.oauthLogin': 'OAuth登录',
|
||
'guide.nav.modules.ldapAuth': 'LDAP认证',
|
||
'guide.nav.faq': '常见问题',
|
||
'guide.nav.faq.description': '常见问题',
|
||
'announcement.requiredTitle': '必读公告',
|
||
'announcement.requiredDescription': '请确认后继续使用',
|
||
'update.title.latest': '发现新版本',
|
||
'update.title.selected': '切换版本',
|
||
'update.title.selectedReadOnly': '版本详情',
|
||
'update.version.latest': '最新版本',
|
||
'update.version.target': '目标版本',
|
||
'update.version.tag': '版本标签',
|
||
'update.link.release': '查看发布',
|
||
'update.link.update': '查看更新',
|
||
'update.link.tag': '查看标签页',
|
||
'update.progress.downloadPackage': '正在下载更新包...',
|
||
'update.progress.downloadingLabel': '正在下载{label}',
|
||
'update.progress.downloadingPackage': '正在下载更新包',
|
||
'update.progress.downloadingChecksum': '正在下载校验文件',
|
||
'update.progress.verifying': '正在校验更新包',
|
||
'update.progress.extracting': '正在解压更新包',
|
||
'update.progress.prepared': '更新包已准备完成',
|
||
'update.progress.preparing': '正在准备更新',
|
||
'update.error.downloadFailed': '下载更新失败',
|
||
'update.error.downloadTimeout': '下载更新超时',
|
||
'update.error.restartFailed': '启动重启失败',
|
||
'update.error.updateFailed': '更新失败',
|
||
'update.error.rollbackFailed': '回滚失败',
|
||
'update.error.unsupported': '不支持在线更新',
|
||
'update.error.unsupportedTitle': '不支持在线更新',
|
||
'update.error.cannotUpdateOnline': '无法在线更新',
|
||
'update.error.notUpdatable': '当前版本暂不支持在线更新',
|
||
'update.error.sourceBuildUpdateHint': '当前为源码构建,请使用 git pull 后重新编译。',
|
||
'update.error.sourceBuildReleaseHint': '当前为源码构建,请手动切换到对应标签后重新编译。',
|
||
'update.error.manualHint': '当前部署策略不支持在线自更新,请手动下载 Release 或使用安装脚本更新。',
|
||
'update.error.alreadyCurrent': '当前已是这个版本',
|
||
'update.error.updateFailedWithReason': '更新失败: {reason}',
|
||
'update.success.prepared': '更新包已下载完成,请点击“立即重启”完成安装',
|
||
'update.success.restartStarted': '一键重启已启动',
|
||
'update.success.rollbackStarted': '回滚已启动',
|
||
'update.reconnect.waiting': '等待服务恢复...',
|
||
'update.reconnect.restarting': '服务正在重启...',
|
||
'update.reconnect.waitingWithSeconds': '等待服务恢复... ({seconds}s)',
|
||
'update.reconnect.restartingWithSeconds': '服务正在重启... ({seconds}s)',
|
||
'update.reconnect.rollback': '正在回滚到上一版本...',
|
||
'update.reconnect.ready': '服务已恢复,正在刷新...',
|
||
'update.reconnect.timeout': '等待超时,请手动刷新页面',
|
||
'nav.group.overview': '概览',
|
||
'nav.group.resources': '资源',
|
||
'nav.group.account': '账户',
|
||
'nav.group.management': '管理',
|
||
'nav.group.system': '系统',
|
||
'nav.collapseSidebar': '收起侧边栏',
|
||
'nav.expandSidebar': '展开侧边栏',
|
||
'nav.dashboard': '仪表盘',
|
||
'nav.healthMonitor': '健康监控',
|
||
'nav.modelCatalog': '模型目录',
|
||
'nav.apiKeys': 'API 密钥',
|
||
'nav.vscodex': 'Codex 远程控制',
|
||
'vscodex.title': 'Codex 远程控制',
|
||
'vscodex.devices.label': '控制设备',
|
||
'vscodex.devices.refresh': '刷新设备',
|
||
'vscodex.devices.loading': '正在加载设备...',
|
||
'vscodex.devices.loadFailed': '无法加载设备,请检查网络后重试。',
|
||
'vscodex.devices.emptyTitle': '尚未连接设备',
|
||
'vscodex.devices.emptyDescription': '安装 aether-vscodex 插件后,在 VS Code 命令面板运行“Codex Remote: Pair with Aether”连接此账户。',
|
||
'vscodex.devices.checkConnection': '检查连接',
|
||
'vscodex.devices.online': '在线',
|
||
'vscodex.devices.offline': '离线',
|
||
'vscodex.devices.connecting': '连接中',
|
||
'vscodex.devices.unknown': '状态未知',
|
||
'vscodex.devices.revoke': '撤销此设备',
|
||
'vscodex.devices.revokeConfirm': '撤销设备“{name}”后,它会立即断开,并且必须重新配对才能连接。确认撤销吗?',
|
||
'vscodex.devices.revokeFailed': '无法撤销设备,请稍后重试。',
|
||
'vscodex.pairing.create': '生成配对码',
|
||
'vscodex.pairing.creating': '正在生成...',
|
||
'vscodex.pairing.title': '连接本地插件',
|
||
'vscodex.pairing.description': '在 VS Code 命令面板运行“Codex Remote: Pair with Aether”,并输入下方的一次性配对码。配对完成后本页会自动连接。',
|
||
'vscodex.pairing.code': '一次性配对码',
|
||
'vscodex.pairing.copy': '复制配对码',
|
||
'vscodex.pairing.copied': '配对码已复制',
|
||
'vscodex.pairing.expires': '有效期至 {time}',
|
||
'vscodex.pairing.newCode': '生成新配对码',
|
||
'vscodex.pairing.failed': '无法生成配对码,请稍后重试。',
|
||
'vscodex.connection.loading': '正在加载控制台...',
|
||
'vscodex.connection.connecting': '正在建立安全连接...',
|
||
'vscodex.connection.ticketFailed': '安全连接凭证获取失败。',
|
||
'vscodex.connection.retry': '重试',
|
||
'vscodex.frame.title': 'Codex 远程控制台',
|
||
'nav.walletCenter': '钱包中心',
|
||
'nav.billingCenter': '套餐中心',
|
||
'nav.myReferral': '我的邀请',
|
||
'nav.usageStats': '使用统计',
|
||
'nav.operations': '运维总览',
|
||
'nav.userStats': '用户统计',
|
||
'nav.costAnalysis': '成本分析',
|
||
'nav.performanceAnalysis': '性能分析',
|
||
'nav.userManagement': '用户管理',
|
||
'nav.providers': '提供商',
|
||
'nav.modelManagement': '模型管理',
|
||
'models.externalCatalog.accessTitle': '外部模型目录代理节点',
|
||
'models.externalCatalog.proxyEnabled': '当前通过所选代理节点访问 models.dev',
|
||
'models.externalCatalog.direct': '未设置,直接访问 models.dev',
|
||
'models.externalCatalog.saved': '外部模型目录代理节点已保存',
|
||
'models.externalCatalog.saveFailed': '保存外部模型目录代理节点失败',
|
||
'models.externalCatalog.loadFailed': '加载外部模型目录代理节点失败',
|
||
'nav.routing': '调度策略',
|
||
'nav.pool': '号池管理',
|
||
'nav.standaloneKeys': '独立密钥',
|
||
'nav.walletManagement': '钱包管理',
|
||
'nav.billingManagement': '套餐管理',
|
||
'nav.asyncTasks': '异步任务',
|
||
'nav.usageRecords': '使用记录',
|
||
'nav.announcements': '公告管理',
|
||
'nav.cacheMonitoring': '缓存监控',
|
||
'nav.moduleManagement': '模块管理',
|
||
'nav.systemSettings': '系统设置',
|
||
'providers.modelMapping.scope.allRequests': '所有请求',
|
||
'providers.modelMapping.scope.sessionCompactionOnly': '仅会话压缩',
|
||
'providers.modelMapping.scope.customOperations': '仅匹配:{operations}',
|
||
'providers.modelMapping.scope.allRequestsDescription': '普通请求和会话压缩都可使用此映射。',
|
||
'providers.modelMapping.scope.allRequestsDefaultDescription': '所选端点的所有请求都可使用此映射。仅当适用端点已明确选择且全部为 OpenAI Responses 时,可限定为会话压缩。',
|
||
'providers.modelMapping.scope.sessionCompactionDescription': '仅匹配所选 OpenAI Responses 端点中的会话压缩请求。',
|
||
'providers.modelMapping.scope.customOperationsDescription': '只匹配请求操作:{operations}。',
|
||
'providers.modelMapping.scope.allEndpoints': '全部端点',
|
||
'providers.modelMapping.scope.endpointCount': '{count} 个端点',
|
||
'providers.modelMapping.scope.endpointHelp': '留空时不限制端点;选择后仅匹配指定端点。',
|
||
'providers.modelMapping.scope.matchHelp': '端点范围和请求范围必须同时匹配。',
|
||
'breadcrumb.personalSettings': '个人设置',
|
||
'breadcrumb.routingCreate': '新建调度策略',
|
||
'breadcrumb.routingConfig': '调度策略配置',
|
||
},
|
||
'en-US': {
|
||
'common.loading': 'Loading...',
|
||
'common.confirmRead': 'Confirm read',
|
||
'common.confirming': 'Confirming...',
|
||
'common.copy': 'Copy',
|
||
'common.copied': 'Copied',
|
||
'common.cancel': 'Cancel',
|
||
'common.githubRepository': 'GitHub repository',
|
||
'common.settings': 'Profile settings',
|
||
'common.logout': 'Log out',
|
||
'common.language': 'Language',
|
||
'common.chinese': 'Simplified Chinese',
|
||
'common.english': 'English',
|
||
'auth.expired': 'Authentication expired. Please sign in again.',
|
||
'auth.relogin': 'Sign in again',
|
||
'auth.role.admin': 'Admin',
|
||
'auth.role.auditAdmin': 'Audit admin',
|
||
'auth.role.user': 'User',
|
||
'auth.login.title': 'Sign in to {siteName}',
|
||
'auth.login.oauthWithProvider': 'Continue with {provider}',
|
||
'auth.login.oauthOptions': 'Sign in with',
|
||
'auth.login.accountPassword': 'Or use account password',
|
||
'auth.login.local': 'Local sign-in',
|
||
'auth.login.ldap': 'LDAP sign-in',
|
||
'auth.login.adminLocal': 'Admin local sign-in',
|
||
'auth.login.backToLdap': 'Back to LDAP sign-in',
|
||
'auth.login.usernameEmail': 'Username / email',
|
||
'auth.login.usernamePlaceholder': 'Username or email',
|
||
'auth.login.password': 'Password',
|
||
'auth.login.passwordPlaceholder': 'Enter password',
|
||
'auth.login.submit': 'Sign in',
|
||
'auth.login.submitting': 'Signing in...',
|
||
'auth.login.contactAdmin': 'Contact an administrator to open an account',
|
||
'auth.login.noAccount': 'No account yet?',
|
||
'auth.login.registerNow': 'Create account',
|
||
'auth.login.required': 'Enter email and password',
|
||
'auth.login.successRedirecting': 'Signed in. Redirecting...',
|
||
'auth.login.failed': 'Sign-in failed. Check your email and password.',
|
||
'auth.login.demoMode': 'Demo mode',
|
||
'auth.register.successLogin': 'Registration complete. Please sign in.',
|
||
'auth.register.title': 'Create account',
|
||
'auth.register.fillEmailInfo': 'Fill in your details to finish registration',
|
||
'auth.register.fillBasicInfo': 'Fill in your username and password to finish registration',
|
||
'auth.register.email': 'Email',
|
||
'auth.register.optional': '(optional)',
|
||
'auth.register.turnstile': 'Human verification',
|
||
'auth.register.verificationCode': 'Verification code',
|
||
'auth.register.username': 'Username',
|
||
'auth.register.usernamePlaceholder': 'Enter a username',
|
||
'auth.register.password': 'Password',
|
||
'auth.register.confirmPassword': 'Confirm password',
|
||
'auth.register.confirmPasswordPlaceholder': 'Enter the password again',
|
||
'auth.register.passwordMismatch': 'The two passwords do not match',
|
||
'auth.register.inviteCode': 'Invite code detected {code}',
|
||
'auth.register.privacyPrefix': 'I have read and agree to the',
|
||
'auth.register.openInNewWindow': 'Open in new window',
|
||
'auth.register.hasAccount': 'Already have an account?',
|
||
'auth.register.switchToLogin': 'Sign in',
|
||
'auth.register.submit': 'Create account',
|
||
'auth.register.acknowledge': 'Got it',
|
||
'auth.register.sendingCode': 'Sending...',
|
||
'auth.register.verified': 'Verified',
|
||
'auth.register.retryAfterSeconds': 'Retry in {seconds}s',
|
||
'auth.register.completeTurnstile': 'Please complete human verification first',
|
||
'auth.register.resendCode': 'Resend code',
|
||
'auth.register.sendCode': 'Send code',
|
||
'auth.register.usernameTooShort': 'Username must be at least 3 characters',
|
||
'auth.register.usernameTooLong': 'Username must be at most 30 characters',
|
||
'auth.register.usernameInvalid': 'Username can contain letters, numbers, underscore, hyphen, and dot',
|
||
'auth.register.emailRequired': 'Enter an email address',
|
||
'auth.register.emailInvalid': 'Enter a valid email address',
|
||
'auth.register.emailFormatError': 'Email format error',
|
||
'auth.register.codeSent': 'Check your email. The code is valid for {minutes} minutes.',
|
||
'auth.register.codeSentTitle': 'Code sent',
|
||
'auth.register.tryAgainLater': 'Please try again later',
|
||
'auth.register.sendFailed': 'Failed to send',
|
||
'auth.register.networkRetry': 'Network error. Please try again.',
|
||
'auth.register.verifying': 'Verifying...',
|
||
'auth.register.emailVerified': 'Email verified. Continue registration.',
|
||
'auth.register.verifySuccess': 'Verification successful',
|
||
'auth.register.codeInvalid': 'Invalid verification code',
|
||
'auth.register.verifyFailed': 'Verification failed',
|
||
'auth.register.codeRetry': 'Verification code is invalid. Please try again.',
|
||
'auth.register.passwordError': 'Password error',
|
||
'auth.register.completeEmailVerification': 'Please complete email verification first',
|
||
'auth.register.agreePrivacy': 'Please read and agree to the privacy policy first',
|
||
'auth.register.submitting': 'Creating account...',
|
||
'auth.register.successMessage': 'Welcome aboard. Please sign in to continue.',
|
||
'auth.register.successTitle': 'Registration complete',
|
||
'auth.register.submitRetry': 'Registration failed. Please try again.',
|
||
'auth.register.submitFailed': 'Registration failed',
|
||
'theme.system': 'Use system theme',
|
||
'theme.dark': 'Dark mode',
|
||
'theme.light': 'Light mode',
|
||
'demo.mode': 'Demo mode',
|
||
'platform.macLinux': 'Mac / Linux',
|
||
'platform.windows': 'Windows',
|
||
'platform.nodejs': 'Node.js',
|
||
'platform.mac': 'Mac',
|
||
'platform.terminal': 'Terminal',
|
||
'platform.powershell': 'PowerShell',
|
||
'platform.npm': 'npm',
|
||
'platform.homebrew': 'Homebrew',
|
||
'site.home.section.home': 'Home',
|
||
'site.home.section.claude': 'Claude',
|
||
'site.home.section.codex': 'OpenAI',
|
||
'site.home.section.gemini': 'Gemini',
|
||
'site.home.section.more': 'More',
|
||
'site.home.hero.titlePrefix': 'Welcome to',
|
||
'site.home.hero.subtitle': 'Unified AI developer tool gateway',
|
||
'site.home.hero.subtitleLine2': 'Bring Claude Code, Codex CLI, Gemini CLI, and more into one place',
|
||
'site.home.docLink': 'Docs',
|
||
'site.home.projectProgress': 'Project progress',
|
||
'site.home.featureProgress': 'Feature progress',
|
||
'site.home.featureProgressDesc': 'Core API gateway features are complete; more is on the way',
|
||
'site.home.startNow': 'Get started',
|
||
'site.home.login': 'Sign in',
|
||
'site.home.enterDashboard': 'Open dashboard',
|
||
'site.home.status.completed': 'Completed',
|
||
'site.home.status.inProgress': 'In progress',
|
||
'site.home.feature.cards.multi': 'Claude / OpenAI / Gemini',
|
||
'site.home.feature.cards.multiDesc': 'Standard APIs for the three major AI coding assistants are fully integrated',
|
||
'site.home.feature.cards.format': 'Format conversion',
|
||
'site.home.feature.cards.formatDesc': 'Toggle API format conversion and customize request headers',
|
||
'site.home.feature.cards.collaboration': 'Collaboration',
|
||
'site.home.feature.cards.collaborationDesc': 'Remote dev, Skill sharing, Playground, and more are coming soon',
|
||
'site.home.cli.claudeDescription': 'Claude Code gives you the raw power of Claude directly in your terminal. Search millions of lines of code instantly. Turn hours-long workflows into a single command. Your tool. Your flow. Your codebase, evolving at the speed of thought.',
|
||
'site.home.cli.claudeTitle': 'Claude Code',
|
||
'site.home.cli.codexDescription': 'Codex CLI is a coding assistant that runs locally in your terminal and can read, modify, and execute code in user-specified directories.',
|
||
'site.home.cli.codexTitle': 'Codex CLI',
|
||
'site.home.cli.geminiDescription': 'Gemini CLI is an open-source AI agent that brings Gemini directly into your terminal. It offers lightweight access to Gemini and gives you the most direct path from prompt to model.',
|
||
'site.home.cli.geminiTitle': 'Gemini CLI',
|
||
'site.home.cli.terminal': 'Terminal',
|
||
'site.home.cli.powershell': 'PowerShell',
|
||
'site.home.cli.npm': 'npm',
|
||
'site.home.cli.homebrew': 'Homebrew',
|
||
'site.home.cli.ideIntegration': 'IDE integration',
|
||
'site.home.cli.commandLine': 'Command-line tool',
|
||
'site.home.cli.multimodalAi': 'Multimodal AI',
|
||
'site.home.copyConfig': 'Copy config',
|
||
'site.home.backHome': 'Back home',
|
||
'site.home.applyScheme': 'Apply this scheme',
|
||
'site.home.logoCompareTitle': 'Logo color schemes',
|
||
'site.home.logoCompareDesc': 'Click any scheme to preview it larger',
|
||
'site.home.preview': 'Preview',
|
||
'site.home.previewHelp': 'Update the following color values in code',
|
||
'site.home.previewFile1': 'AetherLineByLineLogo.vue - gradient colors',
|
||
'site.home.previewFile2': 'Home.vue - outlineColor prop',
|
||
'site.auth.processing': 'Processing authentication...',
|
||
'site.auth.waiting': 'Please wait...',
|
||
'site.auth.cancelled': 'Authorization was cancelled',
|
||
'site.auth.providerDisabled': 'This OAuth provider is disabled',
|
||
'site.auth.providerUnavailable': 'OAuth provider is unavailable',
|
||
'site.auth.invalidCallback': 'Invalid callback parameters',
|
||
'site.auth.invalidState': 'Sign-in state expired. Please try again.',
|
||
'site.auth.tokenExchangeFailed': 'Token exchange failed',
|
||
'site.auth.userinfoFetchFailed': 'Failed to fetch user information',
|
||
'site.auth.emailExistsLocal': 'This email already exists. Sign in first, then bind OAuth.',
|
||
'site.auth.emailIsLdap': 'This email belongs to an LDAP account. Use LDAP sign-in.',
|
||
'site.auth.emailIsOauth': 'This email is linked to another OAuth account. Use the original account.',
|
||
'site.auth.registrationDisabled': 'Registration is disabled. A new account cannot be created.',
|
||
'site.auth.oauthAlreadyBound': 'This third-party account is already bound to another user',
|
||
'site.auth.alreadyBoundProvider': 'You have already bound this provider',
|
||
'site.auth.lastOauthBinding': 'Unbind failed: keep at least one OAuth binding',
|
||
'site.auth.lastLoginMethod': 'Unbind failed: you would not be able to sign in afterward',
|
||
'site.auth.ldapNoOauth': 'LDAP users cannot bind OAuth accounts',
|
||
'site.auth.failed': 'Authentication failed. Please try again.',
|
||
'site.auth.bound': 'Bound {provider}',
|
||
'site.auth.noToken': 'No access token was received',
|
||
'site.auth.writing': 'Saving sign-in state...',
|
||
'site.auth.fetchingUser': 'Fetching user information...',
|
||
'site.auth.success': 'Signed in',
|
||
'site.privacy.title': 'Privacy policy',
|
||
'site.privacy.backHome': 'Back home',
|
||
'site.privacy.currentVersion': 'Current version: {version}',
|
||
'site.privacy.loading': 'Loading...',
|
||
'site.privacy.empty': 'No privacy policy content yet.',
|
||
'site.privacy.loadError': 'Failed to load the privacy policy. Please try again later.',
|
||
'guide.title': 'Guide',
|
||
'guide.nav.overview': 'Quick start',
|
||
'guide.nav.overview.description': 'Post-deployment configuration guide',
|
||
'guide.nav.overview.production': 'Deployment',
|
||
'guide.nav.overview.configSteps': 'Configuration flow',
|
||
'guide.nav.overview.reverseProxy': 'Reverse proxy',
|
||
'guide.nav.overview.asyncTasks': 'Async tasks',
|
||
'guide.nav.overview.proxyConfig': 'Proxy config',
|
||
'guide.nav.architecture': 'Architecture',
|
||
'guide.nav.architecture.description': 'System architecture',
|
||
'guide.nav.concepts': 'Concepts',
|
||
'guide.nav.concepts.description': 'Core concepts',
|
||
'guide.nav.concepts.createModel': 'Create unified model',
|
||
'guide.nav.concepts.addProvider': 'Add provider',
|
||
'guide.nav.concepts.addEndpoint': 'Add endpoint',
|
||
'guide.nav.concepts.addKey': 'Add key',
|
||
'guide.nav.concepts.modelPermission': 'Model permissions',
|
||
'guide.nav.concepts.linkModel': 'Link models',
|
||
'guide.nav.concepts.modelMapping': 'Model mapping',
|
||
'guide.nav.concepts.priorityManagement': 'Priority management',
|
||
'guide.nav.strategy': 'Key strategies',
|
||
'guide.nav.strategy.description': 'Key strategies',
|
||
'guide.nav.strategy.requestLogging': 'Request body logging',
|
||
'guide.nav.strategy.scheduling': 'Scheduling',
|
||
'guide.nav.strategy.rateLimit': 'Access limits',
|
||
'guide.nav.strategy.payloadCleanup': 'Payload cleanup',
|
||
'guide.nav.strategy.cronTasks': 'Cron tasks',
|
||
'guide.nav.advanced': 'Advanced',
|
||
'guide.nav.advanced.description': 'Advanced features',
|
||
'guide.nav.advanced.formatConversion': 'Format conversion',
|
||
'guide.nav.advanced.streamPolicy': 'Streaming policy',
|
||
'guide.nav.advanced.headerBodyEdit': 'Header/body editing',
|
||
'guide.nav.advanced.regexMapping': 'Regex mapping',
|
||
'guide.nav.advanced.balanceMonitor': 'Balance monitor',
|
||
'guide.nav.advanced.configExport': 'Config import/export',
|
||
'guide.nav.advanced.lockKey': 'Lock user key',
|
||
'guide.nav.modules': 'Modules',
|
||
'guide.nav.modules.description': 'Module management',
|
||
'guide.nav.modules.managementTokens': 'Access tokens',
|
||
'guide.nav.modules.emailConfig': 'Email config',
|
||
'guide.nav.modules.oauthLogin': 'OAuth sign-in',
|
||
'guide.nav.modules.ldapAuth': 'LDAP auth',
|
||
'guide.nav.faq': 'FAQ',
|
||
'guide.nav.faq.description': 'Frequently asked questions',
|
||
'announcement.requiredTitle': 'Required announcement',
|
||
'announcement.requiredDescription': 'Confirm before continuing',
|
||
'update.title.latest': 'New version available',
|
||
'update.title.selected': 'Switch version',
|
||
'update.title.selectedReadOnly': 'Version details',
|
||
'update.version.latest': 'Latest version',
|
||
'update.version.target': 'Target version',
|
||
'update.version.tag': 'Version tag',
|
||
'update.link.release': 'View release',
|
||
'update.link.update': 'View update',
|
||
'update.link.tag': 'View tag',
|
||
'update.progress.downloadPackage': 'Downloading update package...',
|
||
'update.progress.downloadingLabel': 'Downloading {label}',
|
||
'update.progress.downloadingPackage': 'Downloading update package',
|
||
'update.progress.downloadingChecksum': 'Downloading checksum file',
|
||
'update.progress.verifying': 'Verifying update package',
|
||
'update.progress.extracting': 'Extracting update package',
|
||
'update.progress.prepared': 'Update package is ready',
|
||
'update.progress.preparing': 'Preparing update',
|
||
'update.error.downloadFailed': 'Failed to download update',
|
||
'update.error.downloadTimeout': 'Update download timed out',
|
||
'update.error.restartFailed': 'Failed to start restart',
|
||
'update.error.updateFailed': 'Update failed',
|
||
'update.error.rollbackFailed': 'Rollback failed',
|
||
'update.error.unsupported': 'Online updates are not supported',
|
||
'update.error.unsupportedTitle': 'Online update unavailable',
|
||
'update.error.cannotUpdateOnline': 'Cannot update online',
|
||
'update.error.notUpdatable': 'This version cannot be updated online',
|
||
'update.error.sourceBuildUpdateHint': 'This is a source build. Run git pull and rebuild.',
|
||
'update.error.sourceBuildReleaseHint': 'This is a source build. Check out the tag and rebuild manually.',
|
||
'update.error.manualHint': 'This deployment strategy does not support online self-updates. Download a release or use the install script.',
|
||
'update.error.alreadyCurrent': 'This is already the current version',
|
||
'update.error.updateFailedWithReason': 'Update failed: {reason}',
|
||
'update.success.prepared': 'Update package downloaded. Restart to finish installation.',
|
||
'update.success.restartStarted': 'Restart started',
|
||
'update.success.rollbackStarted': 'Rollback started',
|
||
'update.reconnect.waiting': 'Waiting for service recovery...',
|
||
'update.reconnect.restarting': 'Service is restarting...',
|
||
'update.reconnect.waitingWithSeconds': 'Waiting for service recovery... ({seconds}s)',
|
||
'update.reconnect.restartingWithSeconds': 'Service is restarting... ({seconds}s)',
|
||
'update.reconnect.rollback': 'Rolling back to the previous version...',
|
||
'update.reconnect.ready': 'Service recovered. Refreshing...',
|
||
'update.reconnect.timeout': 'Timed out. Please refresh the page manually.',
|
||
'nav.group.overview': 'Overview',
|
||
'nav.group.resources': 'Resources',
|
||
'nav.group.account': 'Account',
|
||
'nav.group.management': 'Management',
|
||
'nav.group.system': 'System',
|
||
'nav.collapseSidebar': 'Collapse sidebar',
|
||
'nav.expandSidebar': 'Expand sidebar',
|
||
'nav.dashboard': 'Dashboard',
|
||
'nav.healthMonitor': 'Health monitor',
|
||
'nav.modelCatalog': 'Model catalog',
|
||
'nav.apiKeys': 'API keys',
|
||
'nav.vscodex': 'Codex remote control',
|
||
'vscodex.title': 'Codex remote control',
|
||
'vscodex.devices.label': 'Control device',
|
||
'vscodex.devices.refresh': 'Refresh devices',
|
||
'vscodex.devices.loading': 'Loading devices...',
|
||
'vscodex.devices.loadFailed': 'Devices could not be loaded. Check your connection and retry.',
|
||
'vscodex.devices.emptyTitle': 'No connected devices',
|
||
'vscodex.devices.emptyDescription': 'After installing aether-vscodex, run “Codex Remote: Pair with Aether” from the VS Code Command Palette to connect this account.',
|
||
'vscodex.devices.checkConnection': 'Check connection',
|
||
'vscodex.devices.online': 'Online',
|
||
'vscodex.devices.offline': 'Offline',
|
||
'vscodex.devices.connecting': 'Connecting',
|
||
'vscodex.devices.unknown': 'Status unknown',
|
||
'vscodex.devices.revoke': 'Revoke this device',
|
||
'vscodex.devices.revokeConfirm': 'Revoking “{name}” disconnects it immediately. It must be paired again before reconnecting. Revoke it?',
|
||
'vscodex.devices.revokeFailed': 'The device could not be revoked. Try again later.',
|
||
'vscodex.pairing.create': 'Generate pairing code',
|
||
'vscodex.pairing.creating': 'Generating...',
|
||
'vscodex.pairing.title': 'Connect the local plugin',
|
||
'vscodex.pairing.description': 'Run “Codex Remote: Pair with Aether” from the VS Code Command Palette and enter this one-time code. This page connects automatically after pairing.',
|
||
'vscodex.pairing.code': 'One-time pairing code',
|
||
'vscodex.pairing.copy': 'Copy pairing code',
|
||
'vscodex.pairing.copied': 'Pairing code copied',
|
||
'vscodex.pairing.expires': 'Valid until {time}',
|
||
'vscodex.pairing.newCode': 'Generate a new code',
|
||
'vscodex.pairing.failed': 'A pairing code could not be generated. Try again later.',
|
||
'vscodex.connection.loading': 'Loading control surface...',
|
||
'vscodex.connection.connecting': 'Establishing a secure connection...',
|
||
'vscodex.connection.ticketFailed': 'A secure connection ticket could not be issued.',
|
||
'vscodex.connection.retry': 'Retry',
|
||
'vscodex.frame.title': 'Codex remote control surface',
|
||
'nav.walletCenter': 'Wallet',
|
||
'nav.billingCenter': 'Plans',
|
||
'nav.myReferral': 'Referrals',
|
||
'nav.usageStats': 'Usage stats',
|
||
'nav.operations': 'Operations',
|
||
'nav.userStats': 'User stats',
|
||
'nav.costAnalysis': 'Cost analysis',
|
||
'nav.performanceAnalysis': 'Performance analysis',
|
||
'nav.userManagement': 'Users',
|
||
'nav.providers': 'Providers',
|
||
'nav.modelManagement': 'Models',
|
||
'models.externalCatalog.accessTitle': 'External model catalog proxy',
|
||
'models.externalCatalog.proxyEnabled': 'Accessing models.dev through the selected proxy node',
|
||
'models.externalCatalog.direct': 'No proxy configured; accessing models.dev directly',
|
||
'models.externalCatalog.saved': 'External model catalog proxy saved',
|
||
'models.externalCatalog.saveFailed': 'Failed to save external model catalog proxy',
|
||
'models.externalCatalog.loadFailed': 'Failed to load external model catalog proxy',
|
||
'nav.routing': 'Routing',
|
||
'nav.pool': 'Pool',
|
||
'nav.standaloneKeys': 'Standalone keys',
|
||
'nav.walletManagement': 'Wallets',
|
||
'nav.billingManagement': 'Plans',
|
||
'nav.asyncTasks': 'Async tasks',
|
||
'nav.usageRecords': 'Usage records',
|
||
'nav.announcements': 'Announcements',
|
||
'nav.cacheMonitoring': 'Cache monitoring',
|
||
'nav.moduleManagement': 'Modules',
|
||
'nav.systemSettings': 'System settings',
|
||
'providers.modelMapping.scope.allRequests': 'All requests',
|
||
'providers.modelMapping.scope.sessionCompactionOnly': 'Session compaction only',
|
||
'providers.modelMapping.scope.customOperations': 'Match only: {operations}',
|
||
'providers.modelMapping.scope.allRequestsDescription': 'Regular requests and session compaction can both use this mapping.',
|
||
'providers.modelMapping.scope.allRequestsDefaultDescription': 'This mapping applies to all requests on the selected endpoints. Session compaction can be selected only when every explicitly selected endpoint uses OpenAI Responses.',
|
||
'providers.modelMapping.scope.sessionCompactionDescription': 'Match only session compaction requests on the selected OpenAI Responses endpoints.',
|
||
'providers.modelMapping.scope.customOperationsDescription': 'Match only these request operations: {operations}.',
|
||
'providers.modelMapping.scope.allEndpoints': 'All endpoints',
|
||
'providers.modelMapping.scope.endpointCount': '{count} endpoints',
|
||
'providers.modelMapping.scope.endpointHelp': 'Leave empty for no endpoint restriction. Selections match only those endpoints.',
|
||
'providers.modelMapping.scope.matchHelp': 'Both the endpoint scope and request scope must match.',
|
||
'breadcrumb.personalSettings': 'Profile settings',
|
||
'breadcrumb.routingCreate': 'Create routing profile',
|
||
'breadcrumb.routingConfig': 'Routing profile',
|
||
},
|
||
} as const
|
||
|
||
const legacyExactEnglishMessages: Record<string, string> = {
|
||
'关闭': 'Close',
|
||
'取消': 'Cancel',
|
||
'确定': 'Confirm',
|
||
'确认操作': 'Confirm action',
|
||
'危险操作': 'Dangerous action',
|
||
'警告': 'Warning',
|
||
'保存': 'Save',
|
||
'保存中...': 'Saving...',
|
||
'复制': 'Copy',
|
||
'已复制': 'Copied',
|
||
'刷新': 'Refresh',
|
||
'删除': 'Delete',
|
||
'编辑': 'Edit',
|
||
'新建': 'New',
|
||
'创建': 'Create',
|
||
'添加': 'Add',
|
||
'更新': 'Update',
|
||
'添加失败': 'Failed to add',
|
||
'更新失败': 'Failed to update',
|
||
'保存失败': 'Failed to save',
|
||
'导入': 'Import',
|
||
'导出': 'Export',
|
||
'搜索': 'Search',
|
||
'重置': 'Reset',
|
||
'清除成功': 'Cleared successfully',
|
||
'确认人工充值': 'Confirm manual top-up',
|
||
'确认充值': 'Confirm top-up',
|
||
'确认调账': 'Confirm adjustment',
|
||
'启用': 'Enable',
|
||
'禁用': 'Disable',
|
||
'停用': 'Disable',
|
||
'激活': 'Activate',
|
||
'暂停': 'Pause',
|
||
'继续': 'Continue',
|
||
'重试': 'Retry',
|
||
'查看': 'View',
|
||
'详情': 'Details',
|
||
'查看详情': 'View details',
|
||
'错误': 'Error',
|
||
'搜索...': 'Search...',
|
||
'搜索提供商...': 'Search providers...',
|
||
'搜索用户名或邮箱...': 'Search username or email...',
|
||
'输入关键词搜索...': 'Enter keywords to search...',
|
||
'暂无数据': 'No data',
|
||
'当前没有可显示的内容': 'There is nothing to display right now',
|
||
'暂无活跃数据': 'No activity data',
|
||
'暂无端点': 'No endpoints',
|
||
'暂无用户': 'No users',
|
||
'未找到结果': 'No results found',
|
||
'尝试使用不同的关键词搜索': 'Try a different keyword',
|
||
'无匹配结果': 'No matching results',
|
||
'没有符合当前筛选条件的数据': 'No data matches the current filters',
|
||
'加载失败': 'Failed to load',
|
||
'数据加载过程中出现错误': 'An error occurred while loading data',
|
||
'这里空空如也': 'Nothing here yet',
|
||
'还没有任何内容': 'There is no content yet',
|
||
'未找到': 'Not found',
|
||
'请求的资源不存在': 'The requested resource does not exist',
|
||
'未找到匹配的用户': 'No matching users found',
|
||
'未找到匹配项': 'No matches found',
|
||
'尝试调整筛选条件': 'Try adjusting filters',
|
||
'暂无提供商,点击右上角添加': 'No providers yet. Add one from the top right.',
|
||
'未找到匹配当前筛选条件的提供商': 'No providers match the current filters',
|
||
'全部': 'All',
|
||
'全部状态': 'All statuses',
|
||
'全部类型': 'All types',
|
||
'全部格式': 'All formats',
|
||
'全部模型': 'All models',
|
||
'全部角色': 'All roles',
|
||
'全部分组': 'All groups',
|
||
'全部归属': 'All ownership',
|
||
'全部方式': 'All methods',
|
||
'适用范围': 'Applies to',
|
||
'适用端点': 'Applicable endpoints',
|
||
'适用请求': 'Applicable requests',
|
||
'全部端点': 'All endpoints',
|
||
'所有请求': 'All requests',
|
||
'仅会话压缩': 'Session compaction only',
|
||
'会话压缩': 'Session compaction',
|
||
'保存映射': 'Save mapping',
|
||
'添加映射': 'Add mapping',
|
||
'未设置': 'Not set',
|
||
'已设置': 'Configured',
|
||
'默认': 'Default',
|
||
'系统默认': 'System default',
|
||
'自定义': 'Custom',
|
||
'可选': 'Optional',
|
||
'必填': 'Required',
|
||
'选择时间段': 'Select time range',
|
||
'至': 'to',
|
||
'粒度': 'Granularity',
|
||
'今天': 'Today',
|
||
'昨天': 'Yesterday',
|
||
'最近7天': 'Last 7 days',
|
||
'最近30天': 'Last 30 days',
|
||
'最近90天': 'Last 90 days',
|
||
'月': 'Month',
|
||
'全选': 'Select all',
|
||
'(已失效)': '(invalid)',
|
||
'状态': 'Status',
|
||
'操作': 'Actions',
|
||
'名称': 'Name',
|
||
'类型': 'Type',
|
||
'时间': 'Time',
|
||
'结果': 'Result',
|
||
'原因': 'Reason',
|
||
'说明': 'Description',
|
||
'备注': 'Notes',
|
||
'用户': 'User',
|
||
'普通用户': 'User',
|
||
'管理员': 'Admin',
|
||
'审计管理员': 'Audit admin',
|
||
'提供商': 'Provider',
|
||
'模型': 'Model',
|
||
'模型:': 'Models:',
|
||
'密钥': 'Key',
|
||
'端点': 'Endpoint',
|
||
'端点:': 'Endpoints:',
|
||
'号池': 'Pool',
|
||
'代理节点': 'Proxy nodes',
|
||
'暂无代理节点': 'No proxy nodes',
|
||
'代理节点已添加': 'Proxy node added',
|
||
'代理节点已更新': 'Proxy node updated',
|
||
'代理节点已删除': 'Proxy node deleted',
|
||
'代理节点已删除,系统默认代理已自动清除': 'Proxy node deleted. The system default proxy was cleared automatically.',
|
||
'代理节点已删除,外部模型目录代理已自动清除': 'Proxy node deleted. The external model catalog proxy was cleared automatically.',
|
||
'代理节点已删除,系统默认代理和外部模型目录代理已自动清除': 'Proxy node deleted. The system default proxy and external model catalog proxy were cleared automatically.',
|
||
'代理节点安装命令已生成': 'Proxy node install command generated',
|
||
'安装命令已复制到剪贴板': 'Install command copied to clipboard',
|
||
'生成代理节点安装命令失败': 'Failed to generate proxy node install command',
|
||
'读取代理节点详情失败': 'Failed to read proxy node details',
|
||
'批量添加失败': 'Batch add failed',
|
||
'批量升级下发失败': 'Failed to dispatch batch upgrade',
|
||
'删除节点': 'Delete node',
|
||
'脚本自动添加': 'Add with script',
|
||
'手动添加': 'Add manually',
|
||
'批量添加': 'Batch add',
|
||
'编辑代理节点': 'Edit proxy node',
|
||
'添加代理节点': 'Add proxy node',
|
||
'修改手动代理节点的配置': 'Modify the manual proxy node configuration',
|
||
'推荐使用一键脚本部署 aether-tunnel,也可手动或批量添加已有 HTTP/SOCKS 代理': 'Use the one-click script to deploy aether-tunnel, or add existing HTTP/SOCKS proxies manually or in batch.',
|
||
'输入节点名称后生成一次性安装命令,有效期 15 分钟。复制的命令不含敏感授权信息,只能在目标机器使用一次,避免 Token 暴露在页面或聊天记录中。': 'Enter a node name to generate a one-time install command valid for 15 minutes. The copied command does not contain sensitive authorization data and can only be used once on the target machine, avoiding token exposure in pages or chats.',
|
||
'节点名称 *': 'Node name *',
|
||
'例如: jp-proxy-01': 'Example: jp-proxy-01',
|
||
'目标系统': 'Target system',
|
||
'复制到代理节点机器执行': 'Copy and run on the proxy node machine',
|
||
'一键复制': 'Copy command',
|
||
'生成中...': 'Generating...',
|
||
'重新生成': 'Regenerate',
|
||
'生成命令': 'Generate command',
|
||
'复制命令': 'Copy command',
|
||
'输入节点名称后点击“生成命令”': 'Enter a node name and click "Generate command"',
|
||
'脚本会自动安装或更新代理程序,并保留已有配置。': 'The script installs or updates the proxy program and preserves existing configuration.',
|
||
'支持一行一个,或使用英文逗号分隔。URL 中的用户名和密码会自动拆分到手动添加接口,节点名称自动使用主机和端口。': 'Supports one entry per line or comma-separated entries. Usernames and passwords in URLs are split into the manual add API automatically, and node names use host and port.',
|
||
'代理地址 *': 'Proxy address *',
|
||
'名称 *': 'Name *',
|
||
'例如: 美西 VPN 代理': 'Example: US West VPN proxy',
|
||
'http://proxy:port 或 socks5://proxy:port': 'http://proxy:port or socks5://proxy:port',
|
||
'可选,例如: US-West': 'Optional, e.g. US-West',
|
||
'等待输入代理地址': 'Waiting for proxy addresses',
|
||
'请先输入至少一条代理地址': 'Enter at least one proxy address first',
|
||
'均分': 'Distribute',
|
||
'升级': 'Upgrade',
|
||
'地址': 'Address',
|
||
'区域': 'Region',
|
||
'总请求': 'Total requests',
|
||
'收起数据': 'Collapse data',
|
||
'展开数据': 'Expand data',
|
||
'测试': 'Test',
|
||
'测试中': 'Testing',
|
||
'测试中...': 'Testing...',
|
||
'测试连通性': 'Test connectivity',
|
||
'连通性测试通过': 'Connectivity test passed',
|
||
'测试请求失败': 'Test request failed',
|
||
'暂无样本': 'No sample',
|
||
'探测': 'Probe',
|
||
'超时': 'Timeout',
|
||
'出口 IP': 'Exit IP',
|
||
'隧道在线': 'Tunnel online',
|
||
'隧道离线': 'Tunnel offline',
|
||
'表示 gateway 仍能看到 tunnel/heartbeat,不代表默认探测站点一定可达': 'The gateway can still see the tunnel/heartbeat. This does not guarantee the default probe site is reachable.',
|
||
'gateway 当前未检测到可用 tunnel 连接': 'The gateway currently does not detect an available tunnel connection.',
|
||
'节点当前被标记为在线': 'The node is currently marked online',
|
||
'节点当前被标记为离线': 'The node is currently marked offline',
|
||
'排空中': 'Draining',
|
||
'已封锁': 'Cordoned',
|
||
'连接': 'Connected',
|
||
'断开': 'Disconnected',
|
||
'远程配置': 'Remote config',
|
||
'修改后将在下次心跳时自动下发到 aether-tunnel 节点': 'Changes are sent to the aether-tunnel node on its next heartbeat.',
|
||
'允许的端口': 'Allowed ports',
|
||
'逗号分隔的目标端口白名单': 'Comma-separated target port allowlist',
|
||
'日志级别': 'Log level',
|
||
'心跳间隔 (秒)': 'Heartbeat interval (seconds)',
|
||
'接单状态': 'Scheduling state',
|
||
'draining/cordoned 都会停止新隧道请求;draining 用于排空,cordoned 用于人工隔离。': 'draining and cordoned both stop new tunnel requests; draining is for graceful emptying, cordoned is for manual isolation.',
|
||
'升级到版本': 'Upgrade to version',
|
||
'例如 0.2.3': 'Example: 0.2.3',
|
||
'留空可清除已有升级指令': 'Leave empty to clear an existing upgrade command',
|
||
'配置版本:': 'Config version:',
|
||
'批量升级': 'Batch upgrade',
|
||
'给所有 tunnel 节点写入升级目标,节点会在下次心跳自动领取': 'Write an upgrade target to all tunnel nodes; nodes pick it up on their next heartbeat.',
|
||
'目标版本': 'Target version',
|
||
'gateway 只会写入 `upgrade_to` 目标版本,不再维护分波 rollout 或确认状态。': 'The gateway only writes the `upgrade_to` target version and no longer manages rollout waves or acknowledgement state.',
|
||
'下发中...': 'Dispatching...',
|
||
'确认下发': 'Confirm dispatch',
|
||
'连接事件': 'Connection events',
|
||
'失败请求': 'Failed requests',
|
||
'DNS 失败': 'DNS failures',
|
||
'流错误': 'Stream errors',
|
||
'暂无连接事件记录': 'No connection events',
|
||
'节点数据': 'Node data',
|
||
'最近 24 小时': 'Last 24 hours',
|
||
'加载节点数据...': 'Loading node data...',
|
||
'加载节点数据失败': 'Failed to load node data',
|
||
'加载事件失败': 'Failed to load events',
|
||
'远程配置已保存,将在下次心跳时生效': 'Remote config saved. It will take effect on the next heartbeat.',
|
||
'正在刷新采样数据': 'Refreshing sample data',
|
||
'展开后自动读取 24 小时指标和最近关键事件': 'Expanding loads 24-hour metrics and recent key events automatically.',
|
||
'在线率采样': 'Uptime samples',
|
||
'1h 桶,颜色随在线率和错误数变化': '1h buckets; color changes with uptime and error count',
|
||
'暂无采样数据': 'No sample data',
|
||
'最近事件': 'Recent events',
|
||
'暂无关键事件': 'No key events',
|
||
'硬件与资源': 'Hardware and resources',
|
||
'实时快照': 'Realtime snapshot',
|
||
'隧道计数器': 'Tunnel counters',
|
||
'暂无隧道计数器': 'No tunnel counters',
|
||
'在线率': 'Uptime',
|
||
'心跳 RTT': 'Heartbeat RTT',
|
||
'并发峰值': 'Peak concurrency',
|
||
'连接错误': 'Connection errors',
|
||
'WS 流量': 'WS traffic',
|
||
'当前并发': 'Current concurrency',
|
||
'心跳间隔': 'Heartbeat interval',
|
||
'隧道连接': 'Tunnel connection',
|
||
'已连接': 'Connected',
|
||
'未连接': 'Not connected',
|
||
'连接时间': 'Connected at',
|
||
'容量估算': 'Capacity estimate',
|
||
'配置版本': 'Config version',
|
||
'注册来源': 'Registered by',
|
||
'代理版本': 'Proxy version',
|
||
'系统 CPU': 'System CPU',
|
||
'系统内存': 'System memory',
|
||
'主机整体': 'Host overall',
|
||
'当前进程': 'Current process',
|
||
'Proxy 内存': 'Proxy memory',
|
||
'负载': 'Load',
|
||
'运行时间': 'Uptime',
|
||
'proxy 进程': 'proxy process',
|
||
'CPU 核心': 'CPU cores',
|
||
'物理内存': 'Physical memory',
|
||
'启动采集': 'Collected at startup',
|
||
'FD 限制': 'FD limit',
|
||
'建连尝试': 'Connect attempts',
|
||
'建连成功': 'Connect successes',
|
||
'建连错误': 'Connect errors',
|
||
'断开次数': 'Disconnects',
|
||
'最近连上': 'Last connected',
|
||
'最近断开': 'Last disconnected',
|
||
'最近在线': 'Last online duration',
|
||
'累计在线': 'Total online duration',
|
||
'心跳发送': 'Heartbeat sent',
|
||
'心跳确认': 'Heartbeat ack',
|
||
'最近 RTT': 'Latest RTT',
|
||
'平均 RTT': 'Average RTT',
|
||
'WS 入站': 'WS inbound',
|
||
'WS 出站': 'WS outbound',
|
||
'入站帧': 'Inbound frames',
|
||
'出站帧': 'Outbound frames',
|
||
'隧道错误': 'Tunnel error',
|
||
'建议:': 'Suggested action: ',
|
||
'超时未收到隧道入站帧': 'Timed out waiting for inbound tunnel frames',
|
||
'WebSocket 写入失败,对端重置或关闭': 'WebSocket write failed; peer reset or closed the connection',
|
||
'WebSocket 保活 Ping 发送失败': 'WebSocket keepalive ping failed',
|
||
'WebSocket 读取失败': 'WebSocket read failed',
|
||
'隧道建连失败': 'Tunnel connection failed',
|
||
'隧道帧解析失败': 'Tunnel frame decoding failed',
|
||
'请求流分发超时': 'Request stream dispatch timed out',
|
||
'心跳确认为空': 'Heartbeat acknowledgement was empty',
|
||
'心跳确认解析失败': 'Failed to parse heartbeat acknowledgement',
|
||
'隧道写任务异常退出': 'Tunnel writer task exited unexpectedly',
|
||
'隧道写任务被取消': 'Tunnel writer task was cancelled',
|
||
'隧道分发器错误': 'Tunnel dispatcher error',
|
||
'检查 gateway/反向代理 idle timeout、跨境链路抖动和 ping/pong 是否可达;网络抖动大时可调高 stale timeout。': 'Check gateway/reverse-proxy idle timeout, cross-region network jitter, and ping/pong reachability. Increase stale timeout if network jitter is high.',
|
||
'检查 gateway 是否重启、负载均衡/NAT/防火墙是否重置长连接,并确认 proxy 是否已自动重连。': 'Check whether the gateway restarted, load balancer/NAT/firewall reset long-lived connections, and confirm the proxy reconnected automatically.',
|
||
'检查中间代理是否清理空闲 WebSocket,或对端是否提前关闭连接。': 'Check whether an intermediate proxy clears idle WebSockets or the peer closes connections early.',
|
||
'对照同一时间的 gateway 日志和网络监控,确认是否存在链路中断。': 'Compare gateway logs and network monitoring at the same time to confirm whether the link was interrupted.',
|
||
'检查 Aether 地址、DNS、TLS、管理 token,以及 AETHER_TUNNEL_AETHER_OUTBOUND_PROXY_URL 配置。': 'Check the Aether URL, DNS, TLS, management token, and AETHER_TUNNEL_AETHER_OUTBOUND_PROXY_URL configuration.',
|
||
'检查 proxy/gateway 版本兼容性,确认中间层没有改写 WebSocket 二进制帧。': 'Check proxy/gateway version compatibility and confirm no intermediate layer rewrites WebSocket binary frames.',
|
||
'检查 proxy CPU/内存、并发上限和上游 provider 慢请求。': 'Check proxy CPU/memory, concurrency limits, and slow upstream provider requests.',
|
||
'检查 gateway 心跳处理日志和 proxy/gateway 版本兼容性。': 'Check gateway heartbeat handling logs and proxy/gateway version compatibility.',
|
||
'查看此前一条写入或 ping 错误,确认隧道重连循环仍在运行。': 'Review the previous write or ping error and confirm the tunnel reconnect loop is still running.',
|
||
'检查同一时间的请求流和 gateway tunnel 日志。': 'Check request stream logs and gateway tunnel logs from the same time.',
|
||
'硬件信息': 'Hardware info',
|
||
'暂无硬件信息上报': 'No hardware info reported',
|
||
'格式不正确': 'Invalid format',
|
||
'必须是合法的代理 URL': 'Must be a valid proxy URL',
|
||
'仅支持 http/https/socks5/socks5h 协议': 'Only http/https/socks5/socks5h protocols are supported',
|
||
'缺少主机地址': 'Missing host address',
|
||
'用户名包含无效的 URL 编码': 'Username contains invalid URL encoding',
|
||
'密码包含无效的 URL 编码': 'Password contains invalid URL encoding',
|
||
'包含密码时必须同时包含用户名': 'A username is required when a password is provided',
|
||
'US(美国)': 'US (United States)',
|
||
'SG(新加坡)': 'SG (Singapore)',
|
||
'JP(日本)': 'JP (Japan)',
|
||
'KR(韩国)': 'KR (South Korea)',
|
||
'HK(中国香港)': 'HK (Hong Kong, China)',
|
||
'TW(中国台湾)': 'TW (Taiwan, China)',
|
||
'DE(德国)': 'DE (Germany)',
|
||
'GB(英国)': 'GB (United Kingdom)',
|
||
'FR(法国)': 'FR (France)',
|
||
'NL(荷兰)': 'NL (Netherlands)',
|
||
'AU(澳大利亚)': 'AU (Australia)',
|
||
'CA(加拿大)': 'CA (Canada)',
|
||
'IN(印度)': 'IN (India)',
|
||
'BR(巴西)': 'BR (Brazil)',
|
||
'RU(俄罗斯)': 'RU (Russia)',
|
||
'CN(中国)': 'CN (China)',
|
||
'钱包': 'Wallet',
|
||
'套餐': 'Plan',
|
||
'金额': 'Amount',
|
||
'费用': 'Cost',
|
||
'账号': 'Account',
|
||
'任务': 'Task',
|
||
'参数': 'Parameters',
|
||
'令牌': 'Token',
|
||
'使用次数': 'Usage count',
|
||
'运行中': 'Running',
|
||
'示例': 'Example',
|
||
'趋势': 'Trend',
|
||
'风险': 'Risk',
|
||
'审计': 'Audit',
|
||
'样本': 'Samples',
|
||
'节省': 'Savings',
|
||
'读取': 'Read',
|
||
'预计全额': 'Estimated full',
|
||
'排行': 'Ranking',
|
||
'退款': 'Refund',
|
||
'商户': 'Merchant',
|
||
'接口地址': 'API URL',
|
||
'回调站点根地址': 'Callback site root URL',
|
||
'发件人邮箱': 'Sender email',
|
||
'发件人名称': 'Sender name',
|
||
'端回调': 'callback',
|
||
'前端回调页': 'Frontend callback page',
|
||
'图标 URL': 'Icon URL',
|
||
'高级选项': 'Advanced options',
|
||
'亲和性': 'Affinity',
|
||
'切换': 'Switch',
|
||
'失效': 'Invalidation',
|
||
'预留比例': 'Reserved ratio',
|
||
'动态': 'Dynamic',
|
||
'窗口': 'Window',
|
||
'完整备份': 'Full backup',
|
||
'恢复默认': 'Restore defaults',
|
||
'扩展模块': 'Extension modules',
|
||
'流式': 'Streaming',
|
||
'HTTP 流式': 'HTTP streaming',
|
||
'HTTP 标准': 'HTTP standard',
|
||
'转换': 'Conversion',
|
||
'服务性能': 'Service performance',
|
||
'有效权益': 'Active benefits',
|
||
'未开通': 'Not activated',
|
||
'未知设备': 'Unknown device',
|
||
'当前设备': 'Current device',
|
||
'信息未知': 'Information unknown',
|
||
'暂无公告': 'No announcements',
|
||
'周一': 'Mon',
|
||
'周三': 'Wed',
|
||
'周五': 'Fri',
|
||
'总 Tokens': 'Total tokens',
|
||
'总Tokens': 'Total tokens',
|
||
'总费用': 'Total cost',
|
||
'余额': 'Balance',
|
||
'成本': 'Cost',
|
||
'请求': 'Request',
|
||
'响应': 'Response',
|
||
'请求数': 'Requests',
|
||
'请求次数': 'Request count',
|
||
'总可用': 'Total available',
|
||
'总可用:': 'Total available:',
|
||
'已消费': 'Consumed',
|
||
'已消费:': 'Consumed:',
|
||
'统计/限速': 'Stats / rate limit',
|
||
'Token 计费': 'Token billing',
|
||
'Tokens': 'Tokens',
|
||
'创建时间': 'Created at',
|
||
'按创建时间排序': 'Sort by created time',
|
||
'更新时间': 'Updated at',
|
||
'最近使用': 'Last used',
|
||
'最近活跃': 'Last active',
|
||
'支付方式': 'Payment method',
|
||
'应付金额': 'Amount due',
|
||
'支付通道': 'Payment channel',
|
||
'Stripe 支付': 'Stripe payment',
|
||
'请在弹窗内完成支付,成功后系统会自动入账。': 'Complete the payment in this dialog. The balance is credited automatically after success.',
|
||
'确认支付': 'Confirm payment',
|
||
'正在加载 Stripe 支付组件...': 'Loading Stripe payment component...',
|
||
'支付中...': 'Paying...',
|
||
'缺少 Stripe 支付参数': 'Missing Stripe payment parameters',
|
||
'支付容器未准备好': 'Payment container is not ready',
|
||
'Stripe 初始化失败': 'Stripe initialization failed',
|
||
'Stripe 支付组件未就绪': 'Stripe payment component is not ready',
|
||
'请检查支付信息': 'Check the payment information',
|
||
'支付失败': 'Payment failed',
|
||
'当前支付状态': 'Current payment status',
|
||
'支付已提交,请稍后刷新订单状态': 'Payment submitted. Refresh the order status later.',
|
||
'Stripe 支付处理失败': 'Stripe payment processing failed',
|
||
'银行卡/信用卡': 'Card / credit card',
|
||
'支付宝': 'Alipay',
|
||
'微信支付': 'WeChat Pay',
|
||
'美国银行账户': 'US bank account',
|
||
'充值订单': 'Top-up order',
|
||
'兑换码': 'Redeem code',
|
||
'人工充值': 'Manual top-up',
|
||
'余额变化': 'Balance changes',
|
||
'总可用额度': 'Total available balance',
|
||
'套餐今日额度': 'Plan quota today',
|
||
'钱包管理': 'Wallet management',
|
||
'用户钱包': 'User wallet',
|
||
'订单管理': 'Order management',
|
||
'用户管理': 'User management',
|
||
'用户信息': 'User information',
|
||
'用户角色': 'User role',
|
||
'未设置邮箱': 'No email set',
|
||
'默认排序': 'Default sort',
|
||
'创建时间 新到旧': 'Created time, newest first',
|
||
'创建时间 旧到新': 'Created time, oldest first',
|
||
'修改用户账户信息': 'Edit user account information',
|
||
'创建新的系统用户账户': 'Create a new system user account',
|
||
'新密码 (留空保持不变)': 'New password (leave empty to keep unchanged)',
|
||
'确认新密码': 'Confirm new password',
|
||
'再次输入新密码': 'Enter the new password again',
|
||
'所属分组': 'Groups',
|
||
'可选择多个分组': 'Select one or more groups',
|
||
'暂无分组': 'No groups',
|
||
'未找到匹配的分组': 'No matching groups found',
|
||
'额度': 'Quota',
|
||
'初始额度 (USD)': 'Initial quota (USD)',
|
||
'无限制': 'Unlimited',
|
||
'按钱包余额限制': 'Limited by wallet balance',
|
||
'功能权限': 'Feature permissions',
|
||
'通知推送服务': 'Notification push service',
|
||
'允许用户配置自己的第三方推送渠道': 'Allow users to configure their own third-party push channels',
|
||
'用户分组': 'User groups',
|
||
'管理用户组、默认注册组、成员和组级访问控制': 'Manage user groups, the default registration group, members, and group-level access control',
|
||
'新建分组': 'Create group',
|
||
'编辑分组': 'Edit group',
|
||
'当前为所有用户的默认组': 'Currently the default group for all users',
|
||
'通过额外分组配置访问限制': 'Configure access limits through additional groups',
|
||
'默认注册组': 'Default registration group',
|
||
'设为默认注册组': 'Set as default registration group',
|
||
'删除分组': 'Delete group',
|
||
'成员': 'Members',
|
||
'选择用户': 'Select users',
|
||
'未找到匹配用户': 'No matching users found',
|
||
'例如:生产团队': 'Example: Production team',
|
||
'组权限': 'Group permissions',
|
||
'组权限叠加,Key 可再收窄': 'Group permissions accumulate; keys can narrow them further',
|
||
'查看组权限合并规则': 'View group permission merge rules',
|
||
'模型、供应商和端点会在多个用户组之间叠加授权;unrestricted 仍表示不限制,deny_all 只是不授予额外权限。速率限制按付费档位取更高额度,0 表示不限速;用户/API Key 自身限制仍会收窄最终权限。': 'Models, providers, and endpoints accumulate across multiple user groups. unrestricted still means no restriction, while deny_all grants no extra permission. Rate limits take the higher quota by tier, and 0 means unlimited. User/API key limits still narrow the final permissions.',
|
||
'允许的提供商': 'Allowed providers',
|
||
'允许的端点': 'Allowed endpoints',
|
||
'允许的模型': 'Allowed models',
|
||
'暂无选项': 'No options',
|
||
'用户批量操作': 'User batch actions',
|
||
'按当前选择批量调整用户状态、角色和额度': 'Batch update user status, role, and quota for the current selection',
|
||
'影响用户:': 'Affected users:',
|
||
'目标为当前筛选条件匹配的全部用户,执行前后端会重新解析。': 'Targets all users matching the current filters; the backend will resolve the selection again before execution.',
|
||
'目标为当前已勾选的用户,重复 ID 会自动去重。': 'Targets the currently selected users; duplicate IDs are deduplicated automatically.',
|
||
'手动选择': 'Manual selection',
|
||
'正在解析影响范围...': 'Resolving impact scope...',
|
||
'按分组选择': 'Select by group',
|
||
'可与直接用户或筛选条件混合': 'Can be combined with direct users or filters',
|
||
'选择一个或多个分组': 'Select one or more groups',
|
||
'暂无用户分组': 'No user groups',
|
||
'选择批量动作': 'Select batch action',
|
||
'选择执行动作': 'Select action to execute',
|
||
'只会提交当前动作对应的字段': 'Only fields for the current action will be submitted',
|
||
'批量修改用户角色': 'Batch update user roles',
|
||
'将所选用户统一调整为同一个角色。管理员角色拥有后台管理权限,请确认选择范围。': 'Set selected users to the same role. Admin roles have backend management permissions, so verify the target scope.',
|
||
'目标角色': 'Target role',
|
||
'对所有目标用户生效': 'Applies to all target users',
|
||
'批量设置额度': 'Batch set quota',
|
||
'额度仍然属于用户账户属性;模型、端点、提供商和限速请通过用户组管理。': 'Quota remains a user account property; manage models, endpoints, providers, and rate limits through user groups.',
|
||
'不修改': 'Do not change',
|
||
'恢复用户登录与调用': 'Restore user sign-in and API access',
|
||
'暂停用户访问权限': 'Pause user access',
|
||
'批量调整用户额度模式': 'Batch update user quota mode',
|
||
'修改角色': 'Change role',
|
||
'批量设为普通用户或管理员': 'Batch set users to user or admin roles',
|
||
'登录设备': 'Signed-in devices',
|
||
'查看并强制下线该用户的设备会话': 'View and revoke this user’s device sessions',
|
||
'正在加载设备会话...': 'Loading device sessions...',
|
||
'正在加载...': 'Loading...',
|
||
'暂无在线设备': 'No online devices',
|
||
'强制下线': 'Force sign-out',
|
||
'全部下线': 'Sign out all',
|
||
'管理 API Keys': 'Manage API keys',
|
||
'查看和管理用户的 API 密钥': 'View and manage user API keys',
|
||
'未命名 API Key': 'Unnamed API key',
|
||
'已锁定': 'Locked',
|
||
'独立余额': 'Standalone balance',
|
||
'复制完整密钥': 'Copy full key',
|
||
'暂无 API Keys': 'No API keys',
|
||
'点击下方按钮创建': 'Use the button below to create one',
|
||
'编辑 API Key': 'Edit API key',
|
||
'创建 API Key': 'Create API key',
|
||
'创建中...': 'Creating...',
|
||
'处理中...': 'Processing...',
|
||
'执行中...': 'Running...',
|
||
'更新用户 API Key 的名称、速率限制和并发限制': 'Update the user API key name, rate limit, and concurrency limit',
|
||
'为用户创建新的 API Key': 'Create a new API key for the user',
|
||
'密钥名称': 'Key name',
|
||
'例如:生产环境 Key': 'Example: Production key',
|
||
'速率限制 (请求/分钟)': 'Rate limit (requests/min)',
|
||
'留空不限': 'Leave empty for unlimited',
|
||
'留空表示不限制': 'Leave empty for no limit',
|
||
'留空表示保持当前值,填 0 表示不限并发': 'Leave empty to keep the current value; enter 0 for unlimited concurrency',
|
||
'留空表示不限并发,填 0 也表示不限并发': 'Leave empty for unlimited concurrency; 0 is also unlimited',
|
||
'留空表示不限制;支持 IP、CIDR、IPv4 通配符、*,用 ! 前缀拒绝,多个规则用英文逗号分隔': 'Leave empty for no restriction. Supports IP, CIDR, IPv4 wildcards, *, deny rules with ! prefix, and comma-separated rules.',
|
||
'创建成功': 'Created successfully',
|
||
'请妥善保管, 切勿泄露给他人.': 'Keep it safe and do not share it.',
|
||
'未知错误': 'Unknown error',
|
||
'用户信息已更新': 'User information updated',
|
||
'用户创建成功': 'User created',
|
||
'更新用户失败': 'Failed to update user',
|
||
'创建用户失败': 'Failed to create user',
|
||
'加载用户设备会话失败': 'Failed to load user device sessions',
|
||
'加载用户套餐失败': 'Failed to load user plans',
|
||
'加载套餐列表失败': 'Failed to load plan list',
|
||
'套餐已发放': 'Plan granted',
|
||
'发放套餐失败': 'Failed to grant plan',
|
||
'撤销套餐': 'Revoke plan',
|
||
'撤销中...': 'Revoking...',
|
||
'撤销用户套餐': 'Revoke user plan',
|
||
'确认撤销': 'Confirm revoke',
|
||
'套餐已撤销': 'Plan revoked',
|
||
'撤销套餐失败': 'Failed to revoke plan',
|
||
'撤销后该用户将立即失去该套餐的剩余额度和会员权益,历史订单与使用记录会保留。': 'The user will immediately lose the plan’s remaining quota and membership benefits. Historical orders and usage records will be retained.',
|
||
'请输入密钥名称': 'Enter a key name',
|
||
'更新 API Key 失败': 'Failed to update API key',
|
||
'创建 API Key 失败': 'Failed to create API key',
|
||
'API Key已更新': 'API key updated',
|
||
'API Key创建成功': 'API key created',
|
||
'设备已强制下线': 'Device signed out',
|
||
'强制下线失败': 'Failed to sign out device',
|
||
'强制下线全部设备失败': 'Failed to sign out all devices',
|
||
'没有可下线的设备': 'No devices to sign out',
|
||
'删除 API Key': 'Delete API key',
|
||
'API Key已删除': 'API key deleted',
|
||
'删除 API Key 失败': 'Failed to delete API key',
|
||
'操作失败': 'Operation failed',
|
||
'锁定/解锁失败': 'Failed to lock/unlock',
|
||
'复制密钥失败': 'Failed to copy key',
|
||
'该用户的钱包尚未初始化,暂时无法进行资金操作': 'This user wallet is not initialized yet, so wallet operations are not available.',
|
||
'用户已删除': 'User deleted',
|
||
'删除用户失败': 'Failed to delete user',
|
||
'用户套餐': 'User plans',
|
||
'查看当前套餐并手动发放': 'View current plans and grant manually',
|
||
'后台发放会立即生效;如果新套餐包含每日额度或会员权益,用户已有的同类旧套餐会自动失效。': 'Admin grants take effect immediately. If the new plan includes daily quota or membership benefits, existing plans of the same type are automatically expired.',
|
||
'当前有效套餐': 'Current active plans',
|
||
'正在加载用户套餐...': 'Loading user plans...',
|
||
'当前没有有效套餐': 'No active plans',
|
||
'生效中': 'Active',
|
||
'开始:': 'Starts: ',
|
||
'到期:': 'Expires: ',
|
||
'发放套餐': 'Grant plan',
|
||
'仅发放套餐权益,不产生用户付款;同类旧套餐会按现有规则自动替换。': 'Only grants plan benefits without user payment. Existing plans of the same type are replaced by the current rules.',
|
||
'加载套餐中...': 'Loading plans...',
|
||
'选择要发放的套餐': 'Select a plan to grant',
|
||
'已下架': 'Unlisted',
|
||
'备注(可选,例如:人工补偿、活动赠送)': 'Notes (optional, e.g. manual compensation or campaign gift)',
|
||
'发放中...': 'Granting...',
|
||
'购买成功后,同类旧套餐会自动失效。确定继续购买吗?': 'After purchase succeeds, older plans of the same type will be expired automatically. Continue?',
|
||
'请选择支付方式': 'Select a payment method',
|
||
'支付方式配置无效': 'Invalid payment method configuration',
|
||
'已有待支付订单,已打开原支付链接': 'A pending payment order already exists. Opened the existing payment link.',
|
||
'套餐订单已创建': 'Plan order created',
|
||
'套餐已创建': 'Plan created',
|
||
'套餐已更新': 'Plan updated',
|
||
'套餐已启用': 'Plan enabled',
|
||
'套餐已停用': 'Plan disabled',
|
||
'套餐已删除': 'Plan deleted',
|
||
'请求:': 'Requests:',
|
||
'限速:': 'Rate limit:',
|
||
'资金操作': 'Wallet operation',
|
||
'资金': 'Wallet',
|
||
'设备': 'Devices',
|
||
'提示:设置为管理员会授予用户完整后台管理能力。': 'Tip: setting users as admins grants full backend management permissions.',
|
||
'提示:设置为审计管理员会授予后台只读查看能力。': 'Tip: setting users as audit admins grants read-only backend access.',
|
||
'提示:设置为普通用户会移除目标用户的管理员权限。': 'Tip: setting users as regular users removes admin permissions from targets.',
|
||
'解析用户选择失败': 'Failed to resolve user selection',
|
||
'加载密码策略失败': 'Failed to load password policy',
|
||
'请选择要修改的额度': 'Select the quota change to apply',
|
||
'批量操作失败': 'Batch action failed',
|
||
'加载访问控制选项失败': 'Failed to load access control options',
|
||
'加载用户分组失败': 'Failed to load user groups',
|
||
'加载分组成员失败': 'Failed to load group members',
|
||
'已更新默认注册组': 'Default registration group updated',
|
||
'设置默认注册组失败': 'Failed to set default registration group',
|
||
'用户分组已保存': 'User group saved',
|
||
'保存用户分组失败': 'Failed to save user group',
|
||
'删除用户分组': 'Delete user group',
|
||
'用户分组已删除': 'User group deleted',
|
||
'删除用户分组失败': 'Failed to delete user group',
|
||
'不限并发': 'Unlimited concurrency',
|
||
'并发': 'concurrent',
|
||
'不限制': 'No restriction',
|
||
'IP 限制:': 'IP restrictions: ',
|
||
'次': 'times',
|
||
'解锁': 'Unlock',
|
||
'锁定': 'Lock',
|
||
'附赠余额': 'Bonus balance',
|
||
'每日额度': 'Daily quota',
|
||
'会员权益': 'Membership benefits',
|
||
'继承自分组:': 'Inherited from group: ',
|
||
'用户额外限制与分组叠加:': 'User extra limit combined with groups: ',
|
||
'用户额外限制与分组叠加': 'User extra limit combined with groups',
|
||
'用户单独配置': 'User-specific configuration',
|
||
'个月': 'months',
|
||
'年': 'years',
|
||
'模型管理': 'Model management',
|
||
'提供商管理': 'Provider management',
|
||
'号池管理': 'Pool management',
|
||
'模块管理': 'Module management',
|
||
'系统扩展': 'System extensions',
|
||
'Aether 提供高可插入的模块化管理机制,帮助连接外部服务和授权系统。': 'Aether provides a highly pluggable module management system for connecting external services and authorization systems.',
|
||
'允许通过 Management Token 授权使用全部或部分后端敏感接口(如自动化运维脚本接入)。': 'Allow Management Tokens to authorize all or selected sensitive backend APIs, such as automation scripts.',
|
||
'用于注册验证及账户通知服务。管理员可以自定义 SMTP 服务器并高度定制系统发送的各种 HTML 邮件模板。': 'Used for registration verification and account notifications. Administrators can customize the SMTP server and the HTML email templates sent by the system.',
|
||
'OAuth 登录': 'OAuth sign-in',
|
||
'支持包括 Linux Do OAuth 等多种第三方授权验证登录,方便统一认证渠道并提升用户体验。': 'Supports third-party authorization and verification sign-in, including Linux Do OAuth, to unify authentication channels and improve user experience.',
|
||
'LDAP 认证': 'LDAP authentication',
|
||
'为企业管理构建。直接对接企业现有的 LDAP 或 Active Directory 目录以映射内网员工账户和组织架构。': 'Built for enterprise management. Connect directly to existing LDAP or Active Directory directories to map internal employee accounts and organization structure.',
|
||
'系统设置': 'System settings',
|
||
'系统信息': 'System information',
|
||
'基础配置': 'Basic configuration',
|
||
'网络代理': 'Network proxy',
|
||
'定时任务': 'Scheduled tasks',
|
||
'请求记录清理策略': 'Request log cleanup policy',
|
||
'清理策略说明': 'Cleanup policy notes',
|
||
'最近清理记录': 'Recent cleanup runs',
|
||
'数据管理': 'Data management',
|
||
'站点信息': 'Site information',
|
||
'站点名称': 'Site name',
|
||
'站点副标题': 'Site subtitle',
|
||
'邮件配置': 'Email configuration',
|
||
'SMTP 邮件配置': 'SMTP email configuration',
|
||
'OAuth 配置': 'OAuth configuration',
|
||
'LDAP 配置': 'LDAP configuration',
|
||
'隐私政策': 'Privacy policy',
|
||
'注册隐私政策确认': 'Registration privacy confirmation',
|
||
'隐私政策版本': 'Privacy policy version',
|
||
'隐私政策格式': 'Privacy policy format',
|
||
'隐私政策内容': 'Privacy policy content',
|
||
'基础信息': 'Basic information',
|
||
'安全设置': 'Security settings',
|
||
'账户信息': 'Account information',
|
||
'个人资料': 'Profile',
|
||
'修改密码': 'Change password',
|
||
'当前密码': 'Current password',
|
||
'新密码': 'New password',
|
||
'确认密码': 'Confirm password',
|
||
'两次输入的密码不一致': 'The two passwords do not match',
|
||
'邮箱': 'Email',
|
||
'用户名': 'Username',
|
||
'密码': 'Password',
|
||
'至少 8 个字符,且需包含字母和数字': 'At least 8 characters with letters and numbers',
|
||
'至少 8 个字符,且需包含大写字母、小写字母、数字和特殊字符': 'At least 8 characters with uppercase, lowercase, numbers, and symbols',
|
||
'至少 8 位,含字母和数字': 'At least 8 characters with letters and numbers',
|
||
'至少 8 位,含大小写字母、数字和特殊字符': 'At least 8 characters with uppercase, lowercase, numbers, and symbols',
|
||
'包含字母': 'letters',
|
||
'包含数字': 'numbers',
|
||
'包含大写字母': 'uppercase letters',
|
||
'包含小写字母': 'lowercase letters',
|
||
'包含特殊字符': 'symbols',
|
||
'角色': 'Role',
|
||
'分组': 'Group',
|
||
'权限': 'Permissions',
|
||
'限额': 'Quota',
|
||
'用量': 'Usage',
|
||
'统计': 'Statistics',
|
||
'指标': 'Metric',
|
||
'请求记录': 'Request records',
|
||
'使用记录': 'Usage records',
|
||
'使用统计': 'Usage statistics',
|
||
'性能分析': 'Performance analysis',
|
||
'成本分析': 'Cost analysis',
|
||
'缓存监控': 'Cache monitoring',
|
||
'获取缓存统计失败': 'Failed to load cache statistics',
|
||
'获取缓存列表失败': 'Failed to load cache list',
|
||
'未找到匹配的缓存记录': 'No matching cache records found',
|
||
'缓存记录信息不完整,无法删除': 'Cache record information is incomplete and cannot be deleted',
|
||
'健康监控': 'Health monitor',
|
||
'异步任务': 'Async tasks',
|
||
'获取任务列表失败': 'Failed to load task list',
|
||
'获取任务详情失败': 'Failed to load task details',
|
||
'刷新失败': 'Refresh failed',
|
||
'无法打开使用记录': 'Unable to open usage record',
|
||
'该任务没有关联的请求ID': 'This task has no linked request ID',
|
||
'获取任务信息失败': 'Failed to load task information',
|
||
'确定要取消这个任务吗?': 'Cancel this task?',
|
||
'任务已取消': 'Task canceled',
|
||
'取消任务失败': 'Failed to cancel task',
|
||
'审计日志': 'Audit logs',
|
||
'公告管理': 'Announcements',
|
||
'公告': 'Announcement',
|
||
'公告标题': 'Announcement title',
|
||
'内容': 'Content',
|
||
'标题': 'Title',
|
||
'描述': 'Description',
|
||
'版本': 'Version',
|
||
'版本:': 'Version:',
|
||
'版本信息': 'Version information',
|
||
'版本信息:': 'Version information: ',
|
||
'当前版本': 'Current version',
|
||
'最新版本': 'Latest version',
|
||
'历史版本': 'Release history',
|
||
'版本详情': 'Version details',
|
||
'检查中': 'Checking',
|
||
'有新版本': 'New version available',
|
||
'检查失败': 'Check failed',
|
||
'已是最新': 'Up to date',
|
||
'检查更新失败': 'Update check failed',
|
||
'检查更新失败:': 'Update check failed: ',
|
||
'服务重启中...': 'Service is restarting...',
|
||
'服务重启中,请稍候...': 'Service is restarting. Please wait...',
|
||
'正在重启服务': 'Restarting service',
|
||
'服务正在切换版本并重启,请稍候...': 'The service is switching versions and restarting. Please wait...',
|
||
'重启中': 'Restarting',
|
||
'重启中...': 'Restarting...',
|
||
'回滚中': 'Rolling back',
|
||
'回滚中...': 'Rolling back...',
|
||
'更新中': 'Updating',
|
||
'下载中...': 'Downloading...',
|
||
'正在下载更新包...': 'Downloading update package...',
|
||
'重新检查': 'Check again',
|
||
'立即重启': 'Restart now',
|
||
'立即更新': 'Update now',
|
||
'查看发布': 'View release',
|
||
'当前': 'Current',
|
||
'新': 'New',
|
||
'不可在线更新': 'Cannot update online',
|
||
'当前运行版本': 'Current running version',
|
||
'可升级版本': 'Upgradeable version',
|
||
'这个版本没有附带更新说明。': 'This version does not include release notes.',
|
||
'发布于': 'Published at',
|
||
'查看该版本的发布说明': 'View release notes for this version',
|
||
'更新内容': 'Release notes',
|
||
'更新包已下载,点击"立即重启"完成安装': 'The update package has been downloaded. Click "Restart now" to finish installation.',
|
||
'在 docker-compose.yml 所在目录执行': 'Run in the directory containing docker-compose.yml',
|
||
'稍后提醒': 'Remind me later',
|
||
'回滚上一版本': 'Roll back to previous version',
|
||
'新版本已发布,建议更新以获得最新功能和安全修复': 'A new version is available. Update to get the latest features and security fixes.',
|
||
'切换到此版本': 'Switch to this version',
|
||
'更新到此版本': 'Update to this version',
|
||
'当前正在运行这个版本。': 'This version is currently running.',
|
||
'将这个版本作为在线更新目标。': 'Use this version as the online update target.',
|
||
'将切换到这个历史版本。': 'Switch to this historical version.',
|
||
'获取版本列表失败': 'Failed to load version list',
|
||
'当前版本暂不支持在线更新': 'This version does not support online updates',
|
||
'加载中...': 'Loading...',
|
||
'后台处理中': 'Processing in background',
|
||
'重置筛选': 'Reset filters',
|
||
'清除筛选': 'Clear filters',
|
||
'本页全选': 'Select page',
|
||
'取消本页全选': 'Deselect page',
|
||
'清空选择': 'Clear selection',
|
||
'批量操作': 'Batch actions',
|
||
'新增用户': 'Add user',
|
||
'新增提供商': 'Add provider',
|
||
'批量处理提供商': 'Batch process providers',
|
||
'编辑用户': 'Edit user',
|
||
'删除用户': 'Delete user',
|
||
'启用用户': 'Enable user',
|
||
'禁用用户': 'Disable user',
|
||
'编辑提供商': 'Edit provider',
|
||
'添加提供商': 'Add provider',
|
||
'更新提供商配置。API 端点和密钥需在详情页面单独管理。': 'Update provider configuration. API endpoints and keys are managed separately on the details page.',
|
||
'创建新的提供商配置。创建后可以为其添加 API 端点和密钥。': 'Create a new provider configuration. You can add API endpoints and keys after creation.',
|
||
'例如: OpenAI 主账号': 'Example: OpenAI primary account',
|
||
'提供商类型': 'Provider type',
|
||
'请选择': 'Select',
|
||
'Claude Code(实验性功能)': 'Claude Code (experimental feature)',
|
||
'反代使用固定端点且不可修改': 'Reverse proxy providers use fixed endpoints that cannot be modified.',
|
||
'主站链接': 'Website URL',
|
||
'https://example.com(可选)': 'https://example.com (optional)',
|
||
'计费与限流': 'Billing and limits',
|
||
'请求配置': 'Request config',
|
||
'计费类型': 'Billing type',
|
||
'最大重试次数': 'Max retries',
|
||
'默认 2': 'Default 2',
|
||
'最大转移次数': 'Max transfers',
|
||
'最大转移超时': 'Max transfer timeout',
|
||
'0 (不限制)': '0 (unlimited)',
|
||
'流式首字节超时': 'Streaming first-byte timeout',
|
||
'非流式请求超时': 'Non-streaming request timeout',
|
||
'(秒)': '(seconds)',
|
||
'周期额度 (USD)': 'Cycle quota (USD)',
|
||
'重置周期 (天)': 'Reset interval (days)',
|
||
'周期开始时间': 'Cycle start time',
|
||
'过期时间': 'Expiration time',
|
||
'功能开关': 'Feature toggles',
|
||
'格式转换保持优先级': 'Keep priority on format conversion',
|
||
'跨格式请求时保持原优先级排名,不降级到格式匹配的提供商之后': 'Keep the original priority rank for cross-format requests instead of demoting behind format-matching providers.',
|
||
'启用后该提供商的密钥将由号池统一调度': 'When enabled, this provider’s keys are scheduled by the pool.',
|
||
'模拟缓存模式': 'Simulated cache mode',
|
||
'启用后仅对 Kiro 请求模拟 prompt cache 读写计量。': 'When enabled, only Kiro requests simulate prompt cache read/write accounting.',
|
||
'Codex 指纹收敛': 'Codex fingerprint convergence',
|
||
'统一同一 Codex 身份的设备与会话标识;关闭时保持现有透传行为。': 'Use consistent device and session identifiers for the same Codex identity. When disabled, preserve the existing pass-through behavior.',
|
||
'请前往模块管理-敏感信息保护中配置详细规则。': 'Configure detailed rules in Modules - Sensitive information protection.',
|
||
'验证失败': 'Validation failed',
|
||
'月卡类型必须设置周期开始时间': 'Monthly quota billing requires a cycle start time',
|
||
'周期开始时间必须是合法时间': 'Cycle start time must be a valid time',
|
||
'过期时间必须是合法时间': 'Expiration time must be a valid time',
|
||
'提供商更新成功': 'Provider updated',
|
||
'提供商已创建,请继续添加端点和密钥,或在优先级管理中调整顺序': 'Provider created. Continue by adding endpoints and keys, or adjust order in priority management.',
|
||
'更新提供商失败': 'Failed to update provider',
|
||
'创建提供商失败': 'Failed to create provider',
|
||
'创建失败': 'Create failed',
|
||
'删除提供商': 'Delete provider',
|
||
'启用提供商': 'Enable provider',
|
||
'停用提供商': 'Disable provider',
|
||
'扩展操作配置': 'Ops configuration',
|
||
'输入备注...': 'Enter notes...',
|
||
'添加备注': 'Add notes',
|
||
'配额': 'Quota',
|
||
'签到 Cookie 已失效': 'Check-in cookie expired',
|
||
'已签到': 'Checked in',
|
||
'签到失败': 'Check-in failed',
|
||
'按量付费': 'Pay as you go',
|
||
'月卡配额': 'Monthly quota',
|
||
'免费套餐': 'Free tier',
|
||
'保存配置': 'Save configuration',
|
||
'配置已保存': 'Configuration saved',
|
||
'加载系统配置失败': 'Failed to load system configuration',
|
||
'保存站点信息失败': 'Failed to save site information',
|
||
'站点信息已保存': 'Site information saved',
|
||
'保存代理配置失败': 'Failed to save proxy configuration',
|
||
'网络代理配置已保存': 'Network proxy configuration saved',
|
||
'基础配置已保存': 'Basic configuration saved',
|
||
'Turnstile 密钥已清空': 'Turnstile secret key cleared',
|
||
'清空 Turnstile 密钥失败': 'Failed to clear Turnstile secret key',
|
||
'请求记录配置已保存': 'Request logging configuration saved',
|
||
'请求记录清理配置已保存': 'Request log cleanup configuration saved',
|
||
'已启用自动清理': 'Automatic cleanup enabled',
|
||
'已禁用自动清理': 'Automatic cleanup disabled',
|
||
'配置': 'Configuration',
|
||
'开启': 'On',
|
||
'关闭中...': 'Closing...',
|
||
'已启用': 'Enabled',
|
||
'已禁用': 'Disabled',
|
||
'已停用': 'Disabled',
|
||
'已完成': 'Completed',
|
||
'失败': 'Failed',
|
||
'成功': 'Success',
|
||
'处理中': 'Processing',
|
||
'排队中': 'Queued',
|
||
'执行中': 'Running',
|
||
'完成': 'Completed',
|
||
'无数据变更': 'No data changes',
|
||
'手动': 'Manual',
|
||
'自动': 'Automatic',
|
||
'在线': 'Online',
|
||
'离线': 'Offline',
|
||
'可用': 'Available',
|
||
'不可用': 'Unavailable',
|
||
'活跃': 'Active',
|
||
'启用模型': 'Enable model',
|
||
'停用模型': 'Disable model',
|
||
'提供商信息': 'Provider info',
|
||
'资源统计': 'Resource stats',
|
||
'端点健康': 'Endpoint health',
|
||
'端点禁用': 'Endpoint disabled',
|
||
'未配置密钥': 'No keys configured',
|
||
'无可用密钥': 'No available keys',
|
||
'暂无健康数据': 'No health data',
|
||
'健康度': 'Health',
|
||
'筛选模型': 'Filter models',
|
||
'筛选 API 格式': 'Filter API format',
|
||
'筛选状态': 'Filter status',
|
||
'筛选角色': 'Filter roles',
|
||
'点击调整调度策略': 'Adjust scheduling policy',
|
||
'调度:': 'Scheduling:',
|
||
'全局 Key 优先': 'Global key first',
|
||
'提供商优先': 'Provider first',
|
||
'正在删除提供商': 'Deleting provider',
|
||
'总体进度': 'Overall progress',
|
||
'账号删除': 'Account deletion',
|
||
'端点删除': 'Endpoint deletion',
|
||
'准备删除': 'Preparing deletion',
|
||
'清理访问限制': 'Cleaning access limits',
|
||
'清理历史引用': 'Cleaning historical references',
|
||
'删除号池账号': 'Deleting pool accounts',
|
||
'删除端点': 'Delete endpoint',
|
||
'删除完成': 'Deletion complete',
|
||
'删除失败': 'Deletion failed',
|
||
'等待执行': 'Waiting to run',
|
||
'删除任务已提交,后台处理中': 'Delete task submitted and processing in the background',
|
||
'提供商已删除': 'Provider deleted',
|
||
'提供商已启用': 'Provider enabled',
|
||
'提供商已停用': 'Provider disabled',
|
||
'更新备注失败': 'Failed to update notes',
|
||
'加载提供商列表失败': 'Failed to load provider list',
|
||
'刷新提供商数据失败': 'Failed to refresh provider data',
|
||
'刷新提供商状态失败': 'Failed to refresh provider status',
|
||
'删除提供商失败': 'Failed to delete provider',
|
||
'点击启用': 'Click to enable',
|
||
'点击停用': 'Click to disable',
|
||
'点击复制': 'Click to copy',
|
||
'分配模式': 'Distribution mode',
|
||
'策略调度': 'Strategy scheduling',
|
||
'号池调度': 'Pool scheduling',
|
||
'号池代理均分': 'Pool proxy distribution',
|
||
'提供商代理节点': 'Provider proxy node',
|
||
'清除': 'Clear',
|
||
'选择号池': 'Select pool',
|
||
'选择代理节点': 'Select proxy node',
|
||
'生成预览': 'Generate preview',
|
||
'刷新预览': 'Refresh preview',
|
||
'均衡补齐': 'Balance fill',
|
||
'强制重排': 'Force rebalance',
|
||
'待写入': 'Pending write',
|
||
'单节点上限': 'Per-node limit',
|
||
'号池账号': 'Pool accounts',
|
||
'当前不可用': 'Currently unavailable',
|
||
'上移': 'Move up',
|
||
'下移': 'Move down',
|
||
'缓存亲和': 'Cache affinity',
|
||
'LRU 轮转': 'LRU rotation',
|
||
'单号优先': 'Single-account first',
|
||
'负载均衡': 'Load balancing',
|
||
'额度平均': 'Quota balance',
|
||
'额度刷新优先': 'Quota refresh first',
|
||
'优先级优先': 'Priority first',
|
||
'健康优先': 'Health first',
|
||
'延迟优先': 'Latency first',
|
||
'成本优先': 'Cost first',
|
||
'请求体记录': 'Request body logging',
|
||
'调度模式': 'Scheduling mode',
|
||
'访问限制': 'Access limits',
|
||
'请求体清理': 'Request body cleanup',
|
||
'格式转换': 'Format conversion',
|
||
'流式/非流式': 'Streaming/non-streaming',
|
||
'请求头/体编辑': 'Header/body editing',
|
||
'正则映射': 'Regex mapping',
|
||
'余额监控': 'Balance monitor',
|
||
'配置导入/出': 'Config import/export',
|
||
'锁定用户密钥': 'Lock user key',
|
||
'访问令牌': 'Access tokens',
|
||
'OAuth登录': 'OAuth sign-in',
|
||
'LDAP认证': 'LDAP auth',
|
||
'常见问题': 'FAQ',
|
||
'快速开始': 'Quick start',
|
||
'部署': 'Deployment',
|
||
'配置流程': 'Configuration flow',
|
||
'反向代理': 'Reverse proxy',
|
||
'代理配置': 'Proxy config',
|
||
'多级代理': 'Multi-level proxy',
|
||
'架构说明': 'Architecture',
|
||
'相关概念': 'Concepts',
|
||
'关键策略': 'Key strategies',
|
||
'高级功能': 'Advanced features',
|
||
'创建统一模型': 'Create unified model',
|
||
'添加端点': 'Add endpoint',
|
||
'添加密钥': 'Add key',
|
||
'添加账号': 'Add account',
|
||
'授权': 'Authorization',
|
||
'获取授权': 'Authorize',
|
||
'Cookie授权': 'Cookie authorization',
|
||
'Claude sessionKey Cookie': 'Claude sessionKey cookie',
|
||
'粘贴 sessionKey Cookie 值或完整 Cookie 请求头': 'Paste a sessionKey cookie value or a complete Cookie header',
|
||
'每行粘贴一个 sessionKey Cookie 值或完整 Cookie 请求头,最多 20 个': 'Paste one sessionKey cookie value or complete Cookie header per line, up to 20',
|
||
'每行一个,最多 20 个': 'One per line, up to 20',
|
||
'批量授权': 'Batch authorize',
|
||
'Cookie 授权失败': 'Cookie authorization failed',
|
||
'授权中...': 'Authorizing...',
|
||
'浏览器登录': 'Browser sign-in',
|
||
'设备授权': 'Device authorization',
|
||
'导入授权': 'Import authorization',
|
||
'Agent Identity': 'Agent Identity',
|
||
'创建 Agent Identity 失败': 'Failed to create Agent Identity',
|
||
'Agent Identity 已保存,任务将在后台初始化': 'Agent Identity was saved; its task will initialize in the background',
|
||
'已保存': 'Saved',
|
||
'粘贴 AT 或 ChatGPT auth/session JSON': 'Paste an access token or ChatGPT auth/session JSON',
|
||
'ChatGPT auth/session JSON 格式无效': 'Invalid ChatGPT auth/session JSON',
|
||
'ChatGPT auth/session JSON 缺少 accessToken': 'ChatGPT auth/session JSON is missing accessToken',
|
||
'ChatGPT Access Token 缺少账号身份字段': 'ChatGPT access token is missing account identity claims',
|
||
'ChatGPT Access Token(JWT)不能为空': 'ChatGPT access token (JWT) is required',
|
||
'仅 Codex Provider 支持使用 Access Token 创建 Agent Identity': 'Only Codex providers support creating Agent Identity with an access token',
|
||
'使用 Access Token 创建 Agent Identity 时不能同时提交 Refresh Token': 'A refresh token cannot be submitted when creating Agent Identity with an access token',
|
||
'导入账号': 'Import accounts',
|
||
'授权已过期': 'Authorization expired',
|
||
'授权失败': 'Authorization failed',
|
||
'请重试': 'Please try again',
|
||
'重新开始': 'Start over',
|
||
'正在准备登录...': 'Preparing sign-in...',
|
||
'正在准备授权...': 'Preparing authorization...',
|
||
'正在注册设备...': 'Registering device...',
|
||
'前往登录': 'Go to sign-in',
|
||
'前往授权': 'Go to authorization',
|
||
'打开': 'Open',
|
||
'开始': 'Start',
|
||
'粘贴回调 URL': 'Paste callback URL',
|
||
'粘贴回调 URL 或授权码': 'Paste callback URL or authorization code',
|
||
'粘贴完整回调 URL 或授权码(code#state)': 'Paste the full callback URL or authorization code (code#state)',
|
||
'粘贴回调 URL 或 token': 'Paste callback URL or token',
|
||
'粘贴包含 token=...&state=... 的回调 URL;session token/apiKey 也可直接粘贴,普通 token 请用导入授权': 'Paste a callback URL containing token=...&state=...; session token/apiKey can also be pasted directly. Use import authorization for regular tokens.',
|
||
'在浏览器中完成授权': 'Complete authorization in the browser',
|
||
'授权完成后此页面将自动更新': 'This page updates automatically after authorization is complete',
|
||
'会话剩余': 'Session remaining',
|
||
'剩余': 'Remaining',
|
||
'MFA 验证码': 'MFA code',
|
||
'复制验证码': 'Copy verification code',
|
||
'打开授权页面': 'Open authorization page',
|
||
'授权后复制浏览器地址栏的 localhost 回调 URL。': 'After authorization, copy the localhost callback URL from the browser address bar.',
|
||
'使用个人 AWS Builder ID 进行设备授权,无需额外配置。': 'Use a personal AWS Builder ID for device authorization. No additional configuration is required.',
|
||
'输入或选择 Region': 'Enter or select Region',
|
||
'无匹配结果,回车使用自定义值': 'No matches. Press Enter to use a custom value.',
|
||
'TOTP Secret (可选, 2FA认证)': 'TOTP Secret (optional, 2FA)',
|
||
'Base32 secret, 如 JBSWY3DPEHPK3PXP': 'Base32 secret, e.g. JBSWY3DPEHPK3PXP',
|
||
'拖入 Grok 账号文件或点击选择': 'Drop a Grok account file or click to choose',
|
||
'拖入授权文件或点击选择': 'Drop an authorization file or click to choose',
|
||
'支持 .json / .txt,可多选、批量导入': 'Supports .json / .txt, multiple selection, and batch import',
|
||
'支持 .json / .txt,可多选': 'Supports .json / .txt and multiple selection',
|
||
'粘贴 Grok sso/session token,支持每行一个;或粘贴包含 token、sso_token、access_token、plan_type、pool_tier 的 JSON': 'Paste Grok sso/session tokens, one per line, or paste JSON containing token, sso_token, access_token, plan_type, and pool_tier.',
|
||
'粘贴 show-auth-token Token、API key 或 JSON 内容': 'Paste a show-auth-token token, API key, or JSON content',
|
||
'粘贴 Claude Refresh Token 或 Claude Code .credentials.json 内容': 'Paste a Claude refresh token or Claude Code .credentials.json',
|
||
'粘贴 Refresh Token / Access Token / Agent Identity JSON 内容': 'Paste a Refresh Token, Access Token, or Agent Identity JSON',
|
||
'plan_type / pool_tier 会作为账号套餐与能力特征保存,不是路由池选择。': 'plan_type / pool_tier are saved as account plan and capability traits, not as routing pool selection.',
|
||
'或手动粘贴 Grok Token': 'Or manually paste a Grok token',
|
||
'或手动粘贴 Token': 'Or manually paste a token',
|
||
'或选择 Grok Token 文件导入': 'Or choose a Grok token file to import',
|
||
'或选择 JSON 文件导入': 'Or choose a JSON file to import',
|
||
'导入中...': 'Importing...',
|
||
'拖入导入文件或点击选择': 'Drop import files or click to choose',
|
||
'或手动粘贴 JSON': 'Or paste JSON manually',
|
||
'读取失败': 'Failed to read',
|
||
'仅支持选择 1 个文件,已读取第一个文件': 'Only one file is supported. The first file was read.',
|
||
'仅支持 .json 或 .txt 文件': 'Only .json or .txt files are supported',
|
||
'文件读取失败': 'Failed to read file',
|
||
'登录并导入': 'Sign in and import',
|
||
'任务已提交': 'Task submitted',
|
||
'正在导入': 'Importing',
|
||
'导入完成': 'Import complete',
|
||
'导入失败': 'Import failed',
|
||
'批量导入失败': 'Batch import failed',
|
||
'批量导入完成': 'Batch import complete',
|
||
'批量导入成功': 'Batch import succeeded',
|
||
'获取文件列表失败': 'Failed to load file list',
|
||
'获取统计失败': 'Failed to load statistics',
|
||
'无法获取黑名单统计': 'Unable to load blacklist statistics',
|
||
'无法获取黑名单列表': 'Unable to load blacklist list',
|
||
'无法获取黑名单数据': 'Unable to load blacklist data',
|
||
'无法获取白名单列表': 'Unable to load whitelist list',
|
||
'无法添加 IP 到黑名单': 'Unable to add IP to blacklist',
|
||
'无法添加 IP 到白名单': 'Unable to add IP to whitelist',
|
||
'删除成功': 'Deleted successfully',
|
||
'确定要清理所有过期的文件映射吗?': 'Clean up all expired file mappings?',
|
||
'清理完成': 'Cleanup complete',
|
||
'清理失败': 'Cleanup failed',
|
||
'请输入邮箱和密码': 'Enter email and password',
|
||
'格式错误': 'Format error',
|
||
'请输入凭据数据': 'Enter credential data',
|
||
'无法解析输入内容,请检查格式': 'Unable to parse the input. Check the format.',
|
||
'初始化授权失败': 'Failed to initialize authorization',
|
||
'完成授权失败': 'Failed to complete authorization',
|
||
'发起设备授权失败': 'Failed to start device authorization',
|
||
'设备码已过期': 'Device code expired',
|
||
'邮箱密码': 'Email and password',
|
||
'Windsurf 密码': 'Windsurf password',
|
||
'名称(可选)': 'Name (optional)',
|
||
'未填写时使用邮箱': 'Uses email if left empty',
|
||
'最近错误': 'Recent errors',
|
||
'验证中...': 'Verifying...',
|
||
'验证': 'Verify',
|
||
'前往「模块管理 · 代理节点」添加': 'Go to "Modules · Proxy nodes" to add one',
|
||
'未设置,依次回退到提供商代理 → 系统代理': 'Not set; falls back to provider proxy, then system proxy',
|
||
'添加 API 端点': 'Add API endpoint',
|
||
'编辑密钥': 'Edit key',
|
||
'删除密钥': 'Delete key',
|
||
'修改 API 密钥配置': 'Modify API key configuration',
|
||
'为提供商添加新的 API 密钥': 'Add a new API key for the provider',
|
||
'密钥名称 *': 'Key name *',
|
||
'例如:主 Key、备用 Key 1': 'Example: Primary key, backup key 1',
|
||
'认证类型': 'Auth type',
|
||
'选择认证类型': 'Select auth type',
|
||
'API 密钥': 'API key',
|
||
'拖入 Service Account JSON 或点击选择': 'Drop Service Account JSON or click to select',
|
||
'支持 .json / .txt,单文件导入': 'Supports .json / .txt, single-file import',
|
||
'留空表示不修改,或粘贴完整的 Service Account JSON': 'Leave empty to keep unchanged, or paste the full Service Account JSON',
|
||
'粘贴完整的 Service Account JSON': 'Paste the full Service Account JSON',
|
||
'留空表示不修改;JSON 格式,包含 project_id、private_key 等字段': 'Leave empty to keep unchanged. JSON format, including project_id, private_key, and related fields.',
|
||
'JSON 格式,包含 project_id、private_key 等字段': 'JSON format, including project_id, private_key, and related fields.',
|
||
'可选的备注信息': 'Optional notes',
|
||
'支持的 API 格式 *': 'Supported API formats *',
|
||
'API 格式说明': 'API format help',
|
||
'选择此密钥支持的 API 格式及对应认证方式。OpenAI 格式固定使用 Bearer Token;Claude / Gemini 格式可选 API Key 或 Bearer Token(如 Claude Code 应使用 Bearer Token)。': 'Select the API formats this key supports and their auth methods. OpenAI format always uses Bearer Token; Claude / Gemini formats can use API Key or Bearer Token. Claude Code should use Bearer Token.',
|
||
'允许客户端认证方式不一致时使用': 'Allow when the client auth method differs',
|
||
'越小越优先': 'Lower values have higher priority',
|
||
'RPM 限制': 'RPM limit',
|
||
'自适应': 'Adaptive',
|
||
'留空自适应': 'Leave empty for adaptive',
|
||
'留空或 0 表示不限制': 'Leave empty or enter 0 for no limit',
|
||
'缓存 TTL': 'Cache TTL',
|
||
'分钟,0禁用': 'Minutes, 0 disables',
|
||
'熔断探测': 'Circuit probe',
|
||
'分钟,0-32': 'Minutes, 0-32',
|
||
'自动获取上游可用模型': 'Auto-fetch upstream models',
|
||
'定时更新上游模型, 配合模型映射使用': 'Periodically update upstream models for use with model mapping',
|
||
'包含规则': 'Include rules',
|
||
'排除规则': 'Exclude rules',
|
||
'gpt-*, claude-*, 留空包含全部': 'gpt-*, claude-*, leave empty to include all',
|
||
'逗号分隔,支持 * ? 通配符,不区分大小写': 'Comma-separated. Supports * and ? wildcards, case-insensitive.',
|
||
'无法保存:缺少提供商信息': 'Cannot save: missing provider information',
|
||
'请输入 Service Account JSON': 'Enter Service Account JSON',
|
||
'Service Account JSON 格式无效': 'Service Account JSON format is invalid',
|
||
'Service Account JSON 缺少必要字段 (client_email, private_key, project_id)': 'Service Account JSON is missing required fields (client_email, private_key, project_id)',
|
||
'请至少选择一个 API 格式': 'Select at least one API format',
|
||
'密钥已更新': 'Key updated',
|
||
'密钥已添加': 'Key added',
|
||
'保存密钥失败': 'Failed to save key',
|
||
'订阅配额': 'Subscription quota',
|
||
'每月': 'Every month on day',
|
||
'号重置': 'reset',
|
||
'密钥管理': 'Key management',
|
||
'账号管理': 'Account management',
|
||
'正在加载': 'Loading',
|
||
'未命名密钥': 'Unnamed key',
|
||
'下载 OAuth 授权文件': 'Download OAuth authorization file',
|
||
'复制密钥': 'Copy key',
|
||
'账号异常': 'Account issue',
|
||
'清除异常标记(确认账号已完成验证后使用)': 'Clear issue marker after confirming the account has completed verification',
|
||
'仅通过 Access Token 导入,无法自动刷新,到期后需要重新导入': 'Imported with Access Token only. It cannot refresh automatically and must be re-imported after expiration.',
|
||
'临时': 'Temporary',
|
||
'该账号尚未完成 Gemini Code Assist 激活,无法获取配额和使用模型': 'This account has not completed Gemini Code Assist activation, so quota and model usage cannot be fetched.',
|
||
'账号未激活': 'Account not activated',
|
||
'熔断': 'Circuit open',
|
||
'代理': 'Proxy',
|
||
'代理节点已设置': 'Proxy node set',
|
||
'设置代理节点': 'Set proxy node',
|
||
'当前使用独立代理': 'Currently using an individual proxy',
|
||
'未设置代理节点': 'No proxy node set',
|
||
'未设置,使用提供商级别代理': 'Not set; uses provider-level proxy',
|
||
'系统级格式转换已启用': 'System-level format conversion is enabled',
|
||
'已启用格式转换(点击关闭)': 'Format conversion enabled (click to disable)',
|
||
'启用格式转换': 'Enable format conversion',
|
||
'已配置故障转移规则(点击编辑)': 'Failover rules configured (click to edit)',
|
||
'配置故障转移规则': 'Configure failover rules',
|
||
'加载端点中': 'Loading endpoints',
|
||
'加载节点列表中...': 'Loading node list...',
|
||
'暂无可用节点': 'No available nodes',
|
||
'选择代理节点...': 'Select proxy node...',
|
||
'编辑端点': 'Edit endpoint',
|
||
'端点代理': 'Endpoint proxy',
|
||
'端点代理已更新': 'Endpoint proxy updated',
|
||
'端点代理已清除': 'Endpoint proxy cleared',
|
||
'设置端点代理节点': 'Set endpoint proxy node',
|
||
'端点已更新': 'Endpoint updated',
|
||
'端点已启用': 'Endpoint enabled',
|
||
'端点已停用': 'Endpoint disabled',
|
||
'请先关闭系统级开关': 'Turn off the system-level switch first',
|
||
'WebSocket 端点不支持格式转换': 'WebSocket endpoints do not support format conversion',
|
||
'请先关闭提供商级开关': 'Turn off the provider-level switch first',
|
||
'JSON 规则已应用': 'JSON rules applied',
|
||
'规则 JSON 必须是对象': 'Rules JSON must be an object',
|
||
'端点编辑状态不可用': 'Endpoint edit state is unavailable',
|
||
'该端点没有默认请求体规则': 'This endpoint has no default request body rules',
|
||
'已重置请求体为默认规则,请点击保存生效': 'Request body rules reset to defaults. Click save to apply.',
|
||
'请求头名称重复': 'Request header name is duplicated',
|
||
'该请求头已被其他规则处理': 'This request header is already handled by another rule',
|
||
'响应头名称重复': 'Response header name is duplicated',
|
||
'该响应头已被其他规则处理': 'This response header is already handled by another rule',
|
||
'字段路径重复': 'Field path is duplicated',
|
||
'该路径已被其他规则处理': 'This path is already handled by another rule',
|
||
'路径格式无效': 'Invalid path format',
|
||
'路径格式无效(不允许 .a / a. / a..b)': 'Invalid path format (.a / a. / a..b are not allowed)',
|
||
'值不能为空': 'Value cannot be empty',
|
||
'输入正则表达式': 'Enter a regular expression',
|
||
'有效的正则表达式': 'Valid regular expression',
|
||
'无效的 flags(仅允许 i/m/s)': 'Invalid flags. Only i/m/s are allowed.',
|
||
'点击验证 JSON': 'Click to validate JSON',
|
||
'有效的 JSON': 'Valid JSON',
|
||
'数组': 'array',
|
||
'对象': 'object',
|
||
'字符串': 'string',
|
||
'数字': 'number',
|
||
'布尔': 'boolean',
|
||
'(未设置)': '(not set)',
|
||
'(未知)': '(unknown)',
|
||
'末尾': 'end',
|
||
'必须是数组或 null': 'must be an array or null',
|
||
'必须是数组': 'must be an array',
|
||
'必须是对象': 'must be an object',
|
||
'必须是字符串': 'must be a string',
|
||
'无效': 'is invalid',
|
||
'是系统保留的请求头': 'is a system-reserved request header',
|
||
'是系统保留的响应头': 'is a system-reserved response header',
|
||
'是系统保留的顶层字段': 'is a system-reserved top-level field',
|
||
'JSON 格式无效': 'Invalid JSON format',
|
||
'插入位置不能为空': 'Insert position cannot be empty',
|
||
'位置必须为整数': 'Position must be an integer',
|
||
'正则表达式不能为空': 'Regular expression cannot be empty',
|
||
'flags 仅允许 i/m/s,非法字符': 'flags only allow i/m/s; invalid character',
|
||
'替换次数必须是大于等于 0 的整数': 'Replacement count must be an integer greater than or equal to 0',
|
||
'请输入 Base URL': 'Enter Base URL',
|
||
'固定流式(Codex OpenAI Responses,已锁定)': 'Force streaming (Codex OpenAI Responses, locked)',
|
||
'固定流式(点击切换为固定非流)': 'Force streaming (click to switch to force non-streaming)',
|
||
'固定非流(点击切换为跟随请求)': 'Force non-streaming (click to follow request)',
|
||
'跟随请求(点击切换为固定流式)': 'Follow request (click to force streaming)',
|
||
'固定流式': 'force streaming',
|
||
'固定非流': 'force non-streaming',
|
||
'跟随请求': 'follow request',
|
||
'配额详情': 'Quota details',
|
||
'账号配额': 'Account quota',
|
||
'模型配额': 'Model quota',
|
||
'周限额': 'Weekly limit',
|
||
'月限额': 'Monthly limit',
|
||
'5H限额': '5H limit',
|
||
'Spark 周': 'Spark weekly',
|
||
'Spark 5H': 'Spark 5H',
|
||
'后重置': 'until reset',
|
||
'已重置': 'Reset',
|
||
'账户访问被禁止': 'Account access forbidden',
|
||
'重置时间未知': 'Reset time unknown',
|
||
'账户已封禁': 'Account banned',
|
||
'使用额度': 'Usage quota',
|
||
'账号不可用': 'Account unavailable',
|
||
'日额度': 'Daily quota',
|
||
'周额度': 'Weekly quota',
|
||
'剩余额度': 'Remaining quota',
|
||
'点击编辑优先级': 'Edit priority',
|
||
'点击编辑倍率': 'Edit multiplier',
|
||
'同步失败': 'Sync failed',
|
||
'自动同步': 'Auto sync',
|
||
'确认清除': 'Confirm clear',
|
||
'清除账号异常标记': 'Clear account issue marker',
|
||
'已清除 OAuth 异常标记': 'OAuth issue marker cleared',
|
||
'密钥已删除': 'Key deleted',
|
||
'Key已完全恢复': 'Key fully recovered',
|
||
'已清除提供商代理': 'Provider proxy cleared',
|
||
'已清除账号代理,将使用提供商级别代理': 'Account proxy cleared; provider-level proxy will be used',
|
||
'优先级已更新': 'Priority updated',
|
||
'倍率已更新': 'Multiplier updated',
|
||
'请输入有效的倍率值': 'Enter a valid multiplier',
|
||
'倍率必须在 0.01 到 100 之间': 'Multiplier must be between 0.01 and 100',
|
||
'切换格式转换失败': 'Failed to toggle format conversion',
|
||
'后台刷新配额失败': 'Failed to refresh quota in the background',
|
||
'没有获取到配额信息(请检查账号是否已授权、project_id 是否存在)': 'No quota information was returned. Check whether the account is authorized and project_id exists.',
|
||
'Provider 不存在': 'Provider does not exist',
|
||
'未知节点': 'Unknown node',
|
||
'冷却中': 'Cooling down',
|
||
'速率受限': 'Rate limited',
|
||
'额度耗尽': 'Quota exhausted',
|
||
'刚刚更新': 'Updated just now',
|
||
'上次同步': 'Last sync',
|
||
'探测中': 'Probing',
|
||
'探测间隔': 'Probe interval',
|
||
'熔断器已打开': 'Circuit breaker is open',
|
||
'连续失败': 'consecutive failures',
|
||
'点击恢复按钮可重置熔断器': 'Use the recover button to reset the circuit breaker',
|
||
'重置熔断器并恢复健康状态': 'Reset circuit breaker and recover health',
|
||
'自动获取模型已启用': 'Auto model fetch is enabled',
|
||
'请先添加端点,然后再添加密钥': 'Add an endpoint before adding keys',
|
||
'提示': 'Notice',
|
||
'模型权限': 'Model permissions',
|
||
'关联模型': 'Link models',
|
||
'模型映射': 'Model mapping',
|
||
'优先级管理': 'Priority management',
|
||
'拖拽调整顺序,点击序号可编辑(相同数字为同级),保存后自动切换对应的调度策略': 'Drag to reorder. Click a number to edit it (same number means same priority). Saving automatically switches to the matching scheduling strategy.',
|
||
'优先级': 'Priority',
|
||
'Key 优先': 'Key first',
|
||
'暂无提供商': 'No providers',
|
||
'暂无 API Key': 'No API key',
|
||
'点击编辑优先级,相同数字为同级': 'Edit priority. Same number means same priority.',
|
||
'Provider 停用': 'Provider disabled',
|
||
'当前模式:': 'Current mode:',
|
||
'优先使用已缓存的Provider,利用Prompt Cache': 'Prefer cached providers to use Prompt Cache',
|
||
'同优先级内随机轮换,不考虑缓存': 'Randomly rotate within the same priority, ignoring cache',
|
||
'严格按优先级顺序,不考虑缓存': 'Strictly follow priority order, ignoring cache',
|
||
'固定顺序': 'Fixed order',
|
||
'保存中': 'Saving',
|
||
'加载 Key 列表失败': 'Failed to load key list',
|
||
'Key 已启用': 'Key enabled',
|
||
'Key 已停用': 'Key disabled',
|
||
'优先级已保存': 'Priority saved',
|
||
'官方文档': 'Official documentation',
|
||
'项目部署': 'Project deployment',
|
||
'Docker 预构建镜像': 'Docker prebuilt image',
|
||
'预构建镜像': 'Prebuilt image',
|
||
'克隆代码': 'Clone repository',
|
||
'启动依赖': 'Start dependencies',
|
||
'安装前端依赖': 'Install frontend dependencies',
|
||
'启动开发服务': 'Start development services',
|
||
'生成密钥并填入 .env': 'Generate keys and write them to .env',
|
||
'生成密钥': 'Generate keys',
|
||
'自动执行数据库迁移': 'Runs database migrations automatically',
|
||
'可选,make dev 会自动启动': 'Optional; make dev starts this automatically',
|
||
'首次本地开发': 'First local development setup',
|
||
'本地开发': 'Local development',
|
||
'配置环境变量': 'Configure environment variables',
|
||
'部署 / 更新': 'Deploy / update',
|
||
'升级前备份': 'Backup before upgrade',
|
||
'复制到目标机器执行': 'Copy and run on the target machine',
|
||
'一键安装并配置 CLI': 'One-click install and configure CLI',
|
||
'打开通知服务': 'Open notification service',
|
||
'占位符说明': 'Placeholder notes',
|
||
'向模型说明占位符含义': 'Explain placeholder meaning to the model',
|
||
'敏感信息保护': 'Sensitive information protection',
|
||
'IP 限制': 'IP restrictions',
|
||
'IP 地址': 'IP address',
|
||
'IP地址': 'IP address',
|
||
'事件类型': 'Event type',
|
||
'客户端': 'Client',
|
||
'服务端': 'Server',
|
||
'上游': 'Upstream',
|
||
'下游': 'Downstream',
|
||
'请求头': 'Request headers',
|
||
'响应头': 'Response headers',
|
||
'请求体': 'Request body',
|
||
'响应体': 'Response body',
|
||
'复制请求体': 'Copy request body',
|
||
'复制响应体': 'Copy response body',
|
||
'展开全部': 'Expand all',
|
||
'收缩全部': 'Collapse all',
|
||
'切换到对话视图': 'Switch to conversation view',
|
||
'切换到 JSON 视图': 'Switch to JSON view',
|
||
'切到 JSON 视图': 'Switch to JSON view',
|
||
'切回表单视图': 'Switch back to form view',
|
||
'排序': 'Sort',
|
||
'排名': 'Rank',
|
||
'平均响应': 'Average response',
|
||
'失败率': 'Failure rate',
|
||
'峰值并发': 'Peak concurrency',
|
||
'慢请求': 'Slow requests',
|
||
'延迟': 'Latency',
|
||
'最后心跳': 'Last heartbeat',
|
||
'分钟': 'minutes',
|
||
'小时': 'hours',
|
||
'天': 'days',
|
||
'周': 'Week',
|
||
'少': 'Less',
|
||
'多': 'More',
|
||
'周日': 'Sun',
|
||
'周二': 'Tue',
|
||
'周四': 'Thu',
|
||
'周六': 'Sat',
|
||
'一': 'Mon',
|
||
'三': 'Wed',
|
||
'五': 'Fri',
|
||
'低': 'Low',
|
||
'中': 'Medium',
|
||
'高': 'High',
|
||
'弱密码': 'Weak password',
|
||
'中等密码': 'Medium password',
|
||
'强密码': 'Strong password',
|
||
'密码策略': 'Password policy',
|
||
'开放用户注册': 'Open user registration',
|
||
'自动删除过期 Key': 'Auto-delete expired keys',
|
||
'全局格式转换': 'Global format conversion',
|
||
'注册人机验证': 'Registration human verification',
|
||
'清空': 'Clear',
|
||
'允许的 Hostname': 'Allowed hostnames',
|
||
'邀请返利': 'Referral rewards',
|
||
'返利方式': 'Reward method',
|
||
'按充值比例': 'By top-up ratio',
|
||
'按邀请人头': 'By referred users',
|
||
'两者同时启用': 'Enable both',
|
||
'充值返利比例 (%)': 'Top-up reward ratio (%)',
|
||
'人头返利金额 (美元)': 'Per-user reward amount (USD)',
|
||
'人头返利触发时机': 'Per-user reward trigger',
|
||
'注册成功': 'Registration complete',
|
||
'邮箱验证完成': 'Email verification complete',
|
||
'首笔真实支付完成': 'First real payment complete',
|
||
'启用自动清理': 'Enable automatic cleanup',
|
||
'立即清理': 'Clean now',
|
||
'清理中…': 'Cleaning...',
|
||
'详细记录保留天数': 'Detailed record retention days',
|
||
'压缩记录保留天数': 'Compressed record retention days',
|
||
'请求头保留天数': 'Request header retention days',
|
||
'请求记录保存天数': 'Request record retention days',
|
||
'每批次清理记录数': 'Cleanup batch size',
|
||
'审计日志保留天数': 'Audit log retention days',
|
||
'候选记录保留天数': 'Candidate record retention days',
|
||
'候选记录清理批次': 'Candidate cleanup batch',
|
||
'代理 1m 指标保留天数': 'Proxy 1m metric retention days',
|
||
'代理 1h 指标保留天数': 'Proxy 1h metric retention days',
|
||
'代理指标清理批次': 'Proxy metric cleanup batch',
|
||
'详细日志阶段': 'Detailed log stage',
|
||
'压缩日志阶段': 'Compressed log stage',
|
||
'统计阶段': 'Statistics stage',
|
||
'归档删除': 'Archive deletion',
|
||
'候选记录': 'Candidate records',
|
||
'代理指标': 'Proxy metrics',
|
||
'刷新健康状态': 'Refresh health status',
|
||
'刷新上游模型': 'Refresh upstream models',
|
||
'从提供商获取模型': 'Fetch models from provider',
|
||
'上游模型': 'Upstream models',
|
||
'关联提供商': 'Linked providers',
|
||
'删除映射': 'Delete mapping',
|
||
'删除映射组': 'Delete mapping group',
|
||
'价格 ($/M)': 'Price ($/M)',
|
||
'按次计费': 'Per-request billing',
|
||
'按次:': 'Per request:',
|
||
'/次': '/request',
|
||
'单价 ($/秒)': 'Unit price ($/second)',
|
||
'分辨率': 'Resolution',
|
||
'缓存读取': 'Cache read',
|
||
'缓存创建': 'Cache creation',
|
||
'1h 缓存': '1h cache',
|
||
'上限像素': 'Max pixels',
|
||
'创建新 API Key': 'Create new API key',
|
||
'创建于': 'Created at',
|
||
'无限额度': 'Unlimited quota',
|
||
'并发限制': 'Concurrency limit',
|
||
'并发请求上限': 'Concurrent request limit',
|
||
'余额:': 'Balance:',
|
||
'套餐中心': 'Billing center',
|
||
'购买每日额度或会员权益': 'Purchase daily quota or membership benefits',
|
||
'当前权益': 'Current benefits',
|
||
'只展示仍在有效期内的套餐权益': 'Only active plan benefits are shown',
|
||
'可购买套餐': 'Available plans',
|
||
'支付成功后由回调自动发放权益': 'Benefits are issued automatically by callback after successful payment',
|
||
'暂无可购买套餐': 'No plans available for purchase',
|
||
'管理员上架套餐后会显示在这里': 'Plans will appear here after an administrator publishes them',
|
||
'套餐 Stripe 支付': 'Plan Stripe payment',
|
||
'完成支付后,套餐权益会由 Stripe Webhook 自动发放。': 'After payment, plan benefits are issued automatically by the Stripe webhook.',
|
||
'支付套餐': 'Pay for plan',
|
||
'配置每日额度、会员权益和混合套餐': 'Configure daily quota, membership benefits, and mixed plans',
|
||
'混合套餐': 'Mixed plan',
|
||
'系统公告': 'System announcements',
|
||
'统计周期': 'Statistics period',
|
||
'每日模型成本': 'Daily model cost',
|
||
'提供商成本分布': 'Provider cost distribution',
|
||
'日期': 'Date',
|
||
'使用模型': 'Models used',
|
||
'使用提供商': 'Providers used',
|
||
'我的 API Keys': 'My API keys',
|
||
'费用(USD)': 'Cost (USD)',
|
||
'调用次数': 'Call count',
|
||
'总任务数': 'Total tasks',
|
||
'已注册': 'Registered',
|
||
'任务 Key...': 'Task key...',
|
||
'总文件数': 'Total files',
|
||
'有效文件': 'Active files',
|
||
'支持的 Key': 'Supported keys',
|
||
'上传文件': 'Upload files',
|
||
'暂无可用的 Key,请先配置具有「Gemini 文件 API」能力的 Key': 'No available keys. Configure a key with Gemini Files API capability first.',
|
||
'选择要上传到的 Key(可多选):': 'Select keys to upload to (multiple allowed):',
|
||
'正在上传到': 'Uploading to',
|
||
'个 Key...': 'keys...',
|
||
'拖拽文件到此处,或': 'Drag files here, or',
|
||
'点击选择': 'click to select',
|
||
'请先选择至少一个 Key': 'Select at least one key first',
|
||
'支持视频、图片、音频、文档等,最大 2GB,有效期 48 小时': 'Supports video, images, audio, documents, and more. Max 2 GB, valid for 48 hours.',
|
||
'文件缓存': 'File cache',
|
||
'文件类型分布': 'File type distribution',
|
||
'文件映射': 'File mappings',
|
||
'搜索文件名...': 'Search file name...',
|
||
'包含过期': 'Include expired',
|
||
'清理过期': 'Clean expired',
|
||
'暂无文件映射': 'No file mappings',
|
||
'用户通过 Gemini Files API 上传文件后会在此显示': 'Files uploaded through the Gemini Files API appear here.',
|
||
'我的邀请': 'My referrals',
|
||
'分享邀请码后,符合规则的返利会进入赠款余额': 'After sharing your invite code, eligible rewards are credited to your gift balance.',
|
||
'邀请数据暂不可用': 'Referral data is currently unavailable',
|
||
'加载邀请数据失败': 'Failed to load referral data',
|
||
'查看邀请关系、返利记录和失败返利处理状态': 'View referral relationships, reward records, and failed reward handling status',
|
||
'邀请关系': 'Referral relationships',
|
||
'邀请人': 'Inviter',
|
||
'被邀请人': 'Invitee',
|
||
'邀请码': 'Invite code',
|
||
'邀请链接': 'Invite link',
|
||
'绑定时间': 'Bound at',
|
||
'首付状态': 'First payment status',
|
||
'已首付': 'First payment completed',
|
||
'未首付': 'No first payment',
|
||
'返利记录': 'Reward records',
|
||
'订单号': 'Order number',
|
||
'返利类型': 'Reward type',
|
||
'比例返利': 'Percentage reward',
|
||
'人头返利': 'Per-user reward',
|
||
'待发': 'Pending issue',
|
||
'已发': 'Issued',
|
||
'已作废': 'Voided',
|
||
'已冲回': 'Reversed',
|
||
'来源订单': 'Source order',
|
||
'冲回': 'Reversal',
|
||
'暂无邀请关系': 'No referral relationships',
|
||
'总邀请': 'Total referrals',
|
||
'有效邀请': 'Effective referrals',
|
||
'已发返利': 'Issued rewards',
|
||
'待发返利': 'Pending rewards',
|
||
'已冲回返利': 'Reversed rewards',
|
||
'统一管理资金流水、退款审批、充值订单与支付回调': 'Manage wallet ledger, refund approvals, top-up orders, and payment callbacks in one place',
|
||
'资金流水': 'Wallet ledger',
|
||
'退款审批': 'Refund approvals',
|
||
'回调日志': 'Callback logs',
|
||
'一级分类': 'Primary category',
|
||
'二级分类': 'Secondary category',
|
||
'全部二级': 'All secondary categories',
|
||
'归属': 'Owner',
|
||
'归属类型': 'Owner type',
|
||
'独立密钥钱包': 'Standalone key wallet',
|
||
'暂无资金流水': 'No wallet ledger entries',
|
||
'当前筛选条件下没有资金动作记录': 'No wallet transactions match the current filters',
|
||
'支付配置': 'Payment configuration',
|
||
'配置易支付、支付宝官方、微信支付官方和 Stripe': 'Configure EPay, official Alipay, official WeChat Pay, and Stripe',
|
||
'易支付': 'EPay',
|
||
'支付宝官方': 'Official Alipay',
|
||
'微信支付官方': 'Official WeChat Pay',
|
||
'测试配置': 'Test configuration',
|
||
'网关状态': 'Gateway status',
|
||
'退款能力': 'Refund capability',
|
||
'用户退款': 'User refunds',
|
||
'密钥状态': 'Key status',
|
||
'汇率': 'Exchange rate',
|
||
'查看系统所有操作记录': 'View all system operation records',
|
||
'暂无审计记录': 'No audit records',
|
||
'用户统计': 'User statistics',
|
||
'查看用户排行榜与使用趋势': 'View user leaderboard and usage trends',
|
||
'对比用户(可选)': 'Compare user (optional)',
|
||
'不对比': 'No comparison',
|
||
'用户排行榜': 'User leaderboard',
|
||
'用户摘要': 'User summary',
|
||
'错误率': 'Error rate',
|
||
'用户使用趋势': 'User usage trend',
|
||
'用户对比趋势': 'User comparison trend',
|
||
'收起用量分析': 'Collapse usage analysis',
|
||
'展开用量分析': 'Expand usage analysis',
|
||
'总体活跃天数': 'Overall active days',
|
||
'我的活跃天数': 'My active days',
|
||
'请求间隔时间线': 'Request interval timeline',
|
||
'我的请求间隔': 'My request interval',
|
||
'按模型分析': 'By-model analysis',
|
||
'按提供商分析': 'By-provider analysis',
|
||
'按 API 格式分析': 'By API format analysis',
|
||
'输出 cache': 'Output cache',
|
||
'cache命中率': 'Cache hit rate',
|
||
'输出': 'Output',
|
||
'效率': 'Efficiency',
|
||
'统一查看端点、模型健康状态,先从概览判断风险,再进入具体视角排查关联健康。': 'View endpoint and model health in one place. Use the overview to identify risk, then drill into each perspective.',
|
||
'统一查看端点、模型、提供商健康状态,先从概览判断风险,再进入具体视角排查关联健康。': 'View endpoint, model, and provider health in one place. Use the overview to identify risk, then drill into each perspective.',
|
||
'总体状态': 'Overall status',
|
||
'项健康对象': 'health objects',
|
||
'个视角已加载': 'views loaded',
|
||
'异常端点': 'Unhealthy endpoints',
|
||
'异常模型': 'Unhealthy models',
|
||
'异常提供商': 'Unhealthy providers',
|
||
'请求总量': 'Total requests',
|
||
'当前回溯窗口内参与健康统计的请求': 'Requests included in health statistics for the current lookback window',
|
||
'综合概览': 'Overview',
|
||
'点击视角卡片快速跳转到对应健康列表': 'Click a perspective card to jump to the matching health list',
|
||
'端点视角': 'Endpoint perspective',
|
||
'按 API 入口定位入口层健康': 'Locate ingress-layer health by API entry',
|
||
'模型视角': 'Model perspective',
|
||
'按模型聚合查看跨提供商健康': 'Aggregate by model to view cross-provider health',
|
||
'提供商视角': 'Provider perspective',
|
||
'按提供商定位供应商侧波动': 'Locate provider-side volatility by provider',
|
||
'总数': 'Total',
|
||
'异常': 'Unhealthy',
|
||
'波动': 'Warning',
|
||
'部分暂无请求': 'Partly no requests',
|
||
'正常': 'Normal',
|
||
'端点健康监控': 'Endpoint health monitor',
|
||
'模型健康监控': 'Model health monitor',
|
||
'提供商健康监控': 'Provider health monitor',
|
||
'IP 安全': 'IP security',
|
||
'黑名单 IP 数量': 'Blacklisted IP count',
|
||
'白名单 IP 数量': 'Whitelisted IP count',
|
||
'IP 黑名单': 'IP blacklist',
|
||
'IP 白名单': 'IP whitelist',
|
||
'管理被禁止访问的 IP 地址': 'Manage blocked IP addresses',
|
||
'被禁止访问的 IP 地址': 'Blocked IP addresses',
|
||
'可信任的 IP 地址 (支持 CIDR 格式)': 'Trusted IP addresses (CIDR supported)',
|
||
'添加黑名单': 'Add blacklist entry',
|
||
'添加白名单': 'Add whitelist entry',
|
||
'暂无黑名单 IP': 'No blacklisted IPs',
|
||
'暂无白名单 IP': 'No whitelisted IPs',
|
||
'移除': 'Remove',
|
||
'运维总览': 'Operations overview',
|
||
'统一查看流量、吞吐、延迟、错误、上游健康、缓存与审计风险': 'View traffic, throughput, latency, errors, upstream health, cache, and audit risks in one place',
|
||
'自动刷新 10s': 'Auto refresh 10s',
|
||
'刷新运维总览': 'Refresh operations overview',
|
||
'流量与吞吐': 'Traffic and throughput',
|
||
'请求、Token 与费用趋势,按当前时间窗口聚合': 'Requests, tokens, and cost trends aggregated by the current time window',
|
||
'实时并发': 'Realtime concurrency',
|
||
'网关、全局锁与代理通道': 'Gateway, global locks, and proxy channels',
|
||
'本机处理中': 'Local in-flight',
|
||
'本机可接入': 'Local available',
|
||
'全局处理中': 'Global in-flight',
|
||
'全局可接入': 'Global available',
|
||
'代理活跃流': 'Active proxy streams',
|
||
'代理连接': 'Proxy connections',
|
||
'队列利用率': 'Queue utilization',
|
||
'选择压力': 'Selection pressure',
|
||
'延迟与首字': 'Latency and first byte',
|
||
'调度与策略': 'Scheduling and strategy',
|
||
'了解 Aether 内部的日志记录、智能调度模式以及服务限制策略。': 'Learn about request logs, intelligent scheduling modes, and service limit policies inside Aether.',
|
||
'在系统设置中,您可以修改请求体记录详情等级,以便于调试和审计。': 'In system settings, you can change the request-body logging detail level for debugging and auditing.',
|
||
'日志等级': 'Log level',
|
||
'记录内容': 'Recorded content',
|
||
'基本请求信息(IP, 模型, 耗时, Token 等)': 'Basic request information (IP, model, duration, tokens, etc.)',
|
||
'完整的请求体与响应体 (Payloads)': 'Full request and response bodies (payloads)',
|
||
'请求体压缩清理': 'Request body compression cleanup',
|
||
'为节省数据库空间与提高查询性能,系统提供自动请求体清理与压缩策略,将历史请求详情定期冷热分离并清理。': 'To save database space and improve query performance, the system provides automatic request-body cleanup and compression policies that periodically separate and clean historical request details.',
|
||
'平台内置多个定时任务,用于模型列表同步、缓存清理、余额监控及统计数据聚合等周期性操作。': 'The platform includes scheduled tasks for model-list sync, cache cleanup, balance monitoring, statistics aggregation, and other recurring operations.',
|
||
'文档核心': 'Documentation core',
|
||
'深入理解 Aether 运行时的核心模块和层级结构。': 'Understand the core modules and hierarchy of the Aether runtime.',
|
||
'1. 左侧模型选择、搜索区域': '1. Left model selection and search area',
|
||
'模型来源:opencode 维护的 https://models.dev': 'Model source: https://models.dev maintained by opencode',
|
||
'仅显示几个官方模型提供商,可以通过搜索获取更多模型。': 'Only a few official model providers are shown; search to find more models.',
|
||
'2. 右侧参数配置区域': '2. Right-side parameter configuration area',
|
||
'手动添加模型 或 选择模型后自动填写。': 'Add a model manually or auto-fill after selecting one.',
|
||
'模型偏好:标定这个模型是否支持这些能力,一般情况下可不选。': 'Model preferences: mark whether this model supports these capabilities. Usually optional.',
|
||
'价格配置:': 'Pricing configuration:',
|
||
'计费方式:Token价格 + 按次价格 + 视频计费 = 最终计费': 'Billing method: token price + per-request price + video billing = final billing',
|
||
'价格阶梯:以总Token数落在哪个区间为准,并非按阶梯溢出补全式计费': 'Price tiers use the total token range, not tiered overflow pricing.',
|
||
'高级使用': 'Advanced usage',
|
||
'解锁 Aether 的自定义请求修改、智能转换机制以及进阶配置。': 'Unlock custom request modification, intelligent conversion, and advanced configuration in Aether.',
|
||
'格式转换机制允许非原生接口的请求通过 Gateway 转为下游需要的格式,这一转换发生在多个层级:': 'Format conversion allows non-native API requests to be converted by the gateway into the format required downstream. This happens at several levels:',
|
||
'全局格式转换:': 'Global format conversion:',
|
||
'在系统层面全局开启或关闭的默认转换规则。': 'Default conversion rules enabled or disabled globally at the system level.',
|
||
'提供商级转换:': 'Provider-level conversion:',
|
||
'针对某个特定提供商的所有请求进行特定的格式转换配置。': 'Configure format conversion for all requests to a specific provider.',
|
||
'端点级转换:': 'Endpoint-level conversion:',
|
||
'针对某个具体端点的细粒度转换支持。': 'Fine-grained conversion support for a specific endpoint.',
|
||
'请求上游固定非流/流式': 'Force upstream non-streaming/streaming',
|
||
'部分提供商在流式或非流式表现上可能存在差异,此功能可强制在请求上游时使用指定的流式/非流式格式(并在前端按用户请求还原)。': 'Some providers behave differently for streaming and non-streaming. This feature can force a specified upstream streaming mode and restore the response according to the user request.',
|
||
'答疑解惑': 'Questions and troubleshooting',
|
||
'在使用 Aether 过程中遇到的常见问题与排错指南。': 'Common questions and troubleshooting guidance for using Aether.',
|
||
'1. 为什么发生错误没有进行故障转移?': '1. Why did failover not happen after an error?',
|
||
'故障转移机制(Failover)依赖于配置的重试策略和上游返回的错误码类型。通常只有在遇到 429 (Too Many Requests) 或 5xx (Server Errors) 时,并且在”最大重试次数”允许的范围内,才会触发故障转移。对于 400 (Bad Request) 或 401 (Unauthorized) 这种客户端确切错误,为避免持续无效重试,系统可能直接中断请求并返回错误。同时也要检查调度模式是否支持故障转移(例如固定顺序模式或缓存亲和性强绑定时可能会影响行为)。': 'Failover depends on the configured retry policy and the upstream error type. It usually triggers only for 429 or 5xx responses within the max retry limit. For exact client errors such as 400 or 401, the system may stop immediately to avoid invalid retries. Also check whether the scheduling mode supports failover, because fixed order or strong cache affinity can affect behavior.',
|
||
'2. 如何排查请求不通的问题?': '2. How do I troubleshoot unreachable requests?',
|
||
'建议首先检查【系统设置】中的请求体记录等级是否设为 `Full`,以便抓取完整的上下行数据。然后检查对应的【提供商端点】的 Base URL 和 API 格式是否正确匹配。如果开启了带来,排查【代理配置】优先级。': 'First check whether request-body logging in System settings is set to `Full` so complete upstream and downstream data can be captured. Then verify the provider endpoint Base URL and API format. If proxying is enabled, check proxy configuration priority.',
|
||
'分组管理': 'Group management',
|
||
'全选筛选结果': 'Select all filtered results',
|
||
'个,已选': 'items, selected',
|
||
'个用户': 'users',
|
||
'条': 'items',
|
||
'个': 'items',
|
||
'共': 'Total',
|
||
}
|
||
|
||
const legacyPhraseEnglishMessages: Array<[string, string]> = [
|
||
['缓存读', 'Cache reads'],
|
||
['加载延迟百分位中', 'Loading latency percentiles'],
|
||
['当前时间窗口暂无上游样本', 'No upstream samples in the current time window'],
|
||
['资源、数据流与缓存', 'Resources, data flow, and cache'],
|
||
['代理节点资源、WebSocket 流量、Redis Key 分类与缓存命中', 'Proxy node resources, WebSocket traffic, Redis key categories, and cache hits'],
|
||
['亲和缓存', 'Affinity cache'],
|
||
['最近错误、熔断事件和可疑活动入口', 'Recent errors, circuit breaker events, and suspicious activity entry points'],
|
||
['当前没有近期错误', 'No recent errors'],
|
||
['运维入口', 'Operations entry points'],
|
||
['常用排障视角', 'Common troubleshooting views'],
|
||
['计费参数', 'Billing parameters'],
|
||
['用户充值按美元金额下单,实际收款金额按这里的币种、汇率和通道手续费率计算', 'User top-ups are ordered in USD. The actual received amount is calculated from the currency, exchange rate, and channel fee rate here.'],
|
||
['通道值会传给易支付 type 字段', 'The channel value is passed to the EPay type field'],
|
||
['通道值决定用户侧展示和后端创建订单模式', 'The channel value controls user-facing display and the backend order creation mode'],
|
||
['添加通道', 'Add channel'],
|
||
['通道值', 'Channel value'],
|
||
['显示名称', 'Display name'],
|
||
['手续费率 (%)', 'Fee rate (%)'],
|
||
['最后更新:', 'Last updated:'],
|
||
['密钥留空会保留原密钥;回调地址留空时后端会使用当前 API 访问地址', 'Leave the key empty to keep the current key. If the callback URL is empty, the backend uses the current API access URL.'],
|
||
['桌面优先扫码单,失败再走收银台;移动优先手机网站支付。', 'Desktop prioritizes QR-code orders and falls back to checkout; mobile prioritizes mobile web payment.'],
|
||
['当面付 / 扫码支付', 'In-person / QR-code payment'],
|
||
['开通:需开通当面付或扫码支付能力。', 'Enablement: in-person or QR-code payment capability is required.'],
|
||
['调用:桌面端下单时优先调用', 'Invocation: desktop orders call'],
|
||
['前台直接渲染二维码。', 'and render the QR code directly in the frontend.'],
|
||
['降级:接口不可用或返回失败时,自动降级到电脑网站支付。', 'Fallback: when the API is unavailable or fails, automatically fall back to desktop web payment.'],
|
||
['电脑网站支付', 'Desktop web payment'],
|
||
['开通:需开通电脑网站支付。', 'Enablement: desktop web payment is required.'],
|
||
['调用:桌面端当面付不可用时调用', 'Invocation: when desktop in-person payment is unavailable, call'],
|
||
['并继续以返回链接渲染成二维码。', 'and continue rendering the returned link as a QR code.'],
|
||
['降级:同时保留打开收银台入口,用户可手动重新拉起支付页。', 'Fallback: keep the checkout entry so users can reopen the payment page manually.'],
|
||
['手机网站支付', 'Mobile web payment'],
|
||
['开通:需开通手机网站支付。', 'Enablement: mobile web payment is required.'],
|
||
['调用:移动端优先调用', 'Invocation: mobile clients first call'],
|
||
['跳转支付宝收银台。', 'and redirect to Alipay checkout.'],
|
||
['降级:未开通或返回异常时,前端自动改走扫码支付并提示未开通移动支付。', 'Fallback: when unavailable or failed, the frontend switches to QR-code payment and warns that mobile payment is not enabled.'],
|
||
['桌面优先 Native 扫码,移动端微信浏览器优先 JSAPI,非微信浏览器兜底 H5。', 'Desktop prioritizes Native QR payment. Mobile WeChat browser prioritizes JSAPI, and non-WeChat browsers fall back to H5.'],
|
||
['开通:需开通 Native 或扫码支付能力。', 'Enablement: Native or QR-code payment capability is required.'],
|
||
['调用:桌面端默认调用 Native,前台会渲染二维码内容。', 'Invocation: desktop calls Native by default, and the frontend renders the QR code content.'],
|
||
['降级:移动端无法走 JSAPI 或 H5 时,也会自动回退到这里。', 'Fallback: mobile also falls back here when JSAPI or H5 is unavailable.'],
|
||
['JSAPI / 公众号支付', 'JSAPI / official account payment'],
|
||
['开通:需开通公众号支付,并保证当前浏览器在微信内且能拿到 OpenID。', 'Enablement: official account payment is required, and the current browser must be inside WeChat with an available OpenID.'],
|
||
['调用:微信内浏览器完成授权后调用 JSAPI,直接拉起微信收银台。', 'Invocation: after authorization in WeChat, call JSAPI to open WeChat checkout directly.'],
|
||
['降级:未配置或拉起失败时,自动改走扫码支付。', 'Fallback: when not configured or launch fails, automatically switch to QR-code payment.'],
|
||
['H5 支付', 'H5 payment'],
|
||
['开通:需开通 H5 支付。', 'Enablement: H5 payment is required.'],
|
||
['调用:移动端非微信浏览器且客户端 IP 可用时调用 H5,跳转微信收银台。', 'Invocation: for mobile non-WeChat browsers with a usable client IP, call H5 and redirect to WeChat checkout.'],
|
||
['降级:未开通 H5 或下单失败时,自动改走扫码支付。', 'Fallback: when H5 is not enabled or order creation fails, automatically switch to QR-code payment.'],
|
||
['当前表单默认共用一个 App ID,适合同主体下统一配置网页、移动和公众号场景。', 'This form uses one App ID by default, suitable for unified web, mobile, and official account scenarios under the same merchant entity.'],
|
||
['统一查看端点、模型健康状态,先从概览判断风险,再进入具体视角排查关联健康。', 'View endpoint and model health in one place. Use the overview to identify risk, then drill into each perspective for related health checks.'],
|
||
['统一查看端点、模型、提供商健康状态,先从概览判断风险,再进入具体视角排查关联健康。', 'View endpoint, model, and provider health in one place. Use the overview to identify risk, then drill into each perspective for related health checks.'],
|
||
['基于真实请求统计端点可用率、平均耗时、平均TTFB 与平均速度', 'Based on real request statistics: endpoint availability, average duration, average TTFB, and average speed'],
|
||
['基于真实请求统计模型可用率、平均耗时、平均TTFB 与平均速度', 'Based on real request statistics: model availability, average duration, average TTFB, and average speed'],
|
||
['仅展示活跃提供商,点击详情查看该提供商关联的端点与模型健康', 'Only active providers are shown. Click details to view linked endpoint and model health for this provider.'],
|
||
['自定义站点名称和副标题,影响导航栏、登录页、指南页面和邮件等全站显示', 'Customize the site name and subtitle used across the navigation bar, sign-in page, guide pages, emails, and other site-wide surfaces'],
|
||
['显示在导航栏品牌名称右方', 'Shown to the right of the brand name in the navigation bar'],
|
||
['导出、导入或清空系统数据', 'Export, import, or clear system data'],
|
||
['普通用户、用户组、API Keys 与钱包快照(不含管理员)', 'Regular users, user groups, API keys, and wallet snapshots (excluding administrators)'],
|
||
['配置与用户数据的一体化备份,包含用户、用户组、API Keys 与钱包快照', 'Integrated backup of configuration and user data, including users, user groups, API keys, and wallet snapshots'],
|
||
['后台删除所有提供商、端点、API Key 和模型配置', 'Delete all providers, endpoints, API keys, and model configuration in the background'],
|
||
['后台删除所有非管理员用户及其 API Keys', 'Delete all non-admin users and their API keys in the background'],
|
||
['后台清空全部使用记录和请求候选记录', 'Clear all usage records and request candidate records in the background'],
|
||
['后台删除全部审计日志记录', 'Delete all audit log records in the background'],
|
||
['后台分批清空所有请求/响应体数据,保留统计信息', 'Clear all request/response body data in batches while keeping statistics'],
|
||
['后台删除统计聚合数据并重建,保留原始使用记录', 'Delete and rebuild statistics aggregates while keeping raw usage records'],
|
||
['开启后同步生图外层 HTTP 状态固定为 200,上游失败需读取响应体 error.upstream_status', 'When enabled, synchronous image generation always returns outer HTTP 200; read response body error.upstream_status for upstream failures'],
|
||
['开启后标准文本非流式接口外层 HTTP 状态固定为 200,上游失败需读取响应体 error.upstream_status', 'When enabled, standard text non-streaming APIs always return outer HTTP 200; read response body error.upstream_status for upstream failures'],
|
||
['配置 SMTP 服务用于发送验证码邮件', 'Configure SMTP service for verification code emails'],
|
||
['通常是您的邮箱地址', 'Usually your email address'],
|
||
['常用端口: 587 (TLS), 465 (SSL), 25 (无加密)', 'Common ports: 587 (TLS), 465 (SSL), 25 (no encryption)'],
|
||
['SSL (隐式加密)', 'SSL (implicit encryption)'],
|
||
['控制用户注册时的邮箱验证要求和后缀限制', 'Control email verification requirements and suffix restrictions during user registration'],
|
||
['需先配置 SMTP 服务', 'SMTP service must be configured first'],
|
||
['开启后,用户注册时必须验证邮箱', 'When enabled, users must verify email during registration'],
|
||
['后缀限制模式', 'Suffix restriction mode'],
|
||
['不限制 - 允许所有邮箱', 'No restriction - allow all emails'],
|
||
['白名单 - 仅允许列出的后缀', 'Whitelist - only allow listed suffixes'],
|
||
['黑名单 - 拒绝列出的后缀', 'Blacklist - reject listed suffixes'],
|
||
['不限制邮箱后缀,所有邮箱均可注册', 'Do not restrict email suffixes; all emails can register'],
|
||
['仅允许列出后缀的邮箱注册', 'Only emails with listed suffixes can register'],
|
||
['拒绝列出后缀的邮箱注册', 'Reject emails with listed suffixes'],
|
||
['邮箱后缀列表', 'Email suffix list'],
|
||
['配置不同类型邮件的 HTML 模板', 'Configure HTML templates for different email types'],
|
||
['可用变量:', 'Available variables:'],
|
||
['注册验证码', 'Registration verification code'],
|
||
['找回密码', 'Password recovery'],
|
||
['邮件预览', 'Email preview'],
|
||
['敏感信息保护', 'Sensitive information protection'],
|
||
['发送给供应商前将聊天消息中的敏感信息替换为占位符,返回客户端前自动还原。', 'Replace sensitive information in chat messages with placeholders before sending to providers, then restore it before returning to clients.'],
|
||
['模型后缀参数', 'Model suffix parameters'],
|
||
['允许通过模型名称后缀覆盖推理参数或服务等级', 'Allow model name suffixes to override inference parameters or service tier'],
|
||
['允许通过模型名后缀覆盖推理参数或服务层级', 'Allow model name suffixes to override reasoning parameters or service tier'],
|
||
['模块状态', 'Module status'],
|
||
['推理参数映射', 'Reasoning parameter mappings'],
|
||
['按 API 端点配置模型名后缀及其请求参数映射。', 'Configure model suffixes and request parameter mappings by API endpoint.'],
|
||
['模型后缀', 'Model suffix'],
|
||
['有效映射', 'Effective mapping'],
|
||
['后缀状态', 'Suffix status'],
|
||
['自定义覆盖(已合并显示)', 'Custom override (merged view)'],
|
||
['内置映射预览(运行时按目标模型调整)', 'Built-in mapping preview (adjusted for the target model at runtime)'],
|
||
['尚未配置映射', 'Mapping not configured'],
|
||
['保存非空映射后启用此后缀', 'Save a non-empty mapping to enable this suffix'],
|
||
['自定义映射', 'Custom mapping'],
|
||
['不启用推理', 'Disable reasoning'],
|
||
['模型支持时使用最低推理投入', 'Use minimal reasoning effort when supported'],
|
||
['低推理投入', 'Low reasoning effort'],
|
||
['中等推理投入', 'Medium reasoning effort'],
|
||
['高推理投入', 'High reasoning effort'],
|
||
['超高推理投入', 'Extra-high reasoning effort'],
|
||
['模型支持时使用最大推理投入', 'Use maximum reasoning effort when supported'],
|
||
['Codex Ultra 推理预设,仅支持兼容的 Codex 模型', 'Codex Ultra reasoning preset for compatible Codex models'],
|
||
['Fast 服务层级', 'Fast service tier'],
|
||
['管理 Gemini Files API 上传文件,支持文件上传 / 查看和删除', 'Manage files uploaded through Gemini Files API, including upload, view, and delete'],
|
||
['至少启用一个具有「Gemini 文件 API」能力 Key', 'Enable at least one key with Gemini Files API capability'],
|
||
['第三方推送服务,用于通知服务的 Bark 渠道', 'Third-party push service for the Bark notification channel'],
|
||
['配置 Bark Device Key、服务器地址和服务启用状态', 'Configure Bark Device Key, server URL, and service enabled state'],
|
||
['请先配置 Bark Device Key', 'Configure Bark Device Key first'],
|
||
['第三方推送服务,用于通知服务的 Server 酱渠道', 'Third-party push service for the Server Chan notification channel'],
|
||
['配置 Server 酱 Turbo SendKey 和服务启用状态', 'Configure Server Chan Turbo SendKey and service enabled state'],
|
||
['请先配置 Server 酱 SendKey', 'Configure Server Chan SendKey first'],
|
||
['按导出范围备份到 S3-compatible 存储', 'Back up selected export scopes to S3-compatible storage'],
|
||
['配置自动备份周期、对象存储连接和保留策略', 'Configure automatic backup schedule, object storage connection, and retention policy'],
|
||
['请先完成 S3 备份配置', 'Complete S3 backup configuration first'],
|
||
['管理缓存亲和性,提高 Prompt Caching 命中率', 'Manage cache affinity to improve Prompt Caching hit rate'],
|
||
['另有', 'Another'],
|
||
['个分类为空:', 'categories are empty:'],
|
||
['所有缓存分类为空', 'All cache categories are empty'],
|
||
['分析用户请求间隔,推荐合适的缓存 TTL', 'Analyze user request intervals and recommend an appropriate cache TTL'],
|
||
['请求间隔时间线', 'Request interval timeline'],
|
||
['暂无请求间隔数据', 'No request interval data'],
|
||
['正在分析用户请求数据...', 'Analyzing user request data...'],
|
||
['邮箱服务未配置,暂不可修改', 'Email service is not configured, so it cannot be changed yet'],
|
||
['管理员开启功能后,可默认应用到你的账户和 API Key', 'After the administrator enables this feature, it can be applied by default to your account and API keys'],
|
||
['未单独配置的 API Key 会跟随此设置', 'API keys without separate configuration follow this setting'],
|
||
['向模型说明占位符含义', 'Explain placeholder meanings to the model'],
|
||
['管理当前账号在各设备上的登录状态', 'Manage sign-in status for this account across devices'],
|
||
['当前没有开启用户自助退款的可退充值订单。', 'There are currently no refundable top-up orders with user self-service refunds enabled.'],
|
||
['仅开启“允许用户退款”的支付方式可由用户自助提交退款申请。', 'Only payment methods with "allow user refunds" enabled can be refunded by users.'],
|
||
['历史钱包迁移初始化', 'Historical wallet migration initialization'],
|
||
['已创建', 'Created'],
|
||
['个令牌', 'tokens'],
|
||
['暂无最后 IP', 'No last IP'],
|
||
['最后 IP', 'Last IP'],
|
||
['最后使用', 'Last used'],
|
||
['从未使用', 'Never used'],
|
||
['旧版全权限', 'Legacy full permissions'],
|
||
['控制请求/响应详情的入库方式和内容', 'Control how request/response details are stored and what content is captured'],
|
||
['记录详细程度', 'Record detail level'],
|
||
['BASIC - 基本信息 (~1KB/条)', 'BASIC - basic information (~1KB/item)'],
|
||
['HEADERS - 含请求头 (~2-3KB/条)', 'HEADERS - includes request headers (~2-3KB/item)'],
|
||
['FULL - 完整请求响应', 'FULL - full request and response'],
|
||
['敏感信息会自动脱敏', 'Sensitive information is automatically redacted'],
|
||
['敏感请求头', 'Sensitive request headers'],
|
||
['逗号分隔,这些请求头会被脱敏处理', 'Comma-separated request headers that will be redacted'],
|
||
['0 表示默认不限制;未单独配置的用户和独立 Key 会跟随这里', '0 means no default limit. Users and standalone keys without separate configuration follow this setting.'],
|
||
['Gmail 等服务推荐使用 SSL', 'SSL is recommended for Gmail and similar services'],
|
||
['查看系统操作日志,追踪安全事件与变更记录', 'View system operation logs and track security events and change records'],
|
||
['管理 API 访问令牌,支持细粒度权限控制和 IP 限制', 'Manage API access tokens with fine-grained permission control and IP restrictions'],
|
||
['支持通过 LDAP/Active Directory 进行用户认证', 'Support user authentication through LDAP/Active Directory'],
|
||
['请先配置 LDAP 连接信息', 'Configure LDAP connection information first'],
|
||
['支持通过第三方 OAuth Provider 登录/绑定账号', 'Support sign-in and account binding through third-party OAuth providers'],
|
||
['统一管理通知项、模板和推送服务选择,供后台任务和用户通知使用', 'Manage notification items, templates, and push service selection for background tasks and user notifications'],
|
||
['请先完成通知服务推送渠道配置', 'Complete notification push channel configuration first'],
|
||
['第三方推送服务,配置 Server 酱 Turbo SendKey 并测试微信推送', 'Third-party push service. Configure Server Chan Turbo SendKey and test WeChat push.'],
|
||
['第三方推送服务,配置 Bark Device Key 并测试 iOS 推送', 'Third-party push service. Configure Bark Device Key and test iOS push.'],
|
||
['允许通过模型名后缀覆盖推理参数', 'Allow model name suffixes to override inference parameters'],
|
||
['将配置、用户或完整数据定期备份到 S3-compatible 对象存储', 'Periodically back up configuration, user, or full data to S3-compatible object storage'],
|
||
['管理 Gemini Files API 上传的文件,支持文件上传、查看和删除', 'Manage files uploaded through Gemini Files API, including upload, view, and delete'],
|
||
['至少启用一个具有「Gemini 文件 API」能力的 Key', 'Enable at least one key with Gemini Files API capability'],
|
||
['配置易支付、支付宝官方、微信支付官方和 Stripe 等支付网关', 'Configure payment gateways such as EPay, official Alipay, official WeChat Pay, and Stripe'],
|
||
['开通每日额度套餐后会优先消耗这里的额度。', 'After activating a daily quota plan, requests consume this quota first.'],
|
||
['累计充值 / 消费:', 'Cumulative top-up / spending:'],
|
||
['输入卡密后会直接充值到钱包的充值余额', 'Enter a redeem code to top up directly into wallet top-up balance'],
|
||
['发起充值', 'Start top-up'],
|
||
['申请退款', 'Request refund'],
|
||
['退款模式', 'Refund mode'],
|
||
['提交退款申请', 'Submit refund request'],
|
||
['当余额接近不足时提醒', 'Notify when balance is getting low'],
|
||
['公告通知', 'Announcement notifications'],
|
||
['接收系统公告', 'Receive system announcements'],
|
||
['注册时间', 'Registered at'],
|
||
['最后登录', 'Last sign-in'],
|
||
['总余额', 'Total balance'],
|
||
['累计消费', 'Cumulative spending'],
|
||
['累计消费占比', 'Cumulative spending ratio'],
|
||
['重命名', 'Rename'],
|
||
['退出', 'Sign out'],
|
||
['OAuth 绑定', 'OAuth bindings'],
|
||
['未绑定', 'Not bound'],
|
||
['绑定', 'Bind'],
|
||
['偏好设置', 'Preferences'],
|
||
['主题', 'Theme'],
|
||
['语言', 'Language'],
|
||
['简体中文', 'Simplified Chinese'],
|
||
['统一模型路由', 'Unified model routing'],
|
||
['Key优先', 'Key first'],
|
||
['缓存亲和模式', 'Cache affinity mode'],
|
||
['负载均衡模式', 'Load balancing mode'],
|
||
['固定顺序模式', 'Fixed order mode'],
|
||
['自动获取上游模型', 'Automatically fetch upstream models'],
|
||
['自定义 Base URL、Path:', 'Custom Base URL / Path:'],
|
||
['根据上游提供的信息填写。为空则使用提示的默认值。', 'Fill in the information provided by the upstream service. Leave empty to use the suggested default value.'],
|
||
['支持的API格式:', 'Supported API formats:'],
|
||
['勾选Key可以使用的API格式,同时可以设置key访问该端点时的倍率。', 'Select the API formats this key can use, and set the multiplier for key access to this endpoint.'],
|
||
['RPM限制:', 'RPM limit:'],
|
||
['Key的使用速率限制,会预留10%给已有用户进行提高缓存命中率。', 'Key usage rate limit. Ten percent is reserved for existing users to improve cache hit rate.'],
|
||
['自动获取上游模型:', 'Automatically fetch upstream models:'],
|
||
['独立按保留天数清理 request_candidates 审计记录,不再跟随 Key 删除联动', 'Independently clean request_candidates audit records by retention days; no longer follows key deletion linkage'],
|
||
['Provider 自动签到', 'Provider auto check-in'],
|
||
['自动执行已配置 Provider 签到任务', 'Automatically run configured provider check-in tasks'],
|
||
['主动刷新即将过期 OAuth Token (动态调度)', 'Proactively refresh OAuth tokens that are about to expire (dynamic scheduling)'],
|
||
['主动刷新即将过期的 OAuth Token(动态调度)', 'Proactively refresh OAuth tokens that are about to expire (dynamic scheduling)'],
|
||
['当前系统版本和构建信息', 'Current system version and build information'],
|
||
['记录清理策略', 'Record cleanup policy'],
|
||
['标准文本非流式心跳', 'Standard text non-streaming heartbeat'],
|
||
['超过后删除审计日志记录', 'Delete audit log records after this period'],
|
||
['自动执行已配置 Provider 的签到任务', 'Automatically run configured provider check-in tasks'],
|
||
['服务level', 'service level'],
|
||
['服务级别', 'service level'],
|
||
['非STREAMING', 'non-streaming'],
|
||
['Cache affinity性', 'Cache affinity'],
|
||
['Cache reads取Cost', 'Cache read cost'],
|
||
['不同优先级的Key按顺序故障转移,同优先级的Key进行负载均衡。', 'Keys with different priorities fail over in order, while keys with the same priority are load-balanced.'],
|
||
['在提供商优先的调度模式下,不同优先级的Key按顺序故障转移,同优先级的Key进行负载均衡。', 'In provider-first scheduling mode, keys with different priorities fail over in order, while keys with the same priority are load-balanced.'],
|
||
['支持多种 API 格式、端点配置及认证方式,不同客户端均可平滑接入。', 'Supports multiple API formats, endpoint configurations, and authentication methods so different clients can onboard smoothly.'],
|
||
['对外暴露统一模型名称,对内自动映射到各提供商的内部模型名及变体,支持优先级选择、亲和性路由、负载均衡与故障转移。', 'Expose unified model names externally and automatically map them internally to provider model names and variants, with priority selection, affinity routing, load balancing, and failover.'],
|
||
['兼容格式入口', 'Compatible format ingress'],
|
||
['兼容格式响应', 'Compatible format response'],
|
||
['同生态原生透传', 'Same-ecosystem native passthrough'],
|
||
['原生 API 入口', 'Native API ingress'],
|
||
['原生请求透传 → 上游提供商 → 原生响应透传', 'Native request passthrough -> upstream provider -> native response passthrough'],
|
||
['原生 API 出口', 'Native API egress'],
|
||
['Aether的系统架构、请求处理流程和数据流向。', 'Aether system architecture, request handling flow, and data flow.'],
|
||
['提供商支持不同的格式(如 OpenAI Chat, Claude Messages),Aether在接收请求后,将统一管理路由。', 'Providers support different formats such as OpenAI Chat and Claude Messages. After receiving requests, Aether manages routing in one place.'],
|
||
['在内部完成多提供商、多模型名称风格的聚合映射管理。客户端只需知道统一的模型名(例如 `claude-3-opus`),Aether将根据映射规则自动寻找真正对应的上游模型名称。', 'Aether manages aggregate mapping across providers and model naming styles internally. Clients only need the unified model name, such as `claude-3-opus`; Aether finds the real upstream model name from mapping rules.'],
|
||
['Aether 会尝试分析客户端的请求体格式,再将其转换为对应上游供应商要求的真正格式。', 'Aether analyzes the client request body format, then converts it to the actual format required by the upstream provider.'],
|
||
['如果客户端请求格式与上游目标格式一致,Aether 会直接透传(Pass-through),不进行数据解包和重整,最大化性能。', 'If the client request format matches the target upstream format, Aether passes it through directly without unpacking or restructuring data, maximizing performance.'],
|
||
['自定义或反代;一般自定义即可,反代请进入反代章节。', 'Custom or reverse proxy. Custom is usually enough; use the reverse proxy section for reverse proxy setup.'],
|
||
['按量付费:持续使用', 'Pay-as-you-go: continuous usage'],
|
||
['月卡额度:按周期(天)限额', 'Monthly quota: limited by cycle in days'],
|
||
['免费套餐:不计入成本即倍率为0', 'Free tier: not counted as cost, so the multiplier is 0'],
|
||
['在缓存亲和调度模式下,首次请求失败后的重试次数。', 'Retry count after the first request failure in cache-affinity scheduling mode.'],
|
||
['流式首字超时时间:流式请求收到首字前的超时时间', 'Streaming first-byte timeout: timeout before the first byte is received for streaming requests'],
|
||
['非流请求超时时间:非流请求的总超时时间', 'Non-streaming request timeout: total timeout for non-streaming requests'],
|
||
['通过格式转换的请求,是否保持当前优先级。', 'Whether requests using format conversion keep the current priority.'],
|
||
['添加端点是添加上游支持的端点,并非你需要使用的端点。比如 Anyrouter 只支持 Claude Code 接入,那么就应该添加 Claude Messages 端点,并在 Key 中选择对应认证方式。', 'Adding an endpoint means adding an upstream-supported endpoint, not necessarily the endpoint you call directly. For example, if Anyrouter only supports Claude Code access, add a Claude Messages endpoint and select the matching authentication method on the key.'],
|
||
['选择格式:选择上游支持的端点格式。', 'Select format: choose the endpoint format supported upstream.'],
|
||
['自定义 Base URL、Path:根据上游提供的信息填写。为空则使用提示的默认值。', 'Custom Base URL and path: fill them from upstream documentation. Leave empty to use the suggested defaults.'],
|
||
['API Key: 传统密钥', 'API Key: traditional key'],
|
||
['Vertex AI: 用于 Google Cloud', 'Vertex AI: for Google Cloud'],
|
||
['支持的API格式:勾选Key可以使用的API格式,同时可以设置key访问该端点时的倍率。', 'Supported API formats: select the API formats this key can use, and set the multiplier for key access to this endpoint.'],
|
||
['优先级:在提供商优先的调度模式下,不同优先级的Key按顺序故障转移,同优先级的Key进行负载均衡。', 'Priority: in provider-first scheduling mode, keys with different priorities fail over in order, while keys with the same priority are load-balanced.'],
|
||
['RPM限制:Key的使用速率限制,会预留10%给已有用户进行提高缓存命中率。', 'RPM limit: key usage rate limit. Ten percent is reserved for existing users to improve cache hit rate.'],
|
||
['填写固定数值。', 'Enter a fixed value.'],
|
||
['不填为空,采用一定策略自适应学习。', 'Leave empty to let the adaptive policy learn automatically.'],
|
||
['0: 不使用缓存优先', '0: do not prioritize cache usage'],
|
||
['N: 同一个用户Key在N分钟内,优先使用之前使用的提供商、Key响应请求。', 'N: within N minutes, the same user key prefers the provider and key used previously.'],
|
||
['当同一个提供商Key字连续若干次请求失败后,会进入熔断状态,之后每间N分钟进行探测请求,若请求成功解除熔断后续正常请求,否则按以指数级增长探测时间以待下次探测,最大探测间隔不会增长超过32分钟。', 'When the same provider key fails several consecutive requests, it enters circuit-open state. A probe request runs every N minutes; success closes the circuit and normal requests resume. Otherwise, probe intervals grow exponentially up to 32 minutes.'],
|
||
['在上游获取模型端点支持的情况下,从接口自动获取可以用模型列表。且按一定时间自动刷新,不开启则默认任意模型可用,或在后续模型权限中手动添加。', 'When the upstream model-list endpoint is supported, fetch available models automatically and refresh them periodically. If disabled, any model is available by default, or models can be added manually in model permissions later.'],
|
||
['在编辑密钥中开启自动获取/刷新上游全部模型。', 'Enable automatic fetch/refresh of all upstream models while editing the key.'],
|
||
['手动限制/创建该Key的可用模型。', 'Manually restrict or create available models for this key.'],
|
||
['不开启自动获取且勾选任意模型,即模型权限为空,则认为可以使用提供商的全部关联模型。', 'If automatic fetch is disabled and no specific model is selected, model permissions are empty and all linked provider models are considered usable.'],
|
||
['只有在模型权限不为空的情况下,才可以配合正则映射模型。', 'Regex model mapping can be used only when model permissions are not empty.'],
|
||
['从全局模型关联提供商模型,即设置该提供商可以访问的模型,同时可以在这里设置提供商自己的模型价格。默认继承全局模型的价格。', 'Link provider models from global models to define which models the provider can access. Provider-specific model prices can also be set here; by default they inherit global model prices.'],
|
||
['如果该提供商的请求名称并非标准名称,即可通过映射改变在实际请求提供时的模型 id。', 'If the provider request name is not the standard name, mapping can change the actual model ID used for requests.'],
|
||
['官方标准名称为', 'Official standard name:'],
|
||
['实际提供商叫', 'Actual provider name:'],
|
||
['实际请求提供商用', 'Actual provider request uses:'],
|
||
['允许拖动、或者直接点击数字输入调整优先级。', 'Drag or click the number input directly to adjust priority.'],
|
||
['按提供商顺序调度,同优先级负载均衡。', 'Schedule by provider order, with load balancing at the same priority.'],
|
||
['全局Key统一调度,同优先级负载均衡。', 'Schedule global keys together, with load balancing at the same priority.'],
|
||
['在Key TTL时间的约束下,优先使用上一次请求使用的Key。', 'Within the key TTL window, prefer the key used by the previous request.'],
|
||
['取消全局提供商优先级,提供商内部Key依然保持优先级。', 'Cancel global provider priority while keeping priority among keys inside each provider.'],
|
||
['取消全局Key优先级,乱序使用。', 'Cancel global key priority and use keys in shuffled order.'],
|
||
['取消缓存亲和,始终使用固定顺序Key请求。', 'Cancel cache affinity and always request keys in fixed order.'],
|
||
['优先根据提供商设置的顺序进行调度。', 'Prefer scheduling according to the provider order.'],
|
||
['无视提供商层级,直接在所有可用的 Key 之间根据优先级进行调度。', 'Ignore provider hierarchy and schedule directly across all available keys by priority.'],
|
||
['尽量将相同用户的请求路由到之前处理过该用户请求的提供商/节点,以最大化利用上游缓存。', 'Try to route the same user requests to the provider or node that handled that user before, maximizing upstream cache usage.'],
|
||
['在相同优先级的节点之间均匀分配流量。', 'Evenly distribute traffic across nodes with the same priority.'],
|
||
['取消随机性与动态调整,严格按照固定的顺序遍历尝试。', 'Disable randomness and dynamic adjustment, then try targets strictly in fixed order.'],
|
||
['当请求失败时,根据策略自动切换到下一个可用的备用节点进行重试。', 'When a request fails, automatically switch to the next available standby node according to policy and retry.'],
|
||
['系统支持多种维度的访问频率限制(Rate Limit),有效防止恶意请求或滥用,保障服务稳定性。', 'The system supports multi-dimensional rate limits to prevent malicious requests or abuse and keep service stable.'],
|
||
['格式转换机制允许非原生接口的请求通过 Gateway 转为下游需要的格式,这一转换发生在多个层级:', 'Format conversion lets requests from non-native APIs be converted by the gateway into the downstream-required format. This conversion happens at several levels:'],
|
||
['在系统层面全局开启或关闭的默认转换规则。', 'Default conversion rules enabled or disabled globally at the system level.'],
|
||
['针对某个特定提供商的所有请求进行特定的格式转换配置。', 'Configure format conversion for all requests to a specific provider.'],
|
||
['针对某个具体端点的细粒度转换支持。', 'Fine-grained conversion support for a specific endpoint.'],
|
||
['部分提供商在流式或非流式表现上可能存在差异,此功能可强制在请求上游时使用指定的流式/非流式格式(并在前端按用户请求还原)。', 'Some providers behave differently for streaming and non-streaming. This feature can force a selected upstream streaming mode and restore the response according to the user request in the frontend.'],
|
||
['可在端点设置中添加规则(Rules),使用条件匹配与动作(如 Delete, Set, Insert)来动态修改发往上游的 Headers 或 JSON Payload。', 'Add rules in endpoint settings and use conditions plus actions such as Delete, Set, and Insert to dynamically modify upstream Headers or JSON Payload.'],
|
||
['解决提供商特定模型名称与平台标准名称不一致的问题。将请求中的统一模型名动态转换为上游真实需要的模型名。', 'Solve mismatches between provider-specific model names and platform standard names. Dynamically convert unified model names in requests into the upstream-required model names.'],
|
||
['使用正则表达式来匹配一类模型,给予批量授权。', 'Use regular expressions to match a class of models and grant permissions in bulk.'],
|
||
['在自动获取的模型列表中,应用正则过滤与清洗,从而快速导入符合规则的标准模型列表。', 'Apply regex filtering and cleanup to automatically fetched model lists to quickly import matching standard models.'],
|
||
['针对各大提供商的官方接口或常见聚合平台,自动抓取并记录剩余额度,在余额低于阈值时触发报警或禁用策略。', 'Automatically fetch and record remaining quota from official provider APIs or common aggregation platforms, then trigger alerts or disable policies when balance drops below thresholds.'],
|
||
['支持将统一模型配置、提供商端点及网关路由策略一键导出为 JSON,并在其他部署实例中迁移导入。', 'Export unified model configuration, provider endpoints, and gateway routing policies as JSON, then import them into other deployments.'],
|
||
['若监控发现恶意使用、异常调用或高频报错,管理员可以临时或永久锁定特定密钥,以阻断攻击源头。', 'When monitoring detects malicious use, abnormal calls, or frequent errors, administrators can temporarily or permanently lock specific keys to block the attack source.'],
|
||
['当前时间范围内没有统计结果', 'No statistics in the current time range'],
|
||
['当前筛选条件下没有数据', 'No data under the current filters'],
|
||
['选择号池和代理节点后生成分配预览', 'Select a pool and proxy nodes to generate an assignment preview'],
|
||
['选择号池和代理节点后生成分配预览,再写入账号独立代理。', 'Select a pool and proxy nodes, generate an assignment preview, then write account-level proxy settings.'],
|
||
['管理号池内 Key 的分配模式和排序偏好', 'Manage key distribution modes and ordering preferences in the pool'],
|
||
['控制 Key 的基础分配方式,选择一种模式。', 'Choose one base distribution mode for keys.'],
|
||
['在分配模式基础上叠加排序因素,可组合启用。', 'Layer ordering factors on top of the distribution mode; multiple strategies can be enabled.'],
|
||
['桌面端支持拖拽排序,移动端可点按上下调整优先级。', 'Desktop supports drag sorting; mobile can move priorities up and down.'],
|
||
['优先复用最近使用过的 Key,利用 Prompt Caching', 'Prefer recently used keys to take advantage of prompt caching'],
|
||
['最久未使用的 Key 优先', 'Prefer the least recently used keys'],
|
||
['集中使用同一账号(反向 LRU)', 'Concentrate usage on the same account (reverse LRU)'],
|
||
['随机分散 Key 使用,均匀分摊负载', 'Randomly distribute key usage to balance load'],
|
||
['优先消耗 Free 账号(依赖 plan_type)', 'Prefer Free accounts (based on plan_type)'],
|
||
['优先消耗 Team 账号(依赖 plan_type)', 'Prefer Team accounts (based on plan_type)'],
|
||
['优先消耗 Plus 账号(依赖 plan_type)', 'Prefer Plus accounts (based on plan_type)'],
|
||
['优先消耗 Pro 账号(依赖 plan_type)', 'Prefer Pro accounts (based on plan_type)'],
|
||
['优先选额度消耗最少的账号', 'Prefer accounts with the lowest quota usage'],
|
||
['优先选即将刷新额度的账号', 'Prefer accounts whose quota will refresh soon'],
|
||
['按账号优先级顺序调度(数字越小越优先)', 'Schedule by account priority; lower numbers are higher priority'],
|
||
['优先选择健康分更高、失败更少的账号', 'Prefer accounts with higher health scores and fewer failures'],
|
||
['优先选择最近延迟更低的账号', 'Prefer accounts with lower recent latency'],
|
||
['优先选择窗口消耗更低的账号', 'Prefer accounts with lower window cost'],
|
||
['未设置,使用系统默认网络出口', 'Not set; uses the system default network egress'],
|
||
['当前使用提供商独立代理', 'Currently using provider-specific proxy'],
|
||
['配置提供商出站请求的默认代理,仅影响大模型 API、余额查询、OAuth 等提供商请求', 'Configure the default proxy for provider outbound requests; only affects model API, balance query, OAuth, and similar provider requests'],
|
||
['对未单独配置代理的提供商生效,覆盖大模型 API 请求、余额查询、OAuth 刷新等。不影响系统内部接口。', 'Applies to providers without an individual proxy; affects model API requests, balance queries, OAuth refresh, and similar provider traffic. Internal system APIs are not affected.'],
|
||
['配置系统默认参数', 'Configure system defaults'],
|
||
['新用户注册时的默认初始赠款', 'Default initial grant for new users'],
|
||
['影响注册、创建用户、重置/修改密码的校验规则', 'Affects validation rules for registration, user creation, password reset, and password change'],
|
||
['允许新用户自助注册账户', 'Allow new users to self-register accounts'],
|
||
['关闭时仅禁用过期的独立余额 Key', 'When disabled, expired standalone balance keys are only disabled'],
|
||
['开启后强制允许所有提供商接受跨格式请求', 'When enabled, all providers are forced to accept cross-format requests'],
|
||
['开启后注册与发送邮箱验证码前需要通过 Cloudflare Turnstile', 'When enabled, registration and email verification code sending require Cloudflare Turnstile'],
|
||
['留空则不额外校验 Cloudflare 返回的 hostname', 'Leave empty to skip extra validation of the hostname returned by Cloudflare'],
|
||
['开启后可按充值比例、人头或两者同时发放赠款返利', 'When enabled, grants can be rewarded by top-up ratio, referred users, or both'],
|
||
['开启后注册时必须确认当前版本', 'When enabled, users must confirm the current version during registration'],
|
||
['配置请求记录的分级保留和自动清理', 'Configure tiered retention and automatic cleanup for request records'],
|
||
['每天凌晨执行', 'Runs every day before dawn'],
|
||
['超过后压缩 body 字段', 'Compress body fields after this period'],
|
||
['超过后删除 body 字段', 'Delete body fields after this period'],
|
||
['超过后清空 headers 字段', 'Clear headers fields after this period'],
|
||
['超过后删除整条记录', 'Delete full records after this period'],
|
||
['避免单次操作过大影响性能', 'Avoid oversized single operations that affect performance'],
|
||
['过期后按时间窗口批量清理 request_candidates 审计记录', 'After expiration, clean request_candidates audit records in time-window batches'],
|
||
['独立控制候选记录大表清理节奏,不再跟随 Key 删除联动', 'Control cleanup pacing for the candidate record table independently; no longer tied to key deletion'],
|
||
['用于代理节点稳定性分钟级图表,后端最少保留 1 天', 'Used for minute-level proxy node stability charts; backend keeps at least 1 day'],
|
||
['小时级聚合用于长期趋势,不能短于 1m 指标保留天数', 'Hourly aggregates are used for long-term trends and cannot be shorter than 1m metric retention'],
|
||
['独立限制 proxy_node_metrics 表的单批删除数量', 'Separately limits per-batch deletes for the proxy_node_metrics table'],
|
||
['自动清理、手动系统清理和请求体后台任务的执行结果', 'Results from automatic cleanup, manual system cleanup, and request body background jobs'],
|
||
['保留完整的 request_body 和 response_body', 'Keeps full request_body and response_body'],
|
||
['body 字段被压缩存储,节省空间', 'Body fields are compressed to save space'],
|
||
['仅保留 tokens、成本等统计信息', 'Only keeps statistics such as tokens and cost'],
|
||
['超过保留期限后完全删除记录', 'Deletes records completely after the retention period'],
|
||
['独立清理,记录用户登录、操作等安全事件', 'Cleaned independently; records login, operation, and other security events'],
|
||
['仅保留 1m/1h 聚合桶,清理任务按批次删除过期桶', 'Only keeps 1m/1h aggregate buckets; cleanup deletes expired buckets in batches'],
|
||
['本文档将引导您完成 Aether 的项目部署、配置以及反向代理等高级特性的使用。', 'This guide walks you through Aether deployment, configuration, reverse proxying, and other advanced features.'],
|
||
['以 Opus 4.6 为例, 其他模型同样添加即可, 非必要建议只添加官方支持的模型ID。', 'Using Opus 4.6 as an example; add other models the same way. Unless necessary, only add officially supported model IDs.'],
|
||
['添加提供商时, 提供商类型选择对应类型即可, 反向代理默认开启提供商级格式转换。', 'When adding a provider, choose the matching provider type. Reverse proxy enables provider-level format conversion by default.'],
|
||
['需要有提供商端点支持。', 'Requires provider endpoint support.'],
|
||
['Rust实现, 超小资源占有, 适合性能低的VPS直接使用。', 'Implemented in Rust with very low resource usage, suitable for low-spec VPS instances.'],
|
||
['在模块管理中,开启代理模块后可以添加和使用代理功能,包括手动添加和 Aether-Proxy 自动连接。', 'After enabling the proxy module in module management, you can add and use proxies, including manual nodes and automatic Aether-Proxy connections.'],
|
||
['优先级:Key代理 > 提供商代理 > 全局代理', 'Priority: key proxy > provider proxy > global proxy'],
|
||
['如果发现任何冲突,导入将中止并回滚', 'If any conflict is found, the import will abort and roll back'],
|
||
['不限制所有选项', 'No restriction on any option'],
|
||
['选择提供商', 'Select provider'],
|
||
['选择端点', 'Select endpoint'],
|
||
['选择模型', 'Select model'],
|
||
['使用系统默认', 'Use system default'],
|
||
['0 = 不限速', '0 = no rate limit'],
|
||
['留空保持原密码', 'Leave empty to keep the current password'],
|
||
['留空保持不变', 'Leave empty to keep unchanged'],
|
||
['已配置,留空不修改', 'Configured; leave empty to keep unchanged'],
|
||
['已设置(留空保持不变)', 'Set; leave empty to keep unchanged'],
|
||
['请输入密码', 'Enter password'],
|
||
['输入 Secret Key', 'Enter Secret Key'],
|
||
['填写 Markdown 或 HTML 内容', 'Enter Markdown or HTML content'],
|
||
['直连(不使用代理)', 'Direct connection (no proxy)'],
|
||
['暂无可用代理节点', 'No available proxy nodes'],
|
||
['加载号池中...', 'Loading pools...'],
|
||
['暂无可用号池', 'No available pools'],
|
||
]
|
||
|
||
const legacyDynamicPatterns: Array<[RegExp, (match: RegExpMatchArray) => string]> = [
|
||
[/^(.+) 次请求 · (.+)$/u, match => `${match[1]} requests · ${match[2]}`],
|
||
[/^暂无 (.+) 格式的 Key$/u, match => `No ${match[1]} format keys`],
|
||
[/^会话剩余 (.+)$/u, match => `Session remaining ${match[1]}`],
|
||
[/^成本 (.+)$/u, match => `Cost ${match[1]}`],
|
||
[/^剩余 (.+)$/u, match => `Remaining ${match[1]}`],
|
||
[/^预计耗尽 (.+)$/u, match => `Estimated depletion ${match[1]}`],
|
||
[/^发布于 (.+)$/u, match => `Published at ${match[1]}`],
|
||
[/^已启用 (.+) 项$/u, match => `${match[1]} enabled`],
|
||
[/^影响 (.+) 行$/u, match => `${match[1]} rows affected`],
|
||
[/^(.+)月$/u, match => `${match[1]}/`],
|
||
[/^总可用:(.+)$/u, match => `Total available: ${match[1]}`],
|
||
[/^余额:(.+)$/u, match => `Balance: ${match[1]}`],
|
||
[/^(.+) 秒$/u, match => `${translateLegacyText(match[1], 'en-US')}s`],
|
||
[/^(.+) 分钟$/u, match => `${translateLegacyText(match[1], 'en-US')} min`],
|
||
[/^(.+) 小时$/u, match => `${translateLegacyText(match[1], 'en-US')} h`],
|
||
[/^(.+) 天$/u, match => `${translateLegacyText(match[1], 'en-US')} d`],
|
||
[/^影响用户:(.+) 个$/u, match => `Affected users: ${match[1]}`],
|
||
[/^等 (.+) 个用户$/u, match => `and ${match[1]} users`],
|
||
[/^确认(.+)((.+))$/u, match => `Confirm ${translateLegacyByTokens(match[1])} (${match[2]})`],
|
||
[/^成功 (.+) 个,失败 (.+) 个$/u, match => `Succeeded ${match[1]}, failed ${match[2]}`],
|
||
[/^批量操作完成:成功 (.+) 个,失败 (.+) 个$/u, match => `Batch action complete: succeeded ${match[1]}, failed ${match[2]}`],
|
||
[/^匹配 (.+) 个,当前页 (.+) 个,已选 (.+) 个$/u, match => `Matched ${match[1]} items, current page ${match[2]} items, selected ${match[3]} items`],
|
||
[/^已选 (.+) 个$/u, match => `Selected ${match[1]} items`],
|
||
[/^已强制下线 (.+) 个设备$/u, match => `Signed out ${match[1]} devices`],
|
||
[/^用户已(.+)$/u, match => `User ${translateLegacyByTokens(match[1]).toLowerCase()}d`],
|
||
[/^(.+)用户失败$/u, match => `Failed to ${translateLegacyByTokens(match[1]).toLowerCase()} user`],
|
||
[/^(.+) 个用户$/u, match => `${match[1]} users`],
|
||
[/^有 (.+) 条格式错误$/u, match => `${match[1]} format errors`],
|
||
[/^还有 (.+) 条错误未显示$/u, match => `${match[1]} more errors hidden`],
|
||
[/^确定删除套餐「(.+)」吗?\n\n已有订单或权益的套餐不能删除,请改为停用。删除后无法恢复。$/u, match => `Delete plan "${match[1]}"?\n\nPlans with existing orders or entitlements cannot be deleted. Disable it instead. This cannot be undone.`],
|
||
[/^确定要删除映射 "(.+)" 吗?\n\n注意:这只会删除映射记录,不会删除 Google 上的实际文件。$/u, match => `Delete mapping "${match[1]}"?\n\nThis only deletes the mapping record and will not delete the actual file on Google.`],
|
||
[/^确认删除批次「(.+)」吗?删除后无法恢复。$/u, match => `Delete batch "${match[1]}"? This cannot be undone.`],
|
||
[/^已删除映射 (.+)$/u, match => `Deleted mapping ${match[1]}`],
|
||
[/^已清理 (.+) 条过期映射$/u, match => `Cleaned ${match[1]} expired mappings`],
|
||
[/^已忽略 (.+) 个不支持的文件$/u, match => `Ignored ${match[1]} unsupported files`],
|
||
[/^成功处理 (.+) 个提供商$/u, match => `Successfully processed ${match[1]} providers`],
|
||
[/^部分操作失败: (.+)$/u, match => `Some operations failed: ${translateLegacyText(match[1], 'en-US')}`],
|
||
[/^部分实时数据加载失败:(.+)$/u, match => `Some realtime data failed to load: ${translateLegacyText(match[1], 'en-US')}`],
|
||
[/^文件大小不能超过 (.+)$/u, match => `File size cannot exceed ${match[1]}`],
|
||
[/^(.+)上传中:(.+)$/u, match => `${translateLegacyText(match[1], 'en-US')} uploading: ${match[2]}`],
|
||
[/^(.+)已上传,服务端正在校验并写入数据$/u, match => `${translateLegacyText(match[1], 'en-US')} uploaded. The server is validating and writing data.`],
|
||
[/^IP (.+) 已加入黑名单$/u, match => `IP ${match[1]} added to blacklist`],
|
||
[/^IP (.+) 已加入白名单$/u, match => `IP ${match[1]} added to whitelist`],
|
||
[/^确定要清除 (.+) 在模型 (.+) 上的缓存亲和性吗?$/u, match => `Clear cache affinity for ${match[1]} on model ${match[2]}?`],
|
||
[/^至少 (.+) 个字符$/u, match => `at least ${match[1]} characters`],
|
||
[/^长度不能超过(.+)字节$/u, match => `length must not exceed ${match[1]} bytes`],
|
||
[/^密码长度不能超过(.+)字节$/u, match => `Password length must not exceed ${match[1]} bytes`],
|
||
[/^已识别 (.+) 个代理节点。$/u, match => `${match[1]} proxy nodes recognized.`],
|
||
[/^待添加 (.+) 个$/u, match => `${match[1]} pending`],
|
||
[/^批量输入存在 (.+) 条格式错误,请先修正后再添加$/u, match => `Batch input has ${match[1]} format errors. Fix them before adding.`],
|
||
[/^已添加 (.+) 个代理节点$/u, match => `Added ${match[1]} proxy nodes`],
|
||
[/^已添加 (.+) 个代理节点,(.+) 个失败$/u, match => `Added ${match[1]} proxy nodes, ${match[2]} failed`],
|
||
[/^已向 (.+) 个节点写入升级目标 (.+),(.+) 个节点无需变更$/u, match => `Wrote upgrade target ${match[2]} to ${match[1]} nodes; ${match[3]} nodes did not need changes`],
|
||
[/^当前没有需要变更的 tunnel 节点,目标版本仍为 (.+)$/u, match => `No tunnel nodes need changes. Target version remains ${match[1]}`],
|
||
[/^第 (.+) 条 (.+): (.+)$/u, match => `Entry ${match[1]} ${match[2]}: ${translateLegacyText(match[3], 'en-US')}`],
|
||
[/^(.+)包含无效的 URL 编码$/u, match => `${translateLegacyByTokens(match[1])} contains invalid URL encoding`],
|
||
[/^(.+) 点$/u, match => `${match[1]} points`],
|
||
[/^(.+)\/(.+) 样本$/u, match => `${match[1]}/${match[2]} samples`],
|
||
[/^峰值 (.+)$/u, match => `Peak ${match[1]}`],
|
||
[/^均值 (.+)$/u, match => `Average ${match[1]}`],
|
||
[/^(.+) 帧$/u, match => `${match[1]} frames`],
|
||
[/^(.+) 核$/u, match => `${match[1]} cores`],
|
||
[/^容量 (.+)$/u, match => `Capacity ${match[1]}`],
|
||
[/^数据刷新于 (.+)$/u, match => `Data refreshed at ${match[1]}`],
|
||
[/^这条命令将在 (.+) 分钟内有效,成功使用后立即失效。$/u, match => `This command is valid for ${match[1]} minutes and expires immediately after successful use.`],
|
||
[/^共 (.+) 条$/u, match => `Total ${match[1]} items`],
|
||
[/^共 (.+)$/u, match => `Total ${translateLegacyText(match[1], 'en-US')}`],
|
||
[/^(.+) tokens 命中$/u, match => `${match[1]} tokens hit`],
|
||
]
|
||
|
||
const legacyFallbackTokens: Array<[string, string]> = [
|
||
...legacyPhraseEnglishMessages,
|
||
['未启用', 'Disabled'],
|
||
['允许退款', 'Refunds allowed'],
|
||
['关闭退款', 'Refunds off'],
|
||
['允许用户退款', 'User refunds allowed'],
|
||
['关闭用户退款', 'User refunds off'],
|
||
['已保存', 'Saved'],
|
||
['确认', 'Confirm'],
|
||
['统一查看', 'view in one place'],
|
||
['健康状态', 'health status'],
|
||
['概览', 'overview'],
|
||
['判断', 'identify'],
|
||
['风险', 'risk'],
|
||
['具体', 'specific'],
|
||
['缓存命中率', 'cache hit rate'],
|
||
['成本缓存命中率', 'cost cache hit rate'],
|
||
['费用缓存命中率', 'cost cache hit rate'],
|
||
['请求命中率', 'request hit rate'],
|
||
['Token 命中率', 'token hit rate'],
|
||
['缓存读取费用', 'cache read cost'],
|
||
['缓存读取', 'cache read'],
|
||
['读取费用', 'read cost'],
|
||
['命中', 'hit'],
|
||
['品牌名称右方', 'right of the brand name'],
|
||
['日志', 'logs'],
|
||
['本地', 'local'],
|
||
['表示', 'means'],
|
||
['未单独配置', 'without separate configuration'],
|
||
['跟随这里', 'follow this setting'],
|
||
['心跳', 'heartbeat'],
|
||
['非流式', 'non-streaming'],
|
||
['请求记录级别', 'request record level'],
|
||
['入库方式', 'storage mode'],
|
||
['详细程度', 'detail level'],
|
||
['基本信息', 'basic information'],
|
||
['含请求头', 'includes request headers'],
|
||
['完整请求响应', 'full request and response'],
|
||
['自动脱敏', 'automatically redacted'],
|
||
['脱敏', 'redacted'],
|
||
['逗号分隔', 'comma-separated'],
|
||
['这些请求头', 'these request headers'],
|
||
['脱敏处理', 'redacted'],
|
||
['分钟级图表', 'minute-level chart'],
|
||
['后端最少保留', 'backend keeps at least'],
|
||
['系统操作日志', 'system operation logs'],
|
||
['细粒度权限控制', 'fine-grained permission control'],
|
||
['权限控制', 'permission control'],
|
||
['用户认证', 'user authentication'],
|
||
['连接信息', 'connection information'],
|
||
['第三方', 'third-party'],
|
||
['登录/绑定账号', 'sign-in/bind accounts'],
|
||
['后台任务', 'background tasks'],
|
||
['用户通知', 'user notifications'],
|
||
['推送渠道', 'push channels'],
|
||
['微信推送', 'WeChat push'],
|
||
['服务启用状态', 'service enabled state'],
|
||
['服务等级', 'service tier'],
|
||
['服务', 'service'],
|
||
['模型名后缀', 'model name suffix'],
|
||
['推理参数', 'inference parameters'],
|
||
['完整数据', 'full data'],
|
||
['定期备份', 'periodic backup'],
|
||
['上传的文件', 'uploaded files'],
|
||
['查看和删除', 'view and delete'],
|
||
['具有', 'with'],
|
||
['能力', 'capability'],
|
||
['支付网关', 'payment gateways'],
|
||
['配置易支付', 'configure EPay'],
|
||
['支付宝官方', 'official Alipay'],
|
||
['微信支付官方', 'official WeChat Pay'],
|
||
['余额接近不足', 'balance is getting low'],
|
||
['接近不足', 'getting low'],
|
||
['公告通知', 'announcement notifications'],
|
||
['系统公告', 'system announcements'],
|
||
['注册时间', 'registered at'],
|
||
['最后登录', 'last sign-in'],
|
||
['总余额', 'total balance'],
|
||
['累计消费占比', 'cumulative spending ratio'],
|
||
['累计消费', 'cumulative spending'],
|
||
['累计充值', 'cumulative top-up'],
|
||
['消费', 'spending'],
|
||
['兑换码充值', 'redeem-code top-up'],
|
||
['卡密', 'redeem code'],
|
||
['直接充值', 'top up directly'],
|
||
['充值余额', 'top-up balance'],
|
||
['发起充值', 'start top-up'],
|
||
['申请退款', 'request refund'],
|
||
['退款模式', 'refund mode'],
|
||
['变动', 'change'],
|
||
['余额变化', 'balance changes'],
|
||
['说明', 'description'],
|
||
['Server 酱', 'Server Chan'],
|
||
['酱', 'Chan'],
|
||
['用于', 'used for'],
|
||
['稳定性', 'stability'],
|
||
['系统', 'system'],
|
||
['签到', 'check-in'],
|
||
['执行', 'run'],
|
||
['主动', 'proactive'],
|
||
['即将过期', 'about to expire'],
|
||
['动态调度', 'dynamic scheduling'],
|
||
['调度', 'scheduling'],
|
||
['构建信息', 'build information'],
|
||
['清理策略', 'cleanup policy'],
|
||
['服务level', 'service level'],
|
||
['邮件', 'email'],
|
||
['预览', 'Preview'],
|
||
['注册', 'registration'],
|
||
['计费', 'billing'],
|
||
['费率', 'rate'],
|
||
['仪表盘', 'dashboard'],
|
||
['按顺序', 'in order'],
|
||
['同优先级', 'same-priority'],
|
||
['不同优先级', 'different-priority'],
|
||
['其他设备', 'other devices'],
|
||
['其他', 'other'],
|
||
['Refresh锁', 'refresh lock'],
|
||
['concurrent锁', 'concurrency lock'],
|
||
['锁', 'lock'],
|
||
['运维', 'operations'],
|
||
['排障', 'troubleshooting'],
|
||
['视角', 'perspective'],
|
||
['缓存页', 'cache page'],
|
||
['亲和性', 'affinity'],
|
||
['亲和', 'affinity'],
|
||
['内存', 'memory'],
|
||
['存储', 'storage'],
|
||
['通道手续费率', 'channel fee rate'],
|
||
['手续费率', 'fee rate'],
|
||
['手续费', 'fee'],
|
||
['支付币种', 'payment currency'],
|
||
['币种', 'currency'],
|
||
['通道值', 'channel value'],
|
||
['通道', 'channel'],
|
||
['商户密钥', 'merchant key'],
|
||
['商户证书', 'merchant certificate'],
|
||
['商户号', 'merchant ID'],
|
||
['商户', 'merchant'],
|
||
['支付模式', 'payment mode'],
|
||
['应用私钥', 'app private key'],
|
||
['公钥', 'public key'],
|
||
['证书序列号', 'certificate serial number'],
|
||
['扫码单', 'QR-code order'],
|
||
['扫码支付', 'QR-code payment'],
|
||
['收银台', 'checkout'],
|
||
['下单', 'order creation'],
|
||
['前台', 'frontend'],
|
||
['二维码', 'QR code'],
|
||
['开通', 'enable'],
|
||
['拉起', 'launch'],
|
||
['未开通', 'not enabled'],
|
||
['移动端', 'mobile'],
|
||
['桌面端', 'desktop'],
|
||
['微信浏览器', 'WeChat browser'],
|
||
['非微信浏览器', 'non-WeChat browser'],
|
||
['公众号', 'official account'],
|
||
['同主体', 'same merchant entity'],
|
||
['表单', 'form'],
|
||
['场景', 'scenarios'],
|
||
['真实请求统计', 'real request statistics'],
|
||
['端点可用率', 'endpoint availability'],
|
||
['模型可用率', 'model availability'],
|
||
['提供商可用率', 'provider availability'],
|
||
['平均TTFB', 'average TTFB'],
|
||
['平均首字', 'average first byte'],
|
||
['邮件等', 'emails and other'],
|
||
['右方', 'right side'],
|
||
['后台', 'background'],
|
||
['备份', 'backup'],
|
||
['完整备份', 'full backup'],
|
||
['非管理员', 'non-admin'],
|
||
['请求候选记录', 'request candidate records'],
|
||
['统计聚合', 'statistics aggregates'],
|
||
['同步生图', 'synchronous image generation'],
|
||
['外层 HTTP 状态', 'outer HTTP status'],
|
||
['外层', 'outer'],
|
||
['固定为', 'fixed to'],
|
||
['上游失败', 'upstream failure'],
|
||
['标准文本', 'standard text'],
|
||
['非流式接口', 'non-streaming API'],
|
||
['响应体', 'response body'],
|
||
['验证码邮件', 'verification code email'],
|
||
['隐式加密', 'implicit encryption'],
|
||
['无加密', 'no encryption'],
|
||
['邮箱验证', 'email verification'],
|
||
['后缀限制', 'suffix restriction'],
|
||
['后缀', 'suffix'],
|
||
['列出', 'listed'],
|
||
['均可', 'can all'],
|
||
['邮件主题', 'email subject'],
|
||
['收件人', 'recipient'],
|
||
['邮件预览', 'email preview'],
|
||
['供应商', 'provider'],
|
||
['聊天消息', 'chat messages'],
|
||
['敏感信息', 'sensitive information'],
|
||
['替换为', 'replace with'],
|
||
['占位符', 'placeholder'],
|
||
['返回客户端', 'returning to client'],
|
||
['自动还原', 'restore automatically'],
|
||
['服务等级', 'service tier'],
|
||
['上传文件', 'upload files'],
|
||
['文件上传', 'file upload'],
|
||
['对象存储', 'object storage'],
|
||
['保留策略', 'retention policy'],
|
||
['推送服务', 'push service'],
|
||
['推送', 'push'],
|
||
['微信', 'WeChat'],
|
||
['备份配置', 'backup configuration'],
|
||
['映射预览', 'mapping preview'],
|
||
['活动热力图', 'activity heatmap'],
|
||
['请求间隔', 'request interval'],
|
||
['用户请求', 'user requests'],
|
||
['缓存命中', 'cache hits'],
|
||
['命中率', 'hit rate'],
|
||
['预估节省', 'estimated savings'],
|
||
['可退充值订单', 'refundable top-up orders'],
|
||
['自助退款', 'self-service refund'],
|
||
['线下打款', 'offline transfer'],
|
||
['原路退回', 'original-route refund'],
|
||
['退款申请', 'refund request'],
|
||
['钱包迁移', 'wallet migration'],
|
||
['按日汇总', 'daily summary'],
|
||
['访问令牌', 'access token'],
|
||
['管理令牌', 'management token'],
|
||
['令牌', 'token'],
|
||
['已创建', 'created'],
|
||
['已达上限', 'limit reached'],
|
||
['最后 IP', 'last IP'],
|
||
['最后使用', 'last used'],
|
||
['从未使用', 'never used'],
|
||
['旧版全权限', 'legacy full permissions'],
|
||
['全权限', 'full permissions'],
|
||
['全权', 'full access'],
|
||
['只读', 'read-only'],
|
||
['禁止', 'deny'],
|
||
['用途说明', 'usage notes'],
|
||
['浅色', 'Light'],
|
||
['深色', 'Dark'],
|
||
['跟随系统', 'System'],
|
||
['时区', 'timezone'],
|
||
['通知设置', 'notification settings'],
|
||
['使用提醒', 'usage reminders'],
|
||
['默认用户初始赠款(美元)', 'Default user initial grant (USD)'],
|
||
['默认速率限制 (请求/分钟)', 'Default rate limit (requests/min)'],
|
||
['弱密码 - 至少 6 个字符', 'Weak password - at least 6 characters'],
|
||
['中等密码 - 至少 8 位,含字母和数字', 'Medium password - at least 8 characters with letters and numbers'],
|
||
['强密码 - 至少 8 位,含大小写字母、数字和特殊字符', 'Strong password - at least 8 characters with uppercase, lowercase, numbers, and symbols'],
|
||
['Docker 预构建镜像', 'Docker prebuilt image'],
|
||
['预构建镜像', 'Prebuilt image'],
|
||
['克隆代码', 'Clone repository'],
|
||
['启动依赖', 'Start dependencies'],
|
||
['安装前端依赖', 'Install frontend dependencies'],
|
||
['启动开发服务', 'Start development services'],
|
||
['生成密钥并填入 .env', 'Generate keys and write them to .env'],
|
||
['生成密钥', 'Generate keys'],
|
||
['生成key并填入.env', 'Generate keys and write them to .env'],
|
||
['自动执行数据库迁移', 'Runs database migrations automatically'],
|
||
['自动执行数据库migration', 'Runs database migrations automatically'],
|
||
['可选,make dev 会自动启动', 'Optional; make dev starts this automatically'],
|
||
['首次本地开发', 'First local development setup'],
|
||
['配置流程', 'Configuration flow'],
|
||
['模型映射', 'Model mapping'],
|
||
['代理节点', 'Proxy node'],
|
||
['代理配置', 'Proxy config'],
|
||
['反向代理', 'Reverse proxy'],
|
||
['多级代理', 'Multi-level proxy'],
|
||
['GitHub 仓库 >', 'GitHub repository >'],
|
||
['OAuth授权登录', 'OAuth authorization login'],
|
||
['导入RefreshToken, 支持批量导入', 'Import RefreshToken with batch import support'],
|
||
['导入 RefreshToken, 支持批量导入', 'Import RefreshToken with batch import support'],
|
||
['支持批量导入', 'batch import supported'],
|
||
['格式要求', 'format requirements'],
|
||
['优先级:Key代理 > 提供商代理 > 全局代理', 'Priority: key proxy > provider proxy > global proxy'],
|
||
['优先级:Key代理 > 提供商代理 > 全局代理', 'Priority: key proxy > provider proxy > global proxy'],
|
||
['优先级:', 'Priority:'],
|
||
['优先级:', 'Priority:'],
|
||
['创建统一模型', 'Create unified model'],
|
||
['添加提供商', 'Add provider'],
|
||
['添加端点', 'Add endpoint'],
|
||
['添加密钥', 'Add key'],
|
||
['关联全局模型', 'Link global model'],
|
||
['名称修正示例', 'Name correction example'],
|
||
['降/升级请求示例', 'Downgrade/upgrade request example'],
|
||
['官方标准名称为', 'Official standard name is'],
|
||
['实际提供商叫', 'the actual provider calls it'],
|
||
['实际请求提供商用', 'actual provider request uses'],
|
||
['传统密钥', 'traditional key'],
|
||
['用于 Google Cloud', 'for Google Cloud'],
|
||
['使用速率限制', 'usage rate limit'],
|
||
['同一个用户Key', 'same user key'],
|
||
['优先使用之前使用的提供商、Key响应请求', 'prefer the previously used provider and key for the request'],
|
||
['提高缓存命中率', 'improve cache hit rate'],
|
||
['全局代理', 'global proxy'],
|
||
['提供商代理', 'provider proxy'],
|
||
['Key代理', 'key proxy'],
|
||
['系统配置', 'system configuration'],
|
||
['提供商配置', 'provider configuration'],
|
||
['Key配置', 'key configuration'],
|
||
['清理记录', 'cleanup records'],
|
||
['详细记录', 'detailed records'],
|
||
['压缩记录', 'compressed records'],
|
||
['审计日志', 'audit logs'],
|
||
['候选记录', 'candidate records'],
|
||
['请求体', 'request body'],
|
||
['请求头', 'request headers'],
|
||
['详细体', 'detailed body'],
|
||
['迁移', 'migration'],
|
||
['清体', 'body cleanup'],
|
||
['清头', 'header cleanup'],
|
||
['删记录', 'delete records'],
|
||
['删日志', 'delete logs'],
|
||
['删候选', 'delete candidates'],
|
||
['执行中', 'running'],
|
||
['完成', 'complete'],
|
||
['失败', 'failed'],
|
||
['手动', 'manual'],
|
||
['自动', 'automatic'],
|
||
['时间', 'time'],
|
||
['类型', 'type'],
|
||
['来源', 'source'],
|
||
['状态', 'status'],
|
||
['结果', 'result'],
|
||
['耗时', 'duration'],
|
||
['刷新', 'refresh'],
|
||
['保存中', 'saving'],
|
||
['保存', 'save'],
|
||
['加载中', 'loading'],
|
||
['暂无', 'no'],
|
||
['当前', 'current'],
|
||
['设置', 'settings'],
|
||
['配置', 'configuration'],
|
||
['管理', 'management'],
|
||
['统计', 'statistics'],
|
||
['分析', 'analysis'],
|
||
['监控', 'monitor'],
|
||
['记录', 'records'],
|
||
['用户', 'user'],
|
||
['模型', 'model'],
|
||
['提供商', 'provider'],
|
||
['密钥', 'key'],
|
||
['端点', 'endpoint'],
|
||
['请求', 'request'],
|
||
['响应', 'response'],
|
||
['缓存', 'cache'],
|
||
['代理', 'proxy'],
|
||
['节点', 'node'],
|
||
['钱包', 'wallet'],
|
||
['套餐', 'plan'],
|
||
['余额', 'balance'],
|
||
['成本', 'cost'],
|
||
['金额', 'amount'],
|
||
['支付', 'payment'],
|
||
['充值', 'top-up'],
|
||
['订单', 'order'],
|
||
['分组', 'group'],
|
||
['角色', 'role'],
|
||
['权限', 'permission'],
|
||
['限额', 'quota'],
|
||
['用量', 'usage'],
|
||
['健康', 'health'],
|
||
['延迟', 'latency'],
|
||
['失败率', 'failure rate'],
|
||
['成功率', 'success rate'],
|
||
['平均', 'average'],
|
||
['峰值', 'peak'],
|
||
['并发', 'concurrency'],
|
||
['速率', 'rate'],
|
||
['限制', 'limit'],
|
||
['启用', 'enable'],
|
||
['停用', 'disable'],
|
||
['删除', 'delete'],
|
||
['编辑', 'edit'],
|
||
['创建', 'create'],
|
||
['添加', 'add'],
|
||
['更新', 'update'],
|
||
['导入', 'import'],
|
||
['导出', 'export'],
|
||
['清空', 'clear'],
|
||
['选择', 'select'],
|
||
['输入', 'enter'],
|
||
['留空', 'leave empty'],
|
||
['默认', 'default'],
|
||
['全部', 'all'],
|
||
['可用', 'available'],
|
||
['不可用', 'unavailable'],
|
||
['在线', 'online'],
|
||
['离线', 'offline'],
|
||
['活跃', 'active'],
|
||
['已', 'already'],
|
||
['未', 'not'],
|
||
['中', 'in progress'],
|
||
['前', 'before'],
|
||
['后', 'after'],
|
||
['全局模型', 'global model'],
|
||
['系统架构', 'system architecture'],
|
||
['统一模型规范', 'unified model specification'],
|
||
['协议聚合', 'protocol aggregation'],
|
||
['多端鉴权', 'multi-client authentication'],
|
||
['管控', 'governance'],
|
||
['全局并发', 'global concurrency'],
|
||
['智能调度', 'intelligent scheduling'],
|
||
['故障转移', 'failover'],
|
||
['原生直通', 'native passthrough'],
|
||
['多格式兼容接入', 'multi-format compatible access'],
|
||
['反代', 'reverse proxy'],
|
||
['持续使用', 'continuous use'],
|
||
['月卡额度', 'monthly quota'],
|
||
['不计入成本', 'not counted as cost'],
|
||
['倍率', 'multiplier'],
|
||
['流式首字超时时间', 'streaming first-byte timeout'],
|
||
['非流请求超时时间', 'non-streaming request timeout'],
|
||
['保持优先级', 'keep priority'],
|
||
['提供商设置', 'provider settings'],
|
||
['无视', 'ignore'],
|
||
['层级', 'level'],
|
||
['相同用户', 'same user'],
|
||
['之前处理过', 'previously handled'],
|
||
['最大化利用', 'maximize use of'],
|
||
['均匀分配流量', 'evenly distribute traffic'],
|
||
['随机性', 'randomness'],
|
||
['动态调整', 'dynamic adjustment'],
|
||
['遍历尝试', 'iterate attempts'],
|
||
['备用节点', 'standby node'],
|
||
['条件匹配', 'condition matching'],
|
||
['动作', 'actions'],
|
||
['动态修改', 'dynamically modify'],
|
||
['发往', 'sent to'],
|
||
['模型名称', 'model name'],
|
||
['平台标准名称', 'platform standard name'],
|
||
['统一模型名', 'unified model name'],
|
||
['真实需要', 'actually required'],
|
||
['正则表达式', 'regular expression'],
|
||
['批量授权', 'bulk authorization'],
|
||
['正则过滤', 'regex filtering'],
|
||
['清洗', 'cleanup'],
|
||
['符合规则', 'matching rules'],
|
||
['官方接口', 'official APIs'],
|
||
['常见聚合平台', 'common aggregation platforms'],
|
||
['自动抓取', 'automatically fetch'],
|
||
['剩余额度', 'remaining quota'],
|
||
['阈值', 'threshold'],
|
||
['触发报警', 'trigger alerts'],
|
||
['禁用策略', 'disable policy'],
|
||
['一键导出', 'one-click export'],
|
||
['部署实例', 'deployment instances'],
|
||
['迁移导入', 'migration import'],
|
||
['恶意使用', 'malicious use'],
|
||
['异常调用', 'abnormal calls'],
|
||
['高频报错', 'frequent errors'],
|
||
['永久锁定', 'permanently lock'],
|
||
['临时', 'temporarily'],
|
||
['阻断攻击源头', 'block attack source'],
|
||
['吞吐', 'throughput'],
|
||
['时长', 'duration'],
|
||
['首字', 'first byte'],
|
||
['加载流量趋势中', 'loading traffic trends'],
|
||
['全局在线', 'global online'],
|
||
['拒绝', 'rejected'],
|
||
['独立 Key', 'standalone key'],
|
||
['批量管理', 'batch management'],
|
||
['分类', 'category'],
|
||
['列表', 'list'],
|
||
['用户套餐中心', 'user billing center'],
|
||
['查询', 'search'],
|
||
['策略分组', 'policy groups'],
|
||
['策略', 'policy'],
|
||
['维度', 'dimension'],
|
||
['默认策略', 'default policy'],
|
||
['更新时间', 'updated at'],
|
||
['回溯时间', 'lookback time'],
|
||
['真实请求统计', 'real request statistics'],
|
||
['可用率', 'availability'],
|
||
['平均耗时', 'average duration'],
|
||
['平均速度', 'average speed'],
|
||
['仅展示', 'only show'],
|
||
['点击详情查看', 'click details to view'],
|
||
['关联的', 'linked'],
|
||
['系统级别', 'system-level'],
|
||
['副标题', 'subtitle'],
|
||
['导航栏', 'navigation bar'],
|
||
['登录页', 'sign-in page'],
|
||
['指南页面', 'guide pages'],
|
||
['全站显示', 'site-wide display'],
|
||
['显示在', 'shown in'],
|
||
['邮件发送服务', 'email sending service'],
|
||
['注册邮箱限制', 'registration email limit'],
|
||
['验证码邮件', 'verification code email'],
|
||
['服务器地址', 'server address'],
|
||
['邮件服务器地址', 'mail server address'],
|
||
['端口', 'port'],
|
||
['实时性能监控', 'realtime performance monitoring'],
|
||
['历史延迟趋势', 'historical latency trends'],
|
||
['实时运行状态', 'realtime runtime status'],
|
||
['实时与历史性能数据', 'realtime and historical performance data'],
|
||
['聚合系统健康', 'aggregate system health'],
|
||
['并发保护', 'concurrency protection'],
|
||
['代理通道', 'proxy channels'],
|
||
['降级切换', 'fallback switching'],
|
||
['网关指标', 'gateway metrics'],
|
||
['暂不可达', 'currently unreachable'],
|
||
['未知', 'unknown'],
|
||
['系统功能模块', 'system feature modules'],
|
||
['启用状态', 'enablement status'],
|
||
['搜索模块名称或描述', 'search module name or description'],
|
||
['内置工具', 'built-in tools'],
|
||
['通知服务', 'notification service'],
|
||
['邮件模板', 'email templates'],
|
||
['发送设置', 'sending settings'],
|
||
['登录/绑定', 'sign-in/bind'],
|
||
['添加配置', 'add configuration'],
|
||
['命中率', 'hit rate'],
|
||
['数据', 'data'],
|
||
['按API格式分析', 'by-API-format analysis'],
|
||
['格式', 'format'],
|
||
['平均响应', 'average response'],
|
||
['成功率', 'success rate'],
|
||
['个人设置', 'profile settings'],
|
||
['基本信息', 'basic information'],
|
||
['头像 URL', 'avatar URL'],
|
||
['个人简介', 'bio'],
|
||
['默认应用', 'apply by default'],
|
||
['账户', 'account'],
|
||
['单独配置', 'separate configuration'],
|
||
['跟随此设置', 'follow this setting'],
|
||
['访问令牌', 'access tokens'],
|
||
['程序化访问管理 API 的令牌', 'tokens for programmatic access to management APIs'],
|
||
['创建新令牌', 'create new token'],
|
||
['安全', 'security'],
|
||
['可信任', 'trusted'],
|
||
['支持 CIDR 格式', 'CIDR supported'],
|
||
['和通知', 'and notifications'],
|
||
['已过期', 'expired'],
|
||
['阶梯', 'tier'],
|
||
['认证方式', 'authentication methods'],
|
||
['平滑接入', 'smooth onboarding'],
|
||
['对外暴露', 'expose externally'],
|
||
['对内映射', 'map internally'],
|
||
['内部模型名', 'internal model name'],
|
||
['模型名', 'model name'],
|
||
['变体', 'variants'],
|
||
['亲和性路由', 'affinity routing'],
|
||
['跨平台', 'cross-platform'],
|
||
['兼容格式', 'compatible format'],
|
||
['原生透传', 'native passthrough'],
|
||
['生态', 'ecosystem'],
|
||
['入口', 'entry'],
|
||
['响应', 'response'],
|
||
['一般', 'usually'],
|
||
['自定义', 'custom'],
|
||
['章节', 'section'],
|
||
['按周期', 'by cycle'],
|
||
['首次', 'first'],
|
||
['重试次数', 'retry count'],
|
||
['总超时时间', 'total timeout'],
|
||
['超时时间', 'timeout'],
|
||
['当前优先级', 'current priority'],
|
||
['规则', 'rules'],
|
||
['发送', 'send'],
|
||
['匹配', 'match'],
|
||
['一类', 'one class of'],
|
||
['标准模型列表', 'standard model list'],
|
||
['模型列表', 'model list'],
|
||
['低于', 'below'],
|
||
['各大', 'major'],
|
||
['金额下单', 'order amount'],
|
||
['实际收款金额', 'actual received amount'],
|
||
['通道手续费率', 'channel fee rate'],
|
||
['币种', 'currency'],
|
||
['最低充值金额', 'minimum top-up amount'],
|
||
['商户密钥', 'merchant key'],
|
||
['回调地址', 'callback URL'],
|
||
['接口地址', 'API URL'],
|
||
['后端', 'backend'],
|
||
['访问地址', 'access URL'],
|
||
['加密方式', 'encryption method'],
|
||
['常用端口', 'common ports'],
|
||
['无加密', 'no encryption'],
|
||
['应用专用密码', 'app-specific password'],
|
||
['发件人', 'sender'],
|
||
['邮箱地址', 'email address'],
|
||
['邮件服务', 'email service'],
|
||
['通知项', 'notification items'],
|
||
['模板', 'templates'],
|
||
['推送服务', 'push service'],
|
||
['黑白名单', 'blacklist/whitelist'],
|
||
['控制系统访问', 'control system access'],
|
||
['追踪安全事件', 'track security events'],
|
||
['变更记录', 'change records'],
|
||
['拖拽卡片调整顺序', 'drag cards to reorder'],
|
||
['细粒度', 'fine-grained'],
|
||
['用户认证', 'user authentication'],
|
||
['配置和参数', 'configuration and parameters'],
|
||
['清除系统数据', 'clear system data'],
|
||
['用户数据', 'user data'],
|
||
['一体化备份', 'integrated backup'],
|
||
['钱包快照', 'wallet snapshots'],
|
||
['品牌名称', 'brand name'],
|
||
['品牌名', 'brand name'],
|
||
['邮件中', 'emails'],
|
||
['卡密', 'redeem code'],
|
||
['兑换', 'redeem'],
|
||
['赠款余额', 'gift balance'],
|
||
['充值余额', 'top-up balance'],
|
||
['可退款余额', 'refundable balance'],
|
||
['每日额度套餐', 'daily quota plan'],
|
||
['未配置', 'not configured'],
|
||
['暂不可修改', 'temporarily cannot be changed'],
|
||
['退出其他设备', 'sign out other devices'],
|
||
['再次输入密码', 'enter password again'],
|
||
['设备', 'devices'],
|
||
['状态', 'status'],
|
||
['筛选用户', 'filter user'],
|
||
['筛选提供商', 'filter provider'],
|
||
['筛选类型', 'filter type'],
|
||
['总耗时', 'total duration'],
|
||
['输出速度', 'output speed'],
|
||
['最近24小时', 'last 24 hours'],
|
||
['自动刷新', 'auto refresh'],
|
||
['隐藏未知模型或提供商的请求', 'hide requests with unknown model or provider'],
|
||
['开启自动刷新', 'turn on auto refresh'],
|
||
['映射缓存', 'mapping cache'],
|
||
['解析缓存', 'resolution cache'],
|
||
['个键', 'keys'],
|
||
['因', 'due to'],
|
||
['次数', 'count'],
|
||
['读', 'read'],
|
||
['写', 'write'],
|
||
['慢请求', 'slow requests'],
|
||
['错误样本', 'error samples'],
|
||
['资源', 'resources'],
|
||
['数据流', 'data flow'],
|
||
['百分位', 'percentiles'],
|
||
['无上游样本', 'no upstream samples'],
|
||
['和', 'and'],
|
||
['与', 'and'],
|
||
['或', 'or'],
|
||
['的', ''],
|
||
['为', 'as'],
|
||
['在', 'in'],
|
||
['到', 'to'],
|
||
['从', 'from'],
|
||
['若', 'if'],
|
||
['请', 'please'],
|
||
['先', 'first'],
|
||
['再', 'then'],
|
||
['可', 'can'],
|
||
['会', 'will'],
|
||
['并', 'and'],
|
||
['且', 'and'],
|
||
['以', 'to'],
|
||
['于', 'at'],
|
||
['将', 'will'],
|
||
['天', 'days'],
|
||
['小时', 'hours'],
|
||
['分钟', 'minutes'],
|
||
['秒', 'seconds'],
|
||
]
|
||
|
||
const legacySortedPhraseMessages = [...legacyPhraseEnglishMessages]
|
||
.filter(([source]) => source.length > 1)
|
||
.sort((a, b) => b[0].length - a[0].length)
|
||
|
||
const legacySortedReplacementTokens = [
|
||
...Object.entries(legacyExactEnglishMessages).filter(([source]) => source.length > 1),
|
||
...legacyFallbackTokens.filter(([source]) => source.length > 1),
|
||
].sort((a, b) => b[0].length - a[0].length)
|
||
|
||
const legacyParticleTokens: Array<[string, string]> = [
|
||
['以及', ' and '],
|
||
['或者', ' or '],
|
||
['并且', ' and '],
|
||
['不含', ' excluding '],
|
||
['暂无', ' no '],
|
||
['是否', ' whether '],
|
||
['这里', ' here '],
|
||
['你的', ' your '],
|
||
['您的', ' your '],
|
||
['这个', ' this '],
|
||
['这种', ' this '],
|
||
['那个', ' that '],
|
||
['全部', ' all '],
|
||
['所有', ' all '],
|
||
['不同', ' different '],
|
||
['多种', ' multiple '],
|
||
['各种', ' various '],
|
||
['每个', ' each '],
|
||
['一个', ' one '],
|
||
['一些', ' some '],
|
||
['因', ' due to '],
|
||
['先', ' first '],
|
||
['再', ' then '],
|
||
['非', ' non-'],
|
||
['没有', ' no '],
|
||
['无法', ' unable to '],
|
||
['不能', ' cannot '],
|
||
['不会', ' will not '],
|
||
['不用', ' do not need to '],
|
||
['需要', ' need to '],
|
||
['可以', ' can '],
|
||
['支持', ' supports '],
|
||
['使用', ' use '],
|
||
['通过', ' through '],
|
||
['根据', ' according to '],
|
||
['进入', ' enter '],
|
||
['显示', ' display '],
|
||
['影响', ' affects '],
|
||
['包含', ' includes '],
|
||
['排查', ' troubleshoot '],
|
||
['关联', ' linked '],
|
||
['进行', ' perform '],
|
||
['检查', ' check '],
|
||
['收到', ' receives '],
|
||
['开通', ' activate '],
|
||
['消耗', ' consume '],
|
||
['累计', ' cumulative '],
|
||
['待处理', ' pending '],
|
||
['立即', ' now '],
|
||
['的', ' '],
|
||
['与', ' and '],
|
||
['和', ' and '],
|
||
['或', ' or '],
|
||
['及', ' and '],
|
||
['并', ' and '],
|
||
['而', ' '],
|
||
['从', ' from '],
|
||
['到', ' to '],
|
||
['在', ' in '],
|
||
['为', ' as '],
|
||
['将', ' will '],
|
||
['可', ' can '],
|
||
['会', ' will '],
|
||
['时', ' when '],
|
||
['后', ' after '],
|
||
['前', ' before '],
|
||
['内', ' within '],
|
||
['上', ' on '],
|
||
['下', ' next '],
|
||
['个', ' '],
|
||
['条', ' items '],
|
||
['行', ' rows '],
|
||
['项', ' items '],
|
||
['方', ' side '],
|
||
['性', ''],
|
||
['取', ''],
|
||
['锁', ' lock'],
|
||
['次', ' times '],
|
||
]
|
||
|
||
const cjkPattern = /[\u4e00-\u9fff]/
|
||
|
||
function preserveOuterWhitespace(source: string, value: string): string {
|
||
const leading = source.match(/^\s*/)?.[0] ?? ''
|
||
const trailing = source.match(/\s*$/)?.[0] ?? ''
|
||
return `${leading}${value}${trailing}`
|
||
}
|
||
|
||
function normalizeLegacyEnglish(value: string): string {
|
||
return value
|
||
.replace(/(/g, ' (')
|
||
.replace(/)/g, ')')
|
||
.replace(/:/g, ': ')
|
||
.replace(/,/g, ', ')
|
||
.replace(/。/g, '.')
|
||
.replace(/;/g, '; ')
|
||
.replace(/、/g, ' / ')
|
||
.replace(/“|”/g, '"')
|
||
.replace(/…/g, '...')
|
||
.replace(/:([A-Za-z])/g, ': $1')
|
||
.replace(/Priority:key/g, 'Priority: key')
|
||
.replace(/\s+/g, ' ')
|
||
.replace(/\s+([,.:;!?))])/g, '$1')
|
||
.replace(/([((])\s+/g, '$1')
|
||
.trim()
|
||
}
|
||
|
||
function translateLegacyByTokens(source: string): string {
|
||
let value = source
|
||
|
||
for (const [from, to] of legacySortedPhraseMessages) {
|
||
value = value.split(from).join(to)
|
||
}
|
||
|
||
for (const [from, to] of legacySortedReplacementTokens) {
|
||
value = value.split(from).join(to)
|
||
}
|
||
|
||
for (const [from, to] of legacyParticleTokens) {
|
||
value = value.split(from).join(to)
|
||
}
|
||
|
||
return normalizeLegacyEnglish(value)
|
||
}
|
||
|
||
export function translateLegacyText(source: string, locale: keyof typeof messages): string {
|
||
if (locale !== 'en-US' || !cjkPattern.test(source)) {
|
||
return source
|
||
}
|
||
|
||
const trimmed = source.trim()
|
||
const exact = legacyExactEnglishMessages[trimmed]
|
||
if (exact) {
|
||
return preserveOuterWhitespace(source, exact)
|
||
}
|
||
|
||
for (const [pattern, format] of legacyDynamicPatterns) {
|
||
const match = trimmed.match(pattern)
|
||
if (match) {
|
||
return preserveOuterWhitespace(source, format(match))
|
||
}
|
||
}
|
||
|
||
const fallback = translateLegacyByTokens(trimmed)
|
||
return preserveOuterWhitespace(source, fallback)
|
||
}
|
||
|
||
export type Locale = keyof typeof messages
|
||
export type MessageKey = keyof typeof messages['zh-CN']
|
||
|
||
export const defaultLocale: Locale = 'zh-CN'
|
||
export const supportedLocales = Object.keys(messages) as Locale[]
|