fix(i18n): 补齐 en 语言包 overview 和 resources 缺失 key

Fixes #3909
This commit is contained in:
li
2026-07-10 10:45:44 +08:00
parent 12d811bd76
commit e984b4e2e1
2 changed files with 153 additions and 4 deletions
+87 -2
View File
@@ -4,15 +4,26 @@ export default {
title: 'Admin Dashboard',
description: 'System overview and real-time statistics',
apiKeys: 'API Keys',
totalApiKeys: 'Total API Keys',
activeApiKeys: 'Active Keys',
accounts: 'Accounts',
totalAccounts: 'Total Accounts',
activeAccounts: 'Active Accounts',
users: 'Users',
totalUsers: 'Total Users',
todayRequests: 'Today Requests',
totalRequests: 'Total Requests',
todayCost: 'Today Cost',
totalCost: 'Total Cost',
newUsersToday: 'New Users Today',
todayTokens: 'Today Tokens',
totalTokens: 'Total Tokens',
input: 'Input',
output: 'Output',
cacheToday: 'Cache (Today)',
performance: 'Performance',
avgResponse: 'Avg Response',
averageTime: 'Average Time',
active: 'active',
ok: 'ok',
err: 'err',
@@ -33,6 +44,7 @@ export default {
noGroup: 'No Group',
requests: 'Requests',
tokens: 'Tokens',
cache: 'Cache',
actual: 'Actual',
standard: 'Standard',
accountCost: 'Cost',
@@ -50,11 +62,21 @@ export default {
spendShort: 'Spend',
requestsShort: 'Req',
tokensShort: 'Tok',
last7Days: 'Last 7 days',
noUsageRecords: 'No usage records',
startUsingApi: 'Once you start using the API, your usage history will appear here.',
viewAllUsage: 'View all',
quickActions: 'Quick Actions',
manageUsers: 'Manage Users',
viewUserAccounts: 'View and manage user accounts',
manageAccounts: 'Manage Accounts',
configureAiAccounts: 'Configure AI platform accounts',
batchImage: 'Batch Image',
batchImageDesc: 'Submit jobs and copy agent instructions',
groupPricing: 'Group Pricing',
groupPricingDesc: 'Configure batch discount and hold ratio',
systemSettings: 'System Settings',
configureSystem: 'Configure system settings',
failedToLoad: 'Failed to load dashboard statistics'
},
@@ -398,7 +420,10 @@ export default {
createUser: 'Create User',
editUser: 'Edit User',
deleteUser: 'Delete User',
searchUsers: 'Search by email, username, notes, or API key...',
deleteConfirmMessage: "Are you sure you want to delete user '{email}'? This action cannot be undone.",
searchPlaceholder: 'Search by email, username, notes, or API key...',
searchUsers: 'Search by email, username, notes, or API key',
roleFilter: 'Role Filter',
allRoles: 'All Roles',
allStatus: 'All Status',
allGroups: 'All Groups',
@@ -414,6 +439,8 @@ export default {
searchAuthorizedGroups: 'Search authorized groups...',
allApiKeyGroups: 'All API Key Groups',
searchApiKeyGroups: 'Search API Key groups...',
statusFilter: 'Status Filter',
allStatuses: 'All Status',
admin: 'Admin',
user: 'User',
disabled: 'Disabled',
@@ -433,7 +460,21 @@ export default {
creating: 'Creating...',
updating: 'Updating...',
form: {
emailLabel: 'Email',
emailPlaceholder: 'Enter email',
usernameLabel: 'Username',
usernamePlaceholder: 'Enter username (optional)',
notesLabel: 'Notes',
notesPlaceholder: 'Enter notes (admin only)',
notesHint: 'This note is only visible to administrators',
passwordLabel: 'Password',
passwordPlaceholder: 'Enter password (leave empty to keep unchanged)',
roleLabel: 'Role',
selectRole: 'Select role',
balanceLabel: 'Balance',
concurrencyLabel: 'Concurrency',
statusLabel: 'Status',
selectStatus: 'Select status',
rpmLimit: 'Requests Per Minute (RPM)',
rpmLimitPlaceholder: '0 = unlimited',
rpmLimitHint: 'Max requests per minute for this user; 0 = unlimited. Acts as a fallback only when the group has no rpm_limit set.'
@@ -504,6 +545,21 @@ export default {
soraStorageQuotaHint: 'In GB, 0 means use group or system default quota',
amountRequired: 'Please enter a valid amount',
insufficientBalance: 'Insufficient balance',
adjustBalance: 'Adjust Balance',
adjustConcurrency: 'Adjust Concurrency',
adjustmentAmount: 'Adjustment Amount',
adjustmentAmountHint: 'Positive to add, negative to subtract',
currentConcurrency: 'Current Concurrency',
saving: 'Saving...',
noUsers: 'No users yet',
noUsersDescription: 'Create your first user to get started.',
userCreatedSuccess: 'User created successfully',
userUpdatedSuccess: 'User updated successfully',
userDeletedSuccess: 'User deleted successfully',
balanceAdjustedSuccess: 'Balance adjusted successfully',
concurrencyAdjustedSuccess: 'Concurrency adjusted successfully',
failedToSave: 'Failed to save user',
failedToAdjust: 'Adjustment failed',
deleteConfirm: "Are you sure you want to delete '{email}'? This action cannot be undone.",
setAllowedGroups: 'Set Allowed Groups',
allowedGroupsHint:
@@ -695,6 +751,7 @@ export default {
allPlatforms: 'All Platforms',
allStatus: 'All Status',
allGroups: 'All Groups',
exclusiveFilter: 'Exclusive',
exclusive: 'Exclusive',
nonExclusive: 'Non-Exclusive',
public: 'Public',
@@ -706,7 +763,10 @@ export default {
rpmOverrideHint: 'Per-user RPM cap in this group; empty = group default; 0 = unlimited',
rateDefault: 'default',
rpmDefault: 'default',
exclusive: 'Exclusive',
type: 'Type',
priority: 'Priority',
apiKeys: 'API Keys',
accounts: 'Accounts',
capacity: 'Capacity',
usage: 'Usage',
@@ -742,14 +802,39 @@ export default {
rateMultiplier: 'Rate Multiplier',
status: 'Status',
exclusive: 'Exclusive Group',
nameLabel: 'Group Name',
namePlaceholder: 'Enter group name',
descriptionLabel: 'Description',
descriptionPlaceholder: 'Enter description (optional)',
rateMultiplierLabel: 'Rate Multiplier',
rateMultiplierHint: '1.0 = standard rate, 0.5 = half price, 2.0 = double',
rpmLimit: 'Requests Per Minute (RPM)',
rpmLimitPlaceholder: '0 = unlimited',
rpmLimitHint: 'Max requests per minute for each user in this group; 0 = unlimited. Once set, it takes over per-user rate limiting in this group (overrides the user-level rpm_limit fallback).'
rpmLimitHint: 'Max requests per minute for each user in this group; 0 = unlimited. Once set, it takes over per-user rate limiting in this group (overrides the user-level rpm_limit fallback).',
exclusiveLabel: 'Exclusive Group',
exclusiveHint: 'Exclusive group, can be manually assigned to users',
platformLabel: 'Platform Restriction',
platformPlaceholder: 'Select platform (leave empty for no restriction)',
accountsLabel: 'Designated Accounts',
accountsPlaceholder: 'Select accounts (leave empty for no restriction)',
priorityLabel: 'Priority',
priorityHint: 'Lower value means higher priority, used for account scheduling',
statusLabel: 'Status'
},
exclusiveObj: {
yes: 'Yes',
no: 'No'
},
enterGroupName: 'Enter group name',
optionalDescription: 'Optional description',
platformHint: 'Select the platform this group is associated with',
platformNotEditable: 'Platform cannot be changed after creation',
saving: 'Saving...',
noGroups: 'No groups yet',
noGroupsDescription: 'Create a group to better manage API keys and rates.',
groupCreatedSuccess: 'Group created successfully',
groupUpdatedSuccess: 'Group updated successfully',
groupDeletedSuccess: 'Group deleted successfully',
rateMultiplierHint: 'Cost multiplier for this group (e.g., 1.5 = 150% of base cost)',
exclusiveHint: 'Exclusive group, manually assign to specific users',
exclusiveTooltip: {
@@ -50,6 +50,8 @@ export default {
ad: {
inline: 'Need proxy IP?'
},
deleteConfirmMessage: "Are you sure you want to delete proxy '{name}'?",
testProxy: 'Test Proxy',
dataImport: 'Import',
dataExportSelected: 'Export Selected',
dataImportTitle: 'Import Proxies',
@@ -93,7 +95,27 @@ export default {
latency: 'Latency',
expiry: 'Validity',
createdAt: 'Created',
actions: 'Actions'
actions: 'Actions',
nameLabel: 'Name',
namePlaceholder: 'Enter proxy name',
protocolLabel: 'Protocol',
selectProtocol: 'Select protocol',
hostLabel: 'Host',
hostPlaceholder: 'Enter host address',
portLabel: 'Port',
portPlaceholder: 'Enter port',
usernameLabel: 'Username (Optional)',
usernamePlaceholder: 'Enter username',
passwordLabel: 'Password (Optional)',
passwordPlaceholder: 'Enter password',
priorityLabel: 'Priority',
statusLabel: 'Status'
},
filters: {
protocol: 'Protocol',
allProtocols: 'All Protocols',
status: 'Status',
allStatuses: 'All Status'
},
testConnection: 'Test Connection',
qualityCheck: 'Quality Check',
@@ -150,8 +172,12 @@ export default {
batchImportAllSkipped: 'All {skipped} proxies already exist, skipped import',
failedToImport: 'Failed to batch import',
// Other messages
saving: 'Saving...',
testing: 'Testing...',
creating: 'Creating...',
updating: 'Updating...',
noProxies: 'No proxies yet',
noProxiesDescription: 'Add a proxy server to improve API access stability.',
proxyCreated: 'Proxy created successfully',
proxyUpdated: 'Proxy updated successfully',
proxyDeleted: 'Proxy deleted successfully',
@@ -181,7 +207,12 @@ export default {
qualityStatusFail: 'Fail',
qualityStatusChallenge: 'Challenge',
qualityTargetBase: 'Base Connectivity',
proxyCreatedSuccess: 'Proxy created successfully',
proxyUpdatedSuccess: 'Proxy updated successfully',
proxyDeletedSuccess: 'Proxy deleted successfully',
testSuccess: 'Proxy test passed',
failedToLoad: 'Failed to load proxies',
failedToSave: 'Failed to save proxy',
failedToCreate: 'Failed to create proxy',
failedToUpdate: 'Failed to update proxy',
failedToDelete: 'Failed to delete proxy',
@@ -229,6 +260,7 @@ export default {
status: 'Status',
usedBy: 'Used By',
usedAt: 'Used At',
createdAt: 'Created At',
expiresAt: 'Expires At',
actions: 'Actions'
},
@@ -304,7 +336,39 @@ export default {
used: 'Used',
expired: 'Expired',
disabled: 'Disabled'
}
},
form: {
typeLabel: 'Type',
selectType: 'Select type',
valueLabel: 'Value',
valuePlaceholder: 'Enter value',
balanceHint: 'Balance amount (USD)',
concurrencyHint: 'Concurrency increment',
countLabel: 'Count',
countPlaceholder: 'Enter count',
countHint: 'Number of redeem codes to generate',
prefixLabel: 'Prefix (Optional)',
prefixPlaceholder: 'e.g., GIFT',
expiresLabel: 'Expires At (Optional)'
},
filters: {
type: 'Type',
allTypes: 'All Types',
status: 'Status',
allStatuses: 'All Status',
search: 'Search codes'
},
copyCode: 'Copy',
disableCode: 'Disable',
enableCode: 'Enable',
deleteConfirmMessage: 'Are you sure you want to delete this redeem code?',
noCodes: 'No redeem codes yet',
noCodesDescription: 'Generate redeem codes to distribute balance or concurrency to users.',
codesGeneratedSuccess: 'Redeem codes generated successfully, {count} total',
codeDisabledSuccess: 'Redeem code disabled',
codeEnabledSuccess: 'Redeem code enabled',
codeDeletedSuccess: 'Redeem code deleted successfully',
failedToUpdate: 'Failed to update redeem code'
},
// Announcements