Files
FileCodeBoxFronted2026/src/i18n/locales/en-US.ts
T
2026-06-03 04:34:32 +08:00

789 lines
26 KiB
TypeScript

export default {
// Common
common: {
confirm: 'Confirm',
cancel: 'Cancel',
close: 'Close',
delete: 'Delete',
edit: 'Edit',
save: 'Save',
add: 'Add',
back: 'Back',
next: 'Next',
previous: 'Previous',
loading: 'Loading...',
noData: 'No Data',
success: 'Success',
error: 'Error',
warning: 'Warning',
info: 'Information',
search: 'Search',
copy: 'Copy',
uploadSuccess: 'Upload successful',
uploadFailed: 'Upload failed',
copySuccess: 'Copy successful',
copyFailed: 'Copy failed',
deleteSuccess: 'Delete successful',
deleteFailed: 'Delete failed',
downloadSuccess: 'Download successful',
downloadFailed: 'Download failed',
shareSuccess: 'Share successful',
shareFailed: 'Share failed',
expiredFile: 'File has expired',
fileNotFound: 'File not found',
networkError: 'Network error',
unknownError: 'Unknown error',
invalidFileType: 'Invalid file type',
fileTooLarge: 'File too large',
uploadCanceled: 'Upload canceled',
processing: 'Processing',
pleaseWait: 'Please wait',
fileDetails: 'File Details',
enabled: 'Enabled',
disabled: 'Disabled',
minute: 'minute',
files: 'files',
second: 'second',
hour: 'hour',
day: 'day',
times: 'times',
appName: 'FileCodeBox - File Transfer',
appDescription: 'Ready-to-use file transfer system'
},
// Admin module
admin: {
logout: 'Logout',
dashboard: {
title: 'Dashboard',
totalFiles: 'Total Files',
storageSpace: 'Storage Space',
todayShares: 'Today Shares',
totalRetrievals: 'Total Retrievals',
activeFiles: 'Active files: {count}',
todayIncrease: 'Today added: {count}',
yesterdayShares: 'Yesterday: {count}',
serverUptime: 'Uptime',
refresh: 'Refresh',
refreshing: 'Refreshing',
lastUpdated: 'Last updated: {time}',
loadFailed: 'Failed to load dashboard data',
fileHealth: 'File Health',
fileHealthDesc: 'Real file records grouped by availability, expiry, and type.',
activeFileRatio: 'Active Ratio',
fileShareRatio: 'File Ratio',
textShareRatio: 'Text Ratio',
binaryFiles: '{count} file shares',
textShares: '{count} text shares',
expiredFiles: 'Expired Files',
needCleanup: 'Clean up in file management',
chunkedFiles: 'Chunked Files',
storagePolicy: 'Storage & Upload Policy',
storagePolicyDesc: 'Current settings that affect upload behavior.',
storageBackend: 'Storage Backend',
singleFileLimit: 'Single File Limit',
guestUpload: 'Guest Upload',
maxSaveTime: 'Max Retention',
noSaveLimit: 'Unlimited',
todayCapacityReference: 'Today Size / Single File Limit',
fileTypeDistribution: 'Type Distribution',
textType: 'Text',
recentFiles: 'Recent Shares',
recentFilesDesc: 'Recently created share records for quick status checks.',
available: 'Available',
table: {
file: 'File',
size: 'Size',
usage: 'Retrievals',
status: 'Status'
}
},
fileManage: {
title: 'File Management'
},
settings: {
title: 'System Settings',
basicSettings: 'General',
websiteInfo: 'Site Information',
websiteName: 'Site Name',
websiteDescription: 'Site Description',
siteName: 'Site Name',
adminPassword: 'Admin Password',
passwordPlaceholder: 'Enter new password to change',
passwordNote: 'Leave empty to keep current',
keywords: 'SEO Keywords',
themeSelection: 'Theme',
robotsFile: 'Robots.txt Configuration',
notificationSettings: 'Notifications',
notificationTitle: 'Announcement Title',
notificationContent: 'Announcement Content',
storageSettings: 'Storage',
storagePath: 'Storage Path',
storagePathPlaceholder: 'Leave empty for default path',
storageMethod: 'Storage Type',
localStorage: 'Local Storage',
s3Storage: 'S3 Object Storage',
webdavStorage: 'WebDAV Storage',
chunkUploadNote: 'Chunked Upload (experimental, better for large files)',
s3AccessKeyId: 'Access Key ID',
s3SecretAccessKey: 'Secret Access Key',
s3BucketName: 'Bucket Name',
s3EndpointUrl: 'Endpoint URL',
s3RegionName: 'Region Name',
s3SignatureVersion: 'Signature Version',
s3Hostname: 'Custom Domain',
s3v2: 'S3v2',
s3v4: 'S3v4',
autoPlaceholder: 'Auto-detect',
enabled: 'Enabled',
disabled: 'Disabled',
webdavUrl: 'Enter WebDAV server URL',
webdavUsername: 'Enter WebDAV username',
webdavPassword: 'Enter WebDAV password',
webdavUrlPlaceholder: 'Enter WebDAV server URL',
webdavUsernamePlaceholder: 'Enter WebDAV username',
webdavPasswordPlaceholder: 'Enter WebDAV password',
enableProxy: 'Enable Download Proxy',
uploadLimits: 'Upload Settings',
uploadRateLimit: 'Time Window (limit uploads within this period)',
uploadPerMinute: 'Time Window (limit uploads within this period)',
minute: 'min',
uploadCountLimit: 'Max Files Allowed (within the time window)',
files: 'files',
fileSizeLimit: 'Max File Size',
expirationMethod: 'Expiration Options',
expirationType: 'Expiration Options',
expiration: {
day: 'Days',
hour: 'Hours',
minute: 'Minutes',
forever: 'Never Expire',
count: 'Download Count'
},
maxSaveTime: 'Max Retention Period',
timeUnits: {
second: 'sec',
minute: 'min',
hour: 'hr',
day: 'day'
},
guestUpload: 'Allow Guest Uploads',
errorLimits: 'Access Protection',
errorRateLimit: 'Detection Window (count errors within this period)',
errorPerMinute: 'Detection Window (count errors within this period)',
errorCountLimit: 'Max Errors Allowed (block after exceeding)',
times: 'times',
saveChanges: 'Save Settings',
fileSizeUnits: {
kb: 'KB',
mb: 'MB',
gb: 'GB'
}
}
},
// Navigation
nav: {
sendFile: 'Send File',
retrieveFile: 'Retrieve',
fileRecords: 'File Records'
},
// Retrieve page
retrieve: {
title: 'File Retrieval',
codeInput: {
placeholder: 'Enter 5-digit retrieval code',
label: 'Retrieval Code'
},
submit: 'Retrieve',
needSendFile: 'Need to send a file? Click here',
recordsDrawer: 'Retrieval Records',
messages: {
invalidCode: 'Please enter a 5-digit retrieval code',
retrieveSuccess: 'File retrieved successfully',
invalidCodeError: 'Invalid retrieval code',
retrieveFailure: 'Failed to retrieve file: ',
networkError: 'Retrieval failed, please try again later: ',
unknownError: 'Unknown error',
previewUnavailable: 'Preview is unavailable, you can still retrieve directly'
},
workspace: {
sendFile: 'Send File',
inspect: 'Preview',
inspecting: 'Previewing',
retrieving: 'Retrieving',
ready: 'Ready',
noPreview: 'Waiting for a code',
noPreviewDesc:
'Enter a 5-character retrieval code to preview file details before consuming a retrieval.',
latestRecord: 'Latest Retrieval',
noRecord: 'No retrieval records yet',
currentCode: 'Code',
fileSize: 'File Size',
viewDetail: 'View Detail',
historyCount: '{count} records',
openRecords: 'Open retrieval records',
security: 'Safe Retrieval',
securityState:
'Previewing does not consume retrieval count. Access is recorded only after confirmation.',
noExpiry: 'No limit',
unlimited: 'Unlimited',
remainingCount: '{count} left',
textType: 'Text Content',
fileType: 'File Download',
expiresAt: 'Expires At',
remainingDownloads: 'Remaining',
usedCount: 'Retrieved',
emptyCode: 'Empty',
previewState: 'Preview State',
waiting: 'Waiting'
}
},
// Send page
send: {
title: 'File Send',
sendText: 'Send Text',
uploadArea: {
dragText: 'Drag files here or',
clickText: 'click to select files',
textInput: 'Enter text to send here...',
placeholder: 'Click or drag files here to upload',
description: 'Supports various common formats',
descriptionWithLimit: 'Supports common formats, up to {size}',
retry: 'Retry',
selectedFiles: '{count} files selected',
status: {
initializing: 'Preparing upload...',
uploading: 'Uploading files...',
confirming: 'Confirming upload...',
success: 'Upload complete!'
}
},
submit: 'Secure Send',
submitting: 'Sending...',
needRetrieveFile: 'Need to retrieve? Click here',
sendRecords: 'Send Records',
secureEncryption: 'Secure Encryption',
workspace: {
uploadLimit: 'Single File Limit',
uploadMode: 'Upload Mode',
standardMode: 'Standard',
chunkMode: 'Chunked',
guestPolicy: 'Guest Upload',
guestOpen: 'Allowed',
guestClosed: 'Disabled',
currentTask: 'Current Task',
awaitingFile: 'Waiting for files',
fileReady: '{count} files ready',
textDraft: 'Text draft, {count} chars',
payload: 'Payload',
expirationPreview: 'Expiration',
security: 'Security',
latestRecord: 'Latest Send',
noRecord: 'No records yet',
copyLink: 'Copy Link',
viewDetail: 'View Detail',
historyTitle: 'Send History',
historyCount: '{count} records',
openRecords: 'Open send records'
},
fileDetails: 'File Details',
expirationMethod: 'Expiration Method',
expiration: {
day: 'By Day',
hour: 'By Hour',
minute: 'By Minute',
forever: 'Forever',
count: 'By Count',
label: 'Expiration Time',
placeholders: {
days: 'Enter days',
hours: 'Enter hours',
minutes: 'Enter minutes',
count: 'Enter view count',
forever: 'Forever',
default: 'Enter value'
},
units: {
days: 'days',
hours: 'hours',
minutes: 'minutes',
times: 'times',
forever: 'Forever'
}
},
time: {
day: 'By Day',
hour: 'By Hour',
minute: 'By Minute',
forever: 'Forever',
count: 'By Count'
},
messages: {
selectFile: 'Please select a file to upload',
enterText: 'Please enter text to send',
enterExpirationValue: 'Please enter expiration value',
expirationTooLong: 'Expiration time cannot exceed {days} days',
sendSuccess: 'File sent successfully! Retrieve code: {code}',
initChunkUploadFailed: 'Failed to initialize chunk upload',
chunkUploadFailed: 'Chunk {index} upload failed',
completeUploadFailed: 'Failed to complete upload',
uploadFailed: 'Upload failed, please try again later',
guestUploadDisabled: 'Guest upload feature is disabled',
fileSizeExceeded: 'File size exceeds limit ({size})',
serverError: 'Server response error',
sendFailed: 'Send failed, please try again later',
expiresAfterCount: 'Expires after {count} times',
expiresAt: 'Expires at {date}',
emptyFileError: 'Cannot read empty file',
fileAddedFromClipboard: 'File added from clipboard: {filename}',
fileProcessingFailed: 'File processing failed',
expiresAfter: 'Expires after {value} {unit}'
}
},
// File records
fileRecord: {
filename: 'Filename',
size: 'Size',
date: 'Date',
code: 'Code',
actions: 'Actions',
download: 'Download',
viewDetails: 'View Details',
deleteRecord: 'Delete Record',
preview: 'Preview',
copyContent: 'Copy Content',
contentCopied: 'Content copied to clipboard',
copyFailed: 'Copy failed, please try again'
},
// File Detail Modal
fileDetail: {
title: 'File Details',
content: 'File Content',
previewContent: 'Preview Content',
download: 'Click to Download',
qrCode: 'Retrieve QR Code',
scanQrCode: 'Scan QR code for quick retrieval'
},
// Content Preview Modal
contentPreview: {
title: 'Content Preview'
},
// File Management
fileManage: {
title: 'File Management',
subtitle: '{count} share records. Filter by status, type, and usage.',
searchPlaceholder: 'Search code, name, or text...',
allFiles: 'All Files',
editFileInfo: 'Edit File Information',
saveChanges: 'Save Changes',
refresh: 'Refresh List',
resetFilters: 'Reset Filters',
totalFiles: 'All Records',
activeFiles: 'Available',
expiredFiles: 'Expired',
storageUsed: 'Storage Used',
statusLabel: 'Status',
typeLabel: 'Type',
all: 'All',
active: 'Available',
expired: 'Expired',
fileType: 'File',
textType: 'Text',
chunkedType: 'Chunked',
sortBy: 'Sort',
unlimited: 'Unlimited',
remaining: '{count} left',
loadError: 'Failed to load file list',
noMatches: 'No matching files',
viewText: 'View',
textPreview: 'Text Preview',
copyText: 'Copy Text',
copySuccess: 'Text copied to clipboard',
copyFailed: 'Copy failed, please try again',
charCount: '{count} characters',
downloadFile: 'Download File',
exportText: 'Export Text',
downloadSuccess: 'Downloaded: {name}',
exportSuccess: 'Exported: {name}',
downloadFailed: 'Download failed',
previewFailed: 'Failed to load preview',
loadingPreview: 'Loading preview...',
previewComplete: 'Loaded full content, {count} characters',
previewTruncated: 'Showing {shown} / {total} characters',
previewFallback: 'Preview endpoint unavailable; using text from the list',
selectCurrentPage: 'Select current page',
selectedCount: '{count} selected',
selectFile: 'Select {name}',
clearSelection: 'Clear Selection',
batchDelete: 'Batch Delete',
batchDeleteConfirm: 'Delete the selected {count} files? This action cannot be undone.',
batchDeleteSuccess: 'Deleted {count} files',
batchDeletePartialSuccess: 'Deleted {count} files, {failed} failed',
batchDeleteFailed: 'Batch delete failed',
headers: {
select: 'Select',
code: 'Retrieve Code',
name: 'Name',
type: 'Type',
size: 'Size',
usage: 'Retrievals',
status: 'Status',
description: 'Description',
expiration: 'Expiration',
actions: 'Actions'
},
sort: {
createdAt: 'Created Time',
expiredAt: 'Expiration',
name: 'Name',
size: 'Size',
usedCount: 'Retrievals',
code: 'Retrieve Code',
desc: 'Descending',
asc: 'Ascending'
},
form: {
code: 'Retrieve Code',
codePlaceholder: 'Enter retrieve code',
filename: 'File Name',
filenamePlaceholder: 'Enter file name',
suffix: 'File Extension',
suffixPlaceholder: 'Enter file extension',
downloadLimit: 'Download Limit',
downloadLimitPlaceholder: 'Enter download limit'
}
},
// Side drawer
drawer: {
noRecords: 'No records'
},
// Admin pages
manage: {
settings: {
title: 'System Settings',
basicSettings: 'General',
websiteInfo: 'Site Information',
websiteName: 'Site Name',
websiteDescription: 'Site Description',
siteName: 'Site Name',
adminPassword: 'Admin Password',
passwordPlaceholder: 'Enter new password to change',
passwordNote: 'Leave empty to keep current',
keywords: 'SEO Keywords',
themeSelection: 'Theme',
notificationSettings: 'Notifications',
notificationTitle: 'Announcement Title',
notificationContent: 'Announcement Content',
storageSettings: 'Storage',
storagePath: 'Storage Path',
storagePathPlaceholder: 'Leave empty for default path',
storageMethod: 'Storage Type',
localStorage: 'Local Storage',
s3Storage: 'S3 Object Storage',
webdavStorage: 'WebDAV Storage',
chunkUploadNote: 'Chunked Upload (experimental, better for large files)',
enabled: 'Enabled',
disabled: 'Disabled',
webdavUrl: 'Enter WebDAV server URL',
webdavUsername: 'Enter WebDAV username',
webdavPassword: 'Enter WebDAV password',
webdavUrlPlaceholder: 'Enter WebDAV server URL',
webdavUsernamePlaceholder: 'Enter WebDAV username',
webdavPasswordPlaceholder: 'Enter WebDAV password',
enableProxy: 'Enable Download Proxy',
uploadLimits: 'Upload Settings',
uploadRateLimit: 'Time Window (limit uploads within this period)',
uploadPerMinute: 'Time Window (limit uploads within this period)',
minute: 'min',
uploadCountLimit: 'Max Files Allowed (within the time window)',
files: 'files',
fileSizeLimit: 'Max File Size',
expirationMethod: 'Expiration Options',
expirationType: 'Expiration Options',
expiration: {
day: 'Days',
hour: 'Hours',
minute: 'Minutes',
forever: 'Never Expire',
count: 'Download Count'
},
maxSaveTime: 'Max Retention Period',
timeUnits: {
second: 'sec',
minute: 'min',
hour: 'hr',
day: 'day'
},
guestUpload: 'Allow Guest Uploads',
errorLimits: 'Access Protection',
errorRateLimit: 'Detection Window (count errors within this period)',
errorPerMinute: 'Detection Window (count errors within this period)',
errorCountLimit: 'Max Errors Allowed (block after exceeding)',
times: 'times',
fileSizeUnits: {
kb: 'KB',
mb: 'MB',
gb: 'GB'
},
saveChanges: 'Save Settings',
refreshConfig: 'Refresh Config',
refreshing: 'Refreshing',
saving: 'Saving',
unsavedChanges: 'Unsaved configuration changes',
allChangesSaved: 'All configuration changes are saved',
refreshBlocked: 'Save current changes before refreshing'
},
systemSettings: {
title: 'System Settings',
basicSettings: 'General',
websiteInfo: 'Site Information',
websiteName: 'Site Name',
websiteDescription: 'Site Description',
adminPassword: 'Admin Password',
passwordPlaceholder: 'Enter new password to change',
passwordNote: 'Leave empty to keep current',
keywords: 'SEO Keywords',
themeSelection: 'Theme',
notificationSettings: 'Notifications',
notificationTitle: 'Announcement Title',
notificationContent: 'Announcement Content',
storageSettings: 'Storage',
storagePath: 'Storage Path',
storagePathPlaceholder: 'Leave empty for default path',
storageMethod: 'Storage Type',
localStorage: 'Local Storage',
s3Storage: 'S3 Object Storage',
webdavStorage: 'WebDAV Storage',
chunkUploadNote: 'Chunked Upload (experimental, better for large files)',
enabled: 'Enabled',
disabled: 'Disabled',
webdavUrl: 'Enter WebDAV server URL',
webdavUsername: 'Enter WebDAV username',
webdavPassword: 'Enter WebDAV password',
enableProxy: 'Enable Download Proxy',
uploadLimits: 'Upload Settings',
uploadRateLimit: 'Time Window (limit uploads within this period)',
minute: 'min',
uploadCountLimit: 'Max Files Allowed (within the time window)',
files: 'files',
fileSizeLimit: 'Max File Size',
expirationMethod: 'Expiration Options',
expirationMethods: {
day: 'Days',
hour: 'Hours',
minute: 'Minutes',
forever: 'Never Expire',
count: 'Download Count'
},
expiration: {
day: 'Days',
hour: 'Hours',
minute: 'Minutes',
forever: 'Never Expire',
count: 'Download Count'
},
maxSaveTime: 'Max Retention Period',
timeUnits: {
second: 'sec',
minute: 'min',
hour: 'hr',
day: 'day'
},
guestUpload: 'Allow Guest Uploads',
errorLimits: 'Access Protection',
errorRateLimit: 'Detection Window (count errors within this period)',
errorCountLimit: 'Max Errors Allowed (block after exceeding)',
times: 'times',
saveSettings: 'Save Settings',
saveSuccess: 'Settings saved successfully',
saveFailed: 'Failed to save, please try again',
getConfigFailed: 'Failed to load settings, please refresh'
},
dashboard: {
title: 'Dashboard',
totalFiles: 'Total Files',
storageSpace: 'Storage Space',
todayShares: 'Today Shares',
totalRetrievals: 'Total Retrievals',
activeFiles: 'Active files: {count}',
todayIncrease: 'Today added: {count}',
yesterdayShares: 'Yesterday: {count}',
serverUptime: 'Uptime',
refresh: 'Refresh',
fileHealth: 'File Health',
fileHealthDesc: 'Real file records grouped by availability, expiry, and type.',
activeFileRatio: 'Active Ratio',
fileShareRatio: 'File Ratio',
textShareRatio: 'Text Ratio',
binaryFiles: '{count} file shares',
textShares: '{count} text shares',
expiredFiles: 'Expired Files',
needCleanup: 'Clean up in file management',
chunkedFiles: 'Chunked Files',
storagePolicy: 'Storage & Upload Policy',
storagePolicyDesc: 'Current settings that affect upload behavior.',
storageBackend: 'Storage Backend',
singleFileLimit: 'Single File Limit',
guestUpload: 'Guest Upload',
maxSaveTime: 'Max Retention',
noSaveLimit: 'Unlimited',
todayCapacityReference: 'Today Size / Single File Limit',
fileTypeDistribution: 'Type Distribution',
textType: 'Text',
recentFiles: 'Recent Shares',
recentFilesDesc: 'Recently created share records for quick status checks.',
available: 'Available',
table: {
file: 'File',
size: 'Size',
usage: 'Retrievals',
status: 'Status'
}
},
fileManage: {
title: 'File Management',
searchPlaceholder: 'Search file name, description...',
allFiles: 'All Files',
editFileInfo: 'Edit File Info',
saveChanges: 'Save Changes',
headers: {
code: 'Code',
name: 'Name',
size: 'Size',
description: 'Description',
expiration: 'Expiration',
actions: 'Actions'
},
form: {
code: 'Code',
codePlaceholder: 'Enter code',
filename: 'File Name',
filenamePlaceholder: 'Enter file name',
suffix: 'File Suffix',
suffixPlaceholder: 'Enter file suffix',
downloadLimit: 'Download Limit',
downloadLimitPlaceholder: 'Enter download limit'
},
updateFailed: 'Update failed',
deleteFailed: 'Delete failed',
deleteConfirm: 'Delete this file? This action cannot be undone.',
loadFileListFailed: 'Failed to load file list'
},
login: {
title: 'Login',
password: 'Password',
passwordPlaceholder: 'Password',
loginButton: 'Login',
loggingIn: 'Logging in...',
invalidPassword: 'Invalid password',
passwordTooShort: 'Password must be at least 6 characters',
loginFailed: 'Login failed',
noValidToken: 'Login failed: No valid token received'
}
},
// File size units
fileSize: {
bytes: 'Bytes',
kb: 'KB',
mb: 'MB',
gb: 'GB',
tb: 'TB'
},
// Utility functions
utils: {
// Time formatting
formatTime: 'Format timestamp to readable format',
formatFileSize: 'Format file size',
formatDuration: 'Format duration',
time: {
forever: 'Forever',
day: 'day',
hour: 'hour',
minute: 'minute',
second: 'second'
},
copyToClipboard: 'Copy text to clipboard',
copyFailed: 'Copy failed:',
debounce: 'Debounce function',
throttle: 'Throttle function',
validateEmail: 'Validate email format',
validateUrl: 'Validate URL format',
generateRandomString: 'Generate random string',
deepClone: 'Deep clone object',
getFileExtension: 'Get file extension',
isMobileDevice: 'Check if mobile device',
formatNumber: 'Format number with thousand separators',
clipboard: {
title: 'Clipboard utility functions',
copyText: 'Copy text to clipboard',
copySuccess: 'Copy successful',
copyFailed: 'Copy failed, please copy manually'
}
},
// Components
components: {
pagination: {
showing: 'Showing',
to: 'to',
of: 'of',
total: 'total',
previous: 'Previous',
next: 'Next'
},
languageSwitcher: {
clickOutsideToClose: 'Click outside to close dropdown menu'
},
borderProgressBar: {
borderWidth: 'Border width',
cornerRadius: 'Corner radius',
createGradient: 'Create gradient',
drawBackground: 'Draw background',
calculateProgress: 'Calculate progress',
drawProgress: 'Draw progress'
}
},
// Miscellaneous
misc: {
emptyFileError: 'Cannot read empty file',
fileAddedFromClipboard: 'File added from clipboard: ',
fileProcessFailed: 'File processing failed',
chunkSize: 'Keep 2MB chunk size for hash calculation',
secureContext: 'If not in secure context (HTTP), return an alternative hash based on file info',
cryptoFallback: 'If crypto.subtle.digest fails, use fallback method',
generateAlternativeHash: 'Function to generate alternative hash',
fileInfoHash: 'Generate simple hash using filename, size and last modified time',
convertToHex: 'Convert to hex string and pad to 64 bits',
defaultChunkSize: 'Default chunk size is 5MB',
initChunkUpload: '1. Initialize chunk upload',
uploadChunk: '2. Upload chunk',
completeUpload: '3. Complete upload',
chunkUploadFailed: 'Chunk upload failed: ',
uploadProgressListener: 'Add upload progress listener',
noLimitCheck: 'If no limit, return true directly',
expirationValidation: 'Add expiration time validation',
chunkUploadReplacement: 'Use chunk upload to replace direct upload',
textUploadUnchanged: 'Text upload remains unchanged',
addSendRecord: 'Add new send record',
permanent: 'Permanent',
sendSuccessMessage: 'Show send success message',
resetForm: 'Reset form - only reset file and text content, keep expiration info',
showDetails: 'Show details',
autoCopyLink: 'Auto copy retrieve code link',
delayedLoading: 'Use onMounted hook to delay load non-critical resources or initialization',
nonCriticalInit: 'Place non-immediately needed initialization code here'
}
}