Files
claude-relay-service/web/admin-spa/src/i18n/locales/zh-cn.js
Wangnov a039d817db chore: 优化国际化文件格式,移除多余空行
- 统一三个语言文件的代码格式
- 移除多余的空行以保持代码整洁
2025-09-12 00:04:11 +08:00

2921 lines
105 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export default {
layout: {
mainLayout: {
comments: {
topNavigation: '顶部导航',
mainContentArea: '主内容区域',
tabBar: '标签栏',
contentArea: '内容区域'
},
routing: {
routeChangeError: '路由切换失败:',
routeNotFound: '路由未找到',
defaultToTab: '默认选中仪表板'
}
},
tabBar: {
tabs: {
dashboard: {
name: '仪表板',
shortName: '仪表板'
},
apiKeys: {
name: 'API Keys',
shortName: 'API'
},
accounts: {
name: '账户管理',
shortName: '账户'
},
userManagement: {
name: '用户管理',
shortName: '用户'
},
tutorial: {
name: '使用教程',
shortName: '教程'
},
settings: {
name: '系统设置',
shortName: '设置'
}
}
}
},
common: {
save: '保存',
cancel: '取消',
confirm: '确认',
loading: '加载中...',
edit: '编辑',
delete: '删除',
create: '创建',
update: '更新',
search: '搜索',
reset: '重置',
locale: 'zh-CN',
toastNotification: {
defaultTitles: {
success: '成功',
error: '错误',
warning: '警告',
info: '信息'
}
},
errors: {
loadDashboardFailed: '加载仪表板数据失败',
loadUsageTrendFailed: '加载使用趋势失败',
loadModelStatsFailed: '加载模型统计失败',
loadApiKeysTrendFailed: '加载API Keys趋势失败',
createClaudeConsoleAccountFailed: '创建Claude Console账户失败',
createAzureOpenAIAccountFailed: '创建Azure OpenAI账户失败',
updateClaudeConsoleAccountFailed: '更新Claude Console账户失败',
updateAzureOpenAIAccountFailed: '更新Azure OpenAI账户失败',
generateSetupTokenUrlFailed: '生成Setup Token URL失败',
exchangeSetupTokenFailed: '交换Setup Token授权码失败',
allApiKeysInvalid: '所有 API Key 都无效',
loadOemSettingsFailed: '加载OEM设置失败',
getApiKeyStatsFailed: '获取API Key统计失败',
getTagsFailed: '获取标签失败',
requestFailed: '请求失败: {status}',
loadSupportedClientsFailed: '加载支持的客户端失败'
},
system: {
status: {
normal: '正常',
abnormal: '异常'
}
},
confirmDialog: {
confirm: '确认',
cancel: '取消'
},
confirmModal: {
continue: '继续',
cancel: '取消'
},
themeToggle: {
light: {
label: '浅色模式',
shortLabel: '浅色'
},
dark: {
label: '深色模式',
shortLabel: '深色'
},
auto: {
label: '跟随系统',
shortLabel: '自动'
},
toggleTheme: '切换主题',
clickToSwitch: '点击切换主题'
},
logoTitle: {
logoAlt: '标志'
},
languageSwitch: {
zhCnName: '简体中文',
zhTwName: '繁体中文',
enName: '英语',
zhCnFlag: '简',
zhTwFlag: '繁',
enFlag: 'EN'
},
accountSelector: {
searchPlaceholder: '搜索账号名称...',
schedulingGroups: '调度分组',
membersUnit: '个成员',
claudeOAuthAccounts: 'Claude OAuth 专属账号',
oauthAccounts: 'OAuth 专属账号',
claudeConsoleAccounts: 'Claude Console 专属账号',
noResultsFound: '没有找到匹配的账号',
selectAccount: '请选择账号',
useSharedPool: '使用共享账号池',
accountStatus: {
unknown: '未知',
unauthorized: '未授权',
tokenError: 'Token错误',
pending: '待验证',
rateLimited: '限流中',
error: '异常',
active: '正常'
},
dateFormat: {
today: '今天创建',
yesterday: '昨天创建',
daysAgo: '天前'
}
},
customDropdown: {
placeholder: '请选择'
},
// 通用时间与错误
time: {
justNow: '刚刚',
minutesAgo: '{minutes}分钟前',
hoursAgo: '{hours}小时前',
daysAgo: '{days}天前'
},
// API Keys 页面按钮
model: '模型',
stats: '统计'
},
language: {
zh: '简体中文',
'zh-tw': '繁體中文',
en: 'English',
current: '当前语言',
switch: '切换语言'
},
header: {
adminPanel: '管理后台',
userMenu: '用户菜单',
logout: '退出登录',
settings: '系统设置',
// Version related
currentVersion: '当前版本',
newVersionAvailable: '有新版本可用',
newVersion: '新版本',
hasUpdate: '有新版本',
viewUpdate: '查看更新',
checkingUpdate: '检查更新中...',
alreadyLatest: '当前已是最新版本',
checkUpdate: '检查更新',
// User menu items
changeAccountInfo: '修改账户信息',
// Change password modal
changePasswordModal: {
title: '修改账户信息',
currentUsername: '当前用户名',
currentUsernameHint: '当前用户名,输入新用户名以修改',
newUsername: '新用户名',
newUsernamePlaceholder: '输入新用户名(留空保持不变)',
newUsernameHint: '留空表示不修改用户名',
currentPassword: '当前密码',
currentPasswordPlaceholder: '请输入当前密码',
newPassword: '新密码',
newPasswordPlaceholder: '请输入新密码',
newPasswordHint: '密码长度至少8位',
confirmPassword: '确认新密码',
confirmPasswordPlaceholder: '请再次输入新密码',
saving: '保存中...',
save: '保存修改',
// Messages
passwordMismatch: '两次输入的密码不一致',
passwordTooShort: '新密码长度至少8位',
accountInfoChangeSuccess: '账户信息修改成功,请重新登录',
passwordChangeSuccess: '密码修改成功,请重新登录',
changeFailed: '修改失败',
changePasswordFailed: '修改密码失败'
},
// Logout
logoutConfirm: '确定要退出登录吗?',
logoutSuccess: '已安全退出'
},
apiStats: {
title: 'API Key 使用统计',
tutorialTitle: '使用教程',
userLogin: '用户登录',
adminPanel: '管理后台',
statsQuery: '统计查询',
tutorial: '使用教程',
timeRange: '统计时间范围',
today: '今日',
thisMonth: '本月',
// API Key Input
usageStatsQuery: '使用统计查询',
apiKeyDescription: '查询您的 API Key 使用情况和统计数据',
enterApiKey: '输入您的 API Key',
enterApiKeys: '输入您的 API Keys每行一个或用逗号分隔',
singleMode: '单一',
aggregateMode: '聚合',
singleModeTitle: '单一模式',
aggregateModeTitle: '聚合模式',
queryButton: '查询',
// Stats Overview
batchQuerySummary: '批量查询概要',
apiKeyInfo: 'API Key 信息',
queryKeysCount: '查询 Keys 数',
activeKeysCount: '有效 Keys 数',
totalRequests: '总请求数',
totalTokens: '总 Token 数',
totalCost: '总费用',
individual: '个',
// Aggregated Stats Card
usageRatio: '使用占比',
requests: '次',
otherKeys: '其他',
keys: 'Keys',
// Model Usage Stats
modelUsageStats: '模型使用统计',
loadingModelStats: '加载模型统计数据中...',
requestCount: '次请求',
inputTokens: '输入 Token',
outputTokens: '输出 Token',
cacheCreateTokens: '缓存创建',
cacheReadTokens: '缓存读取',
noModelData: '暂无{period}模型使用数据',
// Token Distribution
tokenDistribution: 'Token 使用分布',
inputToken: '输入 Token',
outputToken: '输出 Token',
cacheCreateToken: '缓存创建 Token',
cacheReadToken: '缓存读取 Token',
// Limit Config
limitConfig: '限制配置',
limitConfigAggregate: '限制配置(聚合查询模式)',
apiKeysOverview: 'API Keys 概况',
totalKeys: '总计 Keys',
activeKeys: '激活 Keys',
aggregatedStats: '聚合统计',
dailyLimit: '日限制',
monthlyLimit: '月限制',
usageToday: '今日使用',
usageThisMonth: '本月使用',
remaining: '剩余',
// Stats Overview - Additional keys
name: '名称',
status: '状态',
permissions: '权限',
createdAt: '创建时间',
expiresAt: '过期时间',
active: '活跃',
inactive: '已停用',
notActivated: '未激活',
expired: '已过期',
neverExpires: '永不过期',
allModels: '全部模型',
unknown: '未知',
none: '无',
formatError: '格式错误',
usageStatsOverview: '使用统计概览',
keyContribution: '各 Key 贡献占比',
firstUseDays: '首次使用后{days}天过期',
todayRequests: '今日请求数',
todayTokens: '今日Token数',
todayCost: '今日费用',
todayInputTokens: '今日输入Token',
monthlyRequests: '本月请求数',
monthlyTokens: '本月Token数',
monthlyCost: '本月费用',
monthlyInputTokens: '本月输入Token',
// Limit Config - Additional keys
dailyCostLimit: '每日费用限制',
concurrencyLimit: '并发限制',
modelLimit: '模型限制',
clientLimit: '客户端限制',
restrictedModelsCount: '限制 {count} 个模型',
allowAllModels: '允许所有模型',
restrictedClientsCount: '限制 {count} 个客户端',
allowAllClients: '允许所有客户端',
detailedLimitInfo: '详细限制信息',
restrictedModelsList: '受限模型列表',
restrictedModelsNote: '此 API Key 不能访问以上列出的模型',
allowedClientsList: '允许的客户端',
allowedClientsNote: '此 API Key 只能被以上列出的客户端使用',
timeWindowLimit: '时间窗口限制',
aggregateStatsNote: '每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置',
aggregateStatsSummary: '聚合统计摘要',
invalidKeysCount: '{count} 个无效的 API Key',
orRelationshipRequests: '请求次数和费用限制为“或”的关系,任一达到限制即触发限流',
orRelationshipTokens: '请求次数和Token使用量为“或”的关系任一达到限制即触发限流',
onlyRequestsLimit: '仅限制请求次数',
// Token Distribution - Additional keys
totalAmount: '总计',
todayTotal: '今日总计',
monthlyTotal: '本月总计',
// Additional missing keys
usageRatioOnlyInMultiMode: '使用占比仅在多Key查询时显示',
noData: '暂无数据',
// ApiKeyInput placeholders and texts
apiKeyPlaceholder: '请输入您的 API Key (cr_...)',
apiKeysPlaceholder: '请输入您的 API Keys支持以下格式\ncr_xxx\ncr_yyy\n或\ncr_xxx, cr_yyy',
clearInput: '清空输入',
securityNoticeSingle: '您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途',
securityNoticeMulti:
'您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。',
multiKeyTip: '提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。',
errors: {
queryStatsFailed: '查询统计数据失败,请检查您的 API Key 是否正确',
enterAtLeastOneKey: '请输入至少一个有效的 API Key',
batchQueryFailed: '批量查询失败',
batchModelStatsFailed: '加载批量模型统计失败',
loadModelStatsFailed: '加载模型统计失败',
allInvalidKeys: '所有 API Key 都无效'
}
},
// Login page
login: {
title: '管理后台',
username: '用户名',
usernamePlaceholder: '请输入用户名',
password: '密码',
passwordPlaceholder: '请输入密码',
loginButton: '登录',
loggingIn: '登录中...',
loginFailed: '登录失败',
loginFailedCheck: '登录失败,请检查用户名和密码'
},
// Dashboard page
dashboard: {
// Main stats cards
totalApiKeys: '总 API Keys',
activeApiKeys: '活跃',
serviceAccounts: '服务账户',
normalAccounts: '正常',
abnormalAccounts: '异常',
pausedAccounts: '停止调度',
rateLimitedAccounts: '限流',
todayRequests: '今日请求',
totalRequests: '总请求',
systemStatus: '系统状态',
uptime: '运行时间',
// Platform accounts tooltip
claudeAccount: 'Claude: {total} 个 (正常: {normal})',
consoleAccount: 'Console: {total} 个 (正常: {normal})',
geminiAccount: 'Gemini: {total} 个 (正常: {normal})',
bedrockAccount: 'Bedrock: {total} 个 (正常: {normal})',
openaiAccount: 'OpenAI: {total} 个 (正常: {normal})',
azureOpenaiAccount: 'Azure OpenAI: {total} 个 (正常: {normal})',
// Token stats cards
todayToken: '今日Token',
totalTokenConsumption: '总Token消耗',
inputTokens: '输入',
outputTokens: '输出',
cacheCreateTokens: '缓存创建',
cacheReadTokens: '缓存读取',
// Real-time metrics
realtimeRPM: '实时RPM',
realtimeTPM: '实时TPM',
requestsPerMinute: '每分钟请求数',
tokensPerMinute: '每分钟Token数',
historicalData: '历史数据',
minutes: '分钟',
// Uptime display formats
uptimeFormat: {
daysHours: '{days}天 {hours}小时',
hoursMinutes: '{hours}小时 {minutes}分钟',
minutes: '{minutes}分钟'
},
// Charts section
modelDistributionAndTrend: '模型使用分布与Token使用趋势',
// Date filter presets (would be populated from dateFilter.presetOptions)
today: '今日',
yesterday: '昨日',
dayBefore: '前天',
last7Days: '近7天',
last30Days: '近30天',
thisWeek: '本周',
lastWeek: '上周',
thisMonth: '本月',
lastMonth: '上月',
// Granularity buttons
byDay: '按天',
byHour: '按小时',
// Date picker
startDatePlaceholder: '开始日期',
endDatePlaceholder: '结束日期',
dateSeparator: '至',
maxHours24: '最多24小时',
// Auto refresh controls
autoRefresh: '自动刷新',
refresh: '刷新',
refreshing: '刷新中',
refreshDataNow: '立即刷新数据',
// Charts
tokenUsageDistribution: 'Token使用分布',
detailedStatistics: '详细统计数据',
noModelUsageData: '暂无模型使用数据',
// Table headers
model: '模型',
requestCount: '请求数',
totalTokens: '总Token',
cost: '费用',
percentage: '占比',
// Trend charts
tokenUsageTrend: 'Token使用趋势',
apiKeysUsageTrend: 'API Keys 使用趋势',
requestsCount: '请求次数',
tokenCount: 'Token 数量',
totalApiKeysCount: '共 {count} 个 API Key',
showingTop10: '共 {count} 个 API Key显示使用量前 10 个',
// Chart labels
inputTokensLabel: '输入Token',
outputTokensLabel: '输出Token',
cacheCreateTokensLabel: '缓存创建Token',
cacheReadTokensLabel: '缓存读取Token',
costLabel: '费用 (USD)',
requestsLabel: '请求数',
time: '时间',
date: '日期',
tokenQuantity: 'Token数量',
requestsQuantity: '请求次数',
// Usage Trend component
usageTrend: {
title: '使用趋势',
granularity: {
byDay: '按天',
byHour: '按小时'
},
periodOptions: {
last24Hours: '24小时',
last7Days: '7天',
last30Days: '30天',
recentDays: '最近{days}天'
},
chartLabels: {
requests: '请求次数',
tokens: 'Token使用量',
requestsAxis: '请求次数',
tokensAxis: 'Token使用量'
}
},
// Model Distribution component
modelDistribution: {
title: '模型使用分布',
periods: {
daily: '今日',
total: '累计'
},
noData: '暂无模型使用数据',
units: {
requests: '请求',
tokens: 'tokens'
},
chart: {
tooltip: {
requests: '请求',
tokens: 'Tokens'
}
}
},
errors: {
rangeTooLongHour: '小时粒度下日期范围不能超过24小时',
rangeTooLongDay: '日期范围不能超过 31 天',
rangeTooLongHourSwitched: '小时粒度下日期范围不能超过24小时已切换到近24小时'
}
},
// Accounts page
accounts: {
title: '账户管理',
description: '管理您的 Claude、Gemini、OpenAI 和 Azure OpenAI 账户及代理配置',
// Filters and sorting
sortBy: '选择排序',
selectPlatform: '选择平台',
selectGroup: '选择分组',
refresh: '刷新',
refreshTooltip: '刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)',
addAccount: '添加账户',
// Sort options
sortByName: '按名称排序',
sortByDailyTokens: '按今日Token排序',
sortByDailyRequests: '按今日请求数排序',
sortByTotalTokens: '按总Token排序',
sortByLastUsed: '按最后使用排序',
// Platform options
allPlatforms: '所有平台',
claudePlatform: 'Claude',
claudeConsolePlatform: 'Claude Console',
geminiPlatform: 'Gemini',
openaiPlatform: 'OpenAi',
azureOpenaiPlatform: 'Azure OpenAI',
bedrockPlatform: 'Bedrock',
// Group options
allAccounts: '所有账户',
ungroupedAccounts: '未分组账户',
// Loading states
loadingAccounts: '正在加载账户...',
noAccounts: '暂无账户',
noAccountsHint: '点击上方按钮添加您的第一个账户',
// Table headers
name: '名称',
platformType: '平台/类型',
status: '状态',
priority: '优先级',
proxy: '代理',
dailyUsage: '今日使用',
sessionWindow: '会话窗口',
lastUsed: '最后使用',
actions: '操作',
// Account types
dedicated: '专属',
groupScheduling: '分组调度',
shared: '共享',
belongsToGroup: '所属分组: {name}',
// Platform labels
unknown: '未知',
apiKey: 'API Key',
oauth: 'OAuth',
setup: 'Setup',
aws: 'AWS',
// Account status
normal: '正常',
abnormal: '异常',
blocked: '已封锁',
tempError: '临时异常',
rateLimited: '限流中',
notSchedulable: '不可调度',
bound: '绑定: {count} 个API Key',
// Proxy status
noProxy: '无代理',
// Usage statistics
requests: '次',
noData: '暂无数据',
averageRpm: '平均 {rpm} RPM',
// Session window tooltip
sessionWindowTooltip: {
title: '会话窗口进度表示5小时窗口的时间进度',
normal: '正常:请求正常处理',
warning: '警告:接近限制',
rejected: '拒绝:达到速率限制'
},
// Session window status
remaining: '剩余 {time}',
ended: '已结束',
// Console quota
quotaProgress: '额度进度',
remainingQuota: '剩余 $${amount}',
reset: '重置 {time}',
// Mobile view labels
dailyUsageLabel: '今日使用',
sessionWindowLabel: '会话窗口',
lastUsedLabel: '最后使用',
proxyLabel: '代理',
priorityLabel: '优先级',
neverUsed: '从未使用',
sessionWindowTooltipMobile: '会话窗口进度不代表使用量仅表示距离下一个5小时窗口的剩余时间',
// Action buttons
resetStatus: '重置状态',
resetting: '重置中...',
resetStatusTooltip: '重置所有异常状态',
scheduling: '调度',
disabled: '停用',
enableTooltip: '点击启用调度',
disableTooltip: '点击禁用调度',
edit: '编辑',
editTooltip: '编辑账户',
delete: '删除',
deleteTooltip: '删除账户',
pause: '暂停',
enable: '启用',
// Time formatting
justNow: '刚刚',
minutesAgo: '{minutes} 分钟前',
hoursAgo: '{hours} 小时前',
daysAgo: '{days} 天前',
hoursAndMinutes: '{hours}小时{minutes}分钟',
hoursOnly: '{hours}小时',
minutesOnly: '{minutes}分钟',
daysAndHours: '{days}天{hours}小时',
daysOnly: '{days}天',
// Rate limit time
rateLimitTime: '({time})',
// Messages and confirmations
resetStatusConfirmTitle: '重置账户状态',
resetStatusConfirmMessage:
'确定要重置此账户的所有异常状态吗这将清除限流状态、401错误计数等所有异常标记。',
resetStatusConfirmButton: '确定重置',
resetStatusCancelButton: '取消',
statusResetSuccess: '账户状态已重置',
statusResetFailed: '状态重置失败',
deleteAccountTitle: '删除账户',
deleteAccountMessage: '确定要删除账户 "{name}" 吗?\n\n此操作不可恢复。',
deleteAccountButton: '删除',
deleteAccountCancel: '取消',
cannotDeleteBoundAccount:
'无法删除此账号,有 {count} 个API Key绑定到此账号请先解绑所有API Key',
accountDeleted: '账户已删除',
deleteFailed: '删除失败',
enabledScheduling: '已启用调度',
disabledScheduling: '已禁用调度',
schedulingToggleFailed: '切换调度状态失败',
unsupportedAccountType: '该账户类型暂不支持调度控制',
operationFailed: '操作失败',
accountCreateSuccess: '账户创建成功',
accountUpdateSuccess: '账户更新成功',
loadAccountsFailed: '加载账户失败',
unsupportedAccountTypeReset: '不支持的账户类型',
// Schedulable reasons
invalidApiKey: 'API Key无效或已过期401错误',
serviceOverload: '服务过载529错误',
rateLimitTriggered: '触发限流429错误',
authFailed: '认证失败401错误',
manualStop: '手动停止调度',
// Account type display
claudeMax: 'Claude Max',
claudePro: 'Claude Pro',
claudeFree: 'Claude Free',
// Platform display
openaiResponsesPlatform: 'OpenAI-Responses',
ccrPlatform: 'CCR'
},
apiKeys: {
// Page title and description
title: 'API Keys 管理',
description: '管理和监控您的 API 密钥',
// Tab navigation
activeTab: '活跃 API Keys',
deletedTab: '已删除 API Keys',
// Toolbar and actions
refresh: '刷新',
refreshTooltip: '刷新 API Keys 列表Ctrl+点击强制刷新)',
createNew: '创建新 Key',
bulkEdit: '编辑选中',
bulkDelete: '删除选中',
// Table headers
name: '名称',
tags: '标签',
status: '状态',
usageStats: '使用统计',
createdAt: '创建时间',
expiresAt: '过期时间',
actions: '操作',
// Filter options
timeRange: {
today: '今日',
week: '最近7天',
month: '本月',
all: '全部时间'
},
// Status
active: '活跃',
disabled: '禁用',
expired: '已过期',
expiringSoon: '即将过期',
neverExpire: '永不过期',
notActivated: '未激活',
// Usage statistics
dailyCost: '今日费用',
totalCost: '总费用',
dailyRequests: '今日请求',
lastUsed: '最后使用',
neverUsed: '从未使用',
minutesAgo: '{minutes} 分钟前',
hoursAgo: '{hours} 小时前',
daysAgo: '{days} 天前',
justNow: '刚刚',
requests: '次',
// Search and filter
searchPlaceholder: '搜索名称...',
searchPlaceholderWithOwner: '搜索名称或所有者...',
allTags: '所有标签',
noTags: '无标签',
// Binding information
shared: '使用共享池',
dedicated: '专属',
consoleAccount: 'Console账户',
bindingWarning: '⚠️ 账户不存在',
// Limits and quotas
dailyLimit: '每日费用',
weeklyOpusLimit: 'Opus周费用',
remainingQuota: '剩余: ${amount}',
reset: '重置于 {time}',
quotaProgress: '额度进度',
// Model statistics
modelStats: '模型使用分布',
modelStatsCount: '{count} 个模型',
totalTokens: '总Token',
inputTokens: '输入',
outputTokens: '输出',
cacheCreate: '缓存创建',
cacheRead: '缓存读取',
totalRequests: '总请求',
noModelData: '暂无模型使用数据',
resetFilter: '刷新',
adjustTimeRange: '尝试调整时间范围或点击刷新重新加载数据',
// Date filter
dateFilter: {
today: '今日',
days7: '7天',
days30: '30天'
},
// Actions
viewDetails: '查看详细统计',
edit: '编辑',
renew: '续期',
activate: '激活',
disable: '禁用',
copy: '复制',
copyStatsLink: '复制统计页面链接',
// Pagination
totalRecords: '共 {count} 条记录',
pageSize: '每页显示',
records: '条',
// Empty states
noApiKeys: '暂无 API Keys',
noApiKeysHint: '点击上方按钮创建您的第一个 API Key',
noDeletedKeys: '暂无已删除的 API Keys',
noDeletedKeysHint: '已删除的 API Keys 会出现在这里',
loading: '正在加载 API Keys...',
loadingDeleted: '正在加载已删除的 API Keys...',
loadingModelStats: '加载模型统计...',
// Deleted keys table
creator: '创建者',
deletedBy: '删除者',
deletedAt: '删除时<E999A4><E697B6>',
canRestore: '恢复',
permanentDelete: '彻底删除',
clearAllDeleted: '清空所有已删除',
// User types
admin: '管理员',
user: '用户',
unknown: '未知',
system: '系统',
// Confirmation dialogs
confirmDisable: '确定要禁用 API Key "{name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。',
confirmDelete: '确定要删除这个 API Key 吗?此操作不可恢复。',
confirmBatchDelete: '确定要删除选中的 {count} 个 API Key 吗?此操作不可恢复。',
confirmRestore: '确定要恢复这个 API Key 吗?恢复后可以重新使用。',
confirmPermanentDelete:
'确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。',
confirmClearAll:
'确定要彻底删除全部 {count} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。',
// Success messages
keyActivated: 'API Key 已激活',
keyDisabled: 'API Key 已禁用',
keyDeleted: 'API Key 已删除',
keyRestored: 'API Key 已成功恢复',
keyPermanentDeleted: 'API Key 已彻底删除',
allDeletedCleared: '已清空所有已删除的 API Keys',
linkCopied: '已复制统计页面链接',
expiryUpdated: '过期时间已更新',
// Error messages
selectKeysFirst: '请先选择要编辑的 API Keys',
loadFailed: '加载 API Keys 失败',
operationFailed: '操作失败',
copyFailed: '复制失败,请手动复制',
updateFailed: '更新失败',
deleteFailed: '删除失败',
restoreFailed: '恢复失败',
clearFailed: '清空失败',
// Tooltips and helpers
editExpiry: '编辑过期时间',
activationDays: '未激活 ({days}天)',
boundTo: '绑定到',
belongsToGroup: '所属分组: {name}',
// Batch operations
batchSuccess: '成功处理 {count} 个项目',
batchPartialFail: '{failed} 个处理失败',
batchAllFailed: '所有项目处理失败',
// Batch API Key Modal
batchApiKeyModal: {
title: '批量创建成功',
successMessage: '成功创建 {count} 个 API Key',
importantReminder: '重要提醒',
warningMessage:
'这是您唯一能看到所有 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即下载并妥善保存。',
// Statistics cards
createdCount: '创建数量',
baseName: '基础名称',
permissionScope: '权限范围',
expiryTime: '过期时间',
// Permission texts
permissions: {
all: '全部服务',
claude: '仅 Claude',
gemini: '仅 Gemini',
unknown: '未知'
},
// Expiry time texts
neverExpire: '永不过期',
daysFormat: '{days}天',
weeksFormat: '{weeks}周',
monthsFormat: '{months}个月',
yearsFormat: '{years}年',
// Preview section
previewTitle: 'API Keys 预览',
hide: '隐藏',
show: '显示',
preview: '预览',
maxDisplayNote: '最多显示前10个',
moreKeysNote: '... 还有 {count} 个 API Key',
// Action buttons
downloadAll: '下载所有 API Keys',
alreadySaved: '我已保存',
directCloseTooltip: '直接关闭(不推荐)',
// File info
fileFormatInfo:
'下载的文件格式为文本文件(.txt每行包含一个 API Key。请将文件保存在安全的位置避免泄露。',
// Confirmation dialogs
closeReminderTitle: '关闭提醒',
closeReminderMessage:
'关闭后将无法再次查看这些 API Key请确保已经下载并妥善保存。\n\n确定要关闭吗',
confirmCloseButton: '确定关闭',
goBackDownloadButton: '返回下载',
directCloseTitle: '确定要关闭吗?',
directCloseMessage: '您还没有下载 API Keys关闭后将无法再次查看。\n\n强烈建议您先下载保存。',
stillCloseButton: '仍然关闭',
directCloseFallbackMessage: '您还没有下载 API Keys关闭后将无法再次查看。\n\n确定要关闭吗',
// Success messages
downloadSuccess: 'API Keys 文件已下载'
},
// Window Countdown
windowCountdown: {
expired: '窗口已过期',
notStarted: '窗口未激活',
minutes: '分钟',
requests: '请求',
tokens: 'Token',
cost: '费用',
aboutToReset: '即将重置',
minutesUntilReset: '分钟后重置',
untilReset: '后重置',
windowLimit: '窗口限制',
hours: '小时'
},
// Expiry Edit Modal
expiryEditModal: {
title: '修改过期时间',
subtitle: '为 "{name}" 设置新的过期时间',
currentStatus: '当前状态',
notActivated: '未激活',
activationDaysHint: '(激活后 {days} 天过期)',
neverExpire: '永不过期',
expired: '已过期',
daysToExpire: '{days} 天后过期',
monthsToExpire: '{months} 个月后过期',
activateNow: '立即激活',
activateButton: '立即激活 (激活后 {days} 天过期)',
activationInfo: '点击立即激活此 API Key激活后将在 {days} 天后过期',
selectNewDuration: '选择新的期限',
neverExpireOption: '永不过期',
oneDay: '1 天',
sevenDays: '7 天',
thirtyDays: '30 天',
ninetyDays: '90 天',
oneHundredEightyDays: '180 天',
threeSixtyFiveDays: '1 年',
twoYears: '2 年',
custom: '自定义',
selectDateAndTime: '选择日期和时间',
selectFutureDateTime: '选择一个未来的日期和时间作为过期时间',
newExpiryTime: '新的过期时间',
cancel: '取消',
saving: '保存中...',
saveChanges: '保存更改',
activateConfirmTitle: '激活 API Key',
activateConfirmMessage: '确定要立即激活此 API Key 吗?激活后将在 {days} 天后自动过期。',
confirmActivate: '确定激活',
confirmCancel: '取消'
},
// Edit API Key Modal
editApiKeyModal: {
title: '编辑 API Key',
// Basic Info
name: '名称',
namePlaceholder: '请输入API Key名称',
nameHint: '用于识别此 API Key 的用途',
// Owner
owner: '所有者',
adminLabel: '- 管理员',
ownerHint: '分配此 API Key 给指定用户或管理员,管理员分配时不受用户 API Key 数量限制',
// Tags
tags: '标签',
selectedTags: '已选择的标签:',
clickToSelectTags: '点击选择已有标签:',
createNewTag: '创建新标签:',
newTagPlaceholder: '输入新标签名称',
tagsHint: '用于标记不同团队或用途,方便筛选管理',
// Rate Limit Settings
rateLimitTitle: '速率限制设置 (可选)',
rateLimitWindow: '时间窗口 (分钟)',
rateLimitRequests: '请求次数限制',
rateLimitCost: '费用限制 (美元)',
rateLimitWindowHint: '时间段单位',
rateLimitRequestsHint: '窗口内最大请求',
rateLimitCostHint: '窗口内最大费用',
noLimit: '无限制',
// Usage Examples
usageExamples: '💡 使用示例',
example1: '示例1: 时间窗口=60请求次数=1000 → 每60分钟最多1000次请求',
example2: '示例2: 时间窗口=1费用=0.1 → 每分钟最多$0.1费用',
example3: '示例3: 窗口=30请求=50费用=5 → 每30分钟50次请求且不超$5费用',
// Cost Limits
dailyCostLimit: '每日费用限制 (美元)',
dailyCostLimitPlaceholder: '0 表示无限制',
dailyCostHint: '设置此 API Key 每日的费用限制超过限制将拒绝请求0 或留空表示无限制',
weeklyOpusCostLimit: 'Opus 模型周费用限制 (美元)',
weeklyOpusHint:
'设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户0 或留空表示无限制',
custom: '自定义',
// Concurrency
concurrencyLimit: '并发限制',
concurrencyLimitPlaceholder: '0 表示无限制',
concurrencyHint: '设置此 API Key 可同时处理的最大请求数',
// Active Status
activeStatus: '激活账号',
activeStatusHint: '取消勾选将禁用此 API Key暂停所有请求客户端返回 401 错误',
// Service Permissions
servicePermissions: '服务权限',
allServices: '全部服务',
claudeOnly: '仅 Claude',
geminiOnly: '仅 Gemini',
openaiOnly: '仅 OpenAI',
permissionsHint: '控制此 API Key 可以访问哪些服务',
// Account Binding
accountBinding: '专属账号绑定',
refreshAccounts: '刷新账号',
refreshing: '刷新中...',
claudeAccount: 'Claude 专属账号',
geminiAccount: 'Gemini 专属账号',
openaiAccount: 'OpenAI 专属账号',
bedrockAccount: 'Bedrock 专属账号',
useSharedPool: '使用共享账号池',
selectClaudeAccount: '请选择Claude账号',
selectGeminiAccount: '请选择Gemini账号',
selectOpenaiAccount: '请选择OpenAI账号',
selectBedrockAccount: '请选择Bedrock账号',
accountBindingHint: '修改绑定账号将影响此API Key的请求路由',
// Model Restrictions
enableModelRestriction: '启用模型限制',
restrictedModels: '限制的模型列表',
noRestrictedModels: '暂无限制的模型',
allCommonModelsRestricted: '所有常用模型已在限制列表中',
addRestrictedModelPlaceholder: '输入模型名称,按回车添加',
modelRestrictionHint: '设置此API Key无法访问的模型例如claude-opus-4-20250514',
// Client Restrictions
enableClientRestriction: '启用客户端限制',
allowedClients: '允许的客户端',
clientRestrictionHint: '勾选允许使用此API Key的客户端',
// Buttons
cancel: '取消',
save: '保存修改',
saving: '保存中...',
// Messages
costLimitConfirmTitle: '费用限制提醒',
costLimitConfirmMessage:
'您设置了时间窗口但费用限制为0这意味着不会有费用限制。\n\n是否继续',
costLimitConfirmContinue: '继续保存',
costLimitConfirmBack: '返回修改',
refreshAccountsSuccess: '账号列表已刷新',
refreshAccountsFailed: '刷新账号列表失败',
updateFailed: '更新失败'
},
// Renew API Key Modal
renewApiKeyModal: {
title: '续期 API Key',
apiKeyInfo: 'API Key 信息',
currentExpiry: '当前过期时间:',
neverExpires: '永不过期',
renewDuration: '续期时长',
extend7Days: '延长 7 天',
extend30Days: '延长 30 天',
extend90Days: '延长 90 天',
extend180Days: '延长 180 天',
extend365Days: '延长 365 天',
customDate: '自定义日期',
setPermanent: '设为永不过期',
newExpiry: '新的过期时间:',
cancel: '取消',
renewing: '续期中...',
confirmRenew: '确认续期',
renewSuccess: 'API Key 续期成功',
renewFailed: '续期失败'
},
// Batch Edit API Key Modal
batchEditApiKeyModal: {
title: '批量编辑 API Keys ({count} 个)',
// Info section
infoTitle: '批量编辑说明',
infoContent:
'以下设置将应用到所选的 {count} 个 API Key。只有填写或修改的字段才会被更新空白字段将保持原值不变。',
// Tag operations
tagLabel: '标签 (批量操作)',
tagOperations: {
replace: '替换标签',
add: '添加标签',
remove: '移除标签',
none: '不修改标签'
},
// Tag status texts
newTagsList: '新标签列表:',
tagsToAdd: '要添加的标签:',
tagsToRemove: '要移除的标签:',
clickToSelectTags: '点击选择已有标签:',
createNewTag: '创建新标签:',
inputNewTagPlaceholder: '输入新标签名称',
// Rate limit settings
rateLimitTitle: '速率限制设置',
rateLimitWindow: '时间窗口 (分钟)',
rateLimitRequests: '请求次数限制',
rateLimitCost: '费用限制 (美元)',
noModifyPlaceholder: '不修改',
// Daily cost limit
dailyCostLimit: '每日费用限制 (美元)',
dailyCostLimitPlaceholder: '不修改 (0 表示无限制)',
// Weekly Opus cost limit
weeklyOpusCostLimit: 'Opus 模型周费用限制 (美元)',
weeklyOpusCostLimitPlaceholder: '不修改 (0 表示无限制)',
opusLimitDescription: '设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户',
// Concurrency limit
concurrencyLimit: '并发限制',
concurrencyLimitPlaceholder: '不修改 (0 表示无限制)',
// Active status
activeStatus: '激活状态',
statusOptions: {
active: '激活',
disabled: '禁用',
noChange: '不修改'
},
// Service permissions
servicePermissions: '服务权限',
permissionOptions: {
noChange: '不修改',
all: '全部服务',
claude: '仅 Claude',
gemini: '仅 Gemini',
openai: '仅 OpenAI'
},
// Account binding
accountBinding: '专属账号绑定',
refreshAccounts: '刷新账号',
refreshing: '刷新中...',
claudeAccount: 'Claude 专属账号',
geminiAccount: 'Gemini 专属账号',
openaiAccount: 'OpenAI 专属账号',
bedrockAccount: 'Bedrock 专属账号',
accountOptions: {
noChange: '不修改',
sharedPool: '使用共享账号池',
groupPrefix: '分组 - '
},
// Optgroup labels
optgroupLabels: {
accountGroups: '账号分组',
dedicatedAccounts: '专属账号'
},
// Buttons
cancel: '取消',
saving: '保存中...',
batchSave: '批量保存',
// Messages
refreshAccountsSuccess: '账号列表已刷新',
refreshAccountsFailed: '刷新账号列表失败',
batchEditSuccess: '成功批量编辑 {count} 个 API Keys',
batchEditPartialFail: '{failedCount} 个编辑失败:\n{errors}',
batchEditAllFailed: '所有 API Keys 编辑失败',
batchEditFailed: '批量编辑失败',
batchEditErrorLog: '批量编辑 API Keys 失败:'
},
// Usage Detail Modal
usageDetailModal: {
title: '使用统计详情',
close: '关闭',
// Statistics cards
totalRequests: '总请求数',
totalTokens: '总Token数',
totalCost: '总费用',
averageRate: '平均速率',
// Today stats
today: '今日',
todayRequests: '{count} 次',
todayTokens: '{count}',
todayCost: '${amount}',
// Usage labels
times: '次',
// Token distribution
tokenDistribution: 'Token 使用分布',
inputTokens: '输入 Token',
outputTokens: '输出 Token',
cacheCreateTokens: '缓存创建 Token',
cacheReadTokens: '缓存读取 Token',
// Limits section
limitSettings: '限制设置',
dailyCostLimit: '每日费用限制',
concurrencyLimit: '并发限制',
timeWindowLimit: '时间窗口限制',
windowStatus: '窗口状态',
used: '已使用',
remainingQuota: '剩余: ${amount}',
// Progress indicators
usedPercentage: '已使用 {percentage}%'
},
// Create API Key Modal
newApiKeyModal: {
title: 'API Key 创建成功',
subtitle: '请妥善保存您的 API Key',
directCloseTooltip: '直接关闭(不推荐)',
// 警告提示
warningTitle: '重要提醒',
warningMessage:
'这是您唯一能看到完整 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即复制并妥善保存。',
// 字段标签
apiKeyName: 'API Key 名称',
remarks: '备注',
noDescription: '无描述',
apiKey: 'API Key',
// 可见性切换
hideApiKey: '隐藏API Key',
showFullApiKey: '显示完整API Key',
visibilityHint: '点击眼睛图标切换显示模式,使用下方按钮复制完整 API Key',
// 按钮
copyApiKey: '复制 API Key',
alreadySaved: '我已保存',
// 确认对话框
closeReminderTitle: '关闭提醒',
closeReminderMessage:
'关闭后将无法再次查看完整的API Key请确保已经妥善保存。\n\n确定要关闭吗',
confirmClose: '确定关闭',
cancel: '取消',
directCloseTitle: '确定要关闭吗?',
directCloseMessage:
'您还没有保存API Key关闭后将无法再次查看。\n\n建议您先复制API Key再关闭。',
stillClose: '仍然关闭',
goBack: '返回复制',
directCloseFallback: '您还没有保存API Key关闭后将无法再次查看。\n\n确定要关闭吗',
// 成功消息
apiKeyNotFound: 'API Key 不存在',
copySuccess: 'API Key 已复制到剪贴板',
copyFailed: '复制失败,请手动复制'
},
createApiKeyModal: {
title: '创建新的 API Key',
// Create type section
createType: '创建类型',
singleCreate: '单个创建',
batchCreate: '批量创建',
batchCount: '创建数量',
batchCountPlaceholder: '输入数量 (2-500)',
maxSupported: '最大支持 500 个',
batchHint: '批量创建时,每个 Key 的名称会自动添加序号后缀,例如:{name}_1, {name}_2 ...',
// Basic form fields
name: '名称',
nameRequired: '*',
nameError: '请输入API Key名称',
singleNamePlaceholder: '为您的 API Key 取一个名称',
batchNamePlaceholder: '输入基础名称(将自动添加序号)',
description: '备注 (可选)',
descriptionPlaceholder: '描述此 API Key 的用途...',
// Tags section
tags: '标签',
selectedTags: '已选择的标签:',
clickToSelectTags: '点击选择已有标签:',
createNewTag: '创建新标签:',
newTagPlaceholder: '输入新标签名称',
tagHint: '用于标记不同团队或用途,方便筛选管理',
// Rate limit section
rateLimitTitle: '速率限制设置 (可选)',
rateLimitWindow: '时间窗口 (分钟)',
rateLimitRequests: '请求次数限制',
rateLimitCost: '费用限制 (美元)',
rateLimitWindowPlaceholder: '无限制',
rateLimitRequestsPlaceholder: '无限制',
rateLimitCostPlaceholder: '无限制',
rateLimitWindowHint: '时间段单位',
rateLimitRequestsHint: '窗口内最大请求',
rateLimitCostHint: '窗口内最大费用',
// Rate limit examples
exampleTitle: '💡 使用示例',
example1: '示例1: 时间窗口=60请求次数=1000 → 每60分钟最多1000次请求',
example2: '示例2: 时间窗口=1费用=0.1 → 每分钟最多$0.1费用',
example3: '示例3: 窗口=30请求=50费用=5 → 每30分钟50次请求且不超$5费用',
// Cost limits
dailyCostLimit: '每日费用限制 (美元)',
dailyCostLimitPlaceholder: '0 表示无限制',
dailyCostHint: '设置此 API Key 每日的费用限制超过限制将拒绝请求0 或留空表示无限制',
weeklyOpusCostLimit: 'Opus 模型周费用限制 (美元)',
weeklyOpusCostLimitPlaceholder: '0 表示无限制',
weeklyOpusHint:
'设置 Opus 模型的周费用限制(周一到周日),仅限 Claude 官方账户0 或留空表示无限制',
custom: '自定义',
// Concurrency limit
concurrencyLimit: '并发限制 (可选)',
concurrencyLimitPlaceholder: '0 表示无限制',
concurrencyHint: '设置此 API Key 可同时处理的最大请求数0 或留空表示无限制',
// Expiration settings
expirationSettings: '过期设置',
fixedTimeExpiry: '固定时间过期',
activationExpiry: '首次使用后激活',
fixedModeHint: '固定时间模式Key 创建后立即生效,按设定时间过期',
activationModeHint: 'Key 首次使用时激活,激活后按设定天数过期(适合批量销售)',
// Expiration duration options
neverExpire: '永不过期',
'1d': '1 天',
'7d': '7 天',
'30d': '30 天',
'90d': '90 天',
'180d': '180 天',
'365d': '365 天',
customDate: '自定义日期',
// Activation mode
activationDays: '输入天数',
daysUnit: '天',
activationHint: 'Key 将在首次使用后激活,激活后 {days} 天过期',
// Expiry status
willExpireOn: '将于 {date} 过期',
// Service permissions
servicePermissions: '服务权限',
allServices: '全部服务',
claudeOnly: '仅 Claude',
geminiOnly: '仅 Gemini',
openaiOnly: '仅 OpenAI',
permissionHint: '控制此 API Key 可以访问哪些服务',
// Account binding
dedicatedAccountBinding: '专属账号绑定 (可选)',
refreshAccounts: '刷新账号',
refreshing: '刷新中...',
claudeDedicatedAccount: 'Claude 专属账号',
geminiDedicatedAccount: 'Gemini 专属账号',
openaiDedicatedAccount: 'OpenAI 专属账号',
bedrockDedicatedAccount: 'Bedrock 专属账号',
useSharedPool: '使用共享账号池',
accountBindingHint: '选择专属账号后此API Key将只使用该账号不选择则使用共享账号池',
selectClaudeAccount: '请选择Claude账号',
selectGeminiAccount: '请选择Gemini账号',
selectOpenaiAccount: '请选择OpenAI账号',
selectBedrockAccount: '请选择Bedrock账号',
// Model restrictions
enableModelRestriction: '启用模型限制',
restrictedModelsList: '限制的模型列表',
noRestrictedModels: '暂无限制的模型',
allCommonModelsRestricted: '所有常用模型已在限制列表中',
addRestrictedModelPlaceholder: '输入模型名称,按回车添加',
modelRestrictionHint: '设置此API Key无法访问的模型例如claude-opus-4-20250514',
// Client restrictions
enableClientRestriction: '启用客户端限制',
allowedClients: '允许的客户端',
// Buttons
cancel: '取消',
create: '创建',
creating: '创建中...',
// Messages
batchCountError: '批量创建数量必须在 2-500 之间',
costLimitConfirmTitle: '费用限制提醒',
costLimitConfirmMessage:
'您设置了时间窗口但费用限制为0这意味着不会有费用限制。\n\n是否继续',
costLimitConfirmContinue: '继续创建',
costLimitConfirmBack: '返回修改',
costLimitFallbackMessage:
'您设置了时间窗口但费用限制为0这意味着不会有费用限制。\n是否继续',
createSuccess: 'API Key 创建成功',
batchCreateSuccess: '成功创建 {count} 个 API Key',
createFailed: '创建失败',
batchCreateFailed: '批量创建失败',
refreshAccountsSuccess: '账号列表已刷新',
refreshAccountsFailed: '刷新账号列表失败'
}
},
// User-related translations
user: {
// User Dashboard
dashboard: {
title: 'Dashboard Overview',
welcomeMessage: 'Welcome to your Claude Relay dashboard',
// Navigation tabs
overview: 'Overview',
apiKeys: 'API Keys',
usageStats: 'Usage Stats',
// Welcome section
welcome: 'Welcome',
// Stats cards
activeApiKeys: 'Active API Keys',
deletedApiKeys: 'Deleted API Keys',
totalRequests: 'Total Requests',
inputTokens: 'Input Tokens',
totalCost: 'Total Cost',
// Account information section
accountInformation: 'Account Information',
username: 'Username',
displayName: 'Display Name',
email: 'Email',
role: 'Role',
memberSince: 'Member Since',
lastLogin: 'Last Login',
notAvailable: 'N/A',
// Messages
logout: 'Logout',
logoutSuccess: 'Logged out successfully',
logoutFailed: 'Logout failed',
loadProfileFailed: 'Failed to load user profile',
loadStatsFailed: 'Failed to load API keys stats'
},
// User API Keys Manager
userApiKeysManager: {
title: '我的 API Keys',
description: '管理您的 API Keys 以访问 Claude Relay 服务',
loading: '正在加载 API Keys...',
warnings: {
maxKeysReached:
'您已达到 API Keys 的最大数量限制({maxApiKeys} 个)。请删除现有的 Key 以创建新的。'
},
status: {
deleted: '已删除',
noDescription: '无描述',
neverUsed: '从未使用'
},
dateLabels: {
created: '创建时间',
deleted: '删除时间',
lastUsed: '最后使用',
expires: '到期时间'
},
usage: {
requests: '次请求'
},
actions: {
viewApiKey: '查看 API Key',
deleteApiKey: '删除 API Key'
},
buttons: {
createApiKey: '创建 API Key',
delete: '删除'
},
emptyState: {
title: '无 API Keys',
description: '创建您的第一个 API Key 开始使用。'
},
confirmDelete: {
title: '删除 API Key',
message: "确定要删除 '{name}' 吗?此操作无法撤销。"
},
messages: {
loadFailed: '加载 API Keys 失败',
deleteSuccess: 'API Key 删除成功',
deleteFailed: '删除 API Key 失败'
}
},
// User Login
login: {
title: 'User Sign In',
subtitle: 'Sign in to your account to manage your API keys',
username: 'Username',
password: 'Password',
usernamePlaceholder: 'Enter your username',
passwordPlaceholder: 'Enter your password',
signIn: 'Sign In',
signingIn: 'Signing In...',
adminLogin: 'Admin Login',
// Validation and error messages
requiredFields: 'Please enter both username and password',
loginSuccess: 'Login successful!',
loginFailed: 'Login failed',
accountDisabled: '您的账号已被禁用'
},
// View API Key Modal
viewApiKeyModal: {
title: 'API Key 详情',
fields: {
name: '名称',
description: '描述',
apiKey: 'API Key',
status: '状态',
usageStatistics: '使用统计'
},
apiKeyDisplay: {
notAvailable: '不可用',
keyPreview: 'cr_****',
fullKeyNotice: '完整 API Key 仅在首次创建或重新生成时显示'
},
buttons: {
hide: '隐藏',
show: '显示',
copy: '复制',
close: '关闭'
},
status: {
active: '启用',
disabled: '禁用'
},
usageStats: {
requests: '请求次数',
inputTokens: '输入令牌',
outputTokens: '输出令牌',
totalCost: '总费用'
},
timestamps: {
created: '创建时间',
lastUsed: '最后使用',
expires: '过期时间'
},
messages: {
copySuccess: '已复制到剪贴板!',
copyFailed: '复制到剪贴板失败'
}
},
// User Management
management: {
title: 'User Management',
description: 'Manage users, their API keys, and view usage statistics',
refresh: 'Refresh',
// Stats cards
totalUsers: 'Total Users',
activeUsers: 'Active Users',
totalApiKeys: 'Total API Keys',
totalCost: 'Total Cost',
// Search and filters
searchPlaceholder: 'Search users...',
allRoles: 'All Roles',
user: 'User',
admin: 'Admin',
allStatus: 'All Status',
active: 'Active',
disabled: 'Disabled',
// User list
users: 'Users',
loadingUsers: 'Loading users...',
noUsersFound: 'No users found',
noUsersMatch: 'No users match your search criteria.',
noUsersCreated: 'No users have been created yet.',
// User info and actions
displayName: 'Display Name',
email: 'Email',
role: 'Role',
username: 'Username',
apiKeysCount: 'API keys',
lastLogin: 'Last login',
neverLoggedIn: 'Never logged in',
requests: 'requests',
totalCostLabel: 'total cost',
// Action buttons and tooltips
viewUsageStats: 'View Usage Stats',
disableAllApiKeys: 'Disable All API Keys',
disableUser: 'Disable User',
enableUser: 'Enable User',
changeRole: 'Change Role',
// Confirmation dialogs
disableUserTitle: 'Disable User',
enableUserTitle: 'Enable User',
disableUserMessage:
'Are you sure you want to disable user "{username}"? This will prevent them from logging in.',
enableUserMessage: 'Are you sure you want to enable user "{username}"?',
disable: 'Disable',
enable: 'Enable',
disableAllKeysTitle: 'Disable All API Keys',
disableAllKeysMessage:
'Are you sure you want to disable all {count} API keys for user "{username}"? This will prevent them from using the service.',
disableKeys: 'Disable Keys',
// Success messages
userDisabledSuccess: 'User disabled successfully',
userEnabledSuccess: 'User enabled successfully',
keysDisabledSuccess: 'Disabled {count} API keys',
// Error messages
loadUsersError: 'Failed to load users',
toggleStatusError: 'Failed to toggleStatus',
disableKeysError: 'Failed to disableKeys'
},
// User Usage Stats Modal
usageStatsModal: {
title: '使用统计',
titleWithUser: '使用统计 - {displayName}',
// Time period selection
periodSelection: {
day: '最近24小时',
week: '最近7天',
month: '最近30天',
quarter: '最近90天'
},
// Loading state
loadingStats: '正在加载使用统计...',
// Summary cards
summaryCards: {
requests: '请求数',
inputTokens: '输入Token',
outputTokens: '输出Token',
totalCost: '总费用'
},
// API Keys table
apiKeysTable: {
title: 'API Keys 使用情况',
headers: {
apiKey: 'API Key',
status: '状态',
requests: '请求数',
tokens: 'Token数',
cost: '费用',
lastUsed: '最后使用'
},
status: {
active: '活跃',
disabled: '已禁用'
},
tokensFormat: {
input: '输入',
output: '输出'
},
never: '从未使用'
},
// Usage trend chart
usageTrend: {
title: '使用趋势',
chartTitle: '使用图表',
dailyTrends: '最近 {period} 的日使用趋势',
chartNote: '(可集成 Chart.js、D3.js 或类似图表库)'
},
// No data state
noData: {
title: '暂无使用数据',
description: '该用户在所选时间段内尚未发起任何API请求。'
},
// Buttons
close: '关闭'
},
// Change Role Modal
changeRoleModal: {
title: '修改用户角色',
// User info display
currentRole: '当前角色:{role}',
// Role selection form
newRole: '新角色',
roles: {
user: '用户',
userDesc: '具有基本权限的普通用户',
admin: '管理员',
adminDesc: '拥有管理用户和系统的完整权限'
},
// Warning messages
roleChangeWarning: {
title: '角色变更警告',
grantAdmin:
'授予管理员权限将使该用户拥有系统的完整访问权限包括管理其他用户及其API密钥的能力。',
removeAdmin: '移除管理员权限将限制该用户只能管理自己的API密钥和查看自己的使用统计。'
},
// Buttons
cancel: '取消',
updateRole: '更新角色',
updating: '更新中...',
// Success message
roleUpdated: '用户角色已更新为 {role}'
},
// User Usage Statistics
userUsageStats: {
// Page header
title: '使用统计',
subtitle: '查看您的 API 使用统计和费用',
// Time period selection
periodSelection: {
day: '最近24小时',
week: '最近7天',
month: '最近30天',
quarter: '最近90天'
},
// Loading state
loadingStats: '正在加载使用统计...',
// Statistics cards
statsCards: {
totalRequests: '总请求数',
inputTokens: '输入Token',
outputTokens: '输出Token',
totalCost: '总费用'
},
// Daily usage trend chart
usageTrend: {
title: '日使用趋势',
chartTitle: '使用图表',
dailyTrendsDescription: '这里将显示日使用趋势',
chartIntegrationNote: '(可集成 Chart.js、D3.js 或类似图表库)'
},
// Usage by model section
modelUsage: {
title: '按模型使用情况',
requests: '请求',
requestsCount: '{count} 请求'
},
// Usage by API key table
apiKeyUsage: {
title: '按 API Key 使用情况',
headers: {
apiKey: 'API Key',
requests: '请求数',
inputTokens: '输入Token',
outputTokens: '输出Token',
cost: '费用',
status: '状态'
},
status: {
active: '活跃',
disabled: '已禁用',
deleted: '已删除'
}
},
// No data state
noData: {
title: '暂无使用数据',
description:
'您还没有发起任何 API 请求。创建一个 API Key 并开始使用服务后,就能看到使用统计了。'
},
// Error messages
loadFailed: '加载使用统计失败'
},
// Create API Key Modal
createApiKeyModal: {
title: '创建新的 API Key',
// 表单标签和占位符
form: {
nameLabel: '名称',
nameRequired: '*',
namePlaceholder: '为您的 API Key 取一个名称',
descriptionLabel: '备注',
descriptionPlaceholder: '可选的备注信息'
},
// 按钮文本
buttons: {
cancel: '取消',
creating: '创建中...',
createApiKey: '创建 API Key',
copy: '复制',
done: '完成'
},
// 成功状态
success: {
title: 'API Key 创建成功!',
warning: {
important: '重要提示:',
message: '请立即复制您的 API Key您将无法再次查看'
}
},
// 错误和验证消息
validation: {
nameRequired: 'API Key 名称是必填项'
},
errors: {
createFailed: '创建 API Key 失败'
},
// Toast 消息
messages: {
createSuccess: 'API Key 创建成功!',
copySuccess: 'API Key 已复制到剪贴板!',
copyFailed: '复制到剪贴板失败'
}
}
},
// Settings 设置页面
settings: {
title: '系统设置',
description: '网站定制和通知配置',
loading: '正在加载设置...',
// 导航标签
branding: '品牌设置',
webhook: '通知设置',
// 品牌设置
siteName: '网站名称',
siteNameDescription: '品牌标识',
siteNamePlaceholder: 'Claude Relay Service',
siteNameHint: '将显示在浏览器标题和页面头部',
siteIcon: '网站图标',
siteIconDescription: 'Favicon',
currentIcon: '当前图标',
uploadIcon: '上传图标',
removeIcon: '删除',
iconFormats: '支持 .ico, .png, .jpg, .svg 格式,最大 350KB',
iconPreview: '图标预览',
validation: {
iconTooLarge: '图标文件大小不能超过 350KB',
iconTypeNotSupported: '不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件'
},
adminEntry: '管理入口',
adminEntryDescription: '登录按钮显示',
hideLoginButton: '隐藏登录按钮',
showLoginButton: '显示登录按钮',
adminEntryHint: '隐藏后,用户需要直接访问 /admin/login 页面登录',
// 移动端卡片标题
siteNameCard: '站点名称',
siteNameCardDesc: '自定义您的站点品牌名称',
siteIconCard: '站点图标',
siteIconCardDesc: '上传自定义图标或输入图标URL',
adminEntryCard: '管理入口',
adminEntryCardDesc: '控制登录按钮在首页的显示',
// 操作按钮
save: '保存设置',
saving: '保存中...',
reset: '重置为默认',
lastUpdated: '最后更新:{time}',
lastUpdatedMobile: '上次更新: {time}',
// Webhook 设置
enableWebhook: '启用 Webhook 通知',
webhookDescription: '开启后,系统将按配置发送通知到指定平台',
// 通知类型
notificationTypes: '通知类型',
accountAnomaly: '账号异常',
quotaWarning: '配额警告',
systemError: '系统错误',
securityAlert: '安全警报',
accountAnomalyDesc: '账号状态异常、认证失败等',
quotaWarningDesc: 'API调用配额不足警告',
systemErrorDesc: '系统运行错误和故障',
securityAlertDesc: '安全相关的警报通知',
// 通知平台
notificationPlatforms: '通知平台',
addPlatform: '添加平台',
noPlatforms: '暂无配置的通知平台,请点击"添加平台"按钮添加',
enableSignature: '已启用签名验证',
testConnection: '测试连接',
edit: '编辑',
delete: '删除',
// 高级设置
advancedSettings: '高级设置',
maxRetries: '最大重试次数',
retryDelay: '重试延迟 (毫秒)',
timeout: '超时时间 (毫秒)',
// 测试通知
sendTestNotification: '发送测试通知',
// 平台模态框
addPlatformModal: '添加通知平台',
editPlatformModal: '编辑通知平台',
configurePlatform: '配置新的Webhook通知渠道',
updatePlatform: '配置并更新Webhook通知渠道',
platformType: '平台类型',
platformName: '名称',
platformNameOptional: '(可选)',
platformNamePlaceholder: '例如:运维群通知、开发测试群',
webhookUrl: 'Webhook URL',
webhookUrlRequired: '*',
webhookUrlPlaceholder: 'https://...',
editModeWarning: '编辑模式下不能更改平台类型',
cannotChangePlatformType: '编辑模式下不能更改平台类型',
serverUrl: '服务器地址',
requiredField: '必填项',
// Bark 特有设置
deviceKey: '设备密钥 (Device Key)',
deviceKeyPlaceholder: '例如aBcDeFgHiJkLmNoPqRsTuVwX',
deviceKeyHint: '在Bark App中查看您的推送密钥',
serverAddress: '服务器地址',
serverAddressOptional: '(可选)',
serverAddressPlaceholder: '默认: https://api.day.app/push',
notificationLevel: '通知级别',
notificationSound: '通知声音',
notificationGroup: '通知分组',
notificationGroupOptional: '(可选)',
notificationGroupPlaceholder: '默认: claude-relay',
// 通知级别选项
levelAuto: '自动(根据通知类型)',
levelPassive: '被动',
levelActive: '默认',
levelTimeSensitive: '时效性',
levelCritical: '紧急',
// 声音选项
soundAuto: '自动(根据通知类型)',
soundDefault: '默认',
soundAlarm: '警报',
soundBell: '铃声',
soundBirdsong: '鸟鸣',
soundElectronic: '电子音',
soundGlass: '玻璃',
soundHorn: '喇叭',
soundSilence: '静音',
// Bark 提示信息
barkInstructions: [
'1. 在iPhone上安装Bark App',
'2. 打开App获取您的设备密钥',
'3. 将密钥粘贴到上方输入框'
],
// 签名设置
enableSignatureVerify: '启用签名验证',
signatureEnabled: '已启用',
signatureSecret: '签名密钥',
signatureSecretPlaceholder: 'SEC...',
// 平台提示信息
wechatWorkHint: '请在企业微信群机器人设置中获取Webhook地址',
dingtalkHint: '请在钉钉群机器人设置中获取Webhook地址',
feishuHint: '请在飞书群机器人设置中获取Webhook地址',
slackHint: '请在Slack应用的Incoming Webhooks中获取地址',
discordHint: '请在Discord服务器的集成设置中创建Webhook',
barkHint: '请在Bark App中查看您的设备密钥',
customHint: '请输入完整的Webhook接收地址',
// 模态框按钮
required: '必填项',
cancel: '取消',
testing: '测试中...',
saveChanges: '保存修改',
addPlatformBtn: '添加平台',
// 成功/错误消息
loadSettingsFailed: '加载设置失败',
settingsSaved: '设置已保存',
saveSettingsFailed: '保存设置失败',
oemSettingsSaved: 'OEM设置保存成功',
oemSettingsSaveFailed: '保存OEM设置失败',
resetToDefault: '已重置为默认设置',
resetFailed: '重置失败',
confirmReset: '确定要重置为默认设置吗?\n\n这将清除所有自定义的网站名称和图标设置。',
webhookConfigSaved: '配置已保存',
webhookConfigSaveFailed: '保存配置失败',
getWebhookConfigFailed: '获取webhook配置失败',
platformAdded: '平台已添加',
platformUpdated: '平台已更新',
platformDeleted: '平台已删除',
platformDeleteFailed: '删除失败',
confirmDeletePlatform: '确定要删除这个平台吗?',
operationFailed: '操作失败',
testSuccess: '测试成功webhook连接正常',
testFailed: '测试失败',
testNotificationSent: '测试通知已发送',
testNotificationFailed: '发送失败',
// 表单验证消息
enterBarkDeviceKey: '请输入Bark设备密钥',
enterWebhookUrl: '请输入Webhook URL',
enterValidWebhookUrl: '请输入有效的Webhook URL',
enterWebhookUrlFirst: '请先输入Webhook URL',
enterBarkDeviceKeyFirst: '请先输入Bark设备密钥',
// 文件上传
fileReadFailed: '文件读取失败',
iconLoadFailed: 'Icon failed to load',
// 平台名称
platforms: {
wechatWork: '企业微信',
dingtalk: '钉钉',
feishu: '飞书',
slack: 'Slack',
discord: 'Discord',
bark: 'Bark',
custom: '自定义'
}
},
// AccountForm 组件
accountForm: {
// 标题和模态框
editAccount: '编辑账户',
addAccount: '添加账户',
// 步骤指示器
stepBasicInfo: '基本信息',
stepAuthorization: '授权认证',
// 平台选择
platform: '平台',
platformClaude: 'Claude',
platformClaudeConsole: 'Claude Console',
platformGemini: 'Gemini',
platformOpenAI: 'OpenAI',
platformAzureOpenAI: 'Azure OpenAI',
platformBedrock: 'Bedrock',
// 添加方式
addMethod: '添加方式',
addTypeSetupToken: 'Setup Token (推荐)',
addTypeOAuth: 'OAuth 授权',
addTypeManual: '手动输入 Access Token',
// 基本信息字段
accountName: '账户名称',
accountNamePlaceholder: '为账户设置一个易识别的名称',
description: '描述',
descriptionOptional: '描述 (可选)',
descriptionPlaceholder: '账户用途说明...',
// 账户类型
accountType: '账户类型',
accountTypeShared: '共享账户',
accountTypeDedicated: '专属账户',
accountTypeGroup: '分组调度',
accountTypeDescription:
'共享账户供所有API Key使用专属账户仅供特定API Key使用分组调度加入分组供分组内调度',
// 分组选择
selectGroup: '选择分组',
selectGroupRequired: '选择分组 *',
noGroupsAvailable: '暂无可用分组',
memberCount: '个成员',
newGroup: '新建分组',
refreshGroups: '刷新分组',
// Gemini 项目 ID
projectId: '项目 ID',
projectIdOptional: '项目 ID (可选)',
projectIdPlaceholder: '例如verdant-wares-464411-k9',
projectIdDescription: 'Google Cloud/Workspace 账号需要提供项目 ID',
projectIdInstructions: '如何获取项目 ID',
projectIdStep1: '访问 Google Cloud Console',
projectIdStep2: '复制项目 IDProject ID通常是字符串格式',
projectIdStep3: '⚠️ 注意:要复制项目 IDProject ID不要复制项目编号Project Number',
projectIdTip: '提示:如果您的账号是普通个人账号(未绑定 Google Cloud请留空此字段。',
projectIdGoogleCloudRequired: 'Google Cloud/Workspace 账号需要提供项目 ID',
projectIdGoogleCloudDescription:
'某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。',
// Bedrock 字段
awsAccessKeyId: 'AWS 访问密钥 ID',
awsAccessKeyIdRequired: 'AWS 访问密钥 ID *',
awsAccessKeyIdPlaceholder: '请输入 AWS Access Key ID',
awsSecretAccessKey: 'AWS 秘密访问密钥',
awsSecretAccessKeyRequired: 'AWS 秘密访问密钥 *',
awsSecretAccessKeyPlaceholder: '请输入 AWS Secret Access Key',
awsRegion: 'AWS 区域',
awsRegionRequired: 'AWS 区域 *',
awsRegionPlaceholder: '例如us-east-1',
awsRegionReference: '常用 AWS 区域参考:',
awsRegionUsEast1: '• us-east-1 (美国东部)',
awsRegionUsWest2: '• us-west-2 (美国西部)',
awsRegionEuWest1: '• eu-west-1 (欧洲爱尔兰)',
awsRegionApSoutheast1: '• ap-southeast-1 (新加坡)',
awsRegionApNortheast1: '• ap-northeast-1 (东京)',
awsRegionEuCentral1: '• eu-central-1 (法兰克福)',
awsRegionTip: '💡 请输入完整的区域代码,如 us-east-1',
sessionToken: '会话令牌',
sessionTokenOptional: '会话令牌 (可选)',
sessionTokenPlaceholder: '如果使用临时凭证,请输入会话令牌',
sessionTokenDescription: '仅在使用临时 AWS 凭证时需要填写',
defaultModel: '默认主模型',
defaultModelOptional: '默认主模型 (可选)',
defaultModelPlaceholder: '例如us.anthropic.claude-sonnet-4-20250514-v1:0',
defaultModelDescription: '留空将使用系统默认模型。支持 inference profile ID 或 ARN',
bedrockModelConfigTitle: 'Bedrock 模型配置说明:',
bedrockModelConfigInferenceProfile: '• 支持 Inference Profile ID推荐',
bedrockModelConfigArn: '• 支持 Application Inference Profile ARN',
bedrockModelConfigCommon: '• 常用模型us.anthropic.claude-sonnet-4-20250514-v1:0',
bedrockModelConfigDefault: '• 留空将使用系统配置的默认模型',
smallFastModel: '小快速模型',
smallFastModelOptional: '小快速模型 (可选)',
smallFastModelPlaceholder: '例如us.anthropic.claude-3-5-haiku-20241022-v1:0',
smallFastModelDescription: '用于快速响应的轻量级模型,留空将使用系统默认',
// Azure OpenAI 字段
azureEndpoint: 'Azure Endpoint',
azureEndpointRequired: 'Azure Endpoint *',
azureEndpointPlaceholder: 'https://your-resource.openai.azure.com',
azureEndpointDescription:
'Azure OpenAI 资源的终结点 URL格式https://your-resource.openai.azure.com',
apiVersion: 'API 版本',
apiVersionPlaceholder: '2024-02-01',
apiVersionDescription: 'Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01',
deploymentName: '部署名称',
deploymentNameRequired: '部署名称 *',
deploymentNamePlaceholder: 'gpt-4',
deploymentNameDescription: '在 Azure OpenAI Studio 中创建的部署名称',
apiKey: 'API Key',
apiKeyRequired: 'API Key *',
apiKeyPlaceholder: '请输入 API Key',
apiKeyDescription: '从 Azure 门户获取的 API 密钥',
supportedModels: '支持的模型',
supportedModelsDescription: '选择此部署支持的模型类型',
// Claude Console 字段
apiUrl: 'API URL',
apiUrlRequired: 'API URL *',
apiUrlPlaceholder: '例如https://api.example.com',
apiKeyClaudeConsoleRequired: 'API Key *',
apiKeyClaudeConsolePlaceholder: '请输入API Key',
dailyQuota: '每日额度限制',
dailyQuotaLabel: '每日额度限制 ($)',
dailyQuotaPlaceholder: '0 表示不限制',
dailyQuotaDescription: '设置每日使用额度0 表示不限制',
quotaResetTime: '额度重置时间',
quotaResetTimePlaceholder: '00:00',
quotaResetTimeDescription: '每日自动重置额度的时间',
todayUsage: '今日使用情况',
remaining: '剩余',
used: '已使用',
modelMapping: '模型映射表',
modelMappingOptional: '模型映射表 (可选)',
modelMappingDescription:
'留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。',
originalModel: '原始模型名称',
mappedModel: '映射后的模型名称',
addModelMapping: '添加模型映射',
userAgent: '自定义 User-Agent',
userAgentOptional: '自定义 User-Agent (可选)',
userAgentPlaceholder: '留空则透传客户端 User-Agent',
userAgentDescription: '留空时将自动使用客户端的 User-Agent仅在需要固定特定 UA 时填写',
rateLimitMechanism: '限流机制',
enableRateLimit: '启用限流机制',
rateLimitDescription: '启用后当账号返回429错误时将暂停调度一段时间',
rateLimitDuration: '限流时间 (分钟)',
rateLimitDurationDescription: '账号被限流后暂停调度的时间(分钟)',
// Claude 订阅类型
subscriptionType: '订阅类型',
subscriptionClaudeMax: 'Claude Max',
subscriptionClaudePro: 'Claude Pro',
claudeProLimitation: 'Pro 账号不支持 Claude Opus 4 模型',
// Claude 特殊功能
autoStopOnWarning: '5小时使用量接近限制时自动停止调度',
autoStopOnWarningDescription:
'当系统检测到账户接近5小时使用限制时自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。',
useUnifiedUserAgent: '使用统一 Claude Code 版本',
useUnifiedUserAgentDescription:
'开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent提高兼容性',
currentUnifiedVersion: '💡 当前统一版本:',
clearCache: '清除缓存',
clearing: '清除中...',
waitingForCapture: '⏳ 等待从 Claude Code 客户端捕获 User-Agent',
captureHint:
'💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户,或联系开发者检查 User-Agent 格式是否发生变化',
useUnifiedClientId: '使用统一的客户端标识',
useUnifiedClientIdDescription:
'开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征',
clientId: '客户端标识 ID',
regenerate: '重新生成',
clientIdDescription: '此ID将替换请求中的user_id客户端部分保留session部分用于粘性会话',
// 调度优先级
schedulePriority: '调度优先级',
schedulePriorityRange: '调度优先级 (1-100)',
schedulePriorityPlaceholder: '数字越小优先级越高默认50',
schedulePriorityDescription: '数字越小优先级越高建议范围1-100',
// 手动输入 Token
manualTokenTitle: '手动输入 Token',
manualTokenDescription:
'请输入有效的 Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。',
manualTokenClaudeDescription:
'请输入有效的 Claude Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。',
manualTokenGeminiDescription:
'请输入有效的 Gemini Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。',
manualTokenOpenAIDescription:
'请输入有效的 OpenAI Access Token。如果您有 Refresh Token建议也一并填写以支持自动刷新。',
obtainTokenMethods: '获取 Access Token 的方法:',
claudeTokenPath:
'请从已登录 Claude Code 的机器上获取 ~/.claude/.credentials.json 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。',
geminiTokenPath:
'请从已登录 Gemini CLI 的机器上获取 ~/.config/gemini/credentials.json 文件中的凭证。',
openaiTokenPath:
'请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。',
accessToken: 'Access Token',
accessTokenOptional: 'Access Token (可选)',
accessTokenRequired: 'Access Token *',
accessTokenPlaceholder: '请输入 Access Token...',
accessTokenOptionalPlaceholder: '可选:如果不填写,系统会自动通过 Refresh Token 获取...',
accessTokenOptionalDescription:
'Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。',
refreshToken: 'Refresh Token',
refreshTokenOptional: 'Refresh Token (可选)',
refreshTokenRequired: 'Refresh Token *',
refreshTokenPlaceholder: '请输入 Refresh Token...',
refreshTokenRequiredPlaceholder: '请输入 Refresh Token必填...',
refreshTokenDescription: '系统将使用 Refresh Token 自动获取 Access Token 和用户信息',
refreshTokenTip: '💡 如果未填写 Refresh TokenToken 过期后需要手动更新。',
// Setup Token 流程
setupTokenTitle: 'Claude Setup Token 授权',
setupTokenDescription: '请按照以下步骤通过 Setup Token 完成 Claude 账户的授权:',
setupTokenStep1Title: '点击下方按钮生成授权链接',
setupTokenStep2Title: '在浏览器中打开链接并完成授权',
setupTokenStep2Description:
'请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。',
setupTokenStep2Warning: '注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。',
setupTokenStep3Title: '输入 Authorization Code',
setupTokenStep3Description:
'授权完成后,从返回页面复制 Authorization Code并粘贴到下方输入框',
generateSetupTokenUrl: '生成 Setup Token 授权链接',
generating: '生成中...',
copyLink: '复制链接',
regenerateLink: '重新生成',
authorizationCode: 'Authorization Code',
authorizationCodePlaceholder: '粘贴从Claude Code授权页面获取的Authorization Code...',
authorizationCodeDescription: '请粘贴从Claude Code授权页面复制的Authorization Code',
verifying: '验证中...',
completeAuthorization: '完成授权',
// Token 更新(编辑模式)
updateTokenTitle: '更新 Token',
updateTokenDescription:
'可以更新 Access Token 和 Refresh Token。为了安全起见不会显示当前的 Token 值。',
updateTokenTip: '💡 留空表示不更新该字段。',
newAccessToken: '新的 Access Token',
newRefreshToken: '新的 Refresh Token',
leaveBlankNoUpdate: '留空表示不更新...',
// 使用情况
currentUsage: '当前使用情况',
// 按钮
cancel: '取消',
nextStep: '下一步',
previousStep: '上一步',
create: '创建',
creating: '创建中...',
update: '更新',
updating: '更新中...',
// 错误消息
pleaseEnterAccountName: '请填写账户名称',
pleaseSelectGroup: '请选择一个分组',
pleaseEnterApiUrl: '请填写 API URL',
pleaseEnterApiKey: '请填写 API Key',
pleaseEnterAccessKeyId: '请填写 AWS 访问密钥 ID',
pleaseEnterSecretAccessKey: '请填写 AWS 秘密访问密钥',
pleaseEnterRegion: '请选择 AWS 区域',
pleaseEnterAzureEndpoint: '请填写 Azure Endpoint',
pleaseEnterDeploymentName: '请填写部署名称',
pleaseEnterAccessToken: '请填写 Access Token',
pleaseEnterRefreshToken: '请填写 Refresh Token',
// 成功消息
linkCopied: '链接已复制',
extractedAuthCode: '成功提取授权码!',
cacheClearedSuccess: '统一User-Agent缓存已清除',
newClientIdGenerated: '已生成新的客户端标识',
groupsRefreshed: '分组列表已刷新',
modelMappingAdded: '已添加映射',
modelMappingExists: '模型映射已存在',
// 警告和提示
copyFailed: '复制失败,请手动复制',
clearCacheFailed: '清除缓存失败',
urlNotFound: 'URL 中未找到授权码参数,请检查链接是否正确',
urlFormatError: '链接格式错误,请检查是否为完整的 URL',
wrongUrlFormat: '请粘贴以 http://localhost:45462 开头的链接',
loadGroupsFailed: '加载分组列表失败',
// 确认对话框
projectIdNotFilledTitle: '项目 ID 未填写',
projectIdNotFilledMessage:
'您尚未填写项目 ID。\n\n如果您的Google账号绑定了Google Cloud或被识别为Workspace账号需要提供项目 ID。\n如果您使用的是普通个人账号可以继续不填写。',
continueButton: '继续',
goBackToFill: '返回填写',
continueSave: '继续保存',
// 快捷模型映射按钮
presetSonnet4: '+ Sonnet 4',
presetOpus41: '+ Opus 4.1',
presetHaiku35: '+ Haiku 3.5',
presetOpus41ToSonnet4: '+ Opus 4.1 → Sonnet 4',
// 编辑模式特殊提示
leaveBlankNoUpdateApiKey: '留空表示不更新 API Key',
leaveBlankNoUpdateAwsKey: '留空表示不更新 AWS Access Key ID',
leaveBlankNoUpdateAwsSecret: '留空表示不更新 AWS Secret Access Key',
leaveBlankNoUpdateSession: '留空表示不更新',
// 通用描述文本
allModelsIfEmpty:
'留空表示支持所有模型。如果指定模型,请求中的模型不在列表内将不会调度到此账号',
systemDefaultIfEmpty: '留空将使用系统默认模型。支持 inference profile ID 或 ARN',
noUpdateIfEmpty: '留空表示不更新该字段',
// 手动 Token 输入部分
manualTokenInput: '手动输入 Token',
getAccessTokenMethod: '获取 Access Token 的方法:',
claudeCredentialsPath: '请从已登录 Claude Code 的机器上获取',
geminiCredentialsPath: '请从已登录 Gemini CLI 的机器上获取',
openaiCredentialsPath:
'请从已登录 OpenAI 账户的机器上获取认证凭证,或通过 OAuth 授权流程获取 Access Token。',
claudeCredentialsWarning: '文件中的凭证,请勿使用 Claude 官网 API Keys 页面的密钥。',
refreshTokenWarning: '💡 如果未填写 Refresh TokenToken 过期后需要手动更新。',
accessTokenOptionalInfo: 'Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。',
accessTokenRequiredPlaceholder: '请输入 Access Token...',
refreshTokenRequiredInfo: '系统将使用 Refresh Token 自动获取 Access Token 和用户信息',
refreshTokenOptionalPlaceholder: '请输入 Refresh Token...',
// 优先级设置
priorityPlaceholder: '数字越小优先级越高默认50',
priorityDescription: '数字越小优先级越高建议范围1-100',
prioritySchedulingTitle: '调度优先级 (1-100)',
priorityEditPlaceholder: '数字越小优先级越高',
// Claude 订阅类型和高级选项
claudeMaxSubscription: 'Claude Max',
claudeProSubscription: 'Claude Pro',
clientIdLabel: '客户端标识 ID',
regenerateClientId: '重新生成',
// 编辑模式字段
accountNameEdit: '账户名称',
accountNameEditPlaceholder: '为账户设置一个易识别的名称',
descriptionOptionalEdit: '描述 (可选)',
descriptionOptionalEditPlaceholder: '账户用途说明...',
accountTypeEdit: '账户类型',
noAvailableGroups: '暂无可用分组',
membersCount: ' 个成员',
createNewGroup: '新建分组',
// AWS Bedrock 配置
bedrockCredentials: '凭证配置',
bedrockCredentialsDescription: '请填写 AWS 访问凭证,用于调用 Amazon Bedrock 服务。',
sessionTokenOptionalPlaceholder: '临时凭证的会话令牌...',
bedrockModelConfig: '模型配置',
defaultModelLabel: '默认模型',
smallFastModelLabel: '小型快速模型',
// Azure OpenAI 配置
azureOpenAIConfig: 'Azure OpenAI 配置',
azureOpenAIDescription: '请配置 Azure OpenAI 服务的连接信息和部署详情。',
azureApiKey: 'API Key *',
azureApiKeyPlaceholder: '请输入 Azure OpenAI API Key...',
azureApiVersion: 'API 版本',
azureApiVersionDescription: 'Azure OpenAI API 版本,通常使用最新版本',
azureDeploymentName: '部署名称 *',
azureDeploymentNamePlaceholder: '例如gpt-4',
azureDeploymentDescription: '在 Azure OpenAI Studio 中创建的部署名称',
azureSupportedModels: '支持的模型',
azureSupportedModelsPlaceholder: '例如gpt-4, gpt-3.5-turbo',
azureSupportedModelsDescription: '此账户支持的模型列表,用逗号分隔。留空表示支持所有模型',
azureAccountSettings: '账户设置',
azureIsActive: '启用此账户',
azureSchedulable: '允许调度',
// Claude Console 模型映射
claudeConsoleModels: '模型映射',
claudeConsoleModelsDescription:
'配置模型请求的映射关系,将客户端请求的模型名映射为实际调用的模型。',
modelMappingFrom: '请求模型',
modelMappingFromPlaceholder: '例如claude-3-5-sonnet-20241022',
modelMappingTo: '实际模型',
modelMappingToPlaceholder: '例如claude-3-5-sonnet-latest',
removeMapping: '移除',
presetMappings: '预设映射',
modelMappingExample: '示例claude-3-5-sonnet-20241022 → claude-3-5-sonnet-latest',
noMappingsConfigured: '暂未配置映射,将直接使用原模型名',
// Setup Token 授权流程详细步骤
setupTokenAuth: 'Setup Token 授权',
setupTokenAuthDescription: 'Setup Token 是安全的授权方式,通过临时授权码完成账户验证。',
setupTokenStep1: '步骤 1生成授权链接',
setupTokenStep1Description: '系统将生成一个专用的授权链接,用于获取临时授权码。',
setupTokenStep2: '步骤 2完成授权',
setupTokenStep3: '步骤 3输入授权码',
setupTokenUrlGenerated: '授权链接已生成',
setupTokenOpenInBrowser: '在浏览器中打开',
setupTokenCopyLink: '复制链接',
setupTokenUrlExpiry: '此链接10分钟后过期请尽快完成授权',
setupTokenAuthCode: 'Authorization Code *',
setupTokenAuthCodePlaceholder: '请粘贴从授权页面获取的授权码...',
setupTokenAuthCodeDescription: '完成授权后,将显示类似 "auth_code_xxx" 格式的授权码',
setupTokenSmartDetection: '智能检测',
setupTokenSmartDetectionDesc: '支持直接粘贴完整的回调URL系统会自动提取授权码',
// 更多错误消息和验证文本
unsupportedPlatform: '不支持的平台',
accountCreationFailed: '账户创建失败',
accountUpdateFailed: '账户更新失败',
detailsInfo: '详细信息',
accountCreationFailedConsole: '账户创建失败:',
accountUpdateFailedConsole: '账户更新失败:',
clearCacheFailedWithError: '清除缓存失败:',
unknownError: '未知错误',
modelMappingExistsInfo: '模型映射已存在',
modelAddedMapping: '已添加映射',
// 限流和配额管理
rateLimitSettings: '限流设置',
rateLimitDurationPlaceholder: '例如60',
quotaManagement: '配额管理',
quotaResetTimeLabel: '配额重置时间',
quotaResetDescription: '每天配额重置的时间点',
currentDailyUsage: '今日已用',
// 高级设置
advancedSettings: '高级设置',
customUserAgent: '自定义 User-Agent',
customUserAgentPlaceholder: '留空使用默认 User-Agent...',
// 通用提示和状态
notSet: '未设置',
unlimited: '无限制',
enabled: '已启用',
disabled: '已禁用',
active: '活跃',
inactive: '非活跃',
optional: '可选',
required: '必填',
recommended: '推荐',
// 额外的操作按钮
testConnection: '测试连接',
testing: '测试中...',
refresh: '刷新',
refreshing: '刷新中...',
validate: '验证',
validating: '验证中...',
save: '保存',
saving: '保存中...',
// 使用情况和统计
usageStats: '使用统计',
loadingUsage: '加载使用情况...',
usageLoadFailed: '使用情况加载失败',
// Gemini 项目 ID 详细说明
geminiProjectIdRequired: 'Google Cloud/Workspace 账号需要提供项目 ID',
geminiProjectIdDetail:
'某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。',
geminiHowToGetProjectId: '如何获取项目 ID',
geminiVisitConsole: '访问',
geminiCopyProjectId: '复制\u9879目 IDProject ID\uff0c通常是字符串格式',
geminiProjectIdWarning:
'⚠️ 注意:要复制项目 IDProject ID不要复制项目编号Project Number',
geminiPersonalAccountTip:
'\u63d0示\uff1a如果您的账号是普通个人账号未绑定 Google Cloud请留空此字段。',
// AWS 区域参考
awsRegionEastUS: 'us-east-1 (美国东部)',
awsRegionWestUS: 'us-west-2 (美国西部)',
awsRegionEuropeIreland: 'eu-west-1 (欧洲爱尔兰)',
awsRegionAsiaSingapore: 'ap-southeast-1 (新加坡)',
awsRegionAsiaTokyo: 'ap-northeast-1 (东京)',
awsRegionEuropeFrankfurt: 'eu-central-1 (法兰克福)',
awsRegionInputTip: '💡 请输入完整的区域代码,如 us-east-1',
// Bedrock 模型说明
bedrockModelConfigDesc: 'Bedrock 模型配置说明:',
bedrockSupportsInferenceProfile: '支持 Inference Profile ID推荐',
bedrockSupportsARN: '支持 Application Inference Profile ARN',
bedrockCommonModel: '常用模型us.anthropic.claude-sonnet-4-20250514-v1:0',
bedrockEmptyUsesDefault: '留空将使用系统配置的默认模型',
// Azure OpenAI 模型选择
azureModelSelectionDesc: '选择此部署支持的模型类型',
// 限流机制
enableRateLimitMechanism: '启用限流机制',
rateLimitDescription2: '启用后当账号返回429错误时将暂停调度一段时间',
// Claude Console 特定字段
claudeConsoleFields: 'Claude Console 特定字段',
modelMappingTable: '模型映射表',
modelMappingTableOptional: '模型映射表 (可选)',
// Setup Token 授权
claudeSetupTokenAuth: 'Claude Setup Token 授权',
setupTokenAuthSteps: '请按照以下步骤通过 Setup Token 完成 Claude 账户的授权:',
generateSetupTokenLink: '生成 Setup Token 授权链接',
// 按钮和操作
completeAuth: '完成授权',
// 错误消息
generateSetupTokenFailed: '生成Setup Token授权链接失败',
setupTokenAuthFailed: 'Setup Token授权失败请检查授权码是否正确',
accountCreationError: '账户创建失败:',
// 页面结构注释
stepIndicator: '步骤指示器',
step1BasicInfo: '步骤1: 基本信息和代理设置',
groupSelector: '分组选择器',
multiSelectGroup: '多选分组界面',
newGroupOption: '新建分组选项',
geminiProjectId: 'Gemini 项目 ID 字段',
bedrockFields: 'Bedrock 特定字段',
azureOpenAIFields: 'Azure OpenAI 特定字段',
// 验证消息
nameRequired: '请填写账户名称',
rateLimitDefault60: '默认60分钟',
rateLimitPauseDescription: '账号被限流后暂停调度的时间(分钟)',
dailyQuotaLimit: '每日额度限制 ($)',
quotaZeroUnlimited: '0 表示不限制',
rateLimitDurationMinutes: '限流时间 (分钟)',
rateLimitDefaultMinutes: '默认60分钟',
rateLimitPauseDesc: '账号被限流后暂停调度的时间(分钟)',
// 额度管理
quotaManagementFields: '额度管理字段',
dailyQuotaLimitDollar: '每日额度限制 ($)',
dailyQuotaDesc: '设置每日使用额度0 表示不限制',
quotaResetTimeDesc: '每日自动重置额度的时间',
// 模型映射
modelMappingDesc:
'留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。',
originalModelName: '原始模型名称',
mappedModelName: '映射后的模型名称',
addModelMappingBtn: '添加模型映射',
customUserAgentOptional: '自定义 User-Agent (可选)',
customUserAgentDesc: '留空时将自动使用客户端的 User-Agent仅在需要固定特定 UA 时填写',
userAgentPassthrough: '留空则透传客户端 User-Agent',
// Claude 订阅类型
claudeSubscriptionType: '订阅类型',
// Claude 高级选项
claudeAutoStopScheduling: '5小时使用量接近限制时自动停止调度',
claudeAutoStopDesc:
'当系统检测到账户接近5小时使用限制时自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。',
claudeUseUnifiedUA: '使用统一 Claude Code 版本',
claudeUnifiedUADesc: '开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent提高兼容性',
claudeCurrentUnifiedVersion: '💡 当前统一版本:',
claudeWaitingCapture: '⏳ 等待从 Claude Code 客户端捕获 User-Agent',
claudeCaptureHint:
'💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化',
claudeUseUnifiedClientId: '使用统一的客户端标识',
claudeUnifiedClientIdDesc:
'开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征',
claudeClientIdLabel: '客户端标识 ID',
claudeClientIdDesc: '此ID将替换请求中的user_id客户端部分保留session部分用于粘性会话',
// Setup Token 流程
setupTokenAuthProcess: 'Claude Setup Token 授权',
setupTokenProcessDesc: '请按照以下步骤通过 Setup Token 完成 Claude 账户的授权:',
setupTokenStepOneTitle: '步骤 1生成授权链接',
setupTokenStepOneDesc: '点击下方按钮生成授权链接',
setupTokenGenerating: '生成中...',
setupTokenGenerateBtn: '生成 Setup Token 授权链接',
setupTokenCopyTitle: '复制链接',
// 步骤指示器
step2OAuth: '步骤2: OAuth授权',
step2SetupToken: '步骤2: Setup Token授权',
// 分组选择器
multiGroupInterface: '多选分组界面',
createNewGroupOption: '新建分组选项',
// 手动输入Token提示
credentialsFromFile: '文件中的凭证。',
// Placeholder 文本
originalModelNamePlaceholder: '原始模型名称',
mappedModelNamePlaceholder: '映射后的模型名称',
authCodePlaceholder: '粘贴从Claude Code授权页面获取的Authorization Code...',
leaveEmptyNoUpdate: '留空表示不更新',
leaveEmptyNoUpdateKey: '留空表示不更新 API Key',
leaveEmptyNoUpdateToken: '留空表示不更新...',
// 标签和描述
schedulePriorityLabel: '调度优先级 (1-100)',
attentionLabel: '注意:',
supportedModelsLabel: '支持的模型',
newAccessTokenLabel: '新的 Access Token',
newRefreshTokenLabel: '新的 Refresh Token',
updateTokenLabel: '更新 Token',
// 按钮文本
regenerateBtn: '重新生成',
previousStepBtn: '上一步',
// 描述性文本
claude5HourLimitDesc: '5小时使用量接近限制时自动停止调度',
claude5HourLimitExplanation:
'当系统检测到账户接近5小时使用限制时自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。',
useUnifiedClaudeVersion: '使用统一 Claude Code 版本',
unifiedVersionDesc: '开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent提高兼容性',
waitingUserAgent: '⏳ 等待从 Claude Code 客户端捕获 User-Agent',
userAgentTip: '💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户,',
contactDeveloper: '或联系开发者检查 User-Agent 格式是否发生变化',
unifiedClientIdDesc: '开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征',
clientIdReplaceDesc: '此ID将替换请求中的user_id客户端部分保留session部分用于粘性会话',
// OAuth 步骤文本
step1GenerateAuthLink: '步骤1: 生成授权链接',
clickButtonGenerate: '点击下方按钮生成授权链接',
copyLinkTitle: '复制链接',
step2AccessAndAuth: '步骤2: 访问链接并授权',
openInBrowser: '在浏览器中打开链接并完成授权',
browserAuthDesc: '请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。',
proxyNotice: '如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。',
step3InputAuthCode: '步骤3: 输入授权码',
inputAuthCodeTitle: '输入 Authorization Code',
authCompleteDesc: '授权完成后,从返回页面复制 Authorization Code并粘贴到下方输入框',
pasteAuthCodeDesc: '请粘贴从 Claude Code 授权页面复制的 Authorization Code',
// AWS 区域参考
awsRegionRef: '常用 AWS 区域参考:',
// Error messages
apiKeyRequiredError: '请填写 API Key',
copyFailedManual: '复制失败,请手动复制',
// 表单描述
modelSupportDesc:
'留空表示支持所有模型。如果指定模型,请求中的模型不在列表内将不会调度到此账号',
modelTypeSelectionDesc: '选择此部署支持的模型类型',
userAgentDesc: '留空时将自动使用客户端的 User-Agent仅在需要固定特定 UA 时填写',
// 基础标签
apiUrlLabel: 'API URL',
apiKeyLabel: 'API Key',
// 更多缺失的翻译键
copyLinkTooltip: '复制链接',
// Claude 订阅类型显示
claudeMaxDisplay: 'Claude Max',
claudeProDisplay: 'Claude Pro',
// 新增缺失的翻译键
modelSupportDescription:
'留空表示支持所有模型。如果指定模型,请求中的模型不在列表内将不会调度到此账号',
regenerateButton: '重新生成',
cancelButton: '取消',
credentialsFileDescription: '文件中的凭证。',
authCodeInputHint: '请粘贴从Claude Code授权页面复制的Authorization Code',
dailyQuotaLimitLabel: '每日额度限制 ($)',
todayUsageLabel: '今日使用情况',
remainingQuota: '剩余: ${amount}',
usedPercentage: '{percentage}% 已使用',
modelMappingTableLabel: '模型映射表 (可选)',
modelMappingTableDescription:
'留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。',
customUserAgentLabel: '自定义 User-Agent (可选)',
rateLimitDurationLabel: '限流时间 (分钟)',
awsRegionReferenceTitle: '常用 AWS 区域参考:',
azureModelTypeDescription: '选择此部署支持的模型类型',
tokenUpdateDescription:
'可以更新 Access Token 和 Refresh Token。为了安全起见不会显示当前的 Token 值。',
tokenUpdateHint: '💡 留空表示不更新该字段。',
// Setup Token 流程翻译
clickToGenerateAuthLink: '点击生成授权链接',
openLinkInBrowser: '在浏览器中打开链接并完成授权',
openAuthLinkDescription: '请在新标签页中打开授权链接,登录您的 Claude 账户并授权。',
proxyWarning: '注意:如果您配置了代理,请确保浏览器也使用相同的代理访问授权页面。',
enterAuthorizationCode: '输入授权码',
copyAuthCodeDescription: '授权完成后,从返回页面复制 Authorization Code并粘贴到下方输入框'
},
// OAuth Flow Component
oauthFlow: {
// 平台标题
claudeAccountAuth: 'Claude 账户授权',
geminiAccountAuth: 'Gemini 账户授权',
openaiAccountAuth: 'OpenAI 账户授权',
// 流程说明
claudeAuthDescription: '请按照以下步骤完成 Claude 账户的授权:',
geminiAuthDescription: '请按照以下步骤完成 Gemini 账户的授权:',
openaiAuthDescription: '请按照以下步骤完成 OpenAI 账户的授权:',
// 步骤标题
step1Title: '点击下方按钮生成授权链接',
step2Title: '在浏览器中打开链接并完成授权',
step3Title: '输入 Authorization Code',
step3TitleOpenAI: '输入授权链接或 Code',
// 步骤描述
step2Description: '请在新标签页中打开授权链接,登录您的 Claude 账户并授权。',
step2DescriptionGemini: '请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。',
step2DescriptionOpenAI: '请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。',
step3Description: '授权完成后,页面会显示一个',
step3DescriptionMiddle: ',请将其复制并粘贴到下方输入框:',
step3DescriptionGemini:
'授权完成后,页面会显示一个 Authorization Code请将其复制并粘贴到下方输入框',
step3DescriptionOpenAI: '授权完成后,当页面地址变为',
step3DescriptionOpenAIMiddle: '时:',
// 按钮文本
generating: '生成中...',
generateAuthLink: '生成授权链接',
regenerate: '重新生成',
previousStep: '上一步',
completeAuth: '完成授权',
verifying: '验证中...',
// 占位符
authCodePlaceholder: '粘贴从Claude页面获取的Authorization Code...',
authCodePlaceholderGemini: '粘贴从Gemini页面获取的Authorization Code...',
authCodePlaceholderOpenAI:
'方式1复制完整的链接http://localhost:1455/auth/callback?code=...)\n方式2仅复制 code 参数的值\n系统会自动识别并提取所需信息',
// 标签
authorizationCode: 'Authorization Code',
authLinkOrCode: '授权链接或 Code',
// 提示信息
copyLinkTooltip: '复制链接',
authCodeHint: '请粘贴从Claude页面复制的Authorization Code',
authCodeHintGemini: '请粘贴从Gemini页面复制的Authorization Code',
// 注意事项
proxyNotice: '注意:',
proxyNoticeText: '如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。',
// OpenAI 特有提示
openaiImportantNote: '重要提示:',
openaiLoadingNote: '授权后页面可能会加载较长时间,请耐心等待。',
openaiAddressNote: '当浏览器地址栏变为',
openaiAddressNoteMiddle: '开头时,表示授权已完成。',
openaiTip: '提示:',
openaiTipText: '您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。',
openaiLinkExample: '• 完整链接示例:',
openaiCodeExample: '• 仅 Code 示例:',
// 成功和错误消息
successExtractCode: '成功提取授权码!',
errorCodeNotFound: 'URL 中未找到授权码参数,请检查链接是否正确',
errorLinkFormat: '链接格式错误,请检查是否为完整的 URL',
errorWrongUrlFormat: '请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接',
linkCopied: '链接已复制',
authFailed: '授权失败,请检查授权码是否正确',
generateAuthFailed: '生成授权链接失败'
},
// Group Management Modal
groupManagement: {
title: '账户分组管理',
createNewGroup: '创建新分组',
createGroup: '创建新分组',
groupNameRequired: '分组名称 *',
groupNamePlaceholder: '输入分组名称',
platformTypeRequired: '平台类型 *',
descriptionOptional: '描述 (可选)',
descriptionPlaceholder: '分组描述...',
creating: '创建中...',
create: '创建',
cancel: '取消',
loading: '加载中...',
noGroups: '暂无分组',
noDescription: '暂无描述',
membersCount: ' 个成员',
edit: '编辑',
delete: '删除',
editGroup: '编辑分组',
platformTypeLabel: '平台类型',
cannotModify: '(不可修改)',
updating: '更新中...',
update: '更新',
// Toast messages
loadGroupsFailed: '加载分组列表失败',
fillRequiredFields: '请填写必填项',
groupCreated: '分组创建成功',
createGroupFailed: '创建分组失败',
fillGroupName: '请填写分组名称',
groupUpdated: '分组更新成功',
updateGroupFailed: '更新分组失败',
groupHasMembers: '分组内还有成员,无法删除',
confirmDelete: '确定要删除分组 "{name}" 吗?',
groupDeleted: '分组删除成功',
deleteGroupFailed: '删除分组失败'
},
// Proxy Configuration
proxyConfig: {
title: '代理设置 (可选)',
enableProxy: '启用代理',
configDescription: '配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。',
stabilityNotice: '请确保代理服务器稳定可用,否则会影响账户的正常使用。',
proxyType: '代理类型',
hostAddress: '主机地址',
hostPlaceholder: '例如: 192.168.1.100',
port: '端口',
portPlaceholder: '例如: 1080',
needsAuth: '需要身份验证',
username: '用户名',
usernamePlaceholder: '代理用户名',
password: '密码',
passwordPlaceholder: '代理密码',
tip: '提示:',
apiRequestNotice: '代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。'
}
}