mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-22 16:43:35 +00:00
2921 lines
105 KiB
JavaScript
2921 lines
105 KiB
JavaScript
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: '复制项目 ID(Project ID),通常是字符串格式',
|
||
projectIdStep3: '⚠️ 注意:要复制项目 ID(Project 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 Token,Token 过期后需要手动更新。',
|
||
|
||
// 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 Token,Token 过期后需要手动更新。',
|
||
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目 ID(Project ID)\uff0c通常是字符串格式',
|
||
geminiProjectIdWarning:
|
||
'⚠️ 注意:要复制项目 ID(Project 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流量转发。'
|
||
}
|
||
}
|