mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-11-01 16:29:29 +00:00
@@ -4,15 +4,26 @@ export default {
|
|||||||
title: 'Admin Dashboard',
|
title: 'Admin Dashboard',
|
||||||
description: 'System overview and real-time statistics',
|
description: 'System overview and real-time statistics',
|
||||||
apiKeys: 'API Keys',
|
apiKeys: 'API Keys',
|
||||||
|
totalApiKeys: 'Total API Keys',
|
||||||
|
activeApiKeys: 'Active Keys',
|
||||||
accounts: 'Accounts',
|
accounts: 'Accounts',
|
||||||
|
totalAccounts: 'Total Accounts',
|
||||||
|
activeAccounts: 'Active Accounts',
|
||||||
users: 'Users',
|
users: 'Users',
|
||||||
|
totalUsers: 'Total Users',
|
||||||
todayRequests: 'Today Requests',
|
todayRequests: 'Today Requests',
|
||||||
|
totalRequests: 'Total Requests',
|
||||||
|
todayCost: 'Today Cost',
|
||||||
|
totalCost: 'Total Cost',
|
||||||
newUsersToday: 'New Users Today',
|
newUsersToday: 'New Users Today',
|
||||||
todayTokens: 'Today Tokens',
|
todayTokens: 'Today Tokens',
|
||||||
totalTokens: 'Total Tokens',
|
totalTokens: 'Total Tokens',
|
||||||
|
input: 'Input',
|
||||||
|
output: 'Output',
|
||||||
cacheToday: 'Cache (Today)',
|
cacheToday: 'Cache (Today)',
|
||||||
performance: 'Performance',
|
performance: 'Performance',
|
||||||
avgResponse: 'Avg Response',
|
avgResponse: 'Avg Response',
|
||||||
|
averageTime: 'Average Time',
|
||||||
active: 'active',
|
active: 'active',
|
||||||
ok: 'ok',
|
ok: 'ok',
|
||||||
err: 'err',
|
err: 'err',
|
||||||
@@ -33,6 +44,7 @@ export default {
|
|||||||
noGroup: 'No Group',
|
noGroup: 'No Group',
|
||||||
requests: 'Requests',
|
requests: 'Requests',
|
||||||
tokens: 'Tokens',
|
tokens: 'Tokens',
|
||||||
|
cache: 'Cache',
|
||||||
actual: 'Actual',
|
actual: 'Actual',
|
||||||
standard: 'Standard',
|
standard: 'Standard',
|
||||||
accountCost: 'Cost',
|
accountCost: 'Cost',
|
||||||
@@ -50,11 +62,21 @@ export default {
|
|||||||
spendShort: 'Spend',
|
spendShort: 'Spend',
|
||||||
requestsShort: 'Req',
|
requestsShort: 'Req',
|
||||||
tokensShort: 'Tok',
|
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',
|
quickActions: 'Quick Actions',
|
||||||
|
manageUsers: 'Manage Users',
|
||||||
|
viewUserAccounts: 'View and manage user accounts',
|
||||||
|
manageAccounts: 'Manage Accounts',
|
||||||
|
configureAiAccounts: 'Configure AI platform accounts',
|
||||||
batchImage: 'Batch Image',
|
batchImage: 'Batch Image',
|
||||||
batchImageDesc: 'Submit jobs and copy agent instructions',
|
batchImageDesc: 'Submit jobs and copy agent instructions',
|
||||||
groupPricing: 'Group Pricing',
|
groupPricing: 'Group Pricing',
|
||||||
groupPricingDesc: 'Configure batch discount and hold ratio',
|
groupPricingDesc: 'Configure batch discount and hold ratio',
|
||||||
|
systemSettings: 'System Settings',
|
||||||
|
configureSystem: 'Configure system settings',
|
||||||
failedToLoad: 'Failed to load dashboard statistics'
|
failedToLoad: 'Failed to load dashboard statistics'
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -398,7 +420,10 @@ export default {
|
|||||||
createUser: 'Create User',
|
createUser: 'Create User',
|
||||||
editUser: 'Edit User',
|
editUser: 'Edit User',
|
||||||
deleteUser: 'Delete 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',
|
allRoles: 'All Roles',
|
||||||
allStatus: 'All Status',
|
allStatus: 'All Status',
|
||||||
allGroups: 'All Groups',
|
allGroups: 'All Groups',
|
||||||
@@ -414,6 +439,8 @@ export default {
|
|||||||
searchAuthorizedGroups: 'Search authorized groups...',
|
searchAuthorizedGroups: 'Search authorized groups...',
|
||||||
allApiKeyGroups: 'All API Key Groups',
|
allApiKeyGroups: 'All API Key Groups',
|
||||||
searchApiKeyGroups: 'Search API Key groups...',
|
searchApiKeyGroups: 'Search API Key groups...',
|
||||||
|
statusFilter: 'Status Filter',
|
||||||
|
allStatuses: 'All Status',
|
||||||
admin: 'Admin',
|
admin: 'Admin',
|
||||||
user: 'User',
|
user: 'User',
|
||||||
disabled: 'Disabled',
|
disabled: 'Disabled',
|
||||||
@@ -433,7 +460,21 @@ export default {
|
|||||||
creating: 'Creating...',
|
creating: 'Creating...',
|
||||||
updating: 'Updating...',
|
updating: 'Updating...',
|
||||||
form: {
|
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',
|
roleLabel: 'Role',
|
||||||
|
selectRole: 'Select role',
|
||||||
|
balanceLabel: 'Balance',
|
||||||
|
concurrencyLabel: 'Concurrency',
|
||||||
|
statusLabel: 'Status',
|
||||||
|
selectStatus: 'Select status',
|
||||||
rpmLimit: 'Requests Per Minute (RPM)',
|
rpmLimit: 'Requests Per Minute (RPM)',
|
||||||
rpmLimitPlaceholder: '0 = unlimited',
|
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.'
|
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',
|
soraStorageQuotaHint: 'In GB, 0 means use group or system default quota',
|
||||||
amountRequired: 'Please enter a valid amount',
|
amountRequired: 'Please enter a valid amount',
|
||||||
insufficientBalance: 'Insufficient balance',
|
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.",
|
deleteConfirm: "Are you sure you want to delete '{email}'? This action cannot be undone.",
|
||||||
setAllowedGroups: 'Set Allowed Groups',
|
setAllowedGroups: 'Set Allowed Groups',
|
||||||
allowedGroupsHint:
|
allowedGroupsHint:
|
||||||
@@ -695,6 +751,7 @@ export default {
|
|||||||
allPlatforms: 'All Platforms',
|
allPlatforms: 'All Platforms',
|
||||||
allStatus: 'All Status',
|
allStatus: 'All Status',
|
||||||
allGroups: 'All Groups',
|
allGroups: 'All Groups',
|
||||||
|
exclusiveFilter: 'Exclusive',
|
||||||
exclusive: 'Exclusive',
|
exclusive: 'Exclusive',
|
||||||
nonExclusive: 'Non-Exclusive',
|
nonExclusive: 'Non-Exclusive',
|
||||||
public: 'Public',
|
public: 'Public',
|
||||||
@@ -706,7 +763,10 @@ export default {
|
|||||||
rpmOverrideHint: 'Per-user RPM cap in this group; empty = group default; 0 = unlimited',
|
rpmOverrideHint: 'Per-user RPM cap in this group; empty = group default; 0 = unlimited',
|
||||||
rateDefault: 'default',
|
rateDefault: 'default',
|
||||||
rpmDefault: 'default',
|
rpmDefault: 'default',
|
||||||
|
exclusive: 'Exclusive',
|
||||||
type: 'Type',
|
type: 'Type',
|
||||||
|
priority: 'Priority',
|
||||||
|
apiKeys: 'API Keys',
|
||||||
accounts: 'Accounts',
|
accounts: 'Accounts',
|
||||||
capacity: 'Capacity',
|
capacity: 'Capacity',
|
||||||
usage: 'Usage',
|
usage: 'Usage',
|
||||||
@@ -742,14 +802,39 @@ export default {
|
|||||||
rateMultiplier: 'Rate Multiplier',
|
rateMultiplier: 'Rate Multiplier',
|
||||||
status: 'Status',
|
status: 'Status',
|
||||||
exclusive: 'Exclusive Group',
|
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)',
|
rpmLimit: 'Requests Per Minute (RPM)',
|
||||||
rpmLimitPlaceholder: '0 = unlimited',
|
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',
|
enterGroupName: 'Enter group name',
|
||||||
optionalDescription: 'Optional description',
|
optionalDescription: 'Optional description',
|
||||||
platformHint: 'Select the platform this group is associated with',
|
platformHint: 'Select the platform this group is associated with',
|
||||||
platformNotEditable: 'Platform cannot be changed after creation',
|
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)',
|
rateMultiplierHint: 'Cost multiplier for this group (e.g., 1.5 = 150% of base cost)',
|
||||||
exclusiveHint: 'Exclusive group, manually assign to specific users',
|
exclusiveHint: 'Exclusive group, manually assign to specific users',
|
||||||
exclusiveTooltip: {
|
exclusiveTooltip: {
|
||||||
|
|||||||
@@ -50,6 +50,8 @@ export default {
|
|||||||
ad: {
|
ad: {
|
||||||
inline: 'Need proxy IP?'
|
inline: 'Need proxy IP?'
|
||||||
},
|
},
|
||||||
|
deleteConfirmMessage: "Are you sure you want to delete proxy '{name}'?",
|
||||||
|
testProxy: 'Test Proxy',
|
||||||
dataImport: 'Import',
|
dataImport: 'Import',
|
||||||
dataExportSelected: 'Export Selected',
|
dataExportSelected: 'Export Selected',
|
||||||
dataImportTitle: 'Import Proxies',
|
dataImportTitle: 'Import Proxies',
|
||||||
@@ -93,7 +95,27 @@ export default {
|
|||||||
latency: 'Latency',
|
latency: 'Latency',
|
||||||
expiry: 'Validity',
|
expiry: 'Validity',
|
||||||
createdAt: 'Created',
|
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',
|
testConnection: 'Test Connection',
|
||||||
qualityCheck: 'Quality Check',
|
qualityCheck: 'Quality Check',
|
||||||
@@ -150,8 +172,12 @@ export default {
|
|||||||
batchImportAllSkipped: 'All {skipped} proxies already exist, skipped import',
|
batchImportAllSkipped: 'All {skipped} proxies already exist, skipped import',
|
||||||
failedToImport: 'Failed to batch import',
|
failedToImport: 'Failed to batch import',
|
||||||
// Other messages
|
// Other messages
|
||||||
|
saving: 'Saving...',
|
||||||
|
testing: 'Testing...',
|
||||||
creating: 'Creating...',
|
creating: 'Creating...',
|
||||||
updating: 'Updating...',
|
updating: 'Updating...',
|
||||||
|
noProxies: 'No proxies yet',
|
||||||
|
noProxiesDescription: 'Add a proxy server to improve API access stability.',
|
||||||
proxyCreated: 'Proxy created successfully',
|
proxyCreated: 'Proxy created successfully',
|
||||||
proxyUpdated: 'Proxy updated successfully',
|
proxyUpdated: 'Proxy updated successfully',
|
||||||
proxyDeleted: 'Proxy deleted successfully',
|
proxyDeleted: 'Proxy deleted successfully',
|
||||||
@@ -181,7 +207,12 @@ export default {
|
|||||||
qualityStatusFail: 'Fail',
|
qualityStatusFail: 'Fail',
|
||||||
qualityStatusChallenge: 'Challenge',
|
qualityStatusChallenge: 'Challenge',
|
||||||
qualityTargetBase: 'Base Connectivity',
|
qualityTargetBase: 'Base Connectivity',
|
||||||
|
proxyCreatedSuccess: 'Proxy created successfully',
|
||||||
|
proxyUpdatedSuccess: 'Proxy updated successfully',
|
||||||
|
proxyDeletedSuccess: 'Proxy deleted successfully',
|
||||||
|
testSuccess: 'Proxy test passed',
|
||||||
failedToLoad: 'Failed to load proxies',
|
failedToLoad: 'Failed to load proxies',
|
||||||
|
failedToSave: 'Failed to save proxy',
|
||||||
failedToCreate: 'Failed to create proxy',
|
failedToCreate: 'Failed to create proxy',
|
||||||
failedToUpdate: 'Failed to update proxy',
|
failedToUpdate: 'Failed to update proxy',
|
||||||
failedToDelete: 'Failed to delete proxy',
|
failedToDelete: 'Failed to delete proxy',
|
||||||
@@ -229,6 +260,7 @@ export default {
|
|||||||
status: 'Status',
|
status: 'Status',
|
||||||
usedBy: 'Used By',
|
usedBy: 'Used By',
|
||||||
usedAt: 'Used At',
|
usedAt: 'Used At',
|
||||||
|
createdAt: 'Created At',
|
||||||
expiresAt: 'Expires At',
|
expiresAt: 'Expires At',
|
||||||
actions: 'Actions'
|
actions: 'Actions'
|
||||||
},
|
},
|
||||||
@@ -304,7 +336,39 @@ export default {
|
|||||||
used: 'Used',
|
used: 'Used',
|
||||||
expired: 'Expired',
|
expired: 'Expired',
|
||||||
disabled: 'Disabled'
|
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
|
// Announcements
|
||||||
|
|||||||
Reference in New Issue
Block a user