Files
claude-relay-service/web/admin-spa/src/i18n/locales/zh-tw.js
Wangnov 26d8c98c9d feat: 完成UserUsageStatsModal和ChangeRoleModal组件国际化
- 添加用户使用统计模态框的完整国际化支持
  * 时间选择器选项(最近24小时/7天/30天/90天)
  * 统计卡片(请求数/输入Token/输出Token/总费用)
  * API Keys表格表头和状态显示
  * 使用趋势图表占位符和无数据状态

- 添加角色变更模态框的完整国际化支持
  * 角色选择表单和描述文本
  * 动态警告消息(授予/移除管理员权限)
  * 按钮状态和成功提示消息

- 更新三种语言文件(zh-cn/en/zh-tw)添加新的翻译键值
- 集成Vue I18n组合式API支持动态参数替换
- 保持响应式翻译和用户体验的一致性
2025-09-12 00:03:03 +08:00

1941 lines
78 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

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

export default {
common: {
save: '保存',
cancel: '取消',
confirm: '確認',
loading: '載入中...',
edit: '編輯',
delete: '刪除',
create: '建立',
update: '更新',
search: '搜尋',
reset: '重置',
locale: 'zh-TW'
},
language: {
zh: '簡體中文',
'zh-tw': '繁體中文',
en: 'English',
current: '當前語言',
switch: '切換語言'
},
header: {
adminPanel: '管理後台',
userMenu: '用戶選單',
logout: '退出登錄',
settings: '系統設置',
// Version related
currentVersion: '當前版本',
newVersionAvailable: '有新版本可用',
newVersion: '新版本',
hasUpdate: '有新版本',
viewUpdate: '查看更新',
checkingUpdate: '檢查更新中...',
alreadyLatest: '當前已是最新版本',
checkUpdate: '檢查更新',
// User menu items
changeAccountInfo: '修改帳戶資訊',
// Change password modal
changePasswordModal: {
title: '修改帳戶資訊',
currentUsername: '當前用戶名',
currentUsernameHint: '當前用戶名,輸入新用戶名以修改',
newUsername: '新用戶名',
newUsernamePlaceholder: '輸入新用戶名(留空保持不變)',
newUsernameHint: '留空表示不修改用戶名',
currentPassword: '當前密碼',
currentPasswordPlaceholder: '請輸入當前密碼',
newPassword: '新密碼',
newPasswordPlaceholder: '請輸入新密碼',
newPasswordHint: '密碼長度至少8位',
confirmPassword: '確認新密碼',
confirmPasswordPlaceholder: '請再次輸入新密碼',
saving: '保存中...',
save: '保存修改',
// Messages
passwordMismatch: '兩次輸入的密碼不一致',
passwordTooShort: '新密碼長度至少8位',
accountInfoChangeSuccess: '帳戶資訊修改成功,請重新登錄',
passwordChangeSuccess: '密碼修改成功,請重新登錄',
changeFailed: '修改失敗',
changePasswordFailed: '修改密碼失敗'
},
// Logout
logoutConfirm: '確定要退出登錄嗎?',
logoutSuccess: '已安全退出'
},
apiStats: {
title: 'API Key 使用統計',
tutorialTitle: '使用教學',
userLogin: '用戶登錄',
adminPanel: '管理後台',
statsQuery: '統計查詢',
tutorial: '使用教學',
timeRange: '統計時間範圍',
today: '今日',
thisMonth: '本月',
// API Key Input
usageStatsQuery: '使用統計查詢',
apiKeyDescription: '查詢您的 API Key 使用情況和統計資料',
enterApiKey: '輸入您的 API Key',
enterApiKeys: '輸入您的 API Keys每行一個或用逗號分隔',
singleMode: '單一',
aggregateMode: '彙整',
singleModeTitle: '單一模式',
aggregateModeTitle: '彙整模式',
queryButton: '查詢',
// Stats Overview
batchQuerySummary: '批次查詢概要',
apiKeyInfo: 'API Key 資訊',
queryKeysCount: '查詢 Keys 數',
activeKeysCount: '有效 Keys 數',
invalidKeysCount: '無效 Keys 數',
totalRequests: '總請求數',
totalTokens: '總 Token 數',
totalCost: '總費用',
individual: '個',
// Aggregated Stats Card
usageRatio: '使用占比',
requests: '次',
otherKeys: '其他',
keys: 'Keys',
// Model Usage Stats
modelUsageStats: '模型使用統計',
loadingModelStats: '載入模型統計資料中...',
requestCount: '次請求',
totalCost: '總費用',
inputTokens: '輸入 Token',
outputTokens: '輸出 Token',
cacheCreateTokens: '快取建立',
cacheReadTokens: '快取讀取',
noModelData: '暫無{period}模型使用資料',
// Token Distribution
tokenDistribution: 'Token 使用分佈',
inputToken: '輸入 Token',
outputToken: '輸出 Token',
cacheCreateToken: '快取建立 Token',
cacheReadToken: '快取讀取 Token',
// Limit Config
limitConfig: '限制設定',
limitConfigAggregate: '限制設定(彙整查詢模式)',
apiKeysOverview: 'API Keys 概況',
totalKeys: '總計 Keys',
activeKeys: '啟用 Keys',
aggregatedStats: '彙整統計',
dailyLimit: '日限制',
monthlyLimit: '月限制',
usageToday: '今日使用',
usageThisMonth: '本月使用',
remaining: '剩餘',
// Stats Overview - Additional keys
name: '名稱',
status: '狀態',
permissions: '權限',
createdAt: '建立時間',
expiresAt: '過期時間',
active: '活躍',
inactive: '已停用',
notActivated: '未啓動',
expired: '已過期',
neverExpires: '永不過期',
allModels: '全部模型',
unknown: '未知',
none: '無',
formatError: '格式錯誤',
usageStatsOverview: '使用統計概覽',
keyContribution: '各 Key 貢獻占比',
firstUseDays: '首次使用後{days}天過期',
todayRequests: '今日請求數',
todayTokens: '今日Token數',
todayCost: '今日費用',
todayInputTokens: '今日輸入Token',
monthlyRequests: '本月請求數',
monthlyTokens: '本月Token數',
monthlyCost: '本月費用',
monthlyInputTokens: '本月輸入Token',
// Limit Config - Additional keys
dailyCostLimit: '每日費用限制',
concurrencyLimit: '並發限制',
modelLimit: '模型限制',
clientLimit: '用戶端限制',
restrictedModelsCount: '限制 {count} 個模型',
allowAllModels: '允許所有模型',
restrictedClientsCount: '限制 {count} 個用戶端',
allowAllClients: '允許所有用戶端',
detailedLimitInfo: '詳細限制資訊',
restrictedModelsList: '受限模型清單',
restrictedModelsNote: '此 API Key 不能存取以上列出的模型',
allowedClientsList: '允許的用戶端',
allowedClientsNote: '此 API Key 只能被以上列出的用戶端使用',
timeWindowLimit: '時間視窗限制',
aggregateStatsNote: '每個 API Key 有獨立的限制設定,彙整模式下不顯示單個限制配置',
aggregateStatsSummary: '彙整統計摘要',
invalidKeysCount: '{count} 個無效的 API Key',
orRelationshipRequests: '請求次數和費用限制為「或」的關係,任一達到限制即觸發限流',
orRelationshipTokens: '請求次數和Token使用量為「或」的關係任一達到限制即觸發限流',
onlyRequestsLimit: '僅限制請求次數',
// Token Distribution - Additional keys
totalAmount: '總計',
todayTotal: '今日總計',
monthlyTotal: '本月總計',
// Additional missing keys
usageRatioOnlyInMultiMode: '使用占比僅在多Key查詢時顯示',
noData: '暫無資料',
// ApiKeyInput placeholders and texts
apiKeyPlaceholder: '請輸入您的 API Key (cr_...)',
apiKeysPlaceholder: '請輸入您的 API Keys支援以下格式\ncr_xxx\ncr_yyy\n或\ncr_xxx, cr_yyy',
clearInput: '清空輸入',
securityNoticeSingle: '您的 API Key 僅用於查詢自己的統計資料,不會被儲存或用於其他用途',
securityNoticeMulti: '您的 API Keys 僅用於查詢統計資料,不會被儲存。彙整模式下部分個體化資訊將不顯示。',
multiKeyTip: '提示:最多支援同時查詢 30 個 API Keys。使用 Ctrl+Enter 快速查詢。'
},
// Login page
login: {
title: '管理後台',
username: '用戶名',
usernamePlaceholder: '請輸入用戶名',
password: '密碼',
passwordPlaceholder: '請輸入密碼',
loginButton: '登錄',
loggingIn: '登錄中...'
},
// Dashboard page
dashboard: {
// Main stats cards
totalApiKeys: '總 API Keys',
activeApiKeys: '活躍',
serviceAccounts: '服務帳戶',
normalAccounts: '正常',
abnormalAccounts: '異常',
pausedAccounts: '停止調度',
rateLimitedAccounts: '限流',
todayRequests: '今日請求',
totalRequests: '總請求',
systemStatus: '系統狀態',
uptime: '運行時間',
// Platform accounts tooltip
claudeAccount: 'Claude: {total} 個 (正常: {normal})',
consoleAccount: 'Console: {total} 個 (正常: {normal})',
geminiAccount: 'Gemini: {total} 個 (正常: {normal})',
bedrockAccount: 'Bedrock: {total} 個 (正常: {normal})',
openaiAccount: 'OpenAI: {total} 個 (正常: {normal})',
azureOpenaiAccount: 'Azure OpenAI: {total} 個 (正常: {normal})',
// Token stats cards
todayToken: '今日Token',
totalTokenConsumption: '總Token消耗',
inputTokens: '輸入',
outputTokens: '輸出',
cacheCreateTokens: '快取建立',
cacheReadTokens: '快取讀取',
// Real-time metrics
realtimeRPM: '即時RPM',
realtimeTPM: '即時TPM',
requestsPerMinute: '每分钟請求數',
tokensPerMinute: '每分钟Token數',
historicalData: '歷史資料',
minutes: '分钟',
// Charts section
modelDistributionAndTrend: '模型使用分佈與Token使用趋勢',
// Date filter presets
today: '今日',
yesterday: '昨日',
last7Days: '近 7 天',
last30Days: '近 30 天',
thisWeek: '本週',
lastWeek: '上週',
thisMonth: '本月',
lastMonth: '上月',
// Granularity buttons
byDay: '按日',
byHour: '按小時',
// Date picker
startDatePlaceholder: '開始日期',
endDatePlaceholder: '結束日期',
dateSeparator: '至',
maxHours24: '最多24小時',
// Auto refresh controls
autoRefresh: '自動刷新',
refresh: '刷新',
refreshing: '刷新中',
refreshDataNow: '立即刷新資料',
// Charts
tokenUsageDistribution: 'Token使用分佈',
detailedStatistics: '詳細統計資料',
noModelUsageData: '暫無模型使用資料',
// Table headers
model: '模型',
requestCount: '請求數',
totalTokens: '總Token',
cost: '費用',
percentage: '占比',
// Trend charts
tokenUsageTrend: 'Token使用趋勢',
apiKeysUsageTrend: 'API Keys 使用趋勢',
requestsCount: '請求次數',
tokenCount: 'Token 數量',
totalApiKeysCount: '共 {count} 個 API Key',
showingTop10: '共 {count} 個 API Key顯示使用量前 10 個',
// Chart labels
inputTokensLabel: '輸入Token',
outputTokensLabel: '輸出Token',
cacheCreateTokensLabel: '快取建立Token',
cacheReadTokensLabel: '快取讀取Token',
costLabel: '費用 (USD)',
requestsLabel: '請求數',
time: '時間',
date: '日期',
tokenQuantity: 'Token數量',
requestsQuantity: '請求次數'
},
// Accounts page
accounts: {
title: '帳戶管理',
description: '管理您的 Claude、Gemini、OpenAI 和 Azure OpenAI 帳戶及代理配置',
// Filters and sorting
sortBy: '選擇排序',
selectPlatform: '選擇平台',
selectGroup: '選擇分組',
refresh: '刷新',
refreshTooltip: '刷新資料 (Ctrl/⌘+點擊強制刷新所有快取)',
addAccount: '添加帳戶',
// Sort options
sortByName: '按名稱排序',
sortByDailyTokens: '按今日Token排序',
sortByDailyRequests: '按今日請求數排序',
sortByTotalTokens: '按總Token排序',
sortByLastUsed: '按最後使用排序',
// Platform options
allPlatforms: '所有平台',
claudePlatform: 'Claude',
claudeConsolePlatform: 'Claude Console',
geminiPlatform: 'Gemini',
openaiPlatform: 'OpenAi',
azureOpenaiPlatform: 'Azure OpenAI',
bedrockPlatform: 'Bedrock',
// Group options
allAccounts: '所有帳戶',
ungroupedAccounts: '未分組帳戶',
// Loading states
loadingAccounts: '正在載入帳戶...',
noAccounts: '暫無帳戶',
noAccountsHint: '點擊上方按鈕添加您的第一個帳戶',
// Table headers
name: '名稱',
platformType: '平台/類型',
status: '狀態',
priority: '優先級',
proxy: '代理',
dailyUsage: '今日使用',
sessionWindow: '會話窗口',
lastUsed: '最後使用',
actions: '操作',
// Account types
dedicated: '專屬',
groupScheduling: '分組調度',
shared: '共享',
belongsToGroup: '所屬分組: {name}',
// Platform labels
unknown: '未知',
apiKey: 'API Key',
oauth: 'OAuth',
setup: 'Setup',
aws: 'AWS',
// Account status
normal: '正常',
abnormal: '異常',
blocked: '已封鎖',
tempError: '臨時異常',
rateLimited: '限流中',
notSchedulable: '不可調度',
bound: '綁定: {count} 個API Key',
// Proxy status
noProxy: '無代理',
// Usage statistics
requests: '次',
noData: '暫無資料',
averageRpm: '平均 {rpm} RPM',
// Session window tooltip
sessionWindowTooltip: {
title: '會話窗口進度表示5小時窗口的時間進度',
normal: '正常:請求正常處理',
warning: '警告:接近限制',
rejected: '拒絕:達到速率限制'
},
// Session window status
remaining: '剩餘 {time}',
ended: '已結束',
// Console quota
quotaProgress: '額度進度',
remainingQuota: '剩餘 $${amount}',
reset: '重置 {time}',
// Mobile view labels
dailyUsageLabel: '今日使用',
sessionWindowLabel: '會話窗口',
lastUsedLabel: '最後使用',
proxyLabel: '代理',
priorityLabel: '優先級',
neverUsed: '從未使用',
sessionWindowTooltipMobile: '會話窗口進度不代表使用量僅表示距離下一個5小時窗口的剩餘時間',
// Action buttons
resetStatus: '重置狀態',
resetting: '重置中...',
resetStatusTooltip: '重置所有異常狀態',
scheduling: '調度',
disabled: '停用',
enableTooltip: '點擊啟用調度',
disableTooltip: '點擊禁用調度',
edit: '編輯',
editTooltip: '編輯帳戶',
delete: '刪除',
deleteTooltip: '刪除帳戶',
pause: '暫停',
enable: '啟用',
// Time formatting
justNow: '剛剛',
minutesAgo: '{minutes} 分鐘前',
hoursAgo: '{hours} 小時前',
daysAgo: '{days} 天前',
hoursAndMinutes: '{hours}小時{minutes}分鐘',
hoursOnly: '{hours}小時',
minutesOnly: '{minutes}分鐘',
daysAndHours: '{days}天{hours}小時',
daysOnly: '{days}天',
// Rate limit time
rateLimitTime: '({time})',
// Messages and confirmations
resetStatusConfirmTitle: '重置帳戶狀態',
resetStatusConfirmMessage: '確定要重置此帳戶的所有異常狀態嗎這將清除限流狀態、401錯誤計數等所有異常標記。',
resetStatusConfirmButton: '確定重置',
resetStatusCancelButton: '取消',
statusResetSuccess: '帳戶狀態已重置',
statusResetFailed: '狀態重置失敗',
deleteAccountTitle: '刪除帳戶',
deleteAccountMessage: '確定要刪除帳戶 "{name}" 嗎?\n\n此操作不可恢復。',
deleteAccountButton: '刪除',
deleteAccountCancel: '取消',
cannotDeleteBoundAccount: '無法刪除此帳號,有 {count} 個API Key綁定到此帳號請先解綁所有API Key',
accountDeleted: '帳戶已刪除',
deleteFailed: '刪除失敗',
enabledScheduling: '已啟用調度',
disabledScheduling: '已禁用調度',
schedulingToggleFailed: '切換調度狀態失敗',
unsupportedAccountType: '該帳戶類型暫不支持調度控制',
operationFailed: '操作失敗',
accountCreateSuccess: '帳戶創建成功',
accountUpdateSuccess: '帳戶更新成功',
loadAccountsFailed: '載入帳戶失敗',
unsupportedAccountTypeReset: '不支持的帳戶類型',
// Schedulable reasons
invalidApiKey: 'API Key無效或已過期401錯誤',
serviceOverload: '服務過載529錯誤',
rateLimitTriggered: '觸發限流429錯誤',
authFailed: '認證失敗401錯誤',
manualStop: '手動停止調度',
// Account type display
claudeMax: 'Claude Max',
claudePro: 'Claude Pro',
claudeFree: 'Claude Free',
// Platform display
openaiResponsesPlatform: 'OpenAI-Responses',
ccrPlatform: 'CCR'
},
apiKeys: {
// Page title and description
title: 'API Keys 管理',
description: '管理和監控您的 API 密鑰',
// Tab navigation
activeTab: '活躍 API Keys',
deletedTab: '已刪除 API Keys',
// Toolbar and actions
refresh: '重新整理',
refreshTooltip: '重新整理 API Keys 清單Ctrl+點擊強制重新整理)',
createNew: '建立新 Key',
bulkEdit: '編輯已選取',
bulkDelete: '刪除已選取',
// Table headers
name: '名稱',
tags: '標籤',
status: '狀態',
usageStats: '使用統計',
createdAt: '建立時間',
expiresAt: '過期時間',
actions: '操作',
// Filter options
timeRange: {
today: '今日',
week: '最近7天',
month: '本月',
all: '全部時間'
},
// Status
active: '活躍',
disabled: '停用',
expired: '已過期',
expiringSoon: '即將過期',
neverExpire: '永不過期',
notActivated: '未啟用',
// Usage statistics
dailyCost: '今日費用',
totalCost: '總費用',
dailyRequests: '今日請求',
lastUsed: '最後使用',
neverUsed: '從未使用',
minutesAgo: '{minutes} 分鐘前',
hoursAgo: '{hours} 小時前',
daysAgo: '{days} 天前',
justNow: '剛剛',
requests: '次',
// Search and filter
searchPlaceholder: '搜尋名稱...',
searchPlaceholderWithOwner: '搜尋名稱或擁有者...',
allTags: '所有標籤',
noTags: '無標籤',
// Binding information
shared: '使用共享池',
dedicated: '專屬',
consoleAccount: 'Console賬戶',
bindingWarning: '⚠️ 賬戶不存在',
// Limits and quotas
dailyLimit: '每日費用',
weeklyOpusLimit: 'Opus週費用',
remainingQuota: '剩餘: ${amount}',
reset: '重設於 {time}',
quotaProgress: '配額進度',
// Model statistics
modelStats: '模型使用分佈',
modelStatsCount: '{count} 個模型',
totalTokens: '總Token',
inputTokens: '輸入',
outputTokens: '輸出',
cacheCreate: '快取建立',
cacheRead: '快取讀取',
totalRequests: '總請求',
noModelData: '暫無模型使用資料',
resetFilter: '重新整理',
adjustTimeRange: '嘗試調整時間範圍或點擊重新整理重新載入資料',
// Date filter
dateFilter: {
today: '今日',
days7: '7天',
days30: '30天'
},
// Actions
viewDetails: '查看詳細統計',
edit: '編輯',
renew: '續期',
activate: '啟用',
disable: '停用',
copy: '複製',
copyStatsLink: '複製統計頁面連結',
// Pagination
totalRecords: '共 {count} 條記錄',
pageSize: '每頁顯示',
records: '條',
// Empty states
noApiKeys: '暫無 API Keys',
noApiKeysHint: '點擊上方按鈕建立您的第一個 API Key',
noDeletedKeys: '暫無已刪除的 API Keys',
noDeletedKeysHint: '已刪除的 API Keys 會出現在這裡',
loading: '正在載入 API Keys...',
loadingDeleted: '正在載入已刪除的 API Keys...',
loadingModelStats: '載入模型統計...',
// Deleted keys table
creator: '建立者',
deletedBy: '刪除者',
deletedAt: '刪除時間',
canRestore: '恢復',
permanentDelete: '徹底刪除',
clearAllDeleted: '清空所有已刪除',
// User types
admin: '管理員',
user: '用戶',
unknown: '未知',
system: '系統',
// Confirmation dialogs
confirmDisable: '確定要停用 API Key "{name}" 嗎?停用後所有使用此 Key 的請求將返回 401 錯誤。',
confirmDelete: '確定要刪除這個 API Key 嗎?此操作不可恢復。',
confirmBatchDelete: '確定要刪除已選取的 {count} 個 API Key 嗎?此操作不可恢復。',
confirmRestore: '確定要恢復這個 API Key 嗎?恢復後可以重新使用。',
confirmPermanentDelete: '確定要徹底刪除這個 API Key 嗎?此操作不可恢復,所有相關資料將被永久刪除。',
confirmClearAll: '確定要徹底刪除全部 {count} 個已刪除的 API Keys 嗎?此操作不可恢復,所有相關資料將被永久刪除。',
// Success messages
keyActivated: 'API Key 已啟用',
keyDisabled: 'API Key 已停用',
keyDeleted: 'API Key 已刪除',
keyRestored: 'API Key 已成功恢復',
keyPermanentDeleted: 'API Key 已徹底刪除',
allDeletedCleared: '已清空所有已刪除的 API Keys',
linkCopied: '已複製統計頁面連結',
expiryUpdated: '過期時間已更新',
// Error messages
selectKeysFirst: '請先選擇要編輯的 API Keys',
loadFailed: '載入 API Keys 失敗',
operationFailed: '操作失敗',
copyFailed: '複製失敗,請手動複製',
updateFailed: '更新失敗',
deleteFailed: '刪除失敗',
restoreFailed: '恢復失敗',
clearFailed: '清空失敗',
// Tooltips and helpers
editExpiry: '編輯過期時間',
activationDays: '未啟用 ({days}天)',
boundTo: '綁定到',
belongsToGroup: '所屬分組: {name}',
// Batch operations
batchSuccess: '成功處理 {count} 個項目',
batchPartialFail: '{failed} 個處理失敗',
batchAllFailed: '所有項目處理失敗'
},
// User-related translations
user: {
// User Dashboard
dashboard: {
title: 'Dashboard Overview',
welcomeMessage: 'Welcome to your Claude Relay dashboard',
// Navigation tabs
overview: 'Overview',
apiKeys: 'API Keys',
usageStats: 'Usage Stats',
// Welcome section
welcome: 'Welcome',
// Stats cards
activeApiKeys: 'Active API Keys',
deletedApiKeys: 'Deleted API Keys',
totalRequests: 'Total Requests',
inputTokens: 'Input Tokens',
totalCost: 'Total Cost',
// Account information section
accountInformation: 'Account Information',
username: 'Username',
displayName: 'Display Name',
email: 'Email',
role: 'Role',
memberSince: 'Member Since',
lastLogin: 'Last Login',
notAvailable: 'N/A',
// Messages
logout: 'Logout',
logoutSuccess: 'Logged out successfully',
logoutFailed: 'Logout failed',
loadProfileFailed: 'Failed to load user profile',
loadStatsFailed: 'Failed to load API keys stats'
},
// User Login
login: {
title: 'User Sign In',
subtitle: 'Sign in to your account to manage your API keys',
username: 'Username',
password: 'Password',
usernamePlaceholder: 'Enter your username',
passwordPlaceholder: 'Enter your password',
signIn: 'Sign In',
signingIn: 'Signing In...',
adminLogin: 'Admin Login',
// Validation and error messages
requiredFields: 'Please enter both username and password',
loginSuccess: 'Login successful!',
loginFailed: 'Login failed'
},
// User Management
management: {
title: 'User Management',
description: 'Manage users, their API keys, and view usage statistics',
refresh: 'Refresh',
// Stats cards
totalUsers: 'Total Users',
activeUsers: 'Active Users',
totalApiKeys: 'Total API Keys',
totalCost: 'Total Cost',
// Search and filters
searchPlaceholder: 'Search users...',
allRoles: 'All Roles',
user: 'User',
admin: 'Admin',
allStatus: 'All Status',
active: 'Active',
disabled: 'Disabled',
// User list
users: 'Users',
loadingUsers: 'Loading users...',
noUsersFound: 'No users found',
noUsersMatch: 'No users match your search criteria.',
noUsersCreated: 'No users have been created yet.',
// User info and actions
displayName: 'Display Name',
email: 'Email',
role: 'Role',
username: 'Username',
apiKeysCount: 'API keys',
lastLogin: 'Last login',
neverLoggedIn: 'Never logged in',
requests: 'requests',
totalCostLabel: 'total cost',
// Action buttons and tooltips
viewUsageStats: 'View Usage Stats',
disableAllApiKeys: 'Disable All API Keys',
disableUser: 'Disable User',
enableUser: 'Enable User',
changeRole: 'Change Role',
// Confirmation dialogs
disableUserTitle: 'Disable User',
enableUserTitle: 'Enable User',
disableUserMessage: 'Are you sure you want to disable user "{username}"? This will prevent them from logging in.',
enableUserMessage: 'Are you sure you want to enable user "{username}"?',
disable: 'Disable',
enable: 'Enable',
disableAllKeysTitle: 'Disable All API Keys',
disableAllKeysMessage: 'Are you sure you want to disable all {count} API keys for user "{username}"? This will prevent them from using the service.',
disableKeys: 'Disable Keys',
// Success messages
userDisabledSuccess: 'User disabled successfully',
userEnabledSuccess: 'User enabled successfully',
keysDisabledSuccess: 'Disabled {count} API keys',
// Error messages
loadUsersError: 'Failed to load users',
toggleStatusError: 'Failed to toggleStatus',
disableKeysError: 'Failed to disableKeys'
},
// User Usage Stats Modal
usageStatsModal: {
title: '使用統計',
titleWithUser: '使用統計 - {displayName}',
// Time period selection
periodSelection: {
day: '最近24小時',
week: '最近7天',
month: '最近30天',
quarter: '最近90天'
},
// Loading state
loadingStats: '正在載入使用統計...',
// Summary cards
summaryCards: {
requests: '請求數',
inputTokens: '輸入Token',
outputTokens: '輸出Token',
totalCost: '總費用'
},
// API Keys table
apiKeysTable: {
title: 'API Keys 使用情況',
headers: {
apiKey: 'API Key',
status: '狀態',
requests: '請求數',
tokens: 'Token數',
cost: '費用',
lastUsed: '最後使用'
},
status: {
active: '活躍',
disabled: '已停用'
},
tokensFormat: {
input: '輸入',
output: '輸出'
},
never: '從未使用'
},
// Usage trend chart
usageTrend: {
title: '使用趨勢',
chartTitle: '使用圖表',
dailyTrends: '最近 {period} 的日使用趨勢',
chartNote: '(可整合 Chart.js、D3.js 或類似圖表庫)'
},
// No data state
noData: {
title: '暫無使用資料',
description: '該使用者在所選時間段內尚未發起任何API請求。'
},
// Buttons
close: '關閉'
},
// Change Role Modal
changeRoleModal: {
title: '修改使用者角色',
// User info display
currentRole: '當前角色:{role}',
// Role selection form
newRole: '新角色',
roles: {
user: '使用者',
userDesc: '具有基本權限的普通使用者',
admin: '管理員',
adminDesc: '擁有管理使用者和系統的完整權限'
},
// Warning messages
roleChangeWarning: {
title: '角色變更警告',
grantAdmin: '授予管理員權限將使該使用者擁有系統的完整存取權限包括管理其他使用者及其API密鑰的能力。',
removeAdmin: '移除管理員權限將限制該使用者只能管理自己的API密鑰和檢視自己的使用統計。'
},
// Buttons
cancel: '取消',
updateRole: '更新角色',
updating: '更新中...',
// Success message
roleUpdated: '使用者角色已更新為 {role}'
}
},
// Settings 設置頁面
settings: {
title: '系統設置',
description: '網站定制和通知配置',
loading: '正在載入設置...',
// 導航標籤
branding: '品牌設置',
webhook: '通知設置',
// 品牌設置
siteName: '網站名稱',
siteNameDescription: '品牌標識',
siteNamePlaceholder: 'Claude Relay Service',
siteNameHint: '將顯示在瀏覽器標題和頁面頭部',
siteIcon: '網站圖標',
siteIconDescription: 'Favicon',
currentIcon: '當前圖標',
uploadIcon: '上傳圖標',
removeIcon: '刪除',
iconFormats: '支援 .ico, .png, .jpg, .svg 格式,最大 350KB',
iconPreview: '圖標預覽',
adminEntry: '管理入口',
adminEntryDescription: '登入按鈕顯示',
hideLoginButton: '隱藏登入按鈕',
showLoginButton: '顯示登入按鈕',
adminEntryHint: '隱藏後,用戶需要直接訪問 /admin/login 頁面登入',
// 移動端卡片標題
siteNameCard: '站點名稱',
siteNameCardDesc: '自定義您的站點品牌名稱',
siteIconCard: '站點圖標',
siteIconCardDesc: '上傳自定義圖標或輸入圖標URL',
adminEntryCard: '管理入口',
adminEntryCardDesc: '控制登入按鈕在首頁的顯示',
// 操作按鈕
save: '保存設置',
saving: '保存中...',
reset: '重置為預設',
lastUpdated: '最後更新:{time}',
lastUpdatedMobile: '上次更新: {time}',
// Webhook 設置
enableWebhook: '啟用 Webhook 通知',
webhookDescription: '開啟後,系統將按配置發送通知到指定平台',
// 通知類型
notificationTypes: '通知類型',
accountAnomaly: '帳號異常',
quotaWarning: '配額警告',
systemError: '系統錯誤',
securityAlert: '安全警報',
accountAnomalyDesc: '帳號狀態異常、認證失敗等',
quotaWarningDesc: 'API調用配額不足警告',
systemErrorDesc: '系統運行錯誤和故障',
securityAlertDesc: '安全相關的警報通知',
// 通知平台
notificationPlatforms: '通知平台',
addPlatform: '新增平台',
noPlatforms: '暫無配置的通知平台,請點擊「新增平台」按鈕新增',
enableSignature: '已啟用簽名驗證',
testConnection: '測試連線',
edit: '編輯',
delete: '刪除',
// 高級設置
advancedSettings: '進階設置',
maxRetries: '最大重試次數',
retryDelay: '重試延遲 (毫秒)',
timeout: '逾時時間 (毫秒)',
// 測試通知
sendTestNotification: '發送測試通知',
// 平台模態框
addPlatformModal: '新增通知平台',
editPlatformModal: '編輯通知平台',
configurePlatform: '配置新的Webhook通知渠道',
updatePlatform: '配置並更新Webhook通知渠道',
platformType: '平台類型',
platformName: '名稱',
platformNameOptional: '(可選)',
platformNamePlaceholder: '例如:運維群通知、開發測試群',
webhookUrl: 'Webhook URL',
webhookUrlRequired: '*',
webhookUrlPlaceholder: 'https://...',
editModeWarning: '編輯模式下不能更改平台類型',
// Bark 特有設置
deviceKey: '設備密鑰 (Device Key)',
deviceKeyPlaceholder: '例如aBcDeFgHiJkLmNoPqRsTuVwX',
deviceKeyHint: '在Bark App中查看您的推送密鑰',
serverAddress: '伺服器地址',
serverAddressOptional: '(可選)',
serverAddressPlaceholder: '預設: https://api.day.app/push',
notificationLevel: '通知級別',
notificationSound: '通知聲音',
notificationGroup: '通知分組',
notificationGroupOptional: '(可選)',
notificationGroupPlaceholder: '預設: claude-relay',
// 通知級別選項
levelAuto: '自動(根據通知類型)',
levelPassive: '被動',
levelActive: '預設',
levelTimeSensitive: '時效性',
levelCritical: '緊急',
// 聲音選項
soundAuto: '自動(根據通知類型)',
soundDefault: '預設',
soundAlarm: '警報',
soundBell: '鈴聲',
soundBirdsong: '鳥鳴',
soundElectronic: '電子音',
soundGlass: '玻璃',
soundHorn: '喇叭',
soundSilence: '靜音',
// Bark 提示信息
barkInstructions: [
'1. 在iPhone上安裝Bark App',
'2. 打開App獲取您的設備密鑰',
'3. 將密鑰貼上到上方輸入框'
],
// 簽名設置
enableSignatureVerify: '啟用簽名驗證',
signatureEnabled: '已啟用',
signatureSecret: '簽名密鑰',
signatureSecretPlaceholder: 'SEC...',
// 平台提示信息
wechatWorkHint: '請在企業微信群機器人設置中獲取Webhook地址',
dingtalkHint: '請在釘釘群機器人設置中獲取Webhook地址',
feishuHint: '請在飛書群機器人設置中獲取Webhook地址',
slackHint: '請在Slack應用的Incoming Webhooks中獲取地址',
discordHint: '請在Discord伺服器的整合設置中建立Webhook',
barkHint: '請在Bark App中查看您的設備密鑰',
customHint: '請輸入完整的Webhook接收地址',
// 模態框按鈕
required: '必填項',
cancel: '取消',
testing: '測試中...',
saveChanges: '保存修改',
addPlatformBtn: '新增平台',
// 成功/錯誤消息
loadSettingsFailed: '載入設置失敗',
settingsSaved: '設置已保存',
saveSettingsFailed: '保存設置失敗',
oemSettingsSaved: 'OEM設置保存成功',
oemSettingsSaveFailed: '保存OEM設置失敗',
resetToDefault: '已重置為預設設置',
resetFailed: '重置失敗',
confirmReset: '確定要重置為預設設置嗎?\n\n這將清除所有自定義的網站名稱和圖標設置。',
webhookConfigSaved: '配置已保存',
webhookConfigSaveFailed: '保存配置失敗',
getWebhookConfigFailed: '獲取webhook配置失敗',
platformAdded: '平台已新增',
platformUpdated: '平台已更新',
platformDeleted: '平台已刪除',
platformDeleteFailed: '刪除失敗',
confirmDeletePlatform: '確定要刪除這個平台嗎?',
operationFailed: '操作失敗',
testSuccess: '測試成功webhook連線正常',
testFailed: '測試失敗',
testNotificationSent: '測試通知已發送',
testNotificationFailed: '發送失敗',
// 表單驗證消息
enterBarkDeviceKey: '請輸入Bark設備密鑰',
enterWebhookUrl: '請輸入Webhook URL',
enterValidWebhookUrl: '請輸入有效的Webhook URL',
enterWebhookUrlFirst: '請先輸入Webhook URL',
enterBarkDeviceKeyFirst: '請先輸入Bark設備密鑰',
// 檔案上傳
fileReadFailed: '檔案讀取失敗',
iconLoadFailed: 'Icon failed to load',
// 平台名稱
platforms: {
wechatWork: '企業微信',
dingtalk: '釘釘',
feishu: '飛書',
slack: 'Slack',
discord: 'Discord',
bark: 'Bark',
custom: '自定義'
}
},
// AccountForm 組件
accountForm: {
// 標題和模態框
editAccount: '編輯帳戶',
addAccount: '新增帳戶',
// 步驟指示器
stepBasicInfo: '基本資訊',
stepAuthorization: '授權認證',
// 平台選擇
platform: '平台',
platformClaude: 'Claude',
platformClaudeConsole: 'Claude Console',
platformGemini: 'Gemini',
platformOpenAI: 'OpenAI',
platformAzureOpenAI: 'Azure OpenAI',
platformBedrock: 'Bedrock',
// 新增方式
addMethod: '新增方式',
addTypeSetupToken: 'Setup Token推薦',
addTypeOAuth: 'OAuth 授權',
addTypeManual: '手動輸入 Access Token',
// 基本資訊欄位
accountName: '帳戶名稱',
accountNamePlaceholder: '為帳戶設置一個易識別的名稱',
description: '描述',
descriptionOptional: '描述(可選)',
descriptionPlaceholder: '帳戶用途說明...',
// 帳戶類型
accountType: '帳戶類型',
accountTypeShared: '共用帳戶',
accountTypeDedicated: '專屬帳戶',
accountTypeGroup: '群組排程',
accountTypeDescription: '共用帳戶供所有API Key使用專屬帳戶僅供特定API Key使用群組排程加入群組供群組內排程',
// 群組選擇
selectGroup: '選擇群組',
selectGroupRequired: '選擇群組 *',
noGroupsAvailable: '暫無可用群組',
memberCount: '個成員',
newGroup: '新建群組',
refreshGroups: '刷新群組',
// Gemini 專案 ID
projectId: '專案 ID',
projectIdOptional: '專案 ID可選',
projectIdPlaceholder: '例如verdant-wares-464411-k9',
projectIdDescription: 'Google Cloud/Workspace 帳號需要提供專案 ID',
projectIdInstructions: '如何獲取專案 ID',
projectIdStep1: '訪問 Google Cloud Console',
projectIdStep2: '複製專案 IDProject ID通常是字串格式',
projectIdStep3: '⚠️ 注意:要複製專案 IDProject ID不要複製專案編號Project Number',
projectIdTip: '提示:如果您的帳號是普通個人帳號(未綁定 Google Cloud請留空此欄位。',
projectIdGoogleCloudRequired: 'Google Cloud/Workspace 帳號需要提供專案 ID',
projectIdGoogleCloudDescription: '某些 Google 帳號(特別是綁定了 Google Cloud 的帳號)會被識別為 Workspace 帳號,需要提供額外的專案 ID。',
// Bedrock 欄位
awsAccessKeyId: 'AWS 存取金鑰 ID',
awsAccessKeyIdRequired: 'AWS 存取金鑰 ID *',
awsAccessKeyIdPlaceholder: '請輸入 AWS Access Key ID',
awsSecretAccessKey: 'AWS 秘密存取金鑰',
awsSecretAccessKeyRequired: 'AWS 秘密存取金鑰 *',
awsSecretAccessKeyPlaceholder: '請輸入 AWS Secret Access Key',
awsRegion: 'AWS 區域',
awsRegionRequired: 'AWS 區域 *',
awsRegionPlaceholder: '例如us-east-1',
awsRegionReference: '常用 AWS 區域參考:',
awsRegionUsEast1: '• us-east-1美國東部',
awsRegionUsWest2: '• us-west-2美國西部',
awsRegionEuWest1: '• eu-west-1歐洲愛爾蘭',
awsRegionApSoutheast1: '• ap-southeast-1新加坡',
awsRegionApNortheast1: '• ap-northeast-1東京',
awsRegionEuCentral1: '• eu-central-1法蘭克福',
awsRegionTip: '💡 請輸入完整的區域代碼,如 us-east-1',
sessionToken: '會話權杖',
sessionTokenOptional: '會話權杖(可選)',
sessionTokenPlaceholder: '如果使用臨時憑證,請輸入會話權杖',
sessionTokenDescription: '僅在使用臨時 AWS 憑證時需要填寫',
defaultModel: '預設主模型',
defaultModelOptional: '預設主模型(可選)',
defaultModelPlaceholder: '例如us.anthropic.claude-sonnet-4-20250514-v1:0',
defaultModelDescription: '留空將使用系統預設模型。支援 inference profile ID 或 ARN',
bedrockModelConfigTitle: 'Bedrock 模型配置說明:',
bedrockModelConfigInferenceProfile: '• 支援 Inference Profile ID推薦',
bedrockModelConfigArn: '• 支援 Application Inference Profile ARN',
bedrockModelConfigCommon: '• 常用模型us.anthropic.claude-sonnet-4-20250514-v1:0',
bedrockModelConfigDefault: '• 留空將使用系統配置的預設模型',
smallFastModel: '小快速模型',
smallFastModelOptional: '小快速模型(可選)',
smallFastModelPlaceholder: '例如us.anthropic.claude-3-5-haiku-20241022-v1:0',
smallFastModelDescription: '用於快速回應的輕量級模型,留空將使用系統預設',
// Azure OpenAI 欄位
azureEndpoint: 'Azure Endpoint',
azureEndpointRequired: 'Azure Endpoint *',
azureEndpointPlaceholder: 'https://your-resource.openai.azure.com',
azureEndpointDescription: 'Azure OpenAI 資源的終結點 URL格式https://your-resource.openai.azure.com',
apiVersion: 'API 版本',
apiVersionPlaceholder: '2024-02-01',
apiVersionDescription: 'Azure OpenAI API 版本,預設使用最新穩定版本 2024-02-01',
deploymentName: '部署名稱',
deploymentNameRequired: '部署名稱 *',
deploymentNamePlaceholder: 'gpt-4',
deploymentNameDescription: '在 Azure OpenAI Studio 中建立的部署名稱',
apiKey: 'API Key',
apiKeyRequired: 'API Key *',
apiKeyPlaceholder: '請輸入 API Key',
apiKeyDescription: '從 Azure 入口網站取得的 API 金鑰',
supportedModels: '支援的模型',
supportedModelsDescription: '選擇此部署支援的模型類型',
// Claude Console 欄位
apiUrl: 'API URL',
apiUrlRequired: 'API URL *',
apiUrlPlaceholder: '例如https://api.example.com',
apiKeyClaudeConsoleRequired: 'API Key *',
apiKeyClaudeConsolePlaceholder: '請輸入API Key',
dailyQuota: '每日額度限制',
dailyQuotaLabel: '每日額度限制($',
dailyQuotaPlaceholder: '0 表示不限制',
dailyQuotaDescription: '設置每日使用額度0 表示不限制',
quotaResetTime: '額度重置時間',
quotaResetTimePlaceholder: '00:00',
quotaResetTimeDescription: '每日自動重置額度的時間',
todayUsage: '今日使用情況',
remaining: '剩餘',
used: '已使用',
modelMapping: '模型映射表',
modelMappingOptional: '模型映射表(可選)',
modelMappingDescription: '留空表示支援所有模型且不修改請求。配置映射後,左側模型會被識別為支援的模型,右側是實際發送的模型。',
originalModel: '原始模型名稱',
mappedModel: '映射後的模型名稱',
addModelMapping: '新增模型映射',
userAgent: '自定義 User-Agent',
userAgentOptional: '自定義 User-Agent可選',
userAgentPlaceholder: '留空則透傳用戶端 User-Agent',
userAgentDescription: '留空時將自動使用用戶端的 User-Agent僅在需要固定特定 UA 時填寫',
rateLimitMechanism: '限流機制',
enableRateLimit: '啟用限流機制',
rateLimitDescription: '啟用後當帳號返回429錯誤時將暫停排程一段時間',
rateLimitDuration: '限流時間(分鐘)',
rateLimitDurationDescription: '帳號被限流後暫停排程的時間(分鐘)',
// Claude 訂閱類型
subscriptionType: '訂閱類型',
subscriptionClaudeMax: 'Claude Max',
subscriptionClaudePro: 'Claude Pro',
claudeProLimitation: 'Pro 帳號不支援 Claude Opus 4 模型',
// Claude 特殊功能
autoStopOnWarning: '5小時使用量接近限制時自動停止排程',
autoStopOnWarningDescription: '當系統偵測到帳戶接近5小時使用限制時自動暫停排程該帳戶。進入新的時間視窗後會自動恢復排程。',
useUnifiedUserAgent: '使用統一 Claude Code 版本',
useUnifiedUserAgentDescription: '開啟後將使用從真實 Claude Code 用戶端擷取的統一 User-Agent提高相容性',
currentUnifiedVersion: '💡 目前統一版本:',
clearCache: '清除快取',
clearing: '清除中...',
waitingForCapture: '⏳ 等待從 Claude Code 用戶端擷取 User-Agent',
captureHint: '💡 提示:如果長時間未能擷取,請確認有 Claude Code 用戶端正在使用此帳戶,或聯繫開發者檢查 User-Agent 格式是否發生變化',
useUnifiedClientId: '使用統一的用戶端識別',
useUnifiedClientIdDescription: '開啟後將使用固定的用戶端識別,使所有請求看起來來自同一個用戶端,減少特徵',
clientId: '用戶端識別 ID',
regenerate: '重新產生',
clientIdDescription: '此ID將替換請求中的user_id用戶端部分保留session部分用於黏性會話',
// 排程優先順序
schedulePriority: '排程優先順序',
schedulePriorityRange: '排程優先順序1-100',
schedulePriorityPlaceholder: '數字越小優先順序越高預設50',
schedulePriorityDescription: '數字越小優先順序越高建議範圍1-100',
// 手動輸入 Token
manualTokenTitle: '手動輸入 Token',
manualTokenDescription: '請輸入有效的 Access Token。如果您有 Refresh Token建議也一併填寫以支援自動重新整理。',
manualTokenClaudeDescription: '請輸入有效的 Claude Access Token。如果您有 Refresh Token建議也一併填寫以支援自動重新整理。',
manualTokenGeminiDescription: '請輸入有效的 Gemini Access Token。如果您有 Refresh Token建議也一併填寫以支援自動重新整理。',
manualTokenOpenAIDescription: '請輸入有效的 OpenAI Access Token。如果您有 Refresh Token建議也一併填寫以支援自動重新整理。',
obtainTokenMethods: '取得 Access Token 的方法:',
claudeTokenPath: '請從已登入 Claude Code 的機器上取得 ~/.claude/.credentials.json 檔案中的憑證,請勿使用 Claude 官網 API Keys 頁面的金鑰。',
geminiTokenPath: '請從已登入 Gemini CLI 的機器上取得 ~/.config/gemini/credentials.json 檔案中的憑證。',
openaiTokenPath: '請從已登入 OpenAI 帳戶的機器上取得認證憑證,或透過 OAuth 授權流程取得 Access Token。',
accessToken: 'Access Token',
accessTokenOptional: 'Access Token可選',
accessTokenRequired: 'Access Token *',
accessTokenPlaceholder: '請輸入 Access Token...',
accessTokenOptionalPlaceholder: '可選:如果不填寫,系統會自動透過 Refresh Token 取得...',
accessTokenOptionalDescription: 'Access Token 可選填。如果不提供,系統會透過 Refresh Token 自動取得。',
refreshToken: 'Refresh Token',
refreshTokenOptional: 'Refresh Token可選',
refreshTokenRequired: 'Refresh Token *',
refreshTokenPlaceholder: '請輸入 Refresh Token...',
refreshTokenRequiredPlaceholder: '請輸入 Refresh Token必填...',
refreshTokenDescription: '系統將使用 Refresh Token 自動取得 Access Token 和使用者資訊',
refreshTokenTip: '💡 如果未填寫 Refresh TokenToken 過期後需要手動更新。',
// Setup Token 流程
setupTokenTitle: 'Claude Setup Token 授權',
setupTokenDescription: '請按照以下步驟透過 Setup Token 完成 Claude 帳戶的授權:',
setupTokenStep1Title: '點擊下方按鈕產生授權連結',
setupTokenStep2Title: '在瀏覽器中開啟連結並完成授權',
setupTokenStep2Description: '請在新分頁中開啟授權連結,登入您的 Claude 帳戶並授權 Claude Code。',
setupTokenStep2Warning: '注意:如果您設置了代理,請確保瀏覽器也使用相同的代理訪問授權頁面。',
setupTokenStep3Title: '輸入 Authorization Code',
setupTokenStep3Description: '授權完成後,從返回頁面複製 Authorization Code並貼上到下方輸入框',
generateSetupTokenUrl: '產生 Setup Token 授權連結',
generating: '產生中...',
copyLink: '複製連結',
regenerateLink: '重新產生',
authorizationCode: 'Authorization Code',
authorizationCodePlaceholder: '貼上從Claude Code授權頁面取得的Authorization Code...',
authorizationCodeDescription: '請貼上從Claude Code授權頁面複製的Authorization Code',
verifying: '驗證中...',
completeAuthorization: '完成授權',
// Token 更新(編輯模式)
updateTokenTitle: '更新 Token',
updateTokenDescription: '可以更新 Access Token 和 Refresh Token。為了安全起見不會顯示目前的 Token 值。',
updateTokenTip: '💡 留空表示不更新該欄位。',
newAccessToken: '新的 Access Token',
newRefreshToken: '新的 Refresh Token',
leaveBlankNoUpdate: '留空表示不更新...',
// 使用情況
currentUsage: '目前使用情況',
// 按鈕
cancel: '取消',
nextStep: '下一步',
previousStep: '上一步',
create: '建立',
creating: '建立中...',
update: '更新',
updating: '更新中...',
// 錯誤訊息
pleaseEnterAccountName: '請填寫帳戶名稱',
pleaseSelectGroup: '請選擇一個群組',
pleaseEnterApiUrl: '請填寫 API URL',
pleaseEnterApiKey: '請填寫 API Key',
pleaseEnterAccessKeyId: '請填寫 AWS 存取金鑰 ID',
pleaseEnterSecretAccessKey: '請填寫 AWS 秘密存取金鑰',
pleaseEnterRegion: '請選擇 AWS 區域',
pleaseEnterAzureEndpoint: '請填寫 Azure Endpoint',
pleaseEnterDeploymentName: '請填寫部署名稱',
pleaseEnterAccessToken: '請填寫 Access Token',
pleaseEnterRefreshToken: '請填寫 Refresh Token',
// 成功訊息
linkCopied: '連結已複製',
extractedAuthCode: '成功提取授權碼!',
cacheClearedSuccess: '統一User-Agent快取已清除',
newClientIdGenerated: '已產生新的用戶端識別',
groupsRefreshed: '群組列表已重新整理',
modelMappingAdded: '已新增映射',
modelMappingExists: '模型映射已存在',
// 警告和提示
copyFailed: '複製失敗,請手動複製',
clearCacheFailed: '清除快取失敗',
urlNotFound: 'URL 中未找到授權碼參數,請檢查連結是否正確',
urlFormatError: '連結格式錯誤,請檢查是否為完整的 URL',
wrongUrlFormat: '請貼上以 http://localhost:45462 開頭的連結',
loadGroupsFailed: '載入群組列表失敗',
// 確認對話框
projectIdNotFilledTitle: '專案 ID 未填寫',
projectIdNotFilledMessage: '您尚未填寫專案 ID。\n\n如果您的Google帳號綁定了Google Cloud或被識別為Workspace帳號需要提供專案 ID。\n如果您使用的是普通個人帳號可以繼續不填寫。',
continueButton: '繼續',
goBackToFill: '返回填寫',
continueSave: '繼續保存',
// 快捷模型映射按鈕
presetSonnet4: '+ Sonnet 4',
presetOpus41: '+ Opus 4.1',
presetHaiku35: '+ Haiku 3.5',
presetOpus41ToSonnet4: '+ Opus 4.1 → Sonnet 4',
// 編輯模式特殊提示
leaveBlankNoUpdateApiKey: '留空表示不更新 API Key',
leaveBlankNoUpdateAwsKey: '留空表示不更新 AWS Access Key ID',
leaveBlankNoUpdateAwsSecret: '留空表示不更新 AWS Secret Access Key',
leaveBlankNoUpdateSession: '留空表示不更新',
// 通用描述文字
allModelsIfEmpty: '留空表示支援所有模型。如果指定模型,請求中的模型不在列表內將不會排程到此帳號',
systemDefaultIfEmpty: '留空將使用系統預設模型。支援 inference profile ID 或 ARN',
noUpdateIfEmpty: '留空表示不更新該欄位',
// 手動 Token 輸入部分
manualTokenInput: '手動輸入 Token',
manualTokenClaudeDescription: '請輸入有效的 Claude Access Token。如果您有 Refresh Token建議也一併填寫以支援自動刷新。',
manualTokenGeminiDescription: '請輸入有效的 Gemini Access Token。如果您有 Refresh Token建議也一併填寫以支援自動刷新。',
manualTokenOpenAIDescription: '請輸入有效的 OpenAI Access Token。如果您有 Refresh Token建議也一併填寫以支援自動刷新。',
getAccessTokenMethod: '取得 Access Token 的方法:',
claudeCredentialsPath: '請從已登入 Claude Code 的機器上取得',
geminiCredentialsPath: '請從已登入 Gemini CLI 的機器上取得',
openaiCredentialsPath: '請從已登入 OpenAI 帳戶的機器上取得認證憑證,或透過 OAuth 授權流程取得 Access Token。',
claudeCredentialsWarning: '檔案中的憑證,請勿使用 Claude 官網 API Keys 頁面的金鑰。',
refreshTokenWarning: '💡 如果未填寫 Refresh TokenToken 過期後需要手動更新。',
accessTokenOptional: 'Access Token (可選)',
accessTokenOptionalPlaceholder: '可選:如果不填寫,系統會自動透過 Refresh Token 取得...',
accessTokenOptionalInfo: 'Access Token 可選填。如果不提供,系統會透過 Refresh Token 自動取得。',
accessTokenRequired: 'Access Token *',
accessTokenRequiredPlaceholder: '請輸入 Access Token...',
refreshTokenRequired: 'Refresh Token *',
refreshTokenRequiredPlaceholder: '請輸入 Refresh Token必填...',
refreshTokenRequiredInfo: '系統將使用 Refresh Token 自動取得 Access Token 和使用者資訊',
refreshTokenOptional: 'Refresh Token (可選)',
refreshTokenOptionalPlaceholder: '請輸入 Refresh Token...',
// 優先級設定
priorityPlaceholder: '數字越小優先級越高預設50',
priorityDescription: '數字越小優先級越高建議範圍1-100',
prioritySchedulingTitle: '排程優先級 (1-100)',
priorityEditPlaceholder: '數字越小優先級越高',
// Gemini 專案ID
projectIdOptional: '專案 ID (可選)',
projectIdPlaceholder: '例如verdant-wares-464411-k9',
projectIdDescription: 'Google Cloud/Workspace 帳號可能需要提供專案 ID',
// Claude 訂閱類型和進階選項
subscriptionType: '訂閱類型',
claudeMaxSubscription: 'Claude Max',
claudeProSubscription: 'Claude Pro',
claudeProLimitation: 'Pro 帳號不支援 Claude Opus 4 模型',
autoStopOnWarning: '5小時使用量接近限制時自動停止排程',
autoStopOnWarningDescription: '當系統檢測到帳戶接近5小時使用限制時自動暫停排程該帳戶。進入新的時間視窗後會自動恢復排程。',
useUnifiedUserAgent: '使用統一 Claude Code 版本',
useUnifiedUserAgentDescription: '開啟後將使用從真實 Claude Code 用戶端捕獲的統一 User-Agent提高相容性',
currentUnifiedVersion: '目前統一版本:',
clearCache: '清除快取',
clearing: '清除中...',
waitingForCapture: '等待從 Claude Code 用戶端捕獲 User-Agent',
captureHint: '💡 提示:如果長時間未能捕獲,請確認有 Claude Code 用戶端正在使用此帳戶,或聯絡開發者檢查 User-Agent 格式是否發生變化',
useUnifiedClientId: '使用統一的用戶端識別',
useUnifiedClientIdDescription: '開啟後將使用固定的用戶端識別,使所有請求看起來來自同一個用戶端,減少特徵',
clientIdLabel: '用戶端識別 ID',
regenerateClientId: '重新產生',
clientIdDescription: '此ID將替換請求中的user_id用戶端部分保留session部分用於黏性工作階段',
// 編輯模式欄位
accountNameEdit: '帳戶名稱',
accountNameEditPlaceholder: '為帳戶設定一個易識別的名稱',
descriptionOptionalEdit: '描述 (可選)',
descriptionOptionalEditPlaceholder: '帳戶用途說明...',
accountTypeEdit: '帳戶類型',
selectGroupRequired: '選擇群組 *',
noAvailableGroups: '暫無可用群組',
membersCount: ' 個成員',
createNewGroup: '新建群組',
// AWS Bedrock 設定
bedrockCredentials: '憑證設定',
bedrockCredentialsDescription: '請填寫 AWS 存取憑證,用於呼叫 Amazon Bedrock 服務。',
awsAccessKeyId: 'AWS Access Key ID *',
awsAccessKeyIdPlaceholder: '請輸入 AWS 存取密鑰 ID...',
awsSecretAccessKey: 'AWS Secret Access Key *',
awsSecretAccessKeyPlaceholder: '請輸入 AWS 秘密存取密鑰...',
sessionTokenOptional: 'Session Token (可選)',
sessionTokenOptionalPlaceholder: '臨時憑證的工作階段令牌...',
sessionTokenDescription: '僅在使用臨時憑證(如 STS 產生的憑證)時需要填寫',
awsRegion: 'AWS 區域 *',
awsRegionPlaceholder: '選擇 AWS 區域...',
bedrockModelConfig: '模型設定',
defaultModelLabel: '預設模型',
defaultModelPlaceholder: '例如anthropic.claude-3-5-sonnet-20240620-v1:0',
defaultModelDescription: '留空將使用系統預設模型。支援 inference profile ID 或 ARN',
smallFastModelLabel: '小型快速模型',
smallFastModelPlaceholder: '例如anthropic.claude-3-haiku-20240307-v1:0',
smallFastModelDescription: '用於簡單任務的快速模型,支援 inference profile ID 或 ARN',
// Azure OpenAI 設定
azureOpenAIConfig: 'Azure OpenAI 設定',
azureOpenAIDescription: '請設定 Azure OpenAI 服務的連線資訊和部署詳情。',
azureEndpoint: 'Azure Endpoint *',
azureEndpointPlaceholder: '例如https://your-resource.openai.azure.com/',
azureEndpointDescription: 'Azure OpenAI 服務的端點 URL',
azureApiKey: 'API Key *',
azureApiKeyPlaceholder: '請輸入 Azure OpenAI API Key...',
azureApiVersion: 'API 版本',
azureApiVersionDescription: 'Azure OpenAI API 版本,通常使用最新版本',
azureDeploymentName: '部署名稱 *',
azureDeploymentNamePlaceholder: '例如gpt-4',
azureDeploymentDescription: '在 Azure OpenAI Studio 中建立的部署名稱',
azureSupportedModels: '支援的模型',
azureSupportedModelsPlaceholder: '例如gpt-4, gpt-3.5-turbo',
azureSupportedModelsDescription: '此帳戶支援的模型清單,用逗號分隔。留空表示支援所有模型',
azureAccountSettings: '帳戶設定',
azureIsActive: '啟用此帳戶',
azureSchedulable: '允許調度',
// Claude Console 模型映射
claudeConsoleModels: '模型映射',
claudeConsoleModelsDescription: '設定模型請求的映射關係,將客戶端請求的模型名映射為實際呼叫的模型。',
modelMappingFrom: '請求模型',
modelMappingFromPlaceholder: '例如claude-3-5-sonnet-20241022',
modelMappingTo: '實際模型',
modelMappingToPlaceholder: '例如claude-3-5-sonnet-latest',
addModelMapping: '新增映射',
removeMapping: '移除',
presetMappings: '預設映射',
modelMappingExample: '示例claude-3-5-sonnet-20241022 → claude-3-5-sonnet-latest',
noMappingsConfigured: '暫未設定映射,將直接使用原模型名',
// Setup Token 授權流程詳細步驟
setupTokenAuth: 'Setup Token 授權',
setupTokenAuthDescription: 'Setup Token 是安全的授權方式,透過臨時授權碼完成帳戶驗證。',
setupTokenStep1: '步驟 1產生授權連結',
setupTokenStep1Description: '系統將產生一個專用的授權連結,用於取得臨時授權碼。',
setupTokenStep2: '步驟 2完成授權',
setupTokenStep2Description: '在新視窗中開啟授權連結,使用您的 Claude 帳戶登入並完成授權。',
setupTokenStep3: '步驟 3輸入授權碼',
setupTokenStep3Description: '授權成功後,系統會顯示授權碼,請複製並貼上到下方輸入框。',
setupTokenUrlGenerated: '授權連結已產生',
setupTokenOpenInBrowser: '在瀏覽器中開啟',
setupTokenCopyLink: '複製連結',
setupTokenUrlExpiry: '此連結10分鐘後過期請盡快完成授權',
setupTokenAuthCode: 'Authorization Code *',
setupTokenAuthCodePlaceholder: '請貼上從授權頁面取得的授權碼...',
setupTokenAuthCodeDescription: '完成授權後,將顯示類似 "auth_code_xxx" 格式的授權碼',
setupTokenSmartDetection: '智能檢測',
setupTokenSmartDetectionDesc: '支援直接貼上完整的回調 URL系統會自動提取授權碼',
// 更多錯誤訊息和驗證文字
unsupportedPlatform: '不支援的平台',
accountCreationFailed: '帳戶建立失敗',
accountUpdateFailed: '帳戶更新失敗',
detailsInfo: '詳細資訊',
accountCreationFailedConsole: '帳戶建立失敗:',
accountUpdateFailedConsole: '帳戶更新失敗:',
clearCacheFailedWithError: '清除快取失敗:',
unknownError: '未知錯誤',
modelMappingExistsInfo: '模型映射已存在',
modelAddedMapping: '已新增映射',
// 限流和配額管理
rateLimitSettings: '限流設定',
enableRateLimit: '啟用速率限制',
rateLimitDuration: '限流時長 (秒)',
rateLimitDurationPlaceholder: '例如60',
rateLimitDescription: '啟用後將限制請求頻率,防止帳戶被封鎖',
quotaManagement: '配額管理',
dailyQuotaLabel: '每日配額限制',
dailyQuotaPlaceholder: '0 表示不限制',
quotaResetTimeLabel: '配額重設時間',
quotaResetTimePlaceholder: '例如00:00',
quotaResetDescription: '每天配額重設的時間點',
currentDailyUsage: '今日已用',
// 進階設定
advancedSettings: '進階設定',
customUserAgent: '自定義 User-Agent',
customUserAgentPlaceholder: '留空使用預設 User-Agent...',
userAgentDescription: '用於請求時的 User-Agent 識別',
// 通用提示和狀態
notSet: '未設定',
unlimited: '無限制',
enabled: '已啟用',
disabled: '已禁用',
active: '活躍',
inactive: '非活躍',
optional: '可選',
required: '必填',
recommended: '推薦',
// 額外的操作按鈕
testConnection: '測試連線',
testing: '測試中...',
refresh: '刷新',
refreshing: '刷新中...',
validate: '驗證',
validating: '驗證中...',
save: '儲存',
saving: '儲存中...',
// 使用情況和統計
usageStats: '使用統計',
loadingUsage: '載入使用情況...',
usageLoadFailed: '使用情況載入失敗',
// Gemini 專案 ID 詳細說明
geminiProjectIdRequired: 'Google Cloud/Workspace 帳戶需要提供專案 ID',
geminiProjectIdDetail: '某些 Google 帳戶(特別是綁定了 Google Cloud 的帳戶)會被識別為 Workspace 帳戶,需要提供額外的專案 ID。',
geminiHowToGetProjectId: '如何取得專案 ID',
geminiVisitConsole: '造訪',
geminiCopyProjectId: '複製專案 IDProject ID通常是字串格式',
geminiProjectIdWarning: '⚠️ 注意:要複製專案 IDProject ID不要複製專案編號Project Number',
geminiPersonalAccountTip: '提示:如果您的帳戶是普通個人帳戶(未綁定 Google Cloud請留空此欄位。',
// AWS 區域參考
awsRegionReference: '常用 AWS 區域參考:',
awsRegionEastUS: 'us-east-1 (美國東部)',
awsRegionWestUS: 'us-west-2 (美國西部)',
awsRegionEuropeIreland: 'eu-west-1 (歐洲愛爾蘭)',
awsRegionAsiaSingapore: 'ap-southeast-1 (新加坡)',
awsRegionAsiaTokyo: 'ap-northeast-1 (東京)',
awsRegionEuropeFrankfurt: 'eu-central-1 (法蘭克福)',
awsRegionInputTip: '💡 請輸入完整的區域代碼,如 us-east-1',
// Bedrock 模型說明
bedrockModelConfigDesc: 'Bedrock 模型設定說明:',
bedrockSupportsInferenceProfile: '支援 Inference Profile ID推薦',
bedrockSupportsARN: '支援 Application Inference Profile ARN',
bedrockCommonModel: '常用模型us.anthropic.claude-sonnet-4-20250514-v1:0',
bedrockEmptyUsesDefault: '留空將使用系統設定的預設模型',
// Azure OpenAI 模型選擇
azureModelSelectionDesc: '選擇此部署支援的模型類型',
// 限流機制
rateLimitMechanism: '限流機制',
enableRateLimitMechanism: '啟用限流機制',
rateLimitDescription2: '啟用後當帳戶返回429錯誤時將暫停調度一段時間',
rateLimitDurationMinutes: '限流時間 (分鐘)',
rateLimitDefaultMinutes: '預設60分鐘',
rateLimitPauseDesc: '帳戶被限流後暫停調度的時間(分鐘)',
// Claude Console 特定欄位
claudeConsoleFields: 'Claude Console 特定欄位',
quotaManagement: '額度管理',
modelMappingTable: '模型映射表',
modelMappingTableOptional: '模型映射表 (可選)',
addModelMapping: '新增模型映射',
// Claude 訂閱類型
subscriptionType: '訂閱類型',
// Setup Token 授權
setupTokenAuth: 'Setup Token 授權',
claudeSetupTokenAuth: 'Claude Setup Token 授權',
setupTokenAuthSteps: '請按照以下步驟透過 Setup Token 完成 Claude 帳戶的授權:',
generateSetupTokenLink: '產生 Setup Token 授權連結',
generating: '產生中...',
// 按鈕和操作
verifying: '驗證中...',
completeAuth: '完成授權',
updating: '更新中...',
update: '更新',
// 錯誤訊息
generateSetupTokenFailed: '產生Setup Token授權連結失敗',
copyFailed: '複製失敗,請手動複製',
setupTokenAuthFailed: 'Setup Token授權失敗請檢查授權碼是否正確',
accountCreationFailed: '帳戶建立失敗',
accountCreationError: '帳戶建立失敗:',
// 頁面結構註釋
stepIndicator: '步驟指示器',
step1BasicInfo: '步驟1: 基本資訊和代理設定',
groupSelector: '分組選擇器',
multiSelectGroup: '多選分組介面',
newGroupOption: '新建分組選項',
geminiProjectId: 'Gemini 專案 ID 欄位',
bedrockFields: 'Bedrock 特定欄位',
azureOpenAIFields: 'Azure OpenAI 特定欄位',
// 驗證訊息
nameRequired: '請填寫帳戶名稱',
apiUrlRequired: '請填寫 API URL',
rateLimitDefault60: '預設60分鐘',
rateLimitPauseDescription: '帳戶被限流後暫停調度的時間(分鐘)',
apiUrlPlaceholder: '例如https://api.example.com',
apiKeyPlaceholder: '請輸入API Key',
dailyQuotaLimit: '每日額度限制 ($)',
quotaZeroUnlimited: '0 表示不限制',
dailyQuotaDescription: '設定每日使用額度0 表示不限制',
quotaResetTime: '額度重設時間',
quotaResetTimeDescription: '每日自動重設額度的時間',
modelMappingDescription: '留空表示支援所有模型且不修改請求。設定映射後,左側模型會被識別為支援的模型,右側是實際傳送的模型。',
// 額度管理
quotaManagementFields: '配額管理欄位',
dailyQuotaLimitDollar: '每日配額限制 ($)',
quotaZeroUnlimited: '0 表示不限制',
dailyQuotaDesc: '設定每日使用配額0 表示不限制',
quotaResetTime: '配額重設時間',
quotaResetTimeDesc: '每日自動重設配額的時間',
// 模型映射
modelMappingOptional: '模型映射表 (可選)',
modelMappingDesc: '留空表示支援所有模型且不修改請求。設定映射後,左側模型會被識別為支援的模型,右側是實際發送的模型。',
originalModelName: '原始模型名稱',
mappedModelName: '映射後的模型名稱',
addModelMappingBtn: '新增模型映射',
customUserAgentOptional: '自定義 User-Agent (可選)',
customUserAgentDesc: '留空時將自動使用客戶端的 User-Agent僅在需要固定特定 UA 時填寫',
userAgentPassthrough: '留空則透傳客戶端 User-Agent',
// Claude 訂閱類型
claudeSubscriptionType: '訂閱類型',
claudeProLimitation: 'Pro 帳戶不支援 Claude Opus 4 模型',
// Claude 進階選項
claudeAutoStopScheduling: '5小時使用量接近限制時自動停止調度',
claudeAutoStopDesc: '當系統檢測到帳戶接近5小時使用限制時自動暫停調度該帳戶。進入新的時間視窗後會自動恢復調度。',
claudeUseUnifiedUA: '使用統一 Claude Code 版本',
claudeUnifiedUADesc: '開啟後將使用從真實 Claude Code 客戶端捕獲的統一 User-Agent提高相容性',
claudeCurrentUnifiedVersion: '💡 目前統一版本:',
claudeWaitingCapture: '⏳ 等待從 Claude Code 客戶端捕獲 User-Agent',
claudeCaptureHint: '💡 提示:如果長時間未能捕獲,請確認有 Claude Code 客戶端正在使用此帳戶, 或聯繫開發者檢查 User-Agent 格式是否發生變化',
claudeUseUnifiedClientId: '使用統一的客戶端標識',
claudeUnifiedClientIdDesc: '開啟後將使用固定的客戶端標識,使所有請求看起來來自同一個客戶端,減少特徵',
claudeClientIdLabel: '客戶端標識 ID',
claudeClientIdDesc: '此ID將替換請求中的user_id客戶端部分保留session部分用於黏性工作階段',
// Setup Token 流程
setupTokenAuthProcess: 'Claude Setup Token 授權',
setupTokenProcessDesc: '請按照以下步驟透過 Setup Token 完成 Claude 帳戶的授權:',
setupTokenStepOneTitle: '步驟 1產生授權連結',
setupTokenStepOneDesc: '點擊下方按鈕產生授權連結',
setupTokenGenerating: '產生中...',
setupTokenGenerateBtn: '產生 Setup Token 授權連結',
setupTokenCopyTitle: '複製連結',
// 步驟指示器
stepIndicator: '步驟指示器',
step1BasicInfo: '步驟1: 基本資訊和代理設定',
step2OAuth: '步驟2: OAuth授權',
step2SetupToken: '步驟2: Setup Token授權',
// 群組選擇器
groupSelector: '群組選擇器',
multiGroupInterface: '多選群組介面',
createNewGroupOption: '新建群組選項',
// 手動輸入Token提示
credentialsFromFile: '檔案中的憑證。',
// Placeholder 文字
originalModelNamePlaceholder: '原始模型名稱',
mappedModelNamePlaceholder: '映射後的模型名稱',
userAgentPlaceholder: '留空則透傳用戶端 User-Agent',
authCodePlaceholder: '貼上Claude Code授權頁面獲取的Authorization Code...',
leaveEmptyNoUpdate: '留空表示不更新',
leaveEmptyNoUpdateKey: '留空表示不更新 API Key',
leaveEmptyNoUpdateToken: '留空表示不更新...',
// 標籤和描述
customUserAgentOptional: '自定義 User-Agent (可選)',
clientIdLabel: '用戶端標識 ID',
schedulePriorityLabel: '調度優先級 (1-100)',
attentionLabel: '注意:',
supportedModelsLabel: '支援的模型',
newAccessTokenLabel: '新的 Access Token',
newRefreshTokenLabel: '新的 Refresh Token',
updateTokenLabel: '更新 Token',
// 按鈕文字
regenerateBtn: '重新產生',
previousStepBtn: '上一步',
// 描述性文字
claudeProLimitation: 'Pro 帳戶不支援 Claude Opus 4 模型',
claude5HourLimitDesc: '5小時使用量接近限制時自動停止調度',
claude5HourLimitExplanation: '當系統檢測到帳戶接近5小時使用限制時自動暫停調度該帳戶。進入新的時間視窗後會自動恢復調度。',
useUnifiedClaudeVersion: '使用統一 Claude Code 版本',
unifiedVersionDesc: '開啟後將使用從真實 Claude Code 用戶端捕獲的統一 User-Agent提高相容性',
currentUnifiedVersion: '💡 目前統一版本:',
waitingUserAgent: '⏳ 等待從 Claude Code 用戶端捕獲 User-Agent',
userAgentTip: '💡 提示:如果長時間未能捕獲,請確認有 Claude Code 用戶端正在使用此帳戶,',
contactDeveloper: '或聯繫開發者檢查 User-Agent 格式是否發生變化',
useUnifiedClientId: '使用統一的用戶端標識',
unifiedClientIdDesc: '開啟後將使用固定的用戶端標識,使所有請求看起來來自同一個用戶端,減少特徵',
clientIdReplaceDesc: '此ID將替換請求中的user_id用戶端部分保留session部分用於黏性工作階段',
// OAuth 步驟文字
step1GenerateAuthLink: '步驟1: 產生授權連結',
clickButtonGenerate: '點擊下方按鈕產生授權連結',
copyLinkTitle: '複製連結',
step2AccessAndAuth: '步驟2: 訪問連結並授權',
openInBrowser: '在瀏覽器中開啟連結並完成授權',
browserAuthDesc: '請在新分頁中開啟授權連結,登錄您的 Claude 帳戶並授權 Claude Code。',
proxyNotice: '如果您設定了代理,請確保瀏覽器也使用相同的代理訪問授權頁面。',
step3InputAuthCode: '步驟3: 輸入授權碼',
inputAuthCodeTitle: '輸入 Authorization Code',
authCompleteDesc: '授權完成後,從返回頁面複製 Authorization Code並貼上到下方輸入框',
pasteAuthCodeDesc: '請貼上從 Claude Code 授權頁面複製的 Authorization Code',
// AWS 區域參考
awsRegionRef: '常用 AWS 區域參考:',
// 錯誤訊息
apiKeyRequired: '請填寫 API Key',
refreshTokenRequired: '請填寫 Refresh Token',
accessTokenRequired: '請填寫 Access Token',
copyFailedManual: '複製失敗,請手動複製',
// 表單描述
modelSupportDesc: '留空表示支援所有模型。如果指定模型,請求中的模型不在列表內將不會調度到此帳戶',
modelTypeSelectionDesc: '選擇此部署支援的模型類型',
userAgentDesc: '留空時將自動使用用戶端的 User-Agent僅在需要固定特定 UA 時填寫',
// 基础標籤
apiUrlLabel: 'API URL',
apiUrlRequired: 'API URL *',
apiKeyLabel: 'API Key',
apiKeyRequired: 'API Key *',
// 更多缺失的翻譯鍵
copyLinkTooltip: '複製連結',
// Claude 訂閱類型顯示
claudeMaxDisplay: 'Claude Max',
claudeProDisplay: 'Claude Pro'
},
// OAuth Flow Component
oauthFlow: {
// 平台標題
claudeAccountAuth: 'Claude 帳戶授權',
geminiAccountAuth: 'Gemini 帳戶授權',
openaiAccountAuth: 'OpenAI 帳戶授權',
// 流程說明
claudeAuthDescription: '請按照以下步驟完成 Claude 帳戶的授權:',
geminiAuthDescription: '請按照以下步驟完成 Gemini 帳戶的授權:',
openaiAuthDescription: '請按照以下步驟完成 OpenAI 帳戶的授權:',
// 步驟標題
step1Title: '點擊下方按銮產生授權連結',
step2Title: '在瀏覽器中打開連結並完成授權',
step3Title: '輸入 Authorization Code',
step3TitleOpenAI: '輸入授權連結或 Code',
// 步驟描述
step2Description: '請在新分頁中打開授權連結,登入您的 Claude 帳戶並授權。',
step2DescriptionGemini: '請在新分頁中打開授權連結,登入您的 Gemini 帳戶並授權。',
step2DescriptionOpenAI: '請在新分頁中打開授權連結,登入您的 OpenAI 帳戶並授權。',
step3Description: '授權完成後,頁面會顯示一個',
step3DescriptionMiddle: ',請將其複製並貼上到下方輸入框:',
step3DescriptionGemini: '授權完成後,頁面會顯示一個 Authorization Code請將其複製並貼上到下方輸入框',
step3DescriptionOpenAI: '授權完成後,當頁面地址變為',
step3DescriptionOpenAIMiddle: '時:',
// 按銮文字
generating: '產生中...',
generateAuthLink: '產生授權連結',
regenerate: '重新產生',
previousStep: '上一步',
completeAuth: '完成授權',
verifying: '驗證中...',
// 占位符
authCodePlaceholder: '貼上Claude頁面獲取的Authorization Code...',
authCodePlaceholderGemini: '貼上Gemini頁面獲取的Authorization Code...',
authCodePlaceholderOpenAI: '方式1複製完整的連結http://localhost:1455/auth/callback?code=...)\n方式2僅複製 code 參數的值\n系統會自動識別並提取所需資訊',
// 標籤
authorizationCode: 'Authorization Code',
authLinkOrCode: '授權連結或 Code',
// 提示資訊
copyLinkTooltip: '複製連結',
authCodeHint: '請貼上Claude頁面複製的Authorization Code',
authCodeHintGemini: '請貼上Gemini頁面複製的Authorization Code',
// 注意事項
proxyNotice: '注意:',
proxyNoticeText: '如果您設定了代理,請確保瀏覽器也使用相同的代理訪問授權頁面。',
// OpenAI 特有提示
openaiImportantNote: '重要提示:',
openaiLoadingNote: '授權後頁面可能會加載較長時間,請耐心等待。',
openaiAddressNote: '當瀏覽器地址欄變為',
openaiAddressNoteMiddle: '開頭時,表示授權已完成。',
openaiTip: '提示:',
openaiTipText: '您可以直接複製整個連結或僅複製 code 參數值,系統會自動識別。',
openaiLinkExample: '• 完整連結示例:',
openaiCodeExample: '• 僅 Code 示例:',
// 成功和錯誤消息
successExtractCode: '成功提取授權碼!',
errorCodeNotFound: 'URL 中未找到授權碼參數,請檢查連結是否正確',
errorLinkFormat: '連結格式錯誤,請檢查是否為完整的 URL',
errorWrongUrlFormat: '請貼上以 http://localhost:1455 或 http://localhost:45462 開頭的連結',
linkCopied: '連結已複製',
authFailed: '授權失敗,請檢查授權碼是否正確',
generateAuthFailed: '產生授權連結失敗'
},
// Group Management Modal
groupManagement: {
title: '帳戶分組管理',
createNewGroup: '創建新分組',
createGroup: '創建新分組',
groupNameRequired: '分組名稱 *',
groupNamePlaceholder: '輸入分組名稱',
platformTypeRequired: '平台類型 *',
descriptionOptional: '描述 (可選)',
descriptionPlaceholder: '分組描述...',
creating: '創建中...',
create: '創建',
cancel: '取消',
loading: '加載中...',
noGroups: '暫無分組',
noDescription: '暫無描述',
membersCount: ' 個成員',
edit: '編輯',
delete: '刪除',
editGroup: '編輯分組',
platformTypeLabel: '平台類型',
cannotModify: '(不可修改)',
updating: '更新中...',
update: '更新',
// Toast messages
loadGroupsFailed: '加載分組列表失敗',
fillRequiredFields: '請填寫必填項',
groupCreated: '分組創建成功',
createGroupFailed: '創建分組失敗',
fillGroupName: '請填寫分組名稱',
groupUpdated: '分組更新成功',
updateGroupFailed: '更新分組失敗',
groupHasMembers: '分組內還有成員,無法刪除',
confirmDelete: '確定要刪除分組 "{name}" 嗎?',
groupDeleted: '分組刪除成功',
deleteGroupFailed: '刪除分組失敗'
},
// Proxy Configuration
proxyConfig: {
title: '代理設置 (可選)',
enableProxy: '啟用代理',
configDescription: '配置代理以訪問受限的網路資源。支持 SOCKS5 和 HTTP 代理。',
stabilityNotice: '請確保代理伺服器穩定可用,否則會影響帳戶的正常使用。',
proxyType: '代理類型',
hostAddress: '主機地址',
hostPlaceholder: '例如: 192.168.1.100',
port: '端口',
portPlaceholder: '例如: 1080',
needsAuth: '需要身份驗證',
username: '用戶名',
usernamePlaceholder: '代理用戶名',
password: '密碼',
passwordPlaceholder: '代理密碼',
tip: '提示:',
apiRequestNotice: '代理設置將用於所有與此帳戶相關的API請求。請確保代理伺服器支持HTTPS流量轉發。'
}
}