Files
sub2api/frontend/src/i18n/locales/zh.ts
2025-12-25 10:57:04 +08:00

1489 lines
55 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

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

export default {
// 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-serviceCRS中的账号同步到当前系统不会在浏览器侧直接请求 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}',
},
}