1489 lines
55 KiB
TypeScript
1489 lines
55 KiB
TypeScript
export default {
|
||
// Home Page
|
||
home: {
|
||
viewOnGithub: '在 GitHub 上查看',
|
||
viewDocs: '查看文档',
|
||
docs: '文档',
|
||
switchToLight: '切换到浅色模式',
|
||
switchToDark: '切换到深色模式',
|
||
dashboard: '控制台',
|
||
login: '登录',
|
||
getStarted: '开始使用',
|
||
goToDashboard: '进入控制台',
|
||
tags: {
|
||
subscriptionToApi: '订阅转 API',
|
||
stickySession: '粘性会话',
|
||
realtimeBilling: '实时计费',
|
||
},
|
||
features: {
|
||
unifiedGateway: '统一 API 网关',
|
||
unifiedGatewayDesc: '将 Claude 订阅转换为 API 接口,通过标准 /v1/messages 接口访问 AI 能力。',
|
||
multiAccount: '多账号池',
|
||
multiAccountDesc: '智能负载均衡管理多个上游账号,支持 OAuth 和 API Key 认证。',
|
||
balanceQuota: '余额与配额',
|
||
balanceQuotaDesc: '基于 Token 的精确计费和用量追踪,支持配额管理和兑换码充值。',
|
||
},
|
||
providers: {
|
||
title: '支持的服务商',
|
||
description: 'AI 服务的统一 API 接口',
|
||
supported: '已支持',
|
||
soon: '即将推出',
|
||
},
|
||
footer: {
|
||
allRightsReserved: '保留所有权利。',
|
||
},
|
||
},
|
||
|
||
// Common
|
||
common: {
|
||
loading: '加载中...',
|
||
save: '保存',
|
||
cancel: '取消',
|
||
delete: '删除',
|
||
edit: '编辑',
|
||
create: '创建',
|
||
update: '更新',
|
||
confirm: '确认',
|
||
reset: '重置',
|
||
search: '搜索',
|
||
filter: '筛选',
|
||
export: '导出',
|
||
import: '导入',
|
||
actions: '操作',
|
||
status: '状态',
|
||
name: '名称',
|
||
email: '邮箱',
|
||
password: '密码',
|
||
submit: '提交',
|
||
back: '返回',
|
||
next: '下一步',
|
||
yes: '是',
|
||
no: '否',
|
||
all: '全部',
|
||
none: '无',
|
||
noData: '暂无数据',
|
||
success: '成功',
|
||
error: '错误',
|
||
warning: '警告',
|
||
info: '提示',
|
||
active: '启用',
|
||
inactive: '禁用',
|
||
close: '关闭',
|
||
enabled: '已启用',
|
||
disabled: '已禁用',
|
||
total: '总计',
|
||
balance: '余额',
|
||
available: '可用',
|
||
copiedToClipboard: '已复制到剪贴板',
|
||
copyFailed: '复制失败',
|
||
contactSupport: '联系客服',
|
||
selectOption: '请选择',
|
||
searchPlaceholder: '搜索...',
|
||
noOptionsFound: '无匹配选项',
|
||
saving: '保存中...',
|
||
refresh: '刷新',
|
||
},
|
||
|
||
// Navigation
|
||
nav: {
|
||
dashboard: '仪表盘',
|
||
apiKeys: 'API 密钥',
|
||
usage: '使用记录',
|
||
redeem: '兑换',
|
||
profile: '个人资料',
|
||
users: '用户管理',
|
||
groups: '分组管理',
|
||
subscriptions: '订阅管理',
|
||
accounts: '账号管理',
|
||
proxies: 'IP管理',
|
||
redeemCodes: '兑换码',
|
||
settings: '系统设置',
|
||
myAccount: '我的账户',
|
||
lightMode: '浅色模式',
|
||
darkMode: '深色模式',
|
||
collapse: '收起',
|
||
expand: '展开',
|
||
logout: '退出登录',
|
||
github: 'GitHub',
|
||
mySubscriptions: '我的订阅',
|
||
},
|
||
|
||
// Auth
|
||
auth: {
|
||
welcomeBack: '欢迎回来',
|
||
signInToAccount: '登录您的账户以继续',
|
||
signIn: '登录',
|
||
signingIn: '登录中...',
|
||
createAccount: '创建账户',
|
||
signUpToStart: '注册以开始使用 {siteName}',
|
||
signUp: '注册',
|
||
processing: '处理中...',
|
||
continue: '继续',
|
||
rememberMe: '记住我',
|
||
dontHaveAccount: '还没有账户?',
|
||
alreadyHaveAccount: '已有账户?',
|
||
registrationDisabled: '注册功能暂时关闭,请联系管理员。',
|
||
emailLabel: '邮箱',
|
||
emailPlaceholder: '请输入邮箱',
|
||
passwordLabel: '密码',
|
||
passwordPlaceholder: '请输入密码',
|
||
createPasswordPlaceholder: '创建一个安全的密码',
|
||
passwordHint: '至少 6 个字符',
|
||
emailRequired: '请输入邮箱',
|
||
invalidEmail: '请输入有效的邮箱地址',
|
||
passwordRequired: '请输入密码',
|
||
passwordMinLength: '密码至少需要 6 个字符',
|
||
loginFailed: '登录失败,请检查您的凭据后重试。',
|
||
registrationFailed: '注册失败,请重试。',
|
||
loginSuccess: '登录成功!欢迎回来。',
|
||
accountCreatedSuccess: '账户创建成功!欢迎使用 {siteName}。',
|
||
turnstileExpired: '验证已过期,请重试',
|
||
turnstileFailed: '验证失败,请重试',
|
||
completeVerification: '请完成验证',
|
||
},
|
||
|
||
// Dashboard
|
||
dashboard: {
|
||
title: '仪表盘',
|
||
welcomeMessage: '欢迎回来!这是您账户的概览。',
|
||
balance: '余额',
|
||
apiKeys: 'API 密钥',
|
||
todayRequests: '今日请求',
|
||
todayCost: '今日消费',
|
||
todayTokens: '今日 Token',
|
||
totalTokens: '累计 Token',
|
||
cacheToday: '今日缓存',
|
||
performance: '性能指标',
|
||
avgResponse: '平均响应',
|
||
averageTime: '平均时间',
|
||
timeRange: '时间范围',
|
||
granularity: '粒度',
|
||
day: '按天',
|
||
hour: '按小时',
|
||
modelDistribution: '模型分布',
|
||
tokenUsageTrend: 'Token 使用趋势',
|
||
noDataAvailable: '暂无数据',
|
||
model: '模型',
|
||
requests: '请求',
|
||
tokens: 'Token',
|
||
actual: '实际',
|
||
standard: '标准',
|
||
input: '输入',
|
||
output: '输出',
|
||
cache: '缓存',
|
||
recentUsage: '最近使用',
|
||
last7Days: '近 7 天',
|
||
noUsageRecords: '暂无使用记录',
|
||
startUsingApi: '开始使用 API 后,您的使用历史将显示在这里。',
|
||
viewAllUsage: '查看全部',
|
||
quickActions: '快捷操作',
|
||
createApiKey: '创建 API 密钥',
|
||
generateNewKey: '生成新的 API 密钥',
|
||
viewUsage: '查看使用记录',
|
||
checkDetailedLogs: '查看详细的使用日志',
|
||
redeemCode: '兑换码',
|
||
addBalanceWithCode: '使用兑换码充值',
|
||
},
|
||
|
||
// Groups (shared)
|
||
groups: {
|
||
subscription: '订阅',
|
||
},
|
||
|
||
// API Keys
|
||
keys: {
|
||
title: 'API 密钥',
|
||
description: '管理您的 API 密钥和访问令牌',
|
||
createKey: '创建密钥',
|
||
editKey: '编辑密钥',
|
||
deleteKey: '删除密钥',
|
||
deleteConfirmMessage: "确定要删除 '{name}' 吗?此操作无法撤销。",
|
||
apiKey: 'API 密钥',
|
||
group: '分组',
|
||
noGroup: '无分组',
|
||
created: '创建时间',
|
||
copyToClipboard: '复制到剪贴板',
|
||
copied: '已复制!',
|
||
importToCcSwitch: '导入到 CC Switch',
|
||
enable: '启用',
|
||
disable: '禁用',
|
||
nameLabel: '名称',
|
||
namePlaceholder: '我的 API 密钥',
|
||
groupLabel: '分组',
|
||
selectGroup: '选择分组',
|
||
statusLabel: '状态',
|
||
selectStatus: '选择状态',
|
||
saving: '保存中...',
|
||
noKeysYet: '暂无 API 密钥',
|
||
createFirstKey: '创建您的第一个 API 密钥以开始使用 API。',
|
||
keyCreatedSuccess: 'API 密钥创建成功',
|
||
keyUpdatedSuccess: 'API 密钥更新成功',
|
||
keyDeletedSuccess: 'API 密钥删除成功',
|
||
keyEnabledSuccess: 'API 密钥已启用',
|
||
keyDisabledSuccess: 'API 密钥已禁用',
|
||
failedToLoad: '加载 API 密钥失败',
|
||
failedToSave: '保存 API 密钥失败',
|
||
failedToDelete: '删除 API 密钥失败',
|
||
failedToUpdateStatus: '更新 API 密钥状态失败',
|
||
clickToChangeGroup: '点击更换分组',
|
||
groupChangedSuccess: '分组更换成功',
|
||
failedToChangeGroup: '更换分组失败',
|
||
groupRequired: '请选择分组',
|
||
usage: '用量',
|
||
today: '今日',
|
||
total: '累计',
|
||
useKey: '使用密钥',
|
||
useKeyModal: {
|
||
title: '使用 API 密钥',
|
||
description: '将以下环境变量添加到您的终端配置文件或直接在终端中运行。',
|
||
copy: '复制',
|
||
copied: '已复制',
|
||
note: '这些环境变量将在当前终端会话中生效。如需永久配置,请将其添加到 ~/.bashrc、~/.zshrc 或相应的配置文件中。',
|
||
},
|
||
customKeyLabel: '自定义密钥',
|
||
customKeyPlaceholder: '输入自定义密钥(至少16个字符)',
|
||
customKeyHint: '仅允许字母、数字、下划线和连字符,最少16个字符。',
|
||
customKeyTooShort: '自定义密钥至少需要16个字符',
|
||
customKeyInvalidChars: '自定义密钥只能包含字母、数字、下划线和连字符',
|
||
customKeyRequired: '请输入自定义密钥',
|
||
},
|
||
|
||
// Usage
|
||
usage: {
|
||
title: '使用记录',
|
||
description: '查看和分析您的 API 使用历史',
|
||
totalRequests: '总请求数',
|
||
totalTokens: '总 Token',
|
||
totalCost: '总消费',
|
||
standardCost: '标准',
|
||
actualCost: '实际',
|
||
avgDuration: '平均耗时',
|
||
inSelectedRange: '所选范围内',
|
||
perRequest: '每次请求',
|
||
apiKeyFilter: 'API 密钥',
|
||
allApiKeys: '全部密钥',
|
||
timeRange: '时间范围',
|
||
exportCsv: '导出 CSV',
|
||
model: '模型',
|
||
type: '类型',
|
||
tokens: 'Token',
|
||
cost: '费用',
|
||
firstToken: '首 Token',
|
||
duration: '耗时',
|
||
time: '时间',
|
||
stream: '流式',
|
||
sync: '同步',
|
||
in: '输入',
|
||
out: '输出',
|
||
cacheRead: '读取',
|
||
cacheWrite: '写入',
|
||
rate: '倍率',
|
||
original: '原始',
|
||
billed: '计费',
|
||
noRecords: '未找到使用记录,请尝试调整筛选条件。',
|
||
failedToLoad: '加载使用记录失败',
|
||
noDataToExport: '没有可导出的数据',
|
||
exportSuccess: '使用数据导出成功',
|
||
billingType: '消费类型',
|
||
balance: '余额',
|
||
subscription: '订阅',
|
||
},
|
||
|
||
// Redeem
|
||
redeem: {
|
||
title: '兑换码',
|
||
description: '输入兑换码以充值余额或增加并发数',
|
||
currentBalance: '当前余额',
|
||
concurrency: '并发数',
|
||
requests: '请求',
|
||
redeemCodeLabel: '兑换码',
|
||
redeemCodePlaceholder: '请输入兑换码',
|
||
redeemCodeHint: '兑换码区分大小写',
|
||
redeeming: '兑换中...',
|
||
redeemButton: '兑换',
|
||
redeemSuccess: '兑换成功!',
|
||
redeemFailed: '兑换失败',
|
||
added: '已添加',
|
||
concurrentRequests: '并发请求',
|
||
newBalance: '新余额',
|
||
newConcurrency: '新并发数',
|
||
aboutCodes: '关于兑换码',
|
||
codeRule1: '每个兑换码只能使用一次',
|
||
codeRule2: '兑换码可以增加余额、并发数或试用权限',
|
||
codeRule3: '如有兑换问题,请联系客服',
|
||
codeRule4: '余额和并发数即时更新',
|
||
recentActivity: '最近活动',
|
||
historyWillAppear: '您的兑换历史将显示在这里',
|
||
balanceAddedRedeem: '余额充值(兑换)',
|
||
balanceAddedAdmin: '余额充值(管理员)',
|
||
balanceDeductedAdmin: '余额扣除(管理员)',
|
||
concurrencyAddedRedeem: '并发增加(兑换)',
|
||
concurrencyAddedAdmin: '并发增加(管理员)',
|
||
concurrencyReducedAdmin: '并发减少(管理员)',
|
||
adminAdjustment: '管理员调整',
|
||
subscriptionAssigned: '订阅已分配',
|
||
subscriptionAssignedDesc: '您已获得 {groupName} 的访问权限',
|
||
subscriptionDays: '{days} 天',
|
||
days: '天',
|
||
codeRedeemSuccess: '兑换成功!',
|
||
failedToRedeem: '兑换失败,请检查兑换码后重试。',
|
||
},
|
||
|
||
// Profile
|
||
profile: {
|
||
title: '个人设置',
|
||
description: '管理您的账户信息和设置',
|
||
accountBalance: '账户余额',
|
||
concurrencyLimit: '并发限制',
|
||
memberSince: '注册时间',
|
||
administrator: '管理员',
|
||
user: '用户',
|
||
username: '用户名',
|
||
wechat: '微信号',
|
||
enterUsername: '输入用户名',
|
||
enterWechat: '输入微信号',
|
||
editProfile: '编辑个人资料',
|
||
updateProfile: '更新资料',
|
||
updating: '更新中...',
|
||
updateSuccess: '资料更新成功',
|
||
updateFailed: '资料更新失败',
|
||
changePassword: '修改密码',
|
||
currentPassword: '当前密码',
|
||
newPassword: '新密码',
|
||
confirmNewPassword: '确认新密码',
|
||
passwordHint: '密码至少需要 8 个字符',
|
||
changingPassword: '修改中...',
|
||
changePasswordButton: '修改密码',
|
||
passwordsNotMatch: '两次输入的密码不一致',
|
||
passwordTooShort: '密码至少需要 8 个字符',
|
||
passwordChangeSuccess: '密码修改成功',
|
||
passwordChangeFailed: '密码修改失败',
|
||
},
|
||
|
||
// Empty States
|
||
empty: {
|
||
noData: '暂无数据',
|
||
},
|
||
|
||
// Pagination
|
||
pagination: {
|
||
showing: '显示',
|
||
to: '至',
|
||
of: '共',
|
||
results: '条结果',
|
||
page: '页',
|
||
pageOf: '第 {page} / {total} 页',
|
||
previous: '上一页',
|
||
next: '下一页',
|
||
perPage: '每页',
|
||
goToPage: '跳转到第 {page} 页',
|
||
},
|
||
|
||
// Errors
|
||
errors: {
|
||
somethingWentWrong: '出错了',
|
||
pageNotFound: '页面未找到',
|
||
unauthorized: '未授权',
|
||
forbidden: '禁止访问',
|
||
serverError: '服务器错误',
|
||
networkError: '网络错误',
|
||
timeout: '请求超时',
|
||
tryAgain: '请重试',
|
||
},
|
||
|
||
// Dates
|
||
dates: {
|
||
today: '今天',
|
||
yesterday: '昨天',
|
||
thisWeek: '本周',
|
||
lastWeek: '上周',
|
||
thisMonth: '本月',
|
||
lastMonth: '上月',
|
||
last7Days: '近 7 天',
|
||
last14Days: '近 14 天',
|
||
last30Days: '近 30 天',
|
||
custom: '自定义',
|
||
startDate: '开始日期',
|
||
endDate: '结束日期',
|
||
apply: '应用',
|
||
selectDateRange: '选择日期范围',
|
||
},
|
||
|
||
// Admin
|
||
admin: {
|
||
// Dashboard
|
||
dashboard: {
|
||
title: '管理控制台',
|
||
description: '系统概览与统计数据',
|
||
apiKeys: 'API 密钥',
|
||
totalApiKeys: 'API 密钥总数',
|
||
activeApiKeys: '活跃密钥',
|
||
users: '用户',
|
||
totalUsers: '用户总数',
|
||
activeUsers: '活跃用户',
|
||
accounts: '账号',
|
||
totalAccounts: '账号总数',
|
||
activeAccounts: '活跃账号',
|
||
todayRequests: '今日请求',
|
||
totalRequests: '总请求数',
|
||
todayCost: '今日消费',
|
||
totalCost: '总消费',
|
||
actual: '实际',
|
||
standard: '标准',
|
||
todayTokens: '今日 Token',
|
||
totalTokens: '总 Token',
|
||
input: '输入',
|
||
output: '输出',
|
||
cacheToday: '今日缓存',
|
||
performance: '性能指标',
|
||
avgResponse: '平均响应',
|
||
averageTime: '平均时间',
|
||
timeRange: '时间范围',
|
||
granularity: '粒度',
|
||
day: '按天',
|
||
hour: '按小时',
|
||
modelDistribution: '模型分布',
|
||
tokenUsageTrend: 'Token 使用趋势',
|
||
noDataAvailable: '暂无数据',
|
||
model: '模型',
|
||
requests: '请求',
|
||
tokens: 'Token',
|
||
cache: '缓存',
|
||
recentUsage: '最近使用',
|
||
last7Days: '近 7 天',
|
||
noUsageRecords: '暂无使用记录',
|
||
startUsingApi: '开始使用 API 后,使用历史将显示在这里。',
|
||
viewAllUsage: '查看全部',
|
||
quickActions: '快捷操作',
|
||
manageUsers: '管理用户',
|
||
viewUserAccounts: '查看和管理用户账户',
|
||
manageAccounts: '管理账号',
|
||
configureAiAccounts: '配置 AI 平台账号',
|
||
systemSettings: '系统设置',
|
||
configureSystem: '配置系统设置',
|
||
failedToLoad: '加载仪表盘数据失败',
|
||
},
|
||
|
||
// Users Management
|
||
users: {
|
||
title: '用户管理',
|
||
description: '管理用户账户和权限',
|
||
createUser: '创建用户',
|
||
editUser: '编辑用户',
|
||
deleteUser: '删除用户',
|
||
deleteConfirmMessage: "确定要删除用户 '{email}' 吗?此操作无法撤销。",
|
||
searchPlaceholder: '搜索用户...',
|
||
searchUsers: '搜索用户...',
|
||
roleFilter: '角色筛选',
|
||
allRoles: '全部角色',
|
||
allStatus: '全部状态',
|
||
statusFilter: '状态筛选',
|
||
allStatuses: '全部状态',
|
||
admin: '管理员',
|
||
user: '用户',
|
||
disabled: '禁用',
|
||
email: '邮箱',
|
||
password: '密码',
|
||
username: '用户名',
|
||
wechat: '微信号',
|
||
notes: '备注',
|
||
enterEmail: '请输入邮箱',
|
||
enterPassword: '请输入密码',
|
||
enterUsername: '请输入用户名(选填)',
|
||
enterWechat: '请输入微信号(选填)',
|
||
enterNotes: '请输入备注(仅管理员可见)',
|
||
notesHint: '此备注仅对管理员可见',
|
||
enterNewPassword: '请输入新密码(选填)',
|
||
leaveEmptyToKeep: '留空则保持原密码不变',
|
||
generatePassword: '生成随机密码',
|
||
copyPassword: '复制密码',
|
||
creating: '创建中...',
|
||
updating: '更新中...',
|
||
columns: {
|
||
user: '用户',
|
||
email: '邮箱',
|
||
username: '用户名',
|
||
wechat: '微信号',
|
||
notes: '备注',
|
||
role: '角色',
|
||
subscriptions: '订阅分组',
|
||
balance: '余额',
|
||
usage: '用量',
|
||
concurrency: '并发数',
|
||
status: '状态',
|
||
created: '创建时间',
|
||
actions: '操作',
|
||
},
|
||
today: '今日',
|
||
total: '累计',
|
||
noSubscription: '暂无订阅',
|
||
daysRemaining: '{days}天',
|
||
expired: '已过期',
|
||
disableUser: '禁用用户',
|
||
enableUser: '启用用户',
|
||
viewApiKeys: '查看 API 密钥',
|
||
userApiKeys: '用户 API 密钥',
|
||
noApiKeys: '此用户暂无 API 密钥',
|
||
group: '分组',
|
||
none: '无',
|
||
noUsersYet: '暂无用户',
|
||
createFirstUser: '创建您的第一个用户以开始使用系统',
|
||
userCreated: '用户创建成功',
|
||
userUpdated: '用户更新成功',
|
||
userDeleted: '用户删除成功',
|
||
userEnabled: '用户已启用',
|
||
userDisabled: '用户已禁用',
|
||
failedToLoad: '加载用户列表失败',
|
||
failedToCreate: '创建用户失败',
|
||
failedToUpdate: '更新用户失败',
|
||
failedToDelete: '删除用户失败',
|
||
failedToToggle: '更新用户状态失败',
|
||
failedToLoadApiKeys: '加载用户 API 密钥失败',
|
||
deleteConfirm: "确定要删除用户 '{email}' 吗?此操作无法撤销。",
|
||
roles: {
|
||
admin: '管理员',
|
||
user: '用户',
|
||
},
|
||
statuses: {
|
||
active: '正常',
|
||
banned: '禁用',
|
||
},
|
||
form: {
|
||
emailLabel: '邮箱',
|
||
emailPlaceholder: '请输入邮箱',
|
||
usernameLabel: '用户名',
|
||
usernamePlaceholder: '请输入用户名(选填)',
|
||
wechatLabel: '微信号',
|
||
wechatPlaceholder: '请输入微信号(选填)',
|
||
notesLabel: '备注',
|
||
notesPlaceholder: '请输入备注(仅管理员可见)',
|
||
notesHint: '此备注仅对管理员可见',
|
||
passwordLabel: '密码',
|
||
passwordPlaceholder: '请输入密码(留空则不修改)',
|
||
roleLabel: '角色',
|
||
selectRole: '选择角色',
|
||
balanceLabel: '余额',
|
||
concurrencyLabel: '并发数',
|
||
statusLabel: '状态',
|
||
selectStatus: '选择状态',
|
||
},
|
||
adjustBalance: '调整余额',
|
||
adjustConcurrency: '调整并发数',
|
||
adjustmentAmount: '调整金额',
|
||
adjustmentAmountHint: '正数增加,负数减少',
|
||
currentBalance: '当前余额',
|
||
currentConcurrency: '当前并发数',
|
||
saving: '保存中...',
|
||
noUsers: '暂无用户',
|
||
noUsersDescription: '创建您的第一个用户以开始使用系统。',
|
||
userCreatedSuccess: '用户创建成功',
|
||
userUpdatedSuccess: '用户更新成功',
|
||
userDeletedSuccess: '用户删除成功',
|
||
balanceAdjustedSuccess: '余额调整成功',
|
||
concurrencyAdjustedSuccess: '并发数调整成功',
|
||
failedToSave: '保存用户失败',
|
||
failedToAdjust: '调整失败',
|
||
setAllowedGroups: '设置允许分组',
|
||
allowedGroupsHint: '选择此用户可以使用的标准分组。订阅类型分组请在订阅管理中配置。',
|
||
noStandardGroups: '暂无标准分组',
|
||
allowAllGroups: '允许全部分组',
|
||
allowAllGroupsHint: '用户可以使用任何非专属分组',
|
||
allowedGroupsUpdated: '允许分组更新成功',
|
||
failedToLoadGroups: '加载分组列表失败',
|
||
failedToUpdateAllowedGroups: '更新允许分组失败',
|
||
deposit: '充值',
|
||
withdraw: '退款',
|
||
depositAmount: '充值金额',
|
||
withdrawAmount: '退款金额',
|
||
depositNotesPlaceholder: '例如:新用户注册奖励、活动充值、补偿充值等',
|
||
withdrawNotesPlaceholder: '例如:服务问题退款、错误充值退回、账户注销退款等',
|
||
notesOptional: '备注为可选项,有助于未来查账',
|
||
amountHint: '请输入正数金额',
|
||
newBalance: '操作后余额',
|
||
depositing: '充值中...',
|
||
withdrawing: '退款中...',
|
||
confirmDeposit: '确认充值',
|
||
confirmWithdraw: '确认退款',
|
||
depositSuccess: '充值成功',
|
||
withdrawSuccess: '退款成功',
|
||
failedToDeposit: '充值失败',
|
||
failedToWithdraw: '退款失败',
|
||
useDepositWithdrawButtons: '请使用充值/退款按钮调整余额',
|
||
insufficientBalance: '余额不足,退款后余额不能为负数',
|
||
},
|
||
|
||
// Groups Management
|
||
groups: {
|
||
title: '分组管理',
|
||
description: '管理 API 密钥分组和费率配置',
|
||
createGroup: '创建分组',
|
||
editGroup: '编辑分组',
|
||
deleteGroup: '删除分组',
|
||
deleteConfirm: "确定要删除分组 '{name}' 吗?所有关联的 API 密钥将不再属于任何分组。",
|
||
deleteConfirmSubscription:
|
||
"确定要删除订阅分组 '{name}' 吗?此操作会让所有绑定此订阅的用户的 API Key 失效,并删除所有相关的订阅记录。此操作无法撤销。",
|
||
columns: {
|
||
name: '名称',
|
||
platform: '平台',
|
||
rateMultiplier: '费率倍数',
|
||
exclusive: '独占',
|
||
type: '类型',
|
||
priority: '优先级',
|
||
apiKeys: 'API 密钥数',
|
||
accounts: '账号数',
|
||
status: '状态',
|
||
actions: '操作',
|
||
billingType: '计费类型',
|
||
},
|
||
form: {
|
||
name: '名称',
|
||
description: '描述',
|
||
platform: '平台',
|
||
rateMultiplier: '费率倍数',
|
||
status: '状态',
|
||
nameLabel: '分组名称',
|
||
namePlaceholder: '请输入分组名称',
|
||
descriptionLabel: '描述',
|
||
descriptionPlaceholder: '请输入描述(可选)',
|
||
rateMultiplierLabel: '费率倍数',
|
||
rateMultiplierHint: '1.0 = 标准费率,0.5 = 半价,2.0 = 双倍',
|
||
exclusiveLabel: '独占模式',
|
||
exclusiveHint: '启用后,此分组的用户将独占使用分配的账号',
|
||
platformLabel: '平台限制',
|
||
platformPlaceholder: '选择平台(留空则不限制)',
|
||
accountsLabel: '指定账号',
|
||
accountsPlaceholder: '选择账号(留空则不限制)',
|
||
priorityLabel: '优先级',
|
||
priorityHint: '数值越高优先级越高,用于账号调度',
|
||
statusLabel: '状态',
|
||
},
|
||
exclusive: {
|
||
yes: '是',
|
||
no: '否',
|
||
},
|
||
platforms: {
|
||
all: '全部平台',
|
||
claude: 'Claude',
|
||
openai: 'OpenAI',
|
||
},
|
||
saving: '保存中...',
|
||
noGroups: '暂无分组',
|
||
noGroupsDescription: '创建分组以更好地管理 API 密钥和费率。',
|
||
groupCreatedSuccess: '分组创建成功',
|
||
groupUpdatedSuccess: '分组更新成功',
|
||
groupDeletedSuccess: '分组删除成功',
|
||
failedToLoad: '加载分组列表失败',
|
||
failedToSave: '保存分组失败',
|
||
failedToDelete: '删除分组失败',
|
||
allPlatforms: '全部平台',
|
||
allStatus: '全部状态',
|
||
allGroups: '全部分组',
|
||
exclusiveFilter: '独占',
|
||
nonExclusive: '非独占',
|
||
public: '公开',
|
||
accountsCount: '{count} 个账号',
|
||
enterGroupName: '请输入分组名称',
|
||
optionalDescription: '可选描述',
|
||
platformHint: '选择此分组关联的平台',
|
||
platformNotEditable: '创建后不可更改平台',
|
||
noGroupsYet: '暂无分组',
|
||
createFirstGroup: '创建您的第一个分组来组织 API 密钥。',
|
||
creating: '创建中...',
|
||
updating: '更新中...',
|
||
limitDay: '日',
|
||
limitWeek: '周',
|
||
limitMonth: '月',
|
||
groupCreated: '分组创建成功',
|
||
groupUpdated: '分组更新成功',
|
||
groupDeleted: '分组删除成功',
|
||
failedToCreate: '创建分组失败',
|
||
failedToUpdate: '更新分组失败',
|
||
subscription: {
|
||
title: '订阅设置',
|
||
type: '计费类型',
|
||
typeHint: '标准计费从用户余额扣除。订阅模式使用配额限制。',
|
||
typeNotEditable: '分组创建后无法修改计费类型。',
|
||
standard: '标准(余额)',
|
||
subscription: '订阅(配额)',
|
||
dailyLimit: '每日限额(USD)',
|
||
weeklyLimit: '每周限额(USD)',
|
||
monthlyLimit: '每月限额(USD)',
|
||
defaultValidityDays: '默认有效期(天)',
|
||
validityHint: '分配给用户时订阅的有效天数',
|
||
noLimit: '无限制',
|
||
},
|
||
},
|
||
|
||
// Subscriptions Management
|
||
subscriptions: {
|
||
title: '订阅管理',
|
||
description: '管理用户订阅和配额限制',
|
||
assignSubscription: '分配订阅',
|
||
extendSubscription: '延长订阅',
|
||
revokeSubscription: '撤销订阅',
|
||
allStatus: '全部状态',
|
||
allGroups: '全部分组',
|
||
daily: '每日',
|
||
weekly: '每周',
|
||
monthly: '每月',
|
||
noLimits: '未配置限额',
|
||
resetNow: '即将重置',
|
||
windowNotActive: '窗口未激活',
|
||
resetInMinutes: '{minutes} 分钟后重置',
|
||
resetInHoursMinutes: '{hours} 小时 {minutes} 分钟后重置',
|
||
resetInDaysHours: '{days} 天 {hours} 小时后重置',
|
||
daysRemaining: '天剩余',
|
||
noExpiration: '无过期时间',
|
||
status: {
|
||
active: '生效中',
|
||
expired: '已过期',
|
||
revoked: '已撤销',
|
||
},
|
||
columns: {
|
||
user: '用户',
|
||
group: '分组',
|
||
usage: '用量',
|
||
expires: '到期时间',
|
||
status: '状态',
|
||
actions: '操作',
|
||
},
|
||
form: {
|
||
user: '用户',
|
||
group: '订阅分组',
|
||
validityDays: '有效期(天)',
|
||
extendDays: '延长天数',
|
||
},
|
||
selectUser: '选择用户',
|
||
selectGroup: '选择订阅分组',
|
||
groupHint: '仅显示订阅计费类型的分组',
|
||
validityHint: '订阅的有效天数',
|
||
extendingFor: '为以下用户延长订阅',
|
||
currentExpiration: '当前到期时间',
|
||
assign: '分配',
|
||
assigning: '分配中...',
|
||
extend: '延长',
|
||
extending: '延长中...',
|
||
revoke: '撤销',
|
||
noSubscriptionsYet: '暂无订阅',
|
||
assignFirstSubscription: '分配一个订阅以开始使用。',
|
||
subscriptionAssigned: '订阅分配成功',
|
||
subscriptionExtended: '订阅延长成功',
|
||
subscriptionRevoked: '订阅撤销成功',
|
||
failedToLoad: '加载订阅列表失败',
|
||
failedToAssign: '分配订阅失败',
|
||
failedToExtend: '延长订阅失败',
|
||
failedToRevoke: '撤销订阅失败',
|
||
revokeConfirm: "确定要撤销 '{user}' 的订阅吗?此操作无法撤销。",
|
||
},
|
||
|
||
// Accounts Management
|
||
accounts: {
|
||
title: '账号管理',
|
||
description: '管理 AI 平台账号和 Cookie',
|
||
createAccount: '添加账号',
|
||
syncFromCrs: '从 CRS 同步',
|
||
syncFromCrsTitle: '从 CRS 同步账号',
|
||
syncFromCrsDesc:
|
||
'将 claude-relay-service(CRS)中的账号同步到当前系统(不会在浏览器侧直接请求 CRS)。',
|
||
crsVersionRequirement: '⚠️ 注意:CRS 版本必须 ≥ v1.1.240 才支持此功能',
|
||
crsBaseUrl: 'CRS 服务地址',
|
||
crsBaseUrlPlaceholder: '例如:http://127.0.0.1:3000',
|
||
crsUsername: '用户名',
|
||
crsPassword: '密码',
|
||
syncProxies: '同时同步代理(按 host/port/账号匹配或自动创建)',
|
||
syncNow: '开始同步',
|
||
syncing: '同步中...',
|
||
syncMissingFields: '请填写服务地址、用户名和密码',
|
||
syncResult: '同步结果',
|
||
syncResultSummary: '创建 {created},更新 {updated},跳过 {skipped},失败 {failed}',
|
||
syncErrors: '错误/跳过详情',
|
||
syncCompleted: '同步完成:创建 {created},更新 {updated}',
|
||
syncCompletedWithErrors: '同步完成但有错误:失败 {failed}(创建 {created},更新 {updated})',
|
||
syncFailed: '同步失败',
|
||
editAccount: '编辑账号',
|
||
deleteAccount: '删除账号',
|
||
deleteConfirmMessage: "确定要删除账号 '{name}' 吗?",
|
||
refreshCookie: '刷新 Cookie',
|
||
testAccount: '测试账号',
|
||
// Filter options
|
||
allPlatforms: '全部平台',
|
||
allTypes: '全部类型',
|
||
allStatus: '全部状态',
|
||
oauthType: 'OAuth',
|
||
// Schedulable toggle
|
||
schedulable: '参与调度',
|
||
schedulableHint: '开启后账号参与API请求调度',
|
||
schedulableEnabled: '调度已开启',
|
||
schedulableDisabled: '调度已关闭',
|
||
failedToToggleSchedulable: '切换调度状态失败',
|
||
columns: {
|
||
name: '名称',
|
||
platformType: '平台/类型',
|
||
platform: '平台',
|
||
type: '类型',
|
||
concurrencyStatus: '并发',
|
||
priority: '优先级',
|
||
weight: '权重',
|
||
status: '状态',
|
||
schedulable: '调度',
|
||
todayStats: '今日统计',
|
||
groups: '分组',
|
||
usageWindows: '用量窗口',
|
||
lastUsed: '最近使用',
|
||
actions: '操作',
|
||
},
|
||
platforms: {
|
||
claude: 'Claude',
|
||
openai: 'OpenAI',
|
||
anthropic: 'Anthropic',
|
||
},
|
||
types: {
|
||
oauth: 'OAuth',
|
||
api_key: 'API Key',
|
||
cookie: 'Cookie',
|
||
},
|
||
statuses: {
|
||
active: '正常',
|
||
inactive: '停用',
|
||
error: '错误',
|
||
cooldown: '冷却中',
|
||
},
|
||
form: {
|
||
nameLabel: '账号名称',
|
||
namePlaceholder: '请输入账号名称',
|
||
platformLabel: '平台',
|
||
selectPlatform: '选择平台',
|
||
typeLabel: '类型',
|
||
selectType: '选择类型',
|
||
credentialsLabel: '凭证',
|
||
credentialsPlaceholder: '请输入 Cookie 或 API Key',
|
||
priorityLabel: '优先级',
|
||
priorityHint: '数值越高优先级越高',
|
||
weightLabel: '权重',
|
||
weightHint: '用于负载均衡的权重值',
|
||
statusLabel: '状态',
|
||
},
|
||
filters: {
|
||
platform: '平台',
|
||
allPlatforms: '全部平台',
|
||
type: '类型',
|
||
allTypes: '全部类型',
|
||
status: '状态',
|
||
allStatuses: '全部状态',
|
||
},
|
||
saving: '保存中...',
|
||
refreshing: '刷新中...',
|
||
testing: '测试中...',
|
||
noAccounts: '暂无账号',
|
||
noAccountsDescription: '添加 AI 平台账号以开始使用 API 网关。',
|
||
accountCreatedSuccess: '账号添加成功',
|
||
accountUpdatedSuccess: '账号更新成功',
|
||
accountDeletedSuccess: '账号删除成功',
|
||
bulkActions: {
|
||
selected: '已选择 {count} 个账号',
|
||
selectCurrentPage: '本页全选',
|
||
clear: '清除选择',
|
||
edit: '批量编辑账号',
|
||
delete: '批量删除',
|
||
},
|
||
bulkEdit: {
|
||
title: '批量编辑账号',
|
||
selectionInfo: '已选择 {count} 个账号。只更新您勾选或填写的字段,未勾选的字段保持不变。',
|
||
baseUrlPlaceholder: 'https://api.anthropic.com 或 https://api.openai.com',
|
||
baseUrlNotice: '仅适用于 API Key 账号,留空则不修改',
|
||
submit: '批量更新',
|
||
updating: '更新中...',
|
||
success: '成功更新 {count} 个账号',
|
||
partialSuccess: '部分更新成功:成功 {success} 个,失败 {failed} 个',
|
||
failed: '批量更新失败',
|
||
noSelection: '请选择要编辑的账号',
|
||
noFieldsSelected: '请至少选择一个要更新的字段',
|
||
},
|
||
bulkDeleteTitle: '批量删除账号',
|
||
bulkDeleteConfirm: '确定要删除选中的 {count} 个账号吗?此操作无法撤销。',
|
||
bulkDeleteSuccess: '成功删除 {count} 个账号',
|
||
bulkDeletePartial: '部分删除成功:成功 {success} 个,失败 {failed} 个',
|
||
bulkDeleteFailed: '批量删除失败',
|
||
resetStatus: '重置状态',
|
||
statusReset: '账号状态已重置',
|
||
failedToResetStatus: '重置账号状态失败',
|
||
cookieRefreshedSuccess: 'Cookie 刷新成功',
|
||
testSuccess: '账号测试通过',
|
||
testFailed: '账号测试失败',
|
||
failedToLoad: '加载账号列表失败',
|
||
failedToSave: '保存账号失败',
|
||
failedToDelete: '删除账号失败',
|
||
failedToRefresh: '刷新 Cookie 失败',
|
||
// Create/Edit Account Modal
|
||
platform: '平台',
|
||
accountName: '账号名称',
|
||
enterAccountName: '请输入账号名称',
|
||
accountType: '账号类型',
|
||
claudeCode: 'Claude Code',
|
||
claudeConsole: 'Claude Console',
|
||
oauthSetupToken: 'OAuth / Setup Token',
|
||
addMethod: '添加方式',
|
||
setupTokenLongLived: 'Setup Token(长期有效)',
|
||
baseUrl: 'Base URL',
|
||
baseUrlHint: '留空使用官方 Anthropic API',
|
||
apiKeyRequired: 'API Key *',
|
||
apiKeyPlaceholder: 'sk-ant-api03-...',
|
||
apiKeyHint: '您的 Claude Console API Key',
|
||
modelRestriction: '模型限制(可选)',
|
||
modelWhitelist: '模型白名单',
|
||
modelMapping: '模型映射',
|
||
selectAllowedModels: '选择允许的模型。留空则支持所有模型。',
|
||
mapRequestModels: '将请求模型映射到实际模型。左边是请求的模型,右边是发送到 API 的实际模型。',
|
||
selectedModels: '已选择 {count} 个模型',
|
||
supportsAllModels: '(支持所有模型)',
|
||
requestModel: '请求模型',
|
||
actualModel: '实际模型',
|
||
addMapping: '添加映射',
|
||
mappingExists: '模型 {model} 的映射已存在',
|
||
customErrorCodes: '自定义错误码',
|
||
customErrorCodesHint: '仅对选中的错误码停止调度',
|
||
customErrorCodesWarning: '仅选中的错误码会停止调度,其他错误将返回 500。',
|
||
selectedErrorCodes: '已选择',
|
||
noneSelectedUsesDefault: '未选择(使用默认策略)',
|
||
enterErrorCode: '输入错误码 (100-599)',
|
||
invalidErrorCode: '请输入有效的 HTTP 错误码 (100-599)',
|
||
errorCodeExists: '该错误码已被选中',
|
||
interceptWarmupRequests: '拦截预热请求',
|
||
interceptWarmupRequestsDesc: '启用后,标题生成等预热请求将返回 mock 响应,不消耗上游 token',
|
||
proxy: '代理',
|
||
noProxy: '无代理',
|
||
concurrency: '并发数',
|
||
priority: '优先级',
|
||
priorityHint: '优先级越高的账号优先使用',
|
||
higherPriorityFirst: '数值越高优先级越高',
|
||
creating: '创建中...',
|
||
updating: '更新中...',
|
||
accountCreated: '账号创建成功',
|
||
accountUpdated: '账号更新成功',
|
||
failedToCreate: '创建账号失败',
|
||
failedToUpdate: '更新账号失败',
|
||
pleaseEnterAccountName: '请输入账号名称',
|
||
pleaseEnterApiKey: '请输入 API Key',
|
||
apiKeyIsRequired: 'API Key 是必需的',
|
||
leaveEmptyToKeep: '留空以保持当前密钥',
|
||
// OAuth flow
|
||
oauth: {
|
||
title: 'Claude 账号授权',
|
||
authMethod: '授权方式',
|
||
manualAuth: '手动授权',
|
||
cookieAutoAuth: 'Cookie 自动授权',
|
||
cookieAutoAuthDesc: '使用 claude.ai sessionKey 自动完成 OAuth 授权,无需手动打开浏览器。',
|
||
sessionKey: 'sessionKey',
|
||
keysCount: '{count} 个密钥',
|
||
batchCreateAccounts: '将批量创建 {count} 个账号',
|
||
sessionKeyPlaceholder:
|
||
'每行一个 sessionKey,例如:\nsk-ant-sid01-xxxxx...\nsk-ant-sid01-yyyyy...',
|
||
sessionKeyPlaceholderSingle: 'sk-ant-sid01-xxxxx...',
|
||
howToGetSessionKey: '如何获取 sessionKey',
|
||
step1: '在浏览器中登录 <strong>claude.ai</strong>',
|
||
step2: '按 <kbd>F12</kbd> 打开开发者工具',
|
||
step3: '切换到 <strong>Application</strong> 标签',
|
||
step4: '找到 <strong>Cookies</strong> → <strong>https://claude.ai</strong>',
|
||
step5: '找到 <strong>sessionKey</strong> 所在行',
|
||
step6: '复制 <strong>Value</strong> 列的值',
|
||
sessionKeyFormat: 'sessionKey 通常以 <code>sk-ant-sid01-</code> 开头',
|
||
startAutoAuth: '开始自动授权',
|
||
authorizing: '授权中...',
|
||
followSteps: '按照以下步骤授权您的 Claude 账号:',
|
||
step1GenerateUrl: '点击下方按钮生成授权 URL',
|
||
generateAuthUrl: '生成授权 URL',
|
||
generating: '生成中...',
|
||
regenerate: '重新生成',
|
||
step2OpenUrl: '在浏览器中打开 URL 并完成授权',
|
||
openUrlDesc: '在新标签页中打开授权 URL,登录您的 Claude 账号并授权。',
|
||
proxyWarning:
|
||
'<strong>注意:</strong>如果您配置了代理,请确保浏览器使用相同的代理访问授权页面。',
|
||
step3EnterCode: '输入授权码',
|
||
authCodeDesc: '授权完成后,页面会显示一个 <strong>授权码</strong>。复制并粘贴到下方:',
|
||
authCode: '授权码',
|
||
authCodePlaceholder: '粘贴 Claude 页面的授权码...',
|
||
authCodeHint: '粘贴从 Claude 页面复制的授权码',
|
||
completeAuth: '完成授权',
|
||
verifying: '验证中...',
|
||
pleaseEnterSessionKey: '请输入至少一个有效的 sessionKey',
|
||
authFailed: '授权失败',
|
||
cookieAuthFailed: 'Cookie 授权失败',
|
||
keyAuthFailed: '密钥 {index}: {error}',
|
||
successCreated: '成功创建 {count} 个账号',
|
||
// OpenAI specific
|
||
openai: {
|
||
title: 'OpenAI 账户授权',
|
||
followSteps: '请按照以下步骤完成 OpenAI 账户的授权:',
|
||
step1GenerateUrl: '点击下方按钮生成授权链接',
|
||
generateAuthUrl: '生成授权链接',
|
||
step2OpenUrl: '在浏览器中打开链接并完成授权',
|
||
openUrlDesc: '请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。',
|
||
importantNotice:
|
||
'<strong>重要提示:</strong>授权后页面可能会加载较长时间,请耐心等待。当浏览器地址栏变为 <code>http://localhost...</code> 开头时,表示授权已完成。',
|
||
step3EnterCode: '输入授权链接或 Code',
|
||
authCodeDesc:
|
||
'授权完成后,当页面地址变为 <code>http://localhost:xxx/auth/callback?code=...</code> 时:',
|
||
authCode: '授权链接或 Code',
|
||
authCodePlaceholder:
|
||
'方式1:复制完整的链接\n(http://localhost:xxx/auth/callback?code=...)\n方式2:仅复制 code 参数的值',
|
||
authCodeHint: '您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别',
|
||
},
|
||
},
|
||
// Re-Auth Modal
|
||
reAuthorizeAccount: '重新授权账号',
|
||
claudeCodeAccount: 'Claude Code 账号',
|
||
openaiAccount: 'OpenAI 账号',
|
||
inputMethod: '输入方式',
|
||
reAuthorizedSuccess: '账号重新授权成功',
|
||
// Test Modal
|
||
testAccountConnection: '测试账号连接',
|
||
account: '账号',
|
||
readyToTest: '准备测试。点击"开始测试"按钮开始...',
|
||
connectingToApi: '连接 API 中...',
|
||
testCompleted: '测试完成!',
|
||
connectedToApi: '已连接到 API',
|
||
usingModel: '使用模型:{model}',
|
||
sendingTestMessage: '发送测试消息:"hi"',
|
||
response: '响应:',
|
||
startTest: '开始测试',
|
||
retry: '重试',
|
||
copyOutput: '复制输出',
|
||
startingTestForAccount: '开始测试账号:{name}',
|
||
testAccountTypeLabel: '账号类型:{type}',
|
||
selectTestModel: '选择测试模型',
|
||
testModel: 'claude-sonnet-4-5-20250929',
|
||
testPrompt: '提示词:"hi"',
|
||
// Stats Modal
|
||
viewStats: '查看统计',
|
||
usageStatistics: '使用统计',
|
||
last30DaysUsage: '近30天使用统计(日均基于实际使用天数)',
|
||
stats: {
|
||
totalCost: '30天总费用',
|
||
accumulatedCost: '累计成本',
|
||
standardCost: '标准计费',
|
||
totalRequests: '30天总请求',
|
||
totalCalls: '累计调用次数',
|
||
avgDailyCost: '日均费用',
|
||
basedOnActualDays: '基于 {days} 天实际使用',
|
||
avgDailyRequests: '日均请求',
|
||
avgDailyUsage: '平均每日调用',
|
||
todayOverview: '今日概览',
|
||
cost: '费用',
|
||
requests: '请求',
|
||
highestCostDay: '最高费用日',
|
||
highestRequestDay: '最高请求日',
|
||
date: '日期',
|
||
accumulatedTokens: '累计 Token',
|
||
totalTokens: '30天总计',
|
||
dailyAvgTokens: '日均 Token',
|
||
performance: '性能',
|
||
avgResponseTime: '平均响应',
|
||
daysActive: '活跃天数',
|
||
recentActivity: '最近统计',
|
||
todayRequests: '今日请求',
|
||
todayTokens: '今日 Token',
|
||
todayCost: '今日费用',
|
||
usageTrend: '30天费用与请求趋势',
|
||
noData: '该账号暂无使用数据',
|
||
},
|
||
},
|
||
|
||
// Proxies Management
|
||
proxies: {
|
||
title: 'IP管理',
|
||
description: '管理代理服务器配置',
|
||
createProxy: '添加代理',
|
||
editProxy: '编辑代理',
|
||
deleteProxy: '删除代理',
|
||
deleteConfirmMessage: "确定要删除代理 '{name}' 吗?",
|
||
testProxy: '测试代理',
|
||
columns: {
|
||
name: '名称',
|
||
protocol: '协议',
|
||
address: '地址',
|
||
priority: '优先级',
|
||
status: '状态',
|
||
lastCheck: '最近检测',
|
||
actions: '操作',
|
||
},
|
||
protocols: {
|
||
http: 'HTTP',
|
||
https: 'HTTPS',
|
||
socks5: 'SOCKS5',
|
||
},
|
||
statuses: {
|
||
active: '正常',
|
||
inactive: '停用',
|
||
error: '错误',
|
||
},
|
||
form: {
|
||
nameLabel: '名称',
|
||
namePlaceholder: '请输入代理名称',
|
||
protocolLabel: '协议',
|
||
selectProtocol: '选择协议',
|
||
hostLabel: '主机',
|
||
hostPlaceholder: '请输入主机地址',
|
||
portLabel: '端口',
|
||
portPlaceholder: '请输入端口',
|
||
usernameLabel: '用户名(可选)',
|
||
usernamePlaceholder: '请输入用户名',
|
||
passwordLabel: '密码(可选)',
|
||
passwordPlaceholder: '请输入密码',
|
||
priorityLabel: '优先级',
|
||
statusLabel: '状态',
|
||
},
|
||
filters: {
|
||
protocol: '协议',
|
||
allProtocols: '全部协议',
|
||
status: '状态',
|
||
allStatuses: '全部状态',
|
||
},
|
||
// Additional keys used in ProxiesView
|
||
allProtocols: '全部协议',
|
||
allStatus: '全部状态',
|
||
searchProxies: '搜索代理...',
|
||
name: '名称',
|
||
protocol: '协议',
|
||
host: '主机',
|
||
port: '端口',
|
||
username: '用户名(可选)',
|
||
password: '密码(可选)',
|
||
status: '状态',
|
||
enterProxyName: '请输入代理名称',
|
||
optionalAuth: '可选认证信息',
|
||
leaveEmptyToKeep: '留空保持不变',
|
||
noProxiesYet: '暂无代理',
|
||
createFirstProxy: '添加您的第一个代理以开始使用。',
|
||
testConnection: '测试连接',
|
||
batchTest: '批量测试',
|
||
testFailed: '失败',
|
||
// Batch import
|
||
standardAdd: '标准添加',
|
||
batchAdd: '快捷添加',
|
||
batchInput: '代理列表',
|
||
batchInputPlaceholder:
|
||
"每行输入一个代理,支持以下格式:\nsocks5://user:pass{'@'}192.168.1.1:1080\nhttp://192.168.1.1:8080\nhttps://user:pass{'@'}proxy.example.com:443",
|
||
batchInputHint: "支持 http、https、socks5 协议,格式:协议://[用户名:密码{'@'}]主机:端口",
|
||
parsedCount: '有效 {count} 个',
|
||
invalidCount: '无效 {count} 个',
|
||
duplicateCount: '重复 {count} 个',
|
||
importing: '导入中...',
|
||
importProxies: '导入 {count} 个代理',
|
||
batchImportSuccess: '成功导入 {created} 个代理,跳过 {skipped} 个重复',
|
||
batchImportAllSkipped: '全部 {skipped} 个代理已存在,跳过导入',
|
||
failedToImport: '批量导入失败',
|
||
// Other messages
|
||
saving: '保存中...',
|
||
testing: '测试中...',
|
||
creating: '创建中...',
|
||
updating: '更新中...',
|
||
noProxies: '暂无代理',
|
||
noProxiesDescription: '添加代理服务器以增强 API 访问稳定性。',
|
||
proxyCreated: '代理添加成功',
|
||
proxyUpdated: '代理更新成功',
|
||
proxyDeleted: '代理删除成功',
|
||
proxyWorking: '代理连接正常',
|
||
proxyWorkingWithLatency: '代理连接正常,延迟 {latency}ms',
|
||
proxyTestFailed: '代理测试失败',
|
||
proxyCreatedSuccess: '代理添加成功',
|
||
proxyUpdatedSuccess: '代理更新成功',
|
||
proxyDeletedSuccess: '代理删除成功',
|
||
testSuccess: '代理测试通过',
|
||
failedToLoad: '加载代理列表失败',
|
||
failedToSave: '保存代理失败',
|
||
failedToDelete: '删除代理失败',
|
||
failedToCreate: '创建代理失败',
|
||
failedToUpdate: '更新代理失败',
|
||
failedToTest: '测试代理失败',
|
||
deleteConfirm: "确定要删除代理 '{name}' 吗?使用此代理的账号将被移除代理设置。",
|
||
},
|
||
|
||
// Redeem Codes Management
|
||
redeem: {
|
||
title: '兑换码管理',
|
||
description: '生成和管理兑换码',
|
||
generateCodes: '生成兑换码',
|
||
columns: {
|
||
code: '兑换码',
|
||
type: '类型',
|
||
value: '面值',
|
||
status: '状态',
|
||
usedBy: '使用者',
|
||
usedAt: '使用时间',
|
||
createdAt: '创建时间',
|
||
actions: '操作',
|
||
},
|
||
types: {
|
||
balance: '余额',
|
||
concurrency: '并发数',
|
||
subscription: '订阅',
|
||
},
|
||
// 用于选择器和筛选器的直接键
|
||
balance: '余额',
|
||
concurrency: '并发数',
|
||
subscription: '订阅',
|
||
allTypes: '全部类型',
|
||
allStatus: '全部状态',
|
||
unused: '未使用',
|
||
used: '已使用',
|
||
searchCodes: '搜索兑换码...',
|
||
exportCsv: '导出 CSV',
|
||
deleteAllUnused: '删除全部未使用',
|
||
deleteCodeConfirm: '确定要删除此兑换码吗?此操作无法撤销。',
|
||
deleteAllUnusedConfirm: '确定要删除全部未使用的兑换码吗?此操作无法撤销。',
|
||
deleteAll: '全部删除',
|
||
generateCodesTitle: '生成兑换码',
|
||
generatedSuccessfully: '生成成功',
|
||
codesCreated: '已创建 {count} 个兑换码',
|
||
codeType: '类型',
|
||
amount: '金额 ($)',
|
||
value: '面值',
|
||
count: '数量',
|
||
generate: '生成',
|
||
copyAll: '全部复制',
|
||
download: '下载',
|
||
codesExported: '兑换码导出成功',
|
||
codeDeleted: '兑换码删除成功',
|
||
codesDeleted: '成功删除 {count} 个未使用的兑换码',
|
||
noUnusedCodes: '没有未使用的兑换码可删除',
|
||
userPrefix: '用户 #{id}',
|
||
failedToExport: '导出兑换码失败',
|
||
failedToDeleteUnused: '删除未使用的兑换码失败',
|
||
failedToCopy: '复制失败',
|
||
selectGroup: '选择分组',
|
||
selectGroupPlaceholder: '选择订阅分组',
|
||
validityDays: '有效天数',
|
||
groupRequired: '请选择订阅分组',
|
||
days: '天',
|
||
statuses: {
|
||
unused: '未使用',
|
||
used: '已使用',
|
||
expired: '已过期',
|
||
disabled: '已禁用',
|
||
},
|
||
form: {
|
||
typeLabel: '类型',
|
||
selectType: '选择类型',
|
||
valueLabel: '面值',
|
||
valuePlaceholder: '请输入面值',
|
||
balanceHint: '余额金额(美元)',
|
||
concurrencyHint: '并发数增量',
|
||
countLabel: '数量',
|
||
countPlaceholder: '请输入数量',
|
||
countHint: '要生成的兑换码数量',
|
||
prefixLabel: '前缀(可选)',
|
||
prefixPlaceholder: '例如:GIFT',
|
||
expiresLabel: '过期时间(可选)',
|
||
},
|
||
filters: {
|
||
type: '类型',
|
||
allTypes: '全部类型',
|
||
status: '状态',
|
||
allStatuses: '全部状态',
|
||
search: '搜索兑换码',
|
||
},
|
||
generating: '生成中...',
|
||
copyCode: '复制',
|
||
copied: '已复制!',
|
||
disableCode: '禁用',
|
||
enableCode: '启用',
|
||
deleteCode: '删除',
|
||
deleteConfirmMessage: '确定要删除此兑换码吗?',
|
||
noCodes: '暂无兑换码',
|
||
noCodesDescription: '生成兑换码以向用户分发余额或并发数。',
|
||
codesGeneratedSuccess: '兑换码生成成功,共 {count} 个',
|
||
codeDisabledSuccess: '兑换码已禁用',
|
||
codeEnabledSuccess: '兑换码已启用',
|
||
codeDeletedSuccess: '兑换码删除成功',
|
||
failedToLoad: '加载兑换码列表失败',
|
||
failedToGenerate: '生成兑换码失败',
|
||
failedToUpdate: '更新兑换码失败',
|
||
failedToDelete: '删除兑换码失败',
|
||
},
|
||
|
||
// Usage Records
|
||
usage: {
|
||
title: '使用记录',
|
||
description: '查看和管理所有用户的使用记录',
|
||
userFilter: '用户',
|
||
searchUserPlaceholder: '按邮箱搜索用户...',
|
||
selectedUser: '已选择',
|
||
user: '用户',
|
||
failedToLoad: '加载使用记录失败',
|
||
},
|
||
|
||
// Settings
|
||
settings: {
|
||
title: '系统设置',
|
||
description: '管理注册、邮箱验证、默认值和 SMTP 设置',
|
||
registration: {
|
||
title: '注册设置',
|
||
description: '控制用户注册和验证',
|
||
enableRegistration: '开放注册',
|
||
enableRegistrationHint: '允许新用户注册',
|
||
emailVerification: '邮箱验证',
|
||
emailVerificationHint: '新用户注册时需要验证邮箱',
|
||
},
|
||
turnstile: {
|
||
title: 'Cloudflare Turnstile',
|
||
description: '登录和注册的机器人防护',
|
||
enableTurnstile: '启用 Turnstile',
|
||
enableTurnstileHint: '需要 Cloudflare Turnstile 验证',
|
||
siteKey: '站点密钥',
|
||
secretKey: '私密密钥',
|
||
siteKeyHint: '从 Cloudflare Dashboard 获取',
|
||
secretKeyHint: '服务端验证密钥(请保密)',
|
||
},
|
||
defaults: {
|
||
title: '用户默认设置',
|
||
description: '新用户的默认值',
|
||
defaultBalance: '默认余额',
|
||
defaultBalanceHint: '新用户的初始余额',
|
||
defaultConcurrency: '默认并发数',
|
||
defaultConcurrencyHint: '新用户的最大并发请求数',
|
||
},
|
||
site: {
|
||
title: '站点设置',
|
||
description: '自定义站点品牌',
|
||
siteName: '站点名称',
|
||
siteNameHint: '显示在邮件和页面标题中',
|
||
siteSubtitle: '站点副标题',
|
||
siteSubtitleHint: '显示在登录和注册页面',
|
||
apiBaseUrl: 'API 端点地址',
|
||
apiBaseUrlHint: '用于"使用密钥"和"导入到 CC Switch"功能,留空则使用当前站点地址',
|
||
contactInfo: '客服联系方式',
|
||
contactInfoPlaceholder: '例如:QQ: 123456789',
|
||
contactInfoHint: '填写客服联系方式,将展示在兑换页面、个人资料等位置',
|
||
docUrl: '文档链接',
|
||
docUrlHint: '文档网站的链接。留空则隐藏文档链接。',
|
||
siteLogo: '站点Logo',
|
||
uploadImage: '上传图片',
|
||
remove: '移除',
|
||
logoHint: 'PNG、JPG 或 SVG 格式,最大 300KB。建议:80x80px 正方形图片。',
|
||
logoSizeError: '图片大小超过 300KB 限制({size}KB)',
|
||
logoTypeError: '请选择图片文件',
|
||
logoReadError: '读取图片文件失败',
|
||
},
|
||
smtp: {
|
||
title: 'SMTP 设置',
|
||
description: '配置用于发送验证码的邮件服务',
|
||
testConnection: '测试连接',
|
||
testing: '测试中...',
|
||
host: 'SMTP 主机',
|
||
port: 'SMTP 端口',
|
||
username: 'SMTP 用户名',
|
||
password: 'SMTP 密码',
|
||
passwordHint: '留空以保留现有密码',
|
||
fromEmail: '发件人邮箱',
|
||
fromName: '发件人名称',
|
||
useTls: '使用 TLS',
|
||
useTlsHint: '为 SMTP 连接启用 TLS 加密',
|
||
},
|
||
testEmail: {
|
||
title: '发送测试邮件',
|
||
description: '发送测试邮件以验证 SMTP 配置',
|
||
recipientEmail: '收件人邮箱',
|
||
sendTestEmail: '发送测试邮件',
|
||
sending: '发送中...',
|
||
enterRecipientHint: '请输入收件人邮箱地址',
|
||
},
|
||
adminApiKey: {
|
||
title: '管理员 API Key',
|
||
description: '用于外部系统集成的全局 API Key,拥有完整的管理员权限',
|
||
notConfigured: '尚未配置管理员 API Key',
|
||
configured: '管理员 API Key 已启用',
|
||
currentKey: '当前密钥',
|
||
regenerate: '重新生成',
|
||
regenerating: '生成中...',
|
||
delete: '删除',
|
||
deleting: '删除中...',
|
||
create: '创建密钥',
|
||
creating: '创建中...',
|
||
regenerateConfirm: '确定要重新生成吗?当前密钥将立即失效。',
|
||
deleteConfirm: '确定要删除管理员 API Key 吗?外部集成将停止工作。',
|
||
keyGenerated: '新的管理员 API Key 已生成',
|
||
keyDeleted: '管理员 API Key 已删除',
|
||
copyKey: '复制密钥',
|
||
keyCopied: '密钥已复制到剪贴板',
|
||
keyWarning: '此密钥仅显示一次,请立即复制保存。',
|
||
securityWarning: '警告:此密钥拥有完整的管理员权限,请妥善保管。',
|
||
usage: '使用方法:在请求头中添加 x-api-key: <your-admin-api-key>',
|
||
},
|
||
saveSettings: '保存设置',
|
||
saving: '保存中...',
|
||
settingsSaved: '设置保存成功',
|
||
smtpConnectionSuccess: 'SMTP 连接成功',
|
||
testEmailSent: '测试邮件发送成功',
|
||
failedToLoad: '加载设置失败',
|
||
failedToSave: '保存设置失败',
|
||
failedToTestSmtp: 'SMTP 连接测试失败',
|
||
failedToSendTestEmail: '发送测试邮件失败',
|
||
},
|
||
},
|
||
|
||
// Subscription Progress (Header component)
|
||
subscriptionProgress: {
|
||
title: '我的订阅',
|
||
viewDetails: '查看订阅详情',
|
||
activeCount: '{count} 个有效订阅',
|
||
daily: '每日',
|
||
weekly: '每周',
|
||
monthly: '每月',
|
||
daysRemaining: '剩余 {days} 天',
|
||
expired: '已过期',
|
||
expiresToday: '今天到期',
|
||
expiresTomorrow: '明天到期',
|
||
viewAll: '查看全部订阅',
|
||
noSubscriptions: '暂无有效订阅',
|
||
},
|
||
|
||
// Version Badge
|
||
version: {
|
||
currentVersion: '当前版本',
|
||
latestVersion: '最新版本',
|
||
upToDate: '已是最新版本',
|
||
updateAvailable: '有新版本可用!',
|
||
releaseNotes: '更新日志',
|
||
noReleaseNotes: '暂无更新日志',
|
||
viewUpdate: '查看更新',
|
||
viewRelease: '查看发布',
|
||
viewChangelog: '查看更新日志',
|
||
refresh: '刷新',
|
||
sourceMode: '源码构建',
|
||
sourceModeHint: '源码构建请使用 git pull 更新',
|
||
updateNow: '立即更新',
|
||
updating: '正在更新...',
|
||
updateComplete: '更新完成',
|
||
updateFailed: '更新失败',
|
||
restartRequired: '请重启服务以应用更新',
|
||
restartNow: '立即重启',
|
||
restarting: '正在重启...',
|
||
retry: '重试',
|
||
},
|
||
|
||
// User Subscriptions Page
|
||
userSubscriptions: {
|
||
title: '我的订阅',
|
||
description: '查看您的订阅计划和用量',
|
||
noActiveSubscriptions: '暂无有效订阅',
|
||
noActiveSubscriptionsDesc: '您没有任何有效订阅。请联系管理员获取订阅。',
|
||
status: {
|
||
active: '有效',
|
||
expired: '已过期',
|
||
revoked: '已撤销',
|
||
},
|
||
usage: '用量',
|
||
expires: '到期时间',
|
||
noExpiration: '无到期时间',
|
||
unlimited: '无限制',
|
||
daily: '每日',
|
||
weekly: '每周',
|
||
monthly: '每月',
|
||
daysRemaining: '剩余 {days} 天',
|
||
expiresOn: '{date} 到期',
|
||
resetIn: '{time} 后重置',
|
||
windowNotActive: '等待首次使用',
|
||
usageOf: '已用 {used} / {limit}',
|
||
},
|
||
}
|