sk-ant-sid01- 开头',
startAutoAuth: '开始自动授权',
authorizing: '授权中...',
followSteps: '按照以下步骤授权您的 Claude 账号:',
step1GenerateUrl: '点击下方按钮生成授权 URL',
generateAuthUrl: '生成授权 URL',
generating: '生成中...',
regenerate: '重新生成',
step2OpenUrl: '在浏览器中打开 URL 并完成授权',
openUrlDesc: '在新标签页中打开授权 URL,登录您的 Claude 账号并授权。',
proxyWarning:
'注意:如果您配置了代理,请确保浏览器使用相同的代理访问授权页面。',
step3EnterCode: '输入授权码',
authCodeDesc: '授权完成后,页面会显示一个 授权码。复制并粘贴到下方:',
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:
'重要提示:授权后页面可能会加载较长时间,请耐心等待。当浏览器地址栏变为 http://localhost... 开头时,表示授权已完成。',
step3EnterCode: '输入授权链接或 Code',
authCodeDesc:
'授权完成后,当页面地址变为 http://localhost:xxx/auth/callback?code=... 时:',
authCode: '授权链接或 Code',
authCodePlaceholder:
'方式1:复制完整的链接\n(http://localhost:xxx/auth/callback?code=...)\n方式2:仅复制 code 参数的值',
authCodeHint: '您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别'
},
// Gemini specific
gemini: {
title: 'Gemini 账户授权',
followSteps: '请按照以下步骤完成 Gemini 账户的授权:',
step1GenerateUrl: '生成授权链接',
generateAuthUrl: '生成授权链接',
projectIdLabel: 'Project ID(可选)',
projectIdPlaceholder: '例如:my-gcp-project 或 cloud-ai-companion-xxxxx',
projectIdHint: '留空则在兑换授权码后自动探测;若自动探测失败,可填写后重新生成授权链接再授权。',
howToGetProjectId: '如何获取',
step2OpenUrl: '在浏览器中打开链接并完成授权',
openUrlDesc: '请在新标签页中打开授权链接,登录您的 Google 账户并授权。',
step3EnterCode: '输入回调链接或 Code',
authCodeDesc: '授权完成后,复制浏览器跳转后的回调链接(推荐)或仅复制 code,粘贴到下方即可。',
authCode: '回调链接或 Code',
authCodePlaceholder: '方式1(推荐):粘贴回调链接\n方式2:仅粘贴 code 参数的值',
authCodeHint: '系统会自动从链接中解析 code/state。',
redirectUri: 'Redirect URI',
redirectUriHint: '需要在 Google OAuth Client 中配置,且必须与此处完全一致。',
confirmRedirectUri: '我已在 Google OAuth Client 中配置了该 Redirect URI(必须完全一致)',
invalidRedirectUri: 'Redirect URI 必须是合法的 http(s) URL',
redirectUriNotConfirmed: '请确认 Redirect URI 已在 Google OAuth Client 中正确配置',
missingRedirectUri: '缺少 Redirect URI',
failedToGenerateUrl: '生成 Gemini 授权链接失败',
missingExchangeParams: '缺少 code / session_id / state',
failedToExchangeCode: 'Gemini 授权码兑换失败',
missingProjectId: 'GCP Project ID 获取失败:您的 Google 账号未关联有效的 GCP 项目。请前往 Google Cloud Console 激活 GCP 并绑定信用卡,或在授权时手动填写 Project ID。',
modelPassthrough: 'Gemini 直接转发模型',
modelPassthroughDesc: '所有模型请求将直接转发至 Gemini API,不进行模型限制或映射。',
stateWarningTitle: '提示',
stateWarningDesc: '建议粘贴完整回调链接(包含 code 和 state)。',
oauthTypeLabel: 'OAuth 类型',
needsProjectId: '内置授权(Code Assist)',
needsProjectIdDesc: '需要 GCP 项目与 Project ID',
noProjectIdNeeded: '自定义授权(AI Studio)',
noProjectIdNeededDesc: '需管理员配置 OAuth Client',
aiStudioNotConfiguredShort: '未配置',
aiStudioNotConfiguredTip: 'AI Studio OAuth 未配置:请先设置 GEMINI_OAUTH_CLIENT_ID / GEMINI_OAUTH_CLIENT_SECRET,并在 Google OAuth Client 添加 Redirect URI:http://localhost:1455/auth/callback(Consent Screen scopes 需包含 https://www.googleapis.com/auth/generative-language.retriever)',
aiStudioNotConfigured: 'AI Studio OAuth 未配置:请先设置 GEMINI_OAUTH_CLIENT_ID / GEMINI_OAUTH_CLIENT_SECRET,并在 Google OAuth Client 添加 Redirect URI:http://localhost:1455/auth/callback'
},
// Antigravity specific
antigravity: {
title: 'Antigravity 账户授权',
followSteps: '请按照以下步骤完成 Antigravity 账户的授权:',
step1GenerateUrl: '生成授权链接',
generateAuthUrl: '生成授权链接',
step2OpenUrl: '在浏览器中打开链接并完成授权',
openUrlDesc: '请在新标签页中打开授权链接,登录您的 Google 账户并授权。',
importantNotice:
'重要提示:授权后页面可能会加载较长时间,请耐心等待。当浏览器地址栏变为 http://localhost... 开头时,表示授权已完成。',
step3EnterCode: '输入授权链接或 Code',
authCodeDesc:
'授权完成后,当页面地址变为 http://localhost:xxx/auth/callback?code=... 时:',
authCode: '授权链接或 Code',
authCodePlaceholder:
'方式1:复制完整的链接\n(http://localhost:xxx/auth/callback?code=...)\n方式2:仅复制 code 参数的值',
authCodeHint: '您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别',
failedToGenerateUrl: '生成 Antigravity 授权链接失败',
missingExchangeParams: '缺少 code / session_id / state',
failedToExchangeCode: 'Antigravity 授权码兑换失败'
}
},
// Gemini specific (platform-wide)
gemini: {
helpButton: '使用帮助',
helpDialog: {
title: 'Gemini 使用指南',
apiKeySection: 'API Key 相关链接'
},
modelPassthrough: 'Gemini 直接转发模型',
modelPassthroughDesc: '所有模型请求将直接转发至 Gemini API,不进行模型限制或映射。',
baseUrlHint: '留空使用官方 Gemini API',
apiKeyHint: '您的 Gemini API Key(以 AIza 开头)',
tier: {
label: '账号等级',
hint: '提示:系统会优先尝试自动识别账号等级;若自动识别不可用或失败,则使用你选择的等级作为回退(本地模拟配额)。',
aiStudioHint: 'AI Studio 的配额是按模型分别限流(Pro/Flash 独立)。若已绑卡(按量付费),请选 Pay-as-you-go。',
googleOne: {
free: 'Google One Free',
pro: 'Google One Pro',
ultra: 'Google One Ultra'
},
gcp: {
standard: 'GCP Standard',
enterprise: 'GCP Enterprise'
},
aiStudio: {
free: 'Google AI Free',
paid: 'Google AI Pay-as-you-go'
}
},
accountType: {
oauthTitle: 'OAuth 授权(Gemini)',
oauthDesc: '使用 Google 账号授权,并选择 OAuth 子类型。',
apiKeyTitle: 'API 密钥(AI Studio)',
apiKeyDesc: '最快接入方式,使用 AIza API Key。',
apiKeyNote: '适合轻量测试。免费层限流严格,数据可能用于训练。',
apiKeyLink: '获取 API Key',
quotaLink: '配额说明'
},
oauthType: {
builtInTitle: '内置授权(Gemini CLI / Code Assist)',
builtInDesc: '使用 Google 内置客户端 ID,无需管理员配置。',
builtInRequirement: '需要 GCP 项目并填写 Project ID。',
gcpProjectLink: '创建项目',
customTitle: '自定义授权(AI Studio OAuth)',
customDesc: '使用管理员预设的 OAuth 客户端,适合组织管理。',
customRequirement: '需管理员配置 Client ID 并加入测试用户白名单。',
badges: {
recommended: '推荐',
highConcurrency: '高并发',
noAdmin: '无需管理员配置',
orgManaged: '组织管理',
adminRequired: '需要管理员'
}
},
setupGuide: {
title: 'Gemini 使用准备',
checklistTitle: '准备工作',
checklistItems: {
usIp: '使用美国 IP,并确保账号归属地为美国。',
age: '账号需满 18 岁。'
},
activationTitle: '服务激活',
activationItems: {
geminiWeb: '激活 Gemini Web,避免 User not initialized。',
gcpProject: '激活 GCP 项目,获取 Code Assist 所需 Project ID。'
},
links: {
countryCheck: '检查归属地',
geminiWebActivation: '激活 Gemini Web',
gcpProject: '打开 GCP 控制台'
}
},
quotaPolicy: {
title: 'Gemini 配额与限流政策(参考)',
note: '注意:Gemini 官方未提供用量查询接口。此处显示的“每日配额”是由系统根据账号等级模拟计算的估算值,仅供调度参考,请以 Google 官方实际报错为准。',
columns: {
channel: '授权通道',
account: '账号状态',
limits: '限流政策',
docs: '官方文档'
},
docs: {
codeAssist: 'Code Assist 配额',
aiStudio: 'AI Studio 定价',
vertex: 'Vertex AI 配额'
},
simulatedNote: '本地模拟配额,仅供参考',
rows: {
googleOne: {
channel: 'Google One OAuth(个人版 / Code Assist for Individuals)',
limitsFree: '共享池:1000 RPD / 60 RPM(不分模型)',
limitsPro: '共享池:1500 RPD / 120 RPM(不分模型)',
limitsUltra: '共享池:2000 RPD / 120 RPM(不分模型)'
},
gcp: {
channel: 'GCP Code Assist OAuth(企业版)',
limitsStandard: '共享池:1500 RPD / 120 RPM(不分模型)',
limitsEnterprise: '共享池:2000 RPD / 120 RPM(不分模型)'
},
cli: {
channel: 'Gemini CLI(官方 Google 登录 / Code Assist)',
free: '免费 Google 账号',
premium: 'Google One AI Premium',
limitsFree: 'RPD ~1000;RPM ~60(软限制)',
limitsPremium: 'RPD ~1500+;RPM ~60+(优先队列)'
},
gcloud: {
channel: 'GCP Code Assist(gcloud 登录)',
account: '未购买 Code Assist 订阅',
limits: 'RPD ~1000;RPM ~60(预览期)'
},
aiStudio: {
channel: 'AI Studio API Key / OAuth',
free: '未绑卡(免费层)',
paid: '已绑卡(按量付费)',
limitsFree: 'RPD 50;RPM 2(Pro)/ 15(Flash)',
limitsPaid: 'RPD 不限;RPM 1000(Pro)/ 2000(Flash)(按模型配额)'
},
customOAuth: {
channel: 'Custom OAuth Client(GCP)',
free: '项目未绑卡',
paid: '项目已绑卡',
limitsFree: 'RPD 50;RPM 2(项目配额)',
limitsPaid: 'RPD 不限;RPM 1000+(项目配额)'
}
}
},
rateLimit: {
ok: '未限流',
unlimited: '无限流',
limited: '限流 {time}',
now: '现在'
}
},
// Re-Auth Modal
reAuthorizeAccount: '重新授权账号',
claudeCodeAccount: 'Claude Code 账号',
openaiAccount: 'OpenAI 账号',
geminiAccount: 'Gemini 账号',
antigravityAccount: 'Antigravity 账号',
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: '测试模型',
testPrompt: '提示词:"hi"',
// Stats Modal
viewStats: '查看统计',
usageStatistics: '使用统计',
last30DaysUsage: '近30天使用统计(日均基于实际使用天数)',
stats: {
totalCost: '30天总费用',
accumulatedCost: '累计成本',
standardCost: '标准计费',
totalRequests: '30天总请求',
totalCalls: '累计调用次数',
avgDailyCost: '日均费用',
basedOnActualDays: '基于 {days} 天实际使用',
avgDailyRequests: '日均请求',
avgDailyUsage: '平均每日调用',
todayOverview: '今日概览',
cost: '费用',
requests: '请求',
tokens: 'Token',
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',
socks5h: 'SOCKS5H (服务端解析 DNS)'
},
columns: {
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: '天',
status: {
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: '用户',
account: '账户',
group: '分组',
requestId: '请求ID',
requestIdCopied: '请求ID已复制',
allModels: '全部模型',
allAccounts: '全部账户',
allGroups: '全部分组',
allTypes: '全部类型',
allBillingTypes: '全部计费',
inputCost: '输入成本',
outputCost: '输出成本',
cacheCreationCost: '缓存创建成本',
cacheReadCost: '缓存读取成本',
inputTokens: '输入 Token',
outputTokens: '输出 Token',
cacheCreationTokens: '缓存创建 Token',
cacheReadTokens: '缓存读取 Token',
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 获取',
cloudflareDashboard: 'Cloudflare Dashboard',
secretKeyHint: '服务端验证密钥(请保密)'
},
defaults: {
title: '用户默认设置',
description: '新用户的默认值',
defaultBalance: '默认余额',
defaultBalanceHint: '新用户的初始余额',
defaultConcurrency: '默认并发数',
defaultConcurrencyHint: '新用户的最大并发请求数'
},
site: {
title: '站点设置',
description: '自定义站点品牌',
siteName: '站点名称',
siteNameHint: '显示在邮件和页面标题中',
siteNamePlaceholder: 'Sub2API',
siteSubtitle: '站点副标题',
siteSubtitleHint: '显示在登录和注册页面',
siteSubtitlePlaceholder: '订阅转 API 转换平台',
apiBaseUrl: 'API 端点地址',
apiBaseUrlHint: '用于"使用密钥"和"导入到 CC Switch"功能,留空则使用当前站点地址',
apiBaseUrlPlaceholder: 'https://api.example.com',
contactInfo: '客服联系方式',
contactInfoPlaceholder: '例如:QQ: 123456789',
contactInfoHint: '填写客服联系方式,将展示在兑换页面、个人资料等位置',
docUrl: '文档链接',
docUrlHint: '文档网站的链接。留空则隐藏文档链接。',
docUrlPlaceholder: 'https://docs.example.com',
siteLogo: '站点Logo',
uploadImage: '上传图片',
remove: '移除',
logoHint: 'PNG、JPG 或 SVG 格式,最大 300KB。建议:80x80px 正方形图片。',
logoSizeError: '图片大小超过 300KB 限制({size}KB)',
logoTypeError: '请选择图片文件',
logoReadError: '读取图片文件失败'
},
smtp: {
title: 'SMTP 设置',
description: '配置用于发送验证码的邮件服务',
testConnection: '测试连接',
testing: '测试中...',
host: 'SMTP 主机',
hostPlaceholder: 'smtp.gmail.com',
port: 'SMTP 端口',
portPlaceholder: '587',
username: 'SMTP 用户名',
usernamePlaceholder: "your-email{'@'}gmail.com",
password: 'SMTP 密码',
passwordPlaceholder: '********',
passwordHint: '留空以保留现有密码',
fromEmail: '发件人邮箱',
fromEmailPlaceholder: "noreply{'@'}example.com",
fromName: '发件人名称',
fromNamePlaceholder: 'Sub2API',
useTls: '使用 TLS',
useTlsHint: '为 SMTP 连接启用 TLS 加密'
},
testEmail: {
title: '发送测试邮件',
description: '发送测试邮件以验证 SMTP 配置',
recipientEmail: '收件人邮箱',
recipientEmailPlaceholder: "test{'@'}example.com",
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: Sub2API 是一个强大的 AI 服务中转平台,让您轻松管理和分发 AI 服务。
🎯 核心功能:
接下来,我们将用 3 分钟带您完成首次配置 →
什么是分组?
分组是 Sub2API 的核心概念,它就像一个"服务套餐":
💡 示例:您可以创建"VIP专线"(高倍率)和"免费试用"(低倍率)两个分组
👉 点击左侧的"分组管理"开始
现在让我们创建第一个分组。
📝 提示:建议先创建一个测试分组,熟悉流程后再创建正式分组
👉 点击"创建分组"按钮
为您的分组起一个易于识别的名称。
填写完成后点击"下一步"继续
选择该分组支持的 AI 平台。
一个分组只能选择一个平台
设置该分组的计费倍率,控制用户的实际扣费。
建议测试分组设置为 1.0
控制分组的可见性和访问权限。
💡 使用场景:VIP 用户专属、内部测试、特殊客户等
确认信息无误后,点击创建按钮保存分组。
⚠️ 注意:分组创建后,平台类型不可修改,其他信息可以随时编辑
📌 下一步:创建成功后,我们将添加上游账号到这个分组
👉 点击"创建"按钮
太棒了!分组已创建成功 🎉
现在需要添加上游 AI 服务商的账号,让分组能够实际提供服务。
👉 点击左侧的"账号管理"
点击按钮开始添加您的第一个上游账号。
💡 提示:建议使用 OAuth 方式,更安全且无需手动提取密钥
👉 点击"添加账号"按钮
为账号设置一个便于识别的名称。
💡 命名建议:"Claude主账号"、"GPT备用1"、"测试账号" 等
选择该账号对应的服务商平台。
⚠️ 重要:平台必须与刚才创建的分组平台一致
选择账号的授权方式。
设置账号的调用优先级。
💡 使用场景:主账号设置高优先级,备用账号设置低优先级
关键步骤!将账号分配到刚才创建的分组。
💡 提示:请勾选刚才创建的测试分组
确认信息无误后,点击保存按钮。
📌 下一步:账号添加成功后,我们将创建 API 密钥
👉 点击"保存"按钮
恭喜!账号配置完成 🎉
最后一步,生成 API Key 来测试服务是否正常工作。
👉 点击左侧的"API 密钥"
点击按钮创建您的第一个 API Key。
💡 提示:创建后请立即复制保存,密钥只显示一次
👉 点击"创建密钥"按钮
为密钥设置一个便于管理的名称。
💡 命名建议:"测试密钥"、"生产环境"、"移动端" 等
选择刚才配置好的分组。
💡 提示:选择刚才创建的测试分组
点击创建后,系统会生成完整的 API Key。
👉 点击"创建"按钮
您好!欢迎来到 Sub2API AI 服务平台。
🎯 快速开始:
只需 1 分钟,让我们开始吧 →
在这里管理您的所有 API 访问密钥。
📌 什么是 API 密钥?
API 密钥是您访问 AI 服务的凭证,就像一把钥匙,让您的应用能够调用 AI 能力。
👉 点击进入密钥页面
点击按钮创建您的第一个 API 密钥。
💡 提示:创建后密钥只显示一次,请务必复制保存
👉 点击"创建密钥"
为密钥起一个便于识别的名称。
💡 示例:"我的第一个密钥"、"测试用" 等
选择管理员为您分配的服务分组。
📌 分组说明:
不同分组可能有不同的服务质量和计费标准,请根据需要选择。
点击确认创建您的 API 密钥。
🚀 如何使用:
将密钥配置到支持 OpenAI 接口的任何客户端(如 ChatBox、OpenCat 等),即可开始使用!
👉 点击"创建"按钮