failedToLoadReadStatus:'Failed to load read status',
deleteConfirm:'Are you sure you want to delete this announcement? This action cannot be undone.'
},
// Promo Codes
// Promo Codes
promo:{
promo:{
title:'Promo Code Management',
title:'Promo Code Management',
...
@@ -1944,7 +2119,43 @@ export default {
...
@@ -1944,7 +2119,43 @@ export default {
cacheCreationTokens:'Cache Creation Tokens',
cacheCreationTokens:'Cache Creation Tokens',
cacheReadTokens:'Cache Read Tokens',
cacheReadTokens:'Cache Read Tokens',
failedToLoad:'Failed to load usage records',
failedToLoad:'Failed to load usage records',
ipAddress:'IP'
billingType:'Billing Type',
allBillingTypes:'All Billing Types',
billingTypeBalance:'Balance',
billingTypeSubscription:'Subscription',
ipAddress:'IP',
cleanup:{
button:'Cleanup',
title:'Cleanup Usage Records',
warning:'Cleanup is irreversible and will affect historical stats.',
submit:'Submit Cleanup',
submitting:'Submitting...',
confirmTitle:'Confirm Cleanup',
confirmMessage:'Are you sure you want to submit this cleanup task? This action cannot be undone.',
confirmSubmit:'Confirm Cleanup',
cancel:'Cancel',
cancelConfirmTitle:'Confirm Cancel',
cancelConfirmMessage:'Are you sure you want to cancel this cleanup task?',
cancelConfirm:'Confirm Cancel',
cancelSuccess:'Cleanup task canceled',
cancelFailed:'Failed to cancel cleanup task',
recentTasks:'Recent Cleanup Tasks',
loadingTasks:'Loading tasks...',
noTasks:'No cleanup tasks yet',
range:'Range',
deletedRows:'Deleted',
missingRange:'Please select a date range',
submitSuccess:'Cleanup task created',
submitFailed:'Failed to create cleanup task',
loadFailed:'Failed to load cleanup tasks',
status:{
pending:'Pending',
running:'Running',
succeeded:'Succeeded',
failed:'Failed',
canceled:'Canceled'
}
}
},
},
// Ops Monitoring
// Ops Monitoring
...
@@ -2597,6 +2808,8 @@ export default {
...
@@ -2597,6 +2808,8 @@ export default {
ignoreContextCanceledHint:'When enabled, client disconnect (context canceled) errors will not be written to the error log.',
ignoreContextCanceledHint:'When enabled, client disconnect (context canceled) errors will not be written to the error log.',
ignoreNoAvailableAccounts:'Ignore no available accounts errors',
ignoreNoAvailableAccounts:'Ignore no available accounts errors',
ignoreNoAvailableAccountsHint:'When enabled, "No available accounts" errors will not be written to the error log (not recommended; usually a config issue).',
ignoreNoAvailableAccountsHint:'When enabled, "No available accounts" errors will not be written to the error log (not recommended; usually a config issue).',
ignoreInvalidApiKeyErrors:'Ignore invalid API key errors',
ignoreInvalidApiKeyErrorsHint:'When enabled, invalid or missing API key errors (INVALID_API_KEY, API_KEY_REQUIRED) will not be written to the error log.',
autoRefresh:'Auto Refresh',
autoRefresh:'Auto Refresh',
enableAutoRefresh:'Enable auto refresh',
enableAutoRefresh:'Enable auto refresh',
enableAutoRefreshHint:'Automatically refresh dashboard data at a fixed interval.',
enableAutoRefreshHint:'Automatically refresh dashboard data at a fixed interval.',
...
@@ -2690,7 +2903,15 @@ export default {
...
@@ -2690,7 +2903,15 @@ export default {
enableRegistration:'Enable Registration',
enableRegistration:'Enable Registration',
enableRegistrationHint:'Allow new users to register',
enableRegistrationHint:'Allow new users to register',
emailVerification:'Email Verification',
emailVerification:'Email Verification',
emailVerificationHint:'Require email verification for new registrations'
emailVerificationHint:'Require email verification for new registrations',
promoCode:'Promo Code',
promoCodeHint:'Allow users to use promo codes during registration',
passwordReset:'Password Reset',
passwordResetHint:'Allow users to reset their password via email',
totp:'Two-Factor Authentication (2FA)',
totpHint:'Allow users to use authenticator apps like Google Authenticator',
totpKeyNotConfigured:
'Please configure TOTP_ENCRYPTION_KEY in environment variables first. Generate a key with: openssl rand -hex 32'
},
},
turnstile:{
turnstile:{
title:'Cloudflare Turnstile',
title:'Cloudflare Turnstile',
...
@@ -2760,7 +2981,20 @@ export default {
...
@@ -2760,7 +2981,20 @@ export default {
homeContent:'Home Page Content',
homeContent:'Home Page Content',
homeContentPlaceholder:'Enter custom content for the home page. Supports Markdown & HTML. If a URL is entered, it will be displayed as an iframe.',
homeContentPlaceholder:'Enter custom content for the home page. Supports Markdown & HTML. If a URL is entered, it will be displayed as an iframe.',
homeContentHint:'Customize the home page content. Supports Markdown/HTML. If you enter a URL (starting with http:// or https://), it will be used as an iframe src to embed an external page. When set, the default status information will no longer be displayed.',
homeContentHint:'Customize the home page content. Supports Markdown/HTML. If you enter a URL (starting with http:// or https://), it will be used as an iframe src to embed an external page. When set, the default status information will no longer be displayed.',
homeContentIframeWarning:'⚠️ iframe mode note: Some websites have X-Frame-Options or CSP security policies that prevent embedding in iframes. If the page appears blank or shows an error, please verify the target website allows embedding, or consider using HTML mode to build your own content.'
homeContentIframeWarning:'⚠️ iframe mode note: Some websites have X-Frame-Options or CSP security policies that prevent embedding in iframes. If the page appears blank or shows an error, please verify the target website allows embedding, or consider using HTML mode to build your own content.',
hideCcsImportButton:'Hide CCS Import Button',
hideCcsImportButtonHint:'When enabled, the "Import to CCS" button will be hidden on the API Keys page'
},
purchase:{
title:'Purchase Page',
description:'Show a "Purchase Subscription" entry in the sidebar and open the configured URL in an iframe',
enabled:'Show Purchase Entry',
enabledHint:'Only shown in standard mode (not simple mode)',
url:'Purchase URL',
urlPlaceholder:'https://example.com/purchase',
urlHint:'Must be an absolute http(s) URL',
iframeWarning:
'⚠️ iframe note: Some websites block embedding via X-Frame-Options or CSP (frame-ancestors). If the page is blank, provide an "Open in new tab" alternative.'
},
},
smtp:{
smtp:{
title:'SMTP Settings',
title:'SMTP Settings',
...
@@ -2907,6 +3141,42 @@ export default {
...
@@ -2907,6 +3141,42 @@ export default {
retry:'Retry'
retry:'Retry'
},
},
// Purchase Subscription Page
purchase:{
title:'Purchase Subscription',
description:'Purchase a subscription via the embedded page',
openInNewTab:'Open in new tab',
notEnabledTitle:'Feature not enabled',
notEnabledDesc:'The administrator has not enabled the purchase page. Please contact admin.',
notConfiguredTitle:'Purchase URL not configured',
notConfiguredDesc:
'The administrator enabled the entry but has not configured a purchase URL. Please contact admin.'
},
// Announcements Page
announcements:{
title:'Announcements',
description:'View system announcements',
unreadOnly:'Show unread only',
markRead:'Mark as read',
markAllRead:'Mark all as read',
viewAll:'View all announcements',
markedAsRead:'Marked as read',
allMarkedAsRead:'All announcements marked as read',
newCount:'{count} new announcement | {count} new announcements',
readAt:'Read at',
read:'Read',
unread:'Unread',
startsAt:'Starts at',
endsAt:'Ends at',
empty:'No announcements',
emptyUnread:'No unread announcements',
total:'announcements',
emptyDescription:'There are no system announcements at this time',
readStatus:'You have read this announcement',
markReadHint:'Click "Mark as read" to mark this announcement'