Files
claude-relay-service/web/admin-spa/src/i18n/locales/en.js
Wangnov cd7959f3bf feat: 实现DashboardView.vue完整国际化支持
- 完成DashboardView.vue全面国际化
  * 主要统计卡片:总API Keys、服务账户、今日请求、系统状态全部多语言化
  * Token统计模块:今日Token、总消耗量、实时RPM/TPM指标完整国际化
  * 实时性能监控:请求数/Token数每分钟指标、历史数据标识多语言化
  * 图表组件完整国际化:饼图、趋势图、API Keys使用趋势图
  * 交互控件全面支持:日期选择器、粒度切换、自动刷新等

- 图表系统深度国际化
  * Chart.js图表标签完全多语言化:Token使用趋势、模型分布等
  * 工具提示和坐标轴标签支持动态语言切换
  * 表格头部和数据展示完整国际化支持

- 扩展三语言dashboard翻译组
  * zh-cn.js: 简体中文专业术语翻译
  * zh-tw.js: 繁体中文技术翻译(快取、即時等台湾用词)
  * en.js: 英文专业技术术语标准翻译
  * 总计90+个翻译键值,涵盖所有用户可见文本

- 平台账户工具提示国际化
  * Claude/Console/Gemini/Bedrock/OpenAI/Azure OpenAI账户状态
  * 支持参数化翻译,动态显示账户数量和状态

- 提升复杂业务场景多语言体验
  * 管理后台核心数据可视化页面完全国际化
  * 60+个硬编码中文字符串全部替换
  * 确保不同语言环境下数据展示的专业性
2025-09-12 00:03:02 +08:00

321 lines
11 KiB
JavaScript

export default {
common: {
save: 'Save',
cancel: 'Cancel',
confirm: 'Confirm',
loading: 'Loading...',
edit: 'Edit',
delete: 'Delete',
create: 'Create',
update: 'Update',
search: 'Search',
reset: 'Reset',
locale: 'en'
},
language: {
zh: '简体中文',
'zh-tw': '繁體中文',
en: 'English',
current: 'Current Language',
switch: 'Switch Language'
},
header: {
adminPanel: 'Admin Panel',
userMenu: 'User Menu',
logout: 'Logout',
settings: 'Settings',
// Version related
currentVersion: 'Current Version',
newVersionAvailable: 'New version available',
newVersion: 'New Version',
hasUpdate: 'New Version Available',
viewUpdate: 'View Update',
checkingUpdate: 'Checking for updates...',
alreadyLatest: 'Already the latest version',
checkUpdate: 'Check Update',
// User menu items
changeAccountInfo: 'Change Account Info',
// Change password modal
changePasswordModal: {
title: 'Change Account Information',
currentUsername: 'Current Username',
currentUsernameHint: 'Current username, enter new username to modify',
newUsername: 'New Username',
newUsernamePlaceholder: 'Enter new username (leave empty to keep unchanged)',
newUsernameHint: 'Leave empty to keep username unchanged',
currentPassword: 'Current Password',
currentPasswordPlaceholder: 'Please enter current password',
newPassword: 'New Password',
newPasswordPlaceholder: 'Please enter new password',
newPasswordHint: 'Password must be at least 8 characters',
confirmPassword: 'Confirm New Password',
confirmPasswordPlaceholder: 'Please enter new password again',
saving: 'Saving...',
save: 'Save Changes',
// Messages
passwordMismatch: 'Passwords do not match',
passwordTooShort: 'New password must be at least 8 characters',
accountInfoChangeSuccess: 'Account information changed successfully, please log in again',
passwordChangeSuccess: 'Password changed successfully, please log in again',
changeFailed: 'Change failed',
changePasswordFailed: 'Failed to change password'
},
// Logout
logoutConfirm: 'Are you sure you want to logout?',
logoutSuccess: 'Logged out safely'
},
apiStats: {
title: 'API Key Usage Statistics',
tutorialTitle: 'Tutorial',
userLogin: 'User Login',
adminPanel: 'Admin Panel',
statsQuery: 'Statistics Query',
tutorial: 'Tutorial',
timeRange: 'Statistics Time Range',
today: 'Today',
thisMonth: 'This Month',
// API Key Input
usageStatsQuery: 'Usage Statistics Query',
apiKeyDescription: 'Query your API Key usage and statistical data',
enterApiKey: 'Enter your API Key',
enterApiKeys: 'Enter your API Keys (one per line or comma separated)',
singleMode: 'Single',
aggregateMode: 'Aggregate',
singleModeTitle: 'Single Mode',
aggregateModeTitle: 'Aggregate Mode',
queryButton: 'Query',
// Stats Overview
batchQuerySummary: 'Batch Query Summary',
apiKeyInfo: 'API Key Information',
queryKeysCount: 'Query Keys Count',
activeKeysCount: 'Active Keys Count',
invalidKeysCount: 'Invalid Keys Count',
totalRequests: 'Total Requests',
totalTokens: 'Total Tokens',
totalCost: 'Total Cost',
individual: '',
// Aggregated Stats Card
usageRatio: 'Usage Ratio',
requests: ' requests',
otherKeys: 'Other',
keys: 'Keys',
// Model Usage Stats
modelUsageStats: 'Model Usage Statistics',
loadingModelStats: 'Loading model statistics...',
requestCount: ' requests',
totalCost: 'Total Cost',
inputTokens: 'Input Tokens',
outputTokens: 'Output Tokens',
cacheCreateTokens: 'Cache Create',
cacheReadTokens: 'Cache Read',
noModelData: 'No {period} model usage data available',
// Token Distribution
tokenDistribution: 'Token Usage Distribution',
inputToken: 'Input Tokens',
outputToken: 'Output Tokens',
cacheCreateToken: 'Cache Create Tokens',
cacheReadToken: 'Cache Read Tokens',
// Limit Config
limitConfig: 'Limit Configuration',
limitConfigAggregate: 'Limit Configuration (Aggregate Query Mode)',
apiKeysOverview: 'API Keys Overview',
totalKeys: 'Total Keys',
activeKeys: 'Active Keys',
aggregatedStats: 'Aggregated Statistics',
dailyLimit: 'Daily Limit',
monthlyLimit: 'Monthly Limit',
usageToday: 'Usage Today',
usageThisMonth: 'Usage This Month',
remaining: 'Remaining',
// Stats Overview - Additional keys
name: 'Name',
status: 'Status',
permissions: 'Permissions',
createdAt: 'Created At',
expiresAt: 'Expires At',
active: 'Active',
inactive: 'Inactive',
notActivated: 'Not Activated',
expired: 'Expired',
neverExpires: 'Never Expires',
allModels: 'All Models',
unknown: 'Unknown',
none: 'None',
formatError: 'Format Error',
usageStatsOverview: 'Usage Statistics Overview',
keyContribution: 'Key Contribution Ratio',
firstUseDays: 'Expires {days} days after first use',
todayRequests: 'Today Requests',
todayTokens: 'Today Tokens',
todayCost: 'Today Cost',
todayInputTokens: 'Today Input Tokens',
monthlyRequests: 'Monthly Requests',
monthlyTokens: 'Monthly Tokens',
monthlyCost: 'Monthly Cost',
monthlyInputTokens: 'Monthly Input Tokens',
// Limit Config - Additional keys
dailyCostLimit: 'Daily Cost Limit',
concurrencyLimit: 'Concurrency Limit',
modelLimit: 'Model Limit',
clientLimit: 'Client Limit',
restrictedModelsCount: 'Restricted {count} models',
allowAllModels: 'Allow All Models',
restrictedClientsCount: 'Restricted {count} clients',
allowAllClients: 'Allow All Clients',
detailedLimitInfo: 'Detailed Limit Information',
restrictedModelsList: 'Restricted Models List',
restrictedModelsNote: 'This API Key cannot access the models listed above',
allowedClientsList: 'Allowed Clients',
allowedClientsNote: 'This API Key can only be used by the clients listed above',
timeWindowLimit: 'Time Window Limit',
aggregateStatsNote: 'Each API Key has independent limit settings, individual limit configurations are not shown in aggregate mode',
aggregateStatsSummary: 'Aggregate Statistics Summary',
invalidKeysCount: '{count} invalid API Keys',
orRelationshipRequests: 'Request count and cost limits have an "OR" relationship, rate limiting is triggered when either limit is reached',
orRelationshipTokens: 'Request count and token usage have an "OR" relationship, rate limiting is triggered when either limit is reached',
onlyRequestsLimit: 'Only request count is limited',
// Token Distribution - Additional keys
totalAmount: 'Total',
todayTotal: 'Today Total',
monthlyTotal: 'Monthly Total',
// Additional missing keys
usageRatioOnlyInMultiMode: 'Usage ratio is only displayed in multi-key query mode',
noData: 'No Data',
// ApiKeyInput placeholders and texts
apiKeyPlaceholder: 'Please enter your API Key (cr_...)',
apiKeysPlaceholder: 'Please enter your API Keys, supporting the following formats:\ncr_xxx\ncr_yyy\nor\ncr_xxx, cr_yyy',
clearInput: 'Clear Input',
securityNoticeSingle: 'Your API Key is only used to query your own statistical data and will not be stored or used for other purposes',
securityNoticeMulti: 'Your API Keys are only used to query statistical data and will not be stored. Some individual information will not be displayed in aggregate mode.',
multiKeyTip: 'Tip: Supports querying up to 30 API Keys simultaneously. Use Ctrl+Enter for quick query.'
},
// Login page
login: {
title: 'Admin Panel',
username: 'Username',
usernamePlaceholder: 'Please enter username',
password: 'Password',
passwordPlaceholder: 'Please enter password',
loginButton: 'Login',
loggingIn: 'Logging in...'
},
// Dashboard page
dashboard: {
// Main stats cards
totalApiKeys: 'Total API Keys',
activeApiKeys: 'Active',
serviceAccounts: 'Service Accounts',
normalAccounts: 'Normal',
abnormalAccounts: 'Abnormal',
pausedAccounts: 'Paused',
rateLimitedAccounts: 'Rate Limited',
todayRequests: 'Today Requests',
totalRequests: 'Total Requests',
systemStatus: 'System Status',
uptime: 'Uptime',
// Platform accounts tooltip
claudeAccount: 'Claude: {total} accounts (Normal: {normal})',
consoleAccount: 'Console: {total} accounts (Normal: {normal})',
geminiAccount: 'Gemini: {total} accounts (Normal: {normal})',
bedrockAccount: 'Bedrock: {total} accounts (Normal: {normal})',
openaiAccount: 'OpenAI: {total} accounts (Normal: {normal})',
azureOpenaiAccount: 'Azure OpenAI: {total} accounts (Normal: {normal})',
// Token stats cards
todayToken: 'Today Tokens',
totalTokenConsumption: 'Total Token Consumption',
inputTokens: 'Input',
outputTokens: 'Output',
cacheCreateTokens: 'Cache Create',
cacheReadTokens: 'Cache Read',
// Real-time metrics
realtimeRPM: 'Realtime RPM',
realtimeTPM: 'Realtime TPM',
requestsPerMinute: 'Requests per Minute',
tokensPerMinute: 'Tokens per Minute',
historicalData: 'Historical Data',
minutes: 'minutes',
// Charts section
modelDistributionAndTrend: 'Model Usage Distribution & Token Usage Trends',
// Date filter presets
today: 'Today',
yesterday: 'Yesterday',
last7Days: 'Last 7 Days',
last30Days: 'Last 30 Days',
thisWeek: 'This Week',
lastWeek: 'Last Week',
thisMonth: 'This Month',
lastMonth: 'Last Month',
// Granularity buttons
byDay: 'By Day',
byHour: 'By Hour',
// Date picker
startDatePlaceholder: 'Start Date',
endDatePlaceholder: 'End Date',
dateSeparator: 'to',
maxHours24: 'Maximum 24 hours',
// Auto refresh controls
autoRefresh: 'Auto Refresh',
refresh: 'Refresh',
refreshing: 'Refreshing',
refreshDataNow: 'Refresh data now',
// Charts
tokenUsageDistribution: 'Token Usage Distribution',
detailedStatistics: 'Detailed Statistics',
noModelUsageData: 'No model usage data available',
// Table headers
model: 'Model',
requestCount: 'Requests',
totalTokens: 'Total Tokens',
cost: 'Cost',
percentage: 'Percentage',
// Trend charts
tokenUsageTrend: 'Token Usage Trend',
apiKeysUsageTrend: 'API Keys Usage Trend',
requestsCount: 'Requests Count',
tokenCount: 'Token Count',
totalApiKeysCount: 'Total {count} API Keys',
showingTop10: 'Total {count} API Keys, showing top 10 by usage',
// Chart labels
inputTokensLabel: 'Input Tokens',
outputTokensLabel: 'Output Tokens',
cacheCreateTokensLabel: 'Cache Create Tokens',
cacheReadTokensLabel: 'Cache Read Tokens',
costLabel: 'Cost (USD)',
requestsLabel: 'Requests',
time: 'Time',
date: 'Date',
tokenQuantity: 'Token Quantity',
requestsQuantity: 'Requests Count'
}
}