// 英文语言包 export default { // 通用 common: { confirm: 'Confirm', cancel: 'Cancel', save: 'Save', delete: 'Delete', edit: 'Edit', search: 'Search', loading: 'Loading...', viewAll: 'View All', reset: 'Reset', retry: 'Retry', noData: 'No Data', error: 'Error', success: 'Success', warning: 'Warning', info: 'Info', close: 'Close', back: 'Back' }, // 3D Model Viewer modelViewer: { resetView: 'Reset View', toggleWireframe: 'Toggle Wireframe', centerModel: 'Center Model', brightness: 'Brightness', modelInfo: 'Model Info', fileSize: 'File Size', loadError: 'Model Load Error', touchControls: 'Touch Controls Available', mouseControls: 'Mouse Controls Available', exportModel: 'Export Model', exportInProgress: 'Export in progress...', exportSuccess: 'Export successful', exportFailed: 'Export failed', exportFormat: 'Export Format', exportAsGLB: 'Export as GLB', exportAsOBJ: 'Export as OBJ', exportAsSTL: 'Export as STL', exportAsFBX: 'Export as FBX', exportAs3MF: 'Export as 3MF', selectFormat: 'Select Export Format', preparingExport: 'Preparing export...' }, // Model Component model: { initializing: 'Initializing Model...', loading: 'Loading Model...', loadError: 'Failed to load model', preview: 'Preview Model', delete: 'Delete Model' }, // User Center userCenter: { points: { pointsList: 'Points List' } }, // App app: { title: 'Vue3 Frontend Designer Tool', description: 'Modern, responsive frontend design tool' }, // 导航 nav: { home: 'Home', about: 'About', projects: 'Projects', contact: 'Contact', profile: 'Profile' }, // 主题 theme: { light: 'Light Theme', dark: 'Dark Theme', auto: 'Auto', switch: 'Switch Theme' }, // 语言 language: { chinese: '中文', english: 'English', switch: 'Switch Language' }, // 菜单 menu: { open: 'Open Menu', close: 'Close Menu' }, // 底部 footer: { madeWith: 'Made with', builtWith: 'Built with' }, // 欢迎页面 welcome: { title: 'Welcome to FrontendDesigner', subtitle: 'Modern Frontend Design Tool based on Vue 3 + Vite', description: 'This is a feature-complete Vue 3 project template with responsive design, internationalization, theme switching and more.', start: 'Get Started', features: 'Key Features' }, // 错误页面 error: { pageNotFound: 'Page Not Found', goHome: 'Go Home', description: 'Sorry, the page you are looking for does not exist.' }, // Header navigation header: { toggleTheme: 'Toggle Theme', switchLanguage: 'Switch Language' }, // Messages messages: { profileComingSoon: 'Profile feature coming soon', settingsComingSoon: 'Settings feature coming soon', confirmLogout: 'Are you sure you want to logout?', logout: 'Logout', logoutSuccess: 'Logout successful' }, orderManagement: { title: 'Order Management', description: 'View and manage your purchases and subscriptions', createOrder: 'Create Order', filters: { status: 'Status Filter', search: 'Search Orders', sort: 'Sort By' }, searchPlaceholder: 'Search order ID, customer name...', stats: { totalOrders: 'Total Orders', pending: 'Pending', completed: 'Completed', revenue: 'Total Revenue' }, ordersList: 'Orders List', actions: { view: 'View Details', payNow: 'Pay Now', cancel: 'Cancel' }, empty: { title: 'No Orders Yet', description: 'You don\'t have any order records yet', action: 'Create Order' }, status: { dsh: 'Pending Review', yjj:'Rejected', all: 'All', pending: 'Pending', paid: 'Paid', processing: 'Processing', shipped: 'Shipped', delivered: 'Shipped', completed: 'Completed', cancelled: 'Cancelled', refunded: 'Refunded', expired: 'Expired', shenhe: 'Under Review', unsuccess: 'Rejected', clz: 'Processing', dfh: 'Pending Shipment', success:'Completed' }, sort: { created_at: 'Created Time', total: 'Order Total', status: 'Order Status', customer: 'Customer Name' }, payment: { pending: 'Pending Payment', paid: 'Paid', failed: 'Payment Failed', refunded: 'Refunded' }, refundStatus:{ wtk:'No Refund', sqtk:'Refund Requested', jjtk:'Refund Rejected', tytk:'Refund Approved', ytk:'Refunded' }, }, admin: { title: 'Admin Panel', login: { title: 'Admin Login', username: 'Username', password: 'Password', rememberMe: 'Remember Me', login: 'Login', logging: 'Logging in...', usernameRequired: 'Please enter username', passwordRequired: 'Please enter password', usernamePlaceholder: 'Please enter username', passwordPlaceholder: 'Please enter password', loginSuccess: 'Login successful', loginFailed: 'Login failed, please check username and password', welcome: 'Welcome to Admin Panel', captcha: 'Verification Code', captchaRequired: 'Please enter verification code', captchaLength: 'Verification code should be 4-6 characters' }, common: { detail: 'Detail', active: 'Active', inactive: 'Inactive', refresh: 'Refresh', search: 'Search', reset: 'Reset', startDate: 'Start Date', endDate: 'End Date', loading: 'Loading...', refreshSuccess: 'Refresh successful', confirm: 'Review', cancel: 'Cancel', save: 'Save', delete: 'Delete', edit: 'Edit', add: 'Add', noData: 'No Data', error: 'Error', success: 'Success', warning: 'Warning', info: 'Info', yes: 'Yes', no: 'No', action: 'Action', actions: 'Actions', close: 'Close', back: 'Back', invalidate: 'Invalidate', requestFailed: 'Request failed', operationSuccess: 'Operation successful', operationFailed: 'Operation failed' }, layout: { dashboard: 'Dashboard', content: 'Content Review', contentReview: 'Content Review', orders: 'Order Management', users: 'User Management', disassemblyOrders: 'Order Processing', permission: 'Permission Management', roleManagement: 'Role Management', routeManagement: 'Route Management', permissionManagement: 'Permission Management', userList: 'User List', pointsManagement: 'Points Management', commissionManagement: 'Commission Management', promptManagement: 'Prompt Management', productManagement: 'Product Management', voucherManagement: 'Voucher Management', logout: 'Logout', profile: 'Profile', settings: 'Settings' }, roleManagement: { title: 'Role Management', roleList: 'Role List', addRole: 'Add Role', editRole: 'Edit Role', roleName: 'Role Name', roleCode: 'Role Code', description: 'Description', createTime: 'Create Time', updateTime: 'Update Time', isSystem: 'System Role', isActive: 'Role Status', roleNameRequired: 'Please enter role name', roleCodeRequired: 'Please enter role code', getListFailed: 'Failed to get role list', getDetailFailed: 'Failed to get role detail', deleteConfirm: 'Are you sure to delete role {roleName}?', basicInfo: 'Basic Info', back: 'Back', roleDetail: 'Role Detail' }, routeManagement: { title: 'Route Management', routeList: 'Route List', path: 'Path', name: 'Name', title: 'Title', requiresAuth: 'Requires Auth', buttonPermissions: 'Button Permissions', configure: 'Configure' }, permissionManagement: { title: 'Permission Management', permissionList: 'Permission List', addPermission: 'Add Permission', editPermission: 'Edit Permission', permissionName: 'Permission Name', permissionCode: 'Permission Code', module: 'Module', action: 'Action', resource: 'Resource', description: 'Description', createTime: 'Create Time', updateTime: 'Update Time', isActive: 'Permission Status', permissionNameRequired: 'Please enter permission name', permissionCodeRequired: 'Please enter permission code', moduleRequired: 'Please enter module', actionRequired: 'Please enter action', resourceRequired: 'Please enter resource', getListFailed: 'Failed to get permission list', getDetailFailed: 'Failed to get permission detail', deleteConfirm: 'Are you sure to delete permission {permissionName}?', assignPermission: 'Assign Permission', permissionAssign: 'Permission Assign', assignSuccess: 'Permission assigned successfully', assignFailed: 'Failed to assign permission', basicInfo: 'Basic Info' }, userList: { title: 'User List Management', userList: 'User List', addUser: 'Add User', editUser: 'Edit User', searchPlaceholder: 'Search username, nickname or email', username: 'Username', fullName: 'Full Name', nickname: 'Nickname', email: 'Email', password: 'Password', phone: 'Phone', role: 'Role', roles: 'Roles', status: 'Status', createTime: 'Create Time', lastLogin: 'Last Login', admin: 'Admin', user: 'User', active: 'Active', inactive: 'Inactive', enable: 'Enable', disable: 'Disable', resetPassword: 'Reset Password', usernamePlaceholder: 'Please enter username', fullNamePlaceholder: 'Please enter full name', emailPlaceholder: 'Please enter email', passwordPlaceholder: 'Please enter password', newPassword: 'New Password', newPasswordPlaceholder: 'Please enter new password', confirmPassword: 'Confirm Password', confirmPasswordPlaceholder: 'Please enter confirm password', selectRoles: 'Please select roles', usernameRequired: 'Please enter username', usernameLength: 'Username length should be between 3-20 characters', fullNameRequired: 'Please enter full name', emailRequired: 'Please enter email', emailFormat: 'Please enter a valid email address', passwordRequired: 'Please enter password', passwordLength: 'Password length should be at least 6 characters', rolesRequired: 'Please select at least one role', confirmPasswordRequired: 'Please enter confirm password', passwordsNotMatch: 'Two passwords do not match', editSuccess: 'Edit user success', addSuccess: 'Add user success', editFailed: 'Edit user failed', addFailed: 'Add user failed', resetPasswordSuccess: 'Reset password success', resetPasswordFailed: 'Reset password failed', deleteSuccess: 'Delete user success', enableSuccess: 'Enable user success', disableSuccess: 'Disable user success', statusChangeSuccess: 'Status change success', deleteConfirmContent: 'Are you sure you want to delete the selected users?', enableConfirmContent: 'Are you sure you want to enable the selected users?', disableConfirmContent: 'Are you sure you want to disable the selected users?', isSuperuser: 'Super Administrator' }, dashboard: { title: 'Dashboard', subtitle: 'System Overview and Key Metrics', refresh: 'Refresh Data', stats: { totalUsers: 'Total Users', totalRevenue: 'Total Revenue', revenue: 'Revenue', totalOrders: 'Total Orders', growthRate: 'Growth Rate', pendingReviews: 'Pending Reviews' }, charts: { salesTrend: 'Sales Trend', orderStatus: 'Order Status Distribution', recentActivity: 'Recent Activity' }, activity: { userRegistration: 'User Registration', orderCreated: 'Order Created', paymentReceived: 'Payment Received', systemUpdate: 'System Update' } }, content: { title: 'Content Management', add: 'Add Content', status: 'Status', type: 'Type', search: 'Search Content', author: 'Author', publishDate: 'Publish Date', views: 'Views', actions: 'Actions', view: 'View', edit: 'Edit', delete: 'Delete', statusOptions: { published: 'Published', pending: 'Pending', draft: 'Draft', rejected: 'Rejected' }, typeOptions: { article: 'Article', image: 'Image', video: 'Video' } }, orders: { image:'Product Image', title: 'Order Management', export: 'Export Orders', search: 'Search Orders', status: 'Status', dateRange: 'Date Range', orderNumber: 'Order Number', customer: 'Customer', total: 'Total Amount', payment: 'Payment Method', date: 'Order Date', actions: 'Actions', view: 'View', confirm: 'Confirm', process: 'Process', ship: 'Ship', viewLogistics: 'View Logistics', refundNotice: 'Refund initiated automatically', updateStatus: 'Update Status', detail: 'Order Detail', markAsPaid: 'Mark as Paid', basicInfo: 'Basic Information', items: 'Order Items', itemName: 'Item Name', quantity: 'Quantity', price: 'Price', currentStatus: 'Current Status', newStatus: 'New Status', selectStatus: 'Select Status', trackingNumber: 'Tracking Number', carrier: 'Carrier', shippingNote: 'Shipping Note', logisticsTimeline: 'Logistics Timeline', selectAction: 'Select Action', availableActions: 'Available Actions', customerNote: 'Customer Note', id: 'Order ID', logisticsCompany: 'Logistics Company', logisticsCompanyCode: 'Logistics Company Code', logisticsStatus: 'Logistics Status', currentLocation: 'Current Location', noLogisticsData: 'No logistics data available', stats: { total: 'Total Orders', pending: 'Pending', completed: 'Completed', revenue: 'Total Revenue' }, statusOptions: { pendingConfirmation: 'Pending Review', rejected: 'Rejected', processing: 'Processing', readyToShip: 'Ready to Ship', shipped: 'Shipped', completed: 'Completed', pending: 'Pending', cancelled: 'Cancelled', paid: 'Paid' }, paymentOptions: { alipay: 'Alipay', wechat: 'WeChat Pay', credit: 'Credit Card' } }, review: { title: 'IP Review Management', subtitle: 'Manage creator-submitted IP content review process', list: 'Review List', search: 'Search Order', status: 'Review Status', dateRange: 'Date Range', orderPrice: 'Order Price', creator: 'Creator', ipName: 'IP Name', thumbnail: 'Thumbnail', preview: 'Preview', preview3D: '3D Preview', preview3DModel: '3D Model Preview', previewImage: 'Image Preview', approve: 'Approve', reject: 'Reject', approved: 'Approved', rejected: 'Rejected', pending: 'Pending Review', rejectionReason: 'Reject Reason', enterRejectReason: 'Please enter reject reason', pleaseInputReason: 'Please enter reject reason', modelPreview: 'Model Preview', proceedToParts: 'Parts', noRejectReason: 'Please enter reject reason', noThumbnail: 'No thumbnail available for preview', confirmApprove: 'Confirm approve this IP?', confirmReject: 'Confirm reject this IP?', enterFeedback: 'Please enter feedback', approveSuccess: 'IP approved successfully', rejectSuccess: 'IP rejected successfully', disassemblyComingSoon: 'Disassembly feature coming soon', redirectToDisassembly: 'Redirecting to disassembly page:', model3DPlaceholder: '3D Model Display Area', creatorStudioA: 'Creative Studio A', creatorStudioB: '3D Design Team B', creatorStudioC: 'Digital Art Studio C', nonComplianceReason: 'Does not meet content compliance requirements', dateFormat: 'en-US', rejectReview: 'Reject Review', createTime: 'Create Time', actions: 'Actions', goToDisassembly: 'Disassembly', zoomIn: 'Zoom In', zoomOut: 'Zoom Out', resetZoom: 'Reset', openInNewTab: 'Open in New Tab', stats: { total: 'Total Reviews', pending: 'Pending Review', approved: 'Approved', rejected: 'Rejected' }, statusOptions: { pending: 'Pending Review', approved: 'Approved', rejected: 'Rejected' } }, users: { title: 'User Management', add: 'Add User', search: 'Search Users', status: 'Status', role: 'Role', registerDate: 'Register Date', username: 'Username', email: 'Email', phone: 'Phone', inviteCode: 'Invite Code', invitedBy: 'Invited By', inviteList: 'Invite List', avatar: 'Avatar', realName: 'Real Name', creatorLevel: 'Creator Level', worksCount: 'Works Count', bio: 'Bio', lastLogin: 'Last Login', loginCount: 'Login Count', actions: 'Actions', view: 'View', edit: 'Edit', resetPassword: 'Reset Password', ban: 'Ban', unban: 'Unban', detail: 'User Detail', selectRole: 'Select Role', selectStatus: 'Select Status', save: 'Save', stats: { total: 'Total Users', active: 'Active Users', inactive: 'Inactive Users', vip: 'VIP Users' }, statusOptions: { active: 'Active', disable: 'Disabled', banned: 'Banned' }, roleOptions: { admin: 'Administrator', user: 'Regular User', vip: 'VIP User' }, creatorLevels: { beginner: 'Beginner Creator', intermediate: 'Intermediate Creator', advanced: 'Advanced Creator', master: 'Master Creator' }, selectCreatorLevel: 'Select Creator Level' }, disassemblyOrders: { title: 'Disassembly Orders Management', subtitle: 'Manage approved IP disassembly orders', stats: { total: 'Total Orders', pending: 'Pending', processing: 'Processing' }, filters: { status: 'Order Status', dateRange: 'Date Range', search: 'Search Orders', searchPlaceholder: 'Enter order number or creator name', allStatus: 'All Status', reset: 'Reset', refresh: 'Refresh', filter: 'Filter', statusOptions: { pending: 'Pending', processing: 'Processing' } }, list: { title: 'Disassembly Orders List', id: 'ID', orderNumber: 'Order Number', creatorName: 'Creator Name', status: 'Status', createTime: 'Create Time', actions: 'Actions', disassembly: 'Disassembly', completeDisassembly: 'Complete Disassembly', disassemblyType: 'Disassembly Type', refresh: 'Refresh', noData: 'No disassembly orders', detail: 'Detail', view: 'View', delete: 'Delete' }, detail: { title: 'Disassembly Detail', back: 'Back to List', orderInfo: 'Order Information', orderNumber: 'Order Number', customerName: 'Customer Name', modelName: 'Model Name', createTime: 'Create Time', status: 'Status', process: 'Disassembly Process', step1: 'Preview Image/Model Display', step2: 'Disassembly Parts Display', step3: 'Generated Model Display', step4: 'Logistics Information', preview: 'Preview', disassembly: 'Disassembly', generateModel: 'Generate Model', export: 'Export', ship: 'Ship', previewDialog: 'Model Preview', close: 'Close', loading: 'Loading...', changePreview: 'Change Preview Image', uploadImage: 'Upload Image', previewDescription: 'This is a preview of the original 3D model. You can drag to rotate and scroll to zoom.', disassemblyDescription: 'Model disassembly in progress, please wait...', generateDescription: 'Generating disassembled model files...', exportDescription: 'Exporting disassembled model...', shipDescription: 'Please fill in shipping information', shippingForm: { trackingNumber: 'Tracking Number', shippingCompany: 'Shipping Company', shippingAddress: 'Shipping Address', notes: 'Notes', submit: 'Submit Shipping Info', success: 'Shipping information submitted successfully', error: 'Submission failed, please try again' }, statusOptions: { pending: 'Pending Disassembly', processing: 'In Disassembly' }, typeOptions: { full: 'Full Disassembly', partial: 'Partial Disassembly', custom: 'Custom Disassembly' } }, messages: { refreshSuccess: 'Refresh successful', deleteConfirm: 'Are you sure to delete this order?', deleteTitle: 'Delete Confirmation', deleteSuccess: 'Delete successful', disassemblySuccess: 'Disassembly successful', generateSuccess: 'Model generation successful', exportSuccess: 'Export successful', shipSuccess: 'Shipping successful', disassembleConfirm: 'Are you sure to start disassembling this order?', disassembleTitle: 'Disassembly Confirmation', alreadyProcessing: 'This order is already being processed, please do not repeat the operation', uploadSuccess: 'Image uploaded successfully', uploadFailed: 'Image upload failed', completeDisassemblyConfirm: 'Are you sure to complete the disassembly of this order?', completeDisassemblyTitle: 'Complete Disassembly Confirmation', completeDisassemblySuccess: 'Disassembly completed successfully', completeDisassemblyError: 'Failed to complete disassembly, please try again' } }, pointsManagement: { title: 'Points Management', pointsPackageList: 'Points Package List', addPointsPackage: 'Add Points Package', editPointsPackage: 'Edit Points Package', deletePointsPackage: 'Delete Points Package', confirmDelete: 'Are you sure you want to delete this points package?', pointsPackage: 'Points Package', price: 'Price', validityPeriod: 'Validity Period', currency: 'Currency', actions: 'Actions', save: 'Save', cancel: 'Cancel', add: 'Add', edit: 'Edit', delete: 'Delete', name: 'Package Name', points: 'Points', usd: 'USD', year: 'Year' }, commissionManagement: { title: 'Commission Management', configTitle: 'Commission Configuration', commissionRate: 'Commission Rate', minWithdrawAmount: 'Minimum Withdraw Amount', withdrawFeeRate: 'Withdraw Fee Rate', settlementCycle: 'Settlement Cycle', status: 'Status', remark: 'Remark', saveConfig: 'Save Configuration', selectSettlementCycle: 'Please select settlement cycle', enterRemark: 'Please enter remark', daily: 'Daily', weekly: 'Weekly', monthly: 'Monthly', requiredCommissionRate: 'Please enter commission rate', invalidCommissionRate: 'Commission rate should be between 1-100', requiredMinWithdrawAmount: 'Please enter minimum withdraw amount', invalidMinWithdrawAmount: 'Minimum withdraw amount cannot be less than 0', getConfigFailed: 'Failed to get commission configuration', saveConfigSuccess: 'Configuration saved successfully', saveConfigFailed: 'Failed to save configuration', saveRate: 'Save', defaultRate: '15%', rateSaved: 'Commission rate saved successfully', list: { title: 'Commission List', creatorName: 'Creator Name', userId: 'User ID', actualPayment: 'Actual Payment', productAmount: 'Product Amount', commission: 'Commission', status: 'Status', action: 'Action', approve: 'Approve', reject: 'Reject', pending: 'Pending', approved: 'Approved', rejected: 'Rejected' } }, promptManagement: { title: 'Prompt Management', addPrompt: 'Add Prompt', editPrompt: 'Edit Prompt', promptDetail: 'Prompt Detail', inactivePrompts: 'Inactive Prompts', activePrompts: 'Active Prompts', type: 'Type', selectType: 'Select Type', animal: 'Animal', person: 'Person', general: 'General', E1: 'E1', title: 'Title', enterTitle: 'Please enter prompt title', content: 'Content', enterContent: 'Please enter prompt content', referenceImage: 'Reference Image', imageTip: 'Supports JPG and PNG formats, max size 2MB', active: 'Active', deleteConfirm: 'Are you sure you want to delete this prompt?', deleteSuccess: 'Deleted successfully', saveSuccess: 'Saved successfully', activeSuccess: 'Set to active status', inactiveSuccess: 'Removed from active status' }, productManagement: { title: 'Product Management', addProduct: 'Add Product', editProduct: 'Edit Product', productDetail: 'Product Detail', productId: 'Product ID', productName: 'Product Name', enterProductName: 'Enter Product Name', productImage: 'Product Image', imageUploadTip: 'Support JPG, PNG, GIF format, max size 5MB', imageTypeError: 'Please upload image file only', imageSizeError: 'Image size cannot exceed 5MB', imageUploadSuccess: 'Image uploaded successfully', imageUploadFailed: 'Failed to upload image', noImage: 'No image', description: 'Description', enterDescription: 'Enter Description', amount: 'Amount', enterAmount: 'Enter Amount', currency: 'Currency', selectCurrency: 'Select Currency', price: 'Price', status: 'Status', selectStatus: 'Select Status', active: 'Active', deleted: 'Deleted', createdAt: 'Created At', updatedAt: 'Updated At', updatePrice: 'Update Price', newAmount: 'New Amount', enterNewAmount: 'Enter New Amount', currentPrice: 'Current Price', fetchFailed: 'Failed to fetch products', addSuccess: 'Product added successfully', addFailed: 'Failed to add product', updateSuccess: 'Product updated successfully', updateFailed: 'Failed to update product', deleteSuccess: 'Product deleted successfully', deleteFailed: 'Failed to delete product', priceUpdateSuccess: 'Price updated successfully', priceUpdateFailed: 'Failed to update price', detailFailed: 'Failed to fetch product detail', deleteConfirm: 'Are you sure you want to delete this product?' }, voucherManagement: { title: 'Voucher Management', couponCode: 'Coupon Code', userId: 'User ID', selectUser: 'Select User', selectUsers: 'Select Users', userEmail: 'User Email', amount: 'Amount', currency: 'Currency', minOrderAmount: 'Min Order Amount', status2: 'Status', status: { 0: 'Unused', 1: 'Used', 2: 'Expired', 3: 'Invalid' }, sourceType2: 'Source Type', sourceType: { 0: 'Manual', 1: 'Automatic', manual:'Manual', activity:'Activity' }, createTime: 'Create Time', expireAt: 'Expire At', remark: 'Remark', action: { create: 'Create Voucher', batchCreate: 'Batch Create', edit: 'Edit', invalidate: 'Invalidate', batchInvalidate: 'Batch Invalidate', detail: 'Detail' }, dialog: { createTitle: 'Create Voucher', batchCreateTitle: 'Batch Create Voucher', editTitle: 'Edit Voucher', detailTitle: 'Voucher Detail' }, placeholder: { couponCode: 'Enter Coupon Code', userId: 'Enter User ID', userEmail: 'Enter User Email', amount: 'Enter Amount', currency: 'Select Currency', minOrderAmount: 'Enter Min Order Amount', expireAt: 'Select Expire Time', sourceType: 'Select Source Type', remark: 'Enter Remark', userIds: 'Enter User IDs, separated by commas', status:'Please select Status' }, required: { userId: 'Please enter User ID', amount: 'Please enter Amount', currency: 'Please select Currency', expireAt: 'Please select Expire Time', userIds: 'Please enter User IDs' }, confirm: { invalidate: 'Are you sure you want to invalidate this voucher?', batchInvalidate: 'Are you sure you want to batch invalidate selected vouchers?' }, hint: { userIds: 'Multiple user IDs separated by commas, e.g.: 1,2,3' } } }, modelUpload: { title: 'Upload Model', uploadModel: 'Upload Model', uploadHint: 'Supports .glb, .gltf, .obj, .stl formats, max 100MB per file', saveToOrderHint: 'Save suitable disassembly models to disassembly orders if available', dragDropText: 'Drag and drop files here or', clickToUpload: 'Click to Upload', supportedFormats: 'Supported formats: .glb, .gltf, .obj, .stl', maxSize: 'Max file size: 100MB', fileSelected: '{count} file(s) selected', uploadSuccess: 'Upload successful', uploadFailed: 'Upload failed', uploading: 'Uploading...', confirm: 'Confirm Upload', cancel: 'Cancel', remove: 'Remove', fileName: 'File Name', fileSize: 'File Size', fileType: 'File Type', noFileSelected: 'No file selected', selectFile: 'Select File', invalidFormat: 'Unsupported file format', invalidSize: 'File size exceeds limit', confirmUpload: 'Confirm upload {count} file(s)?', uploadComplete: 'Upload complete', uploadError: 'Upload error' }, }