import localeLogin from '@/views/login/locale/en-US'; import localeWechat from '@/views/wechat/locale/en-US'; import localeH5TrackQuery from '@/views/h5/track-query/locale/en-US'; import localeH5Center from '@/views/h5/customer-center/locale/en-US'; import localeWorkplace from '@/views/home/workplace/locale/en-US'; import localeMonitor from '@/views/home/monitor/locale/en-US'; import localeSettings from './en-US/settings'; import marketingEn from './marketing/en-US'; import kbEn from './kb/en-US'; export default { // Common 'app.language': 'Language', 'common.all': 'All', 'common.actions': 'Actions', 'common.viewDetail': 'View Detail', 'common.selectPlaceholder': 'Please select...', 'common.search': 'Search', 'common.reset': 'Reset', 'common.refresh': 'Refresh', 'common.add': 'Add', 'common.enabled': 'Enabled', 'common.disabled': 'Disabled', 'common.editSuccess': 'Edit successful', 'common.addSuccess': 'Add successful', 'common.inputProviderName': 'Please enter provider name', 'common.inputValidTime': 'Please enter valid time', 'common.selected': 'Selected ({count})', 'common.clear': 'Clear', 'common.delete': 'Delete', 'common.saveSuccess': 'Save successful', 'common.importFailed': 'Import failed', 'common.operationFailed': 'Operation failed', 'pagination.pageExceeded': 'Page number exceeds maximum limit, automatically jumped to page {max}', 'common.pagination.total': 'Total {count} records', 'common.pagination.prev': 'Previous', 'common.pagination.next': 'Next', 'common.pagination.perPage': 'per page', 'common.pagination.goTo': 'Go to', 'common.pagination.page': 'page', // Menus (keep existing demo keys) 'menu.home': 'Home', 'menu.assistant': 'Logistics Advisor', 'menu.server.home': 'Home-Server', 'menu.server.workplace': 'Workplace-Server', 'menu.server.monitor': 'Monitor-Server', 'menu.list': 'List', 'menu.result': 'Result', 'menu.exception': 'Exception', 'menu.form': 'Form', 'menu.user': 'User Center', 'menu.user.customer': 'Customer Management', 'menu.user.subAccount': 'Sub Accounts', 'menu.user.senderAddress': 'Address Management', 'menu.user.profile': 'Personal Center', 'menu.user.recharge': 'Recharge', 'menu.finance': 'Finance', 'menu.finance.rechargeRecord': 'Recharge Records', 'menu.finance.accountFlow': 'Account Transactions', 'menu.finance.receivablePayable': 'Receivables & Payables', 'menu.marketing': 'Marketing', 'menu.marketing.memberLevel': 'Member Levels', 'marketing.memberLevel.pageTip': 'Member levels control points upgrades and optional extra discounts. Price tier keys are maintained on the customer and are independent of level upgrades.', 'marketing.memberLevel.searchPlaceholder': 'Search code / name', 'marketing.memberLevel.modalTip': 'Reach the points threshold to upgrade; extra discount stacks after sell-price tier. Configure price tiers on the customer.', 'marketing.memberLevel.modal.add': 'Add level', 'marketing.memberLevel.modal.edit': 'Edit level', 'marketing.memberLevel.deleteConfirm': 'Delete level "{name}"? {count} customers use it.', 'marketing.memberLevel.form.levelCode': 'Level code', 'marketing.memberLevel.form.levelCodePlaceholder': 'e.g. NORMAL / VIP1', 'marketing.memberLevel.form.levelCodeExtra': 'Immutable after create; prefer uppercase codes', 'marketing.memberLevel.form.levelName': 'Level name', 'marketing.memberLevel.form.levelNamePlaceholder': 'e.g. Standard, Silver', 'marketing.memberLevel.form.minPoints': 'Min points', 'marketing.memberLevel.form.minPointsExtra': 'Total points required to reach this level', 'marketing.memberLevel.form.extraDiscountRate': 'Extra discount rate', 'marketing.memberLevel.form.extraDiscountRateExtra': 'e.g. 0.01 = extra 1% off after tier price', 'marketing.memberLevel.form.sort': 'Sort', 'marketing.memberLevel.form.sortExtra': 'Smaller number ranks first', 'marketing.memberLevel.form.status': 'Status', 'marketing.memberLevel.form.iconUrl': 'Icon URL', 'marketing.memberLevel.form.iconUrlPlaceholder': 'Optional level icon URL', 'marketing.memberLevel.form.iconUrlExtra': 'For customer portal display; can be empty', 'marketing.memberLevel.form.benefitDesc': 'Benefits', 'marketing.memberLevel.form.benefitDescPlaceholder': 'Benefit copy shown to customers', 'marketing.memberLevel.form.customerCount': 'Customers', 'marketing.memberLevel.form.requiredHint': 'Level code and name are required', 'marketing.memberLevel.section.basic': 'Basic info', 'marketing.memberLevel.section.basicHint': 'Code cannot change after create; name and status can', 'marketing.memberLevel.section.pricing': 'Points & discount', 'marketing.memberLevel.section.pricingHint': 'Upgrade threshold and extra discount', 'marketing.memberLevel.section.display': 'Display & benefits', 'marketing.memberLevel.section.displayHint': 'Portal display only; does not affect pricing', 'marketing.memberLevel.preview.nameFallback': 'Untitled level', 'marketing.memberLevel.preview.codeFallback': 'Code pending', 'menu.arcoWebsite': 'Arco Design', 'menu.faq': 'FAQ', 'menu.example': 'Example', 'menu.example.proTable': 'Pro Table', 'menu.demo': 'Demo', 'menu.demo.index': 'Data Table', 'navbar.docs': 'Docs', 'navbar.message': 'Messages', 'navbar.messageInbox': 'Inbox', 'navbar.messageNotice': 'Announcements', 'navbar.action.locale': 'Switch to English', 'menu.order': 'Order', 'menu.order.orderGuide': 'Getting Started', 'menu.order.priceCheck': 'Price Check', 'menu.order.placeOrder': 'Place Order', 'menu.order.templateMapping': 'Template Mapping', 'menu.order.myOrders': 'My Orders', 'menu.order.fulfillOrders': 'Fulfillment Orders', 'menu.order.waybillManage': 'Waybill Management', 'menu.order.pickupOrder': 'Pickup sheets', 'menu.order.customs9610Order': '9610 Orders', 'menu.order.batchJobs': 'Batch Jobs', 'menu.order.platformStore': 'Platform Stores', 'menu.order.platformStoreOrder': 'Store Orders', 'menu.warehouse': 'Warehouse', 'menu.warehouse.parcel': 'My Parcels', 'menu.warehouse.inventory': 'My Inventory', 'menu.warehouse.sku': 'My SKU', 'menu.warehouse.inboundNotice': 'Inbound Notice', 'menu.warehouse.binLocation': 'Bin Locations', 'warehouse.common.search': 'Search', 'warehouse.common.add': 'Add', 'warehouse.common.edit': 'Edit', 'warehouse.common.delete': 'Delete', 'warehouse.common.save': 'Save', 'warehouse.common.cancel': 'Cancel', 'warehouse.common.confirm': 'Confirm', 'warehouse.common.detail': 'Detail', 'warehouse.common.warehouse': 'Warehouse', 'warehouse.common.customer': 'Customer', 'warehouse.common.customerName': 'Customer Name', 'warehouse.common.customerCode': 'Customer Code', 'warehouse.common.selectCustomer': 'All customers', 'warehouse.common.selectCustomerRequired': 'Select a customer before create/update', 'warehouse.common.yes': 'Yes', 'warehouse.common.no': 'No', 'warehouse.sku.table.dimensions': 'Size(cm)', 'warehouse.sku.table.createTime': 'Created At', 'warehouse.sku.table.skuCode': 'SKU Code', 'warehouse.sku.table.skuName': 'SKU Name', 'warehouse.sku.table.skuNameEn': 'SKU Name (EN)', 'warehouse.sku.table.unitPrice': 'Unit Price', 'warehouse.sku.table.exHsCode': 'Export HSCode', 'warehouse.sku.table.imHsCode': 'Import HSCode', 'warehouse.sku.table.totalQty': 'Qty', 'warehouse.sku.table.weightG': 'Weight(g)', 'warehouse.sku.table.remark': 'Remark', 'warehouse.sku.search.keyword': 'Code / Name', 'warehouse.sku.tip': 'Manage warehouse SKUs. Check available stock on My Inventory.', 'warehouse.sku.form.skuCode': 'Code', 'warehouse.sku.form.skuCodePlaceholder': 'Letters/numbers only', 'warehouse.sku.form.skuName': 'Name', 'warehouse.sku.form.skuNamePlaceholder': 'Product name', 'warehouse.sku.form.unitPrice': 'Unit Price', 'warehouse.sku.form.unitPricePlaceholder': 'Optional', 'warehouse.sku.form.skuNameEn': 'EN Name', 'warehouse.sku.form.skuNameEnPlaceholder': 'English name (optional)', 'warehouse.sku.form.exHsCode': 'Export HS', 'warehouse.sku.form.exHsCodePlaceholder': 'Export HS code (optional)', 'warehouse.sku.form.imHsCode': 'Import HS', 'warehouse.sku.form.imHsCodePlaceholder': 'Import HS code (optional)', 'warehouse.sku.form.showExtra': 'Show more fields', 'warehouse.sku.form.hideExtra': 'Hide extra fields', 'warehouse.modal.section.declarationExtra': 'Declaration extras', 'warehouse.sku.form.weightG': 'Weight', 'warehouse.sku.form.weightPlaceholder': 'Optional', 'warehouse.sku.form.remark': 'Remark', 'warehouse.sku.form.remarkPlaceholder': 'Optional', 'warehouse.sku.form.imageUrl': 'Image', 'warehouse.sku.form.uploadImage': 'Upload image', 'warehouse.sku.form.reuploadImage': 'Replace image', 'warehouse.sku.form.clearImage': 'Clear image', 'warehouse.sku.message.uploadSuccess': 'Image uploaded', 'warehouse.sku.message.uploadFailed': 'Image upload failed', 'warehouse.sku.message.imageTooLarge': 'Image must be under 5MB', 'warehouse.sku.form.currentWarehouse': 'Current warehouse', 'warehouse.common.noCurrentWarehouse': 'Please select a warehouse in the top-right first', 'warehouse.sku.form.dimensions': 'Dimensions', 'warehouse.sku.form.length': 'L', 'warehouse.sku.form.width': 'W', 'warehouse.sku.form.height': 'H', 'warehouse.sku.form.clearSize': 'Clear size', 'warehouse.sku.form.volumeEstimate': 'Volume estimate', 'warehouse.modal.noWarehouse': 'No warehouse selected', 'warehouse.modal.section.basic': 'Basic Info', 'warehouse.modal.section.weightSize': 'Weight & Size', 'warehouse.modal.section.products': 'Products', 'warehouse.sku.modal.add': 'Add SKU', 'warehouse.sku.modal.edit': 'Edit SKU', 'warehouse.sku.actions.delete': 'Delete SKU', 'warehouse.sku.message.loadFailed': 'Failed to load SKU list', 'warehouse.sku.message.saveSuccess': 'Saved', 'warehouse.sku.message.saveFailed': 'Save failed', 'warehouse.sku.message.deleteSuccess': 'Deleted', 'warehouse.sku.message.deleteFailed': 'Delete failed', 'warehouse.sku.message.deleteConfirm': 'Delete {code}?', 'warehouse.sku.message.required': 'SKU code and name are required', 'warehouse.inventory.table.warehouse': 'Warehouse', 'warehouse.inventory.table.binName': 'Bin Name', 'warehouse.inventory.table.skuCode': 'SKU Code', 'warehouse.inventory.table.skuName': 'SKU Name', 'warehouse.inventory.table.warehouseId': 'Warehouse', 'warehouse.inventory.table.totalQty': 'Total Qty', 'warehouse.inventory.table.availableQty': 'Available', 'warehouse.inventory.table.frozenQty': 'Frozen', 'warehouse.inventory.table.binCount': 'Bins', 'warehouse.inventory.table.binCode': 'Bin', 'warehouse.inventory.table.qty': 'Qty', 'warehouse.inventory.search.keyword': 'Code / Name', 'warehouse.inventory.actions.binDetail': 'Bin Detail', 'warehouse.inventory.actions.history': 'History', 'warehouse.inventory.actions.relocate': 'Relocate', 'warehouse.inventory.drawer.binDetail': 'Bin Detail', 'warehouse.inventory.drawer.history': 'Stock history', 'warehouse.inventory.history.all': 'All', 'warehouse.inventory.history.inbound': 'Inbound', 'warehouse.inventory.history.deduct': 'Deduct', 'warehouse.inventory.history.type': 'Type', 'warehouse.inventory.history.qty': 'Qty', 'warehouse.inventory.history.refNo': 'Ref No.', 'warehouse.inventory.history.remark': 'Remark', 'warehouse.inventory.history.time': 'Time', 'warehouse.inventory.history.empty': 'No history yet', 'warehouse.inventory.history.loadFailed': 'Failed to load history', 'warehouse.inventory.tip': 'Available = ready to ship; Frozen = reserved by orders. Use History for inbound & deductions.', 'warehouse.inventory.modal.relocate': 'Relocate', 'warehouse.inventory.form.sourceBin': 'Source Bin', 'warehouse.inventory.form.targetBin': 'Target Bin', 'warehouse.inventory.form.qty': 'Qty', 'warehouse.inventory.form.selectBin': 'Select bin', 'warehouse.inventory.form.selectSourceBin': 'Select source bin with stock', 'warehouse.inventory.form.selectTargetBin': 'Select target bin', 'warehouse.inventory.message.loadFailed': 'Failed to load inventory', 'warehouse.inventory.message.binDetailFailed': 'Failed to load bin detail', 'warehouse.inventory.message.relocateRequired': 'Fill relocate fields', 'warehouse.inventory.message.relocateSuccess': 'Relocated', 'warehouse.inventory.message.relocateFailed': 'Relocate failed', 'warehouse.inventory.message.sameBin': 'Source and target bin must differ', 'warehouse.inventory.message.qtyExceed': 'Qty cannot exceed source bin stock', 'warehouse.binLocation.table.binCode': 'Bin Code', 'warehouse.binLocation.table.binName': 'Bin Name', 'warehouse.binLocation.table.zoneCode': 'Zone', 'warehouse.binLocation.table.isEnabled': 'Enabled', 'warehouse.binLocation.table.remark': 'Remark', 'warehouse.binLocation.search.warehouse': 'Search warehouse', 'warehouse.binLocation.search.keyword': 'Code / Name', 'warehouse.binLocation.filter.isEnabled': 'Enabled', 'warehouse.binLocation.actions.refreshWarehouse': 'Refresh warehouses', 'warehouse.binLocation.actions.add': 'Add Bin', 'warehouse.binLocation.loading.warehouse': 'Loading warehouses...', 'warehouse.binLocation.emptySelect': 'Select a warehouse on the left', 'warehouse.binLocation.modal.add': 'Add Bin Location', 'warehouse.binLocation.modal.edit': 'Edit Bin Location', 'warehouse.binLocation.form.binCode': 'Bin Code', 'warehouse.binLocation.form.binName': 'Bin Name', 'warehouse.binLocation.form.zoneCode': 'Zone Code', 'warehouse.binLocation.form.isEnabled': 'Enabled', 'warehouse.binLocation.form.remark': 'Remark', 'warehouse.binLocation.message.warehouseLoadFailed': 'Failed to load warehouses', 'warehouse.binLocation.message.loadFailed': 'Failed to load bins', 'warehouse.binLocation.message.selectWarehouse': 'Select a warehouse first', 'warehouse.binLocation.message.required': 'Bin code is required', 'warehouse.binLocation.message.saveSuccess': 'Saved', 'warehouse.binLocation.message.saveFailed': 'Save failed', 'warehouse.parcel.status.all': 'All', 'warehouse.parcel.status.inTransit': 'In Transit', 'warehouse.parcel.status.arrived': 'Arrived', 'warehouse.parcel.status.stored': 'Stored', 'warehouse.parcel.table.warehouse': 'Warehouse', 'warehouse.parcel.table.items': 'Items', 'warehouse.parcel.table.image': 'Image', 'warehouse.parcel.table.imagePreviewTip': 'Click to enlarge', 'warehouse.parcel.table.attribute': 'Attributes', 'warehouse.parcel.table.quantity': 'Total', 'warehouse.parcel.table.availableQty': 'Available', 'warehouse.parcel.table.frozenQty': 'Frozen', 'warehouse.parcel.badge.multiTip': 'Multi-item parcel. Click Items / Attributes / Qty for details.', 'warehouse.parcel.drawer.itemsTitle': 'Item details', 'warehouse.parcel.drawer.totalQty': 'Total qty', 'warehouse.parcel.drawer.availableQty': 'Available', 'warehouse.parcel.drawer.frozenQty': 'Frozen', 'warehouse.parcel.drawer.itemCount': '{n} line(s)', 'warehouse.parcel.tip': 'Available = ready to bind; Frozen = reserved by orders. Use status tabs to filter.', 'warehouse.parcel.drawer.edit': 'Edit parcel', 'warehouse.parcel.drawer.empty': 'No items', 'warehouse.parcel.table.arrivalTime': 'Arrival Time', 'warehouse.parcel.table.createTime': 'Created At', 'warehouse.parcel.table.trackingNo': 'Tracking No', 'warehouse.parcel.table.multiBadge': 'Flag', 'warehouse.parcel.table.carrierName': 'Carrier', 'warehouse.parcel.table.lifecycleStatus': 'Status', 'warehouse.parcel.table.warehouseId': 'Warehouse', 'warehouse.parcel.table.remark': 'Remark', 'warehouse.parcel.search.trackingNo': 'Tracking No', 'warehouse.parcel.form.trackingNo': 'Tracking No', 'warehouse.parcel.form.trackingNoPlaceholder': 'Scan or enter tracking number', 'warehouse.parcel.form.carrierName': 'Carrier', 'warehouse.parcel.form.carrierNamePlaceholder': 'e.g. SF, UPS (optional)', 'warehouse.parcel.form.productName': 'Product', 'warehouse.parcel.form.productNamePlaceholder': 'Required; a new row is added after fill', 'warehouse.parcel.form.image': 'Image', 'warehouse.parcel.form.uploadImage': 'Upload', 'warehouse.parcel.form.reuploadImage': 'Re-upload', 'warehouse.parcel.form.clearImage': 'Clear', 'warehouse.parcel.form.attribute': 'Attributes', 'warehouse.parcel.form.attributePlaceholder': 'Color/size etc. (optional)', 'warehouse.parcel.form.quantity': 'Qty', 'warehouse.parcel.form.remark': 'Remark', 'warehouse.parcel.form.remarkPlaceholder': 'Parcel remark (optional)', 'warehouse.parcel.form.itemRemark': 'Item remark', 'warehouse.parcel.form.itemRemarkPlaceholder': 'Optional', 'warehouse.parcel.form.currentWarehouse': 'Current warehouse', 'warehouse.parcel.form.autoAddRow': 'A new row is added after you fill product name', 'warehouse.parcel.form.itemFilledCount': '{n} filled', 'warehouse.parcel.modal.add': 'Add Parcel', 'warehouse.parcel.actions.delete': 'Delete Parcel', 'warehouse.parcel.message.loadFailed': 'Failed to load parcels', 'warehouse.parcel.message.saveSuccess': 'Saved', 'warehouse.parcel.message.saveFailed': 'Save failed', 'warehouse.parcel.message.deleteSuccess': 'Deleted', 'warehouse.parcel.message.required': 'Warehouse and tracking no required', 'warehouse.parcel.message.itemsRequired': 'Add at least one product', 'warehouse.parcel.message.uploadSuccess': 'Image uploaded', 'warehouse.parcel.message.uploadFailed': 'Image upload failed', 'warehouse.parcel.message.imageTooLarge': 'Image must be under 5MB', 'warehouse.parcelArrival.form.trackingNo': 'Domestic tracking No.', 'warehouse.parcelArrival.form.placeholder.scanOrInput': 'Scan or enter domestic tracking number', 'warehouse.parcelArrival.scan.title': 'Scan arrival', 'warehouse.parcelArrival.tip': 'Scan domestic tracking to confirm arrival. Check the current warehouse first.', 'warehouse.parcelArrival.preview.title': 'Confirm arrival', 'warehouse.parcelArrival.preview.empty': 'Verify warehouse and tracking, then press Enter or Confirm arrival.', 'warehouse.parcelArrival.recent.title': 'Arrival records', 'warehouse.parcelArrival.search.trackingNo': 'Domestic tracking No.', 'warehouse.parcelArrival.table.trackingNo': 'Domestic tracking No.', 'warehouse.parcelArrival.table.warehouse': 'Warehouse', 'warehouse.parcelArrival.table.createTime': 'Operate Time', 'warehouse.parcelArrival.table.createBy': 'Operator', 'warehouse.parcelArrival.table.operateTime': 'Operate Time', 'warehouse.parcelArrival.table.operator': 'Operator', 'warehouse.parcelArrival.actions.reset': 'Reset', 'warehouse.parcelArrival.actions.arrive': 'Confirm arrival', 'warehouse.parcelArrival.actions.delete': 'Delete arrival record', 'warehouse.parcelArrival.message.loadFailed': 'Failed to load arrival records', 'warehouse.parcelArrival.message.trackingRequired': 'Please scan or enter the tracking number', 'warehouse.parcelArrival.message.arriveSuccess': 'Arrived. Parcel status updated to arrived', 'warehouse.parcelArrival.message.arriveSuccessWithOrders': 'Arrived; linked fulfill waybill(s): {orders}', 'warehouse.parcelArrival.message.openFulfillPackHint': 'Linked order(s) are pending pick. Open Fulfill Pack & Outbound?', 'warehouse.parcelArrival.actions.openFulfillPack': 'Open fulfill pack', 'warehouse.parcelArrival.message.arriveFailed': 'Failed to mark arrival', 'warehouse.parcelArrival.message.deleteSuccess': 'Deleted', 'warehouse.inbound.status.all': 'All', 'warehouse.inbound.status.forecasted': 'Forecasted', 'warehouse.inbound.status.completed': 'Completed', 'warehouse.inbound.status.received': 'Received', 'warehouse.inbound.table.warehouse': 'Warehouse', 'warehouse.inbound.table.inboundType': 'Inbound Type', 'warehouse.inbound.table.expectedArrival': 'ETA', 'warehouse.inbound.type.normal': 'Normal', 'warehouse.inbound.type.return': 'Return', 'warehouse.inbound.table.noticeNo': 'Notice No', 'warehouse.inbound.table.markReference': 'Mark Ref', 'warehouse.inbound.table.receiptStatus': 'Status', 'warehouse.inbound.table.boxCount': 'Boxes', 'warehouse.inbound.table.plannedQty': 'Planned Qty', 'warehouse.inbound.table.createTime': 'Created', 'warehouse.inbound.search.keyword': 'Notice / Mark', 'warehouse.inbound.tip': 'Forecast inbound goods. Stock increases after receive & putaway. Status: Forecasted → Received → Completed.', 'warehouse.inbound.form.markReference': 'Mark Ref', 'warehouse.inbound.form.markBoxNo': 'Box No', 'warehouse.inbound.form.markBoxNoPlaceholder': 'Box mark (optional)', 'warehouse.inbound.form.sku': 'SKU', 'warehouse.inbound.form.plannedQty': 'Planned Qty', 'warehouse.inbound.form.markPlaceholder': 'Usually the tracking number', 'warehouse.inbound.form.remarkPlaceholder': 'Optional', 'warehouse.inbound.form.optional': 'Optional', 'warehouse.inbound.form.boxSkuDetail': 'Boxes & SKU lines', 'warehouse.inbound.form.boxCount': 'Boxes {n}', 'warehouse.inbound.form.skuCount': 'SKU {n}', 'warehouse.inbound.form.totalQty': 'Total qty {n}', 'warehouse.inbound.form.summaryMeta': '{box} boxes · {sku} SKU · qty {qty}', 'warehouse.inbound.form.boxTabWithSku': 'Box {n} · {sku}', 'warehouse.inbound.form.boxWeight': 'Weight', 'warehouse.inbound.form.boxSize': 'Size', 'warehouse.inbound.form.boxLength': 'L/cm', 'warehouse.inbound.form.boxWidth': 'W/cm', 'warehouse.inbound.form.boxHeight': 'H/cm', 'warehouse.inbound.form.selectSku': 'Select SKU', 'warehouse.inbound.form.autoAddSkuRow': 'A new row is added after you select a SKU', 'warehouse.inbound.actions.addBox': 'Add box', 'warehouse.inbound.actions.addBox5': 'Add 5 boxes', 'warehouse.inbound.actions.removeBox': 'Remove boxes', 'warehouse.inbound.actions.removeCurrentBox': 'Remove current box', 'warehouse.inbound.actions.addSku': 'Add SKU line', 'warehouse.inbound.modal.add': 'Add Inbound', 'warehouse.inbound.drawer.detail': 'Inbound Detail', 'warehouse.inbound.box': 'Box', 'warehouse.inbound.line.skuCode': 'SKU', 'warehouse.inbound.line.plannedQty': 'Planned', 'warehouse.inbound.line.receivedQty': 'Received', 'warehouse.inbound.line.binLocation': 'Putaway Bin', 'warehouse.inbound.form.selectBin': 'Select bin', 'warehouse.inbound.actions.delete': 'Delete', 'warehouse.inbound.actions.confirmReceive': 'Confirm Receive', 'warehouse.inbound.modal.confirmReceive': 'Confirm Receive & Putaway', 'warehouse.inbound.message.loadFailed': 'Failed to load inbound list', 'warehouse.inbound.message.saveSuccess': 'Saved', 'warehouse.inbound.message.saveFailed': 'Save failed', 'warehouse.inbound.message.deleteSuccess': 'Deleted', 'warehouse.inbound.message.required': 'Select warehouse', 'warehouse.inbound.message.boxRequired': 'Add SKU lines to at least one box', 'warehouse.inbound.message.keepOneBox': 'Keep at least one box', 'warehouse.inbound.message.detailFailed': 'Failed to load detail', 'warehouse.inbound.message.receiveBinRequired': 'Bin is required when received qty > 0', 'warehouse.inbound.message.receiveQtyInvalid': 'Received qty cannot be negative', 'warehouse.inbound.message.receiveSuccess': 'Receive succeeded', 'warehouse.inbound.message.receiveFailed': 'Receive failed', 'order.platformStore.table.siteCountry': 'Site Country', 'order.platformStore.table.autoFulfill': 'Auto Fulfill', 'order.platformStore.table.authTime': 'Auth Time', 'order.platformStore.table.createTime': 'Created At', 'order.platformStore.form.siteCountry': 'Site', 'order.platformStore.form.authCode': 'Auth code', 'order.platformStore.form.tip': 'Note', 'order.platformStore.form.authRenewTip': 'Re-authorizing the same store renews binding without changing the nickname.', 'order.platformStore.site.crossBorder': 'Cross-border', 'order.platformStore.actions.bind': 'Bind store', 'order.platformStore.actions.startAuth': 'Start authorization', 'order.platformStore.auth.active': 'Active', 'order.platformStore.auth.expired': 'Expired', 'order.platformStore.auth.revoked': 'Revoked', 'order.platformStore.table.platform': 'Platform', 'order.platformStore.table.nickname': 'Nickname', 'order.platformStore.table.account': 'Account', 'order.platformStore.table.authStatus': 'Auth Status', 'order.platformStore.table.tokenExpire': 'Token Expire', 'order.platformStore.search.platform': 'Platform', 'order.platformStore.search.nickname': 'Nickname', 'order.platformStore.form.platform': 'Platform', 'order.platformStore.form.nickname': 'Nickname', 'order.platformStore.form.account': 'Account', 'order.platformStore.form.autoFulfill': 'Auto Fulfill', 'order.platformStore.modal.add': 'Add Store', 'order.platformStore.modal.bind': 'Bind Store', 'order.platformStore.form.nicknamePlaceholder': 'Store nickname (custom)', 'order.platformStore.form.authCodePlaceholder': 'Auth code from store management', 'order.platformStore.form.sitePlaceholder': 'Select site', 'order.platformStore.form.selectPlatformHint': 'Select a platform to continue', 'order.platformStore.actions.close': 'Close', 'order.platformStore.modal.edit': 'Edit Store', 'order.platformStore.actions.auth': 'Authorize', 'order.platformStore.actions.delete': 'Delete Store', 'order.platformStore.message.loadFailed': 'Failed to load stores', 'order.platformStore.message.saveSuccess': 'Saved', 'order.platformStore.message.saveFailed': 'Save failed', 'order.platformStore.message.deleteSuccess': 'Deleted', 'order.platformStore.message.required': 'Nickname is required', 'order.platformStore.message.platformRequired': 'Select a platform', 'order.platformStore.message.authCodeRequired': 'Auth code is required', 'order.platformStore.message.authPlaceholder': 'OAuth placeholder', 'order.platformStore.message.authStarted': 'Authorization started; complete it in the new window', 'order.platformStore.message.authSuccess': 'Store authorized successfully', 'order.platformStore.message.authFailed': 'Failed to get auth URL', 'order.platformStore.oauth.processing': 'Adding store…', 'order.platformStore.oauth.wait': 'Do not close this page while verifying authorization…', 'order.platformStore.oauth.successTitle': 'Authorization succeeded', 'order.platformStore.oauth.failedTitle': 'Authorization failed', 'order.platformStore.oauth.success': 'Store added. Close this window and refresh the list.', 'order.platformStore.oauth.failed': 'OAuth callback failed', 'order.platformStore.oauth.missingCode': 'Missing authorization code', 'order.platformStore.oauth.missingPlatform': 'Missing platform', 'order.platformStore.oauth.close': 'Close', 'user.senderAddress.search.keyword': 'Alias / contact / phone / address', 'user.senderAddress.modal.add': 'Add Address', 'user.senderAddress.modal.edit': 'Edit Address', 'user.senderAddress.actions.setDefault': 'Set Default', 'user.senderAddress.type.all': 'All', 'user.senderAddress.type.sender': 'Sender', 'user.senderAddress.type.return': 'Return', 'user.senderAddress.type.receiver': 'Receiver', 'user.senderAddress.table.addressType': 'Type', 'user.senderAddress.table.addressName': 'Alias', 'user.senderAddress.table.senderName': 'Contact', 'user.senderAddress.table.phone': 'Phone', 'user.senderAddress.table.destCountry': 'Country', 'user.senderAddress.table.country': 'Country', 'user.senderAddress.table.province': 'Province', 'user.senderAddress.table.city': 'City', 'user.senderAddress.table.address': 'Address', 'user.senderAddress.table.isDefault': 'Default', 'user.senderAddress.table.createTime': 'Created', 'user.senderAddress.form.addressType': 'Address Type', 'user.senderAddress.form.addressName': 'Alias', 'user.senderAddress.form.senderName': 'Contact', 'user.senderAddress.form.phone': 'Phone', 'user.senderAddress.form.company': 'Company', 'user.senderAddress.form.destCountryCode': 'Country Code', 'user.senderAddress.form.countryCode': 'Country Code', 'user.senderAddress.form.province': 'Province', 'user.senderAddress.form.city': 'City', 'user.senderAddress.form.zipCode': 'Zip Code', 'user.senderAddress.form.streetAddress1': 'Street Address', 'user.senderAddress.form.streetAddress2': 'Address Line 2', 'user.senderAddress.form.houseNumber': 'House No.', 'user.senderAddress.form.isDefault': 'Default for this type', 'user.senderAddress.message.loadFailed': 'Failed to load addresses', 'user.senderAddress.message.saveSuccess': 'Saved', 'user.senderAddress.message.saveFailed': 'Save failed', 'user.senderAddress.message.deleteSuccess': 'Deleted', 'user.senderAddress.message.setDefaultSuccess': 'Default address updated for this type', 'user.senderAddress.message.typeRequired': 'Address type is required', 'user.senderAddress.message.senderNameRequired': 'Contact is required', 'user.senderAddress.message.addressRequired': 'Street address is required', 'order.customs9610.status.pending': 'Pending declare', 'order.customs9610.status.declared': 'Declared', 'order.customs9610.search.keyword': 'Service No. / Client No. / Customs order No.', 'order.customs9610.empty.hint': 'No 9610 declarations yet. Orders created with ExportCustomsMode=9610Summary will appear here.', 'order.customs9610.table.serviceNo': 'Service No.', 'order.customs9610.table.clientNo': 'Client No.', 'order.customs9610.table.destCountry': 'Dest country', 'order.customs9610.table.grossWeight': 'Gross weight', 'order.customs9610.table.currency': 'Currency', 'order.customs9610.table.businessType': 'Business type', 'order.customs9610.table.status': 'Status', 'order.customs9610.table.customsOrderNo': 'Customs order No.', 'order.customs9610.table.declareTime': 'Declare time', 'order.customs9610.table.createTime': 'Created', 'order.customs9610.actions.declare': 'Declare', 'order.customs9610.actions.batchDeclare': 'Batch declare', 'order.customs9610.actions.batchFetchManifest': 'Batch fetch manifest', 'order.customs9610.actions.batchFetchDeclarationForm': 'Batch fetch declaration form', 'order.customs9610.modal.edit': 'Edit 9610 declaration', 'order.customs9610.modal.detail': '9610 declaration detail', 'order.customs9610.field.platformCode': 'Platform', 'order.customs9610.field.businessType': 'Business type', 'order.customs9610.field.preRecordFlag': 'Pre-record flag', 'order.customs9610.field.clientNo': 'Client No.', 'order.customs9610.field.serviceNo': 'Service No.', 'order.customs9610.field.destCountry': 'Dest country', 'order.customs9610.field.currency': 'Currency', 'order.customs9610.field.grossWeight': 'Gross weight (KG)', 'order.customs9610.field.freight': 'Freight', 'order.customs9610.field.ecomCorpCode': 'E-commerce corp code', 'order.customs9610.field.ecomCorpName': 'E-commerce corp name', 'order.customs9610.field.producerCode': 'Producer code', 'order.customs9610.field.producerName': 'Producer name', 'order.customs9610.field.region': 'Region', 'order.customs9610.field.agentDeclare': 'Agent declare', 'order.customs9610.field.actualSellerCode': 'Actual seller code', 'order.customs9610.field.shipmentNo': 'Shipment No.', 'order.customs9610.field.customsOrderNo': 'Customs order No.', 'order.customs9610.field.isSummarySimple': 'Summary simple', 'order.customs9610.items.title': 'Order items', 'order.customs9610.items.add': 'Add row', 'order.customs9610.items.sku': 'SKU', 'order.customs9610.items.cnName': 'CN name', 'order.customs9610.items.exHsCode': 'Export HS code', 'order.customs9610.items.declareElement': 'Declare element', 'order.customs9610.items.unitPrice': 'Unit price', 'order.customs9610.items.quantity': 'Quantity', 'order.customs9610.confirm.declareTitle': 'Confirm declare', 'order.customs9610.confirm.declareContent': 'This will call the API-center upstream interface. Continue?', 'order.customs9610.confirm.batchDeclareTitle': 'Batch declare', 'order.customs9610.confirm.batchDeclareContent': 'Declare {count} selected pending records?', 'order.customs9610.confirm.batchManifestTitle': 'Batch fetch manifest', 'order.customs9610.confirm.batchManifestContent': 'Fetch manifest data for {count} selected declared records?', 'order.customs9610.confirm.batchDeclarationFormTitle': 'Batch fetch declaration form', 'order.customs9610.confirm.batchDeclarationFormContent': 'Fetch declaration forms for {count} selected declared records?', 'order.customs9610.message.loadFailed': 'Load failed', 'order.customs9610.message.saveSuccess': 'Saved', 'order.customs9610.message.saveFailed': 'Save failed', 'order.customs9610.message.declareSuccess': 'Declared', 'order.customs9610.message.declareFailed': 'Declare failed', 'order.customs9610.message.batchResult': 'Success {success}, failed {fail}', 'order.customs9610.message.fetchManifestFailed': 'Failed to fetch manifest', 'order.customs9610.message.fetchDeclarationFormFailed': 'Failed to fetch declaration form', 'order.customs9610.message.selectFirst': 'Select records first', 'order.customs9610.message.platformCodeRequired': 'Platform is required', 'order.customs9610.message.clientServiceRequired': 'Client No. and Service No. are required', 'order.customs9610.message.weightRequired': 'Gross weight must be > 0', 'order.customs9610.message.currencyDestCountryRequired': 'Currency and dest country are required', 'order.customs9610.message.preRecordRequired': 'Pre-record flag is required for form type B', 'order.customs9610.message.aFieldsRequired': 'Region and agentDeclare are required for form type A', 'order.customs9610.message.itemsRequired': 'SKU and CN name are required', 'order.pickupOrder.search.keyword': 'System No. / Carrier Waybill / Contact', 'order.pickupOrder.search.customer': 'Customer', 'order.pickupOrder.search.status': 'Status', 'order.pickupOrder.filter.pendingPayment': 'Unpaid', 'order.pickupOrder.actions.search': 'Search', 'order.pickupOrder.actions.detail': 'Detail', 'order.pickupOrder.actions.confirmFreight': 'Confirm Freight', 'order.pickupOrder.actions.pay': 'Pay Pickup Fee', 'order.pickupOrder.actions.batchPay': 'Batch Pay', 'order.pickupOrder.selectedCount': '{count} selected', 'order.pickupOrder.actions.schedule': 'Schedule', 'order.pickupOrder.actions.draftForecast': 'Draft Forecast', 'order.pickupOrder.actions.rebind': 'Rebind Orders', 'order.pickupOrder.actions.markPicked': 'Mark Picked', 'order.pickupOrder.actions.markInbound': 'Confirm Inbound', 'order.pickupOrder.actions.cancel': 'Cancel Order', 'order.pickupOrder.actions.create': 'Create Pickup Order', 'order.pickupOrder.actions.submit': 'Submit', 'order.pickupOrder.modal.create': 'Create Pickup Order', 'order.pickupOrder.hint.createFromMyOrders': 'Bind pre-declared waybills or create a new one; multi-select must share a warehouse', 'order.pickupOrder.create.lead': 'Fill pickup and cargo details. A waybill and pickup sheet will be created.', 'order.pickupOrder.create.leadBind': 'Select unbound pre-declared waybills (same warehouse), then fill pickup details.', 'order.pickupOrder.create.modeBind': 'Bind existing waybills', 'order.pickupOrder.create.modeNew': 'Create new waybill pickup', 'order.pickupOrder.create.sectionPickup': 'Pickup details', 'order.pickupOrder.create.sectionCargo': 'Cargo details', 'order.pickupOrder.create.sectionOrders': 'Select waybills', 'order.pickupOrder.create.orderKeywordPh': 'Service No. / Client No.', 'order.pickupOrder.create.selectedOrders': '{count} selected · Warehouse: {warehouse}', 'order.pickupOrder.create.warehouseFromOrders': 'Select waybills first (warehouse auto-filled)', 'order.pickupOrder.create.needSelectOrders': 'Select at least one waybill', 'order.pickupOrder.form.cargoNamePlaceholder': 'Enter cargo name (Chinese)', 'order.pickupOrder.form.clientNoPlaceholder': 'Optional; auto-generated if empty', 'order.pickupOrder.message.noPickupProduct': 'No domestic pickup sales product available. Configure it under Channel first.', 'order.pickupOrder.message.contactRequired': 'Please complete phone and email before creating a pickup', 'order.pickupOrder.message.loadOrdersFailed': 'Failed to load bindable waybills', 'order.pickupOrder.table.pickupNo': 'System No.', 'order.pickupOrder.table.carrierWaybillNo': 'Carrier Waybill No.', 'order.pickupOrder.table.customer': 'Customer', 'order.pickupOrder.table.expectTime': 'Expected Pickup', 'order.pickupOrder.table.parcelCount': 'Parcels', 'order.pickupOrder.table.payStatus': 'Payment', 'order.pickupOrder.table.receivable': 'Receivable', 'order.pickupOrder.table.carrier': 'Carrier', 'order.pickupOrder.table.carrierService': 'Carrier service', 'order.pickupOrder.table.actions': 'Actions', 'order.pickupOrder.table.serviceNo': 'Service No.', 'order.pickupOrder.table.clientNo': 'Client No.', 'order.pickupOrder.table.productCode': 'Product', 'order.pickupOrder.table.warehouse': 'Warehouse', 'order.pickupOrder.table.pickupTime': 'Pickup Time', 'order.pickupOrder.table.cargoName': 'Cargo', 'order.pickupOrder.table.actualWeight': 'Weight (kg)', 'order.pickupOrder.table.status': 'Status', 'order.pickupOrder.table.createTime': 'Created', 'order.pickupOrder.detail.title': 'Pickup Detail', 'order.pickupOrder.detail.orders': 'Linked Waybills', 'order.pickupOrder.detail.sectionInfo': 'Pickup info', 'order.pickupOrder.detail.close': 'Close', 'order.pickupOrder.form.freight': 'Pickup Freight', 'order.pickupOrder.form.otherFee': 'Other Fee', 'order.pickupOrder.form.carrierWaybillNoPh': 'Domestic carrier waybill number', 'order.pickupOrder.form.senderAddress': 'Sender Address', 'order.pickupOrder.form.senderAddressPlaceholder': 'Select sender address', 'order.pickupOrder.form.warehouse': 'Warehouse', 'order.pickupOrder.form.warehousePlaceholder': 'Select warehouse', 'order.pickupOrder.form.product': 'Shipping Method', 'order.pickupOrder.form.productPlaceholder': 'Select sales product', 'order.pickupOrder.form.pickupTime': 'Pickup Time', 'order.pickupOrder.form.cargoName': 'Cargo Name', 'order.pickupOrder.form.actualWeight': 'Weight (kg)', 'order.pickupOrder.form.weightPlaceholder': 'Enter weight', 'order.pickupOrder.form.clientNo': 'Client No.', 'order.pickupOrder.rebind.remove': 'Remove linked waybills', 'order.pickupOrder.rebind.add': 'Add waybills', 'order.pickupOrder.rebind.addPh': 'Enter service / client numbers, separated by comma or newline', 'order.pickupOrder.rebind.addHint': 'Select unbound pre-declared waybills from the same warehouse', 'order.pickupOrder.rebind.emptyBound': 'No linked waybills', 'order.pickupOrder.status.draft': 'Draft', 'order.pickupOrder.status.scheduled': 'Scheduled', 'order.pickupOrder.status.dispatched': 'Dispatched', 'order.pickupOrder.status.picked': 'Picked', 'order.pickupOrder.status.inbound': 'Inbound', 'order.pickupOrder.status.cancelled': 'Cancelled', 'order.pickupOrder.status.failed': 'Failed', 'order.pickupOrder.payStatus.unpaid': 'Unpaid', 'order.pickupOrder.payStatus.paid': 'Paid', 'order.pickupOrder.message.loadFailed': 'Failed to load pickup orders', 'order.pickupOrder.message.loadRefFailed': 'Failed to load options', 'order.pickupOrder.message.noSenderAddress': 'Please add a sender address under Customer → Address Management first', 'order.pickupOrder.message.senderRequired': 'Sender address is required', 'order.pickupOrder.message.warehouseRequired': 'Warehouse is required', 'order.pickupOrder.message.productRequired': 'Shipping method is required', 'order.pickupOrder.message.pickupTimeRequired': 'Pickup time is required', 'order.pickupOrder.message.cargoNameRequired': 'Cargo name is required', 'order.pickupOrder.message.weightRequired': 'Weight must be greater than 0', 'order.pickupOrder.message.createSuccess': 'Pickup order created', 'order.pickupOrder.message.createSuccessWithNo': 'Created. Service No.: {no}', 'order.pickupOrder.message.createFailed': 'Failed to create pickup order', 'order.pickupOrder.message.detailFailed': 'Failed to load detail', 'order.pickupOrder.message.freightRequired': 'Freight is required', 'order.pickupOrder.message.freightOk': 'Freight confirmed', 'order.pickupOrder.message.payOk': 'Payment succeeded', 'order.pickupOrder.message.batchPayNeedSelect': 'Select pickup sheets to pay', 'order.pickupOrder.message.batchPayNoPayable': 'No payable pickup sheets (unpaid with confirmed freight)', 'order.pickupOrder.message.batchPayConfirm': 'Pay {count} pickup sheet(s), total ¥{amount}?', 'order.pickupOrder.message.batchPayResult': 'Pay done: {success} succeeded, {fail} failed', 'order.pickupOrder.message.noPermission': 'No permission', 'order.pickupOrder.message.carrierRequired': 'Carrier is required', 'order.pickupOrder.message.carrierServiceRequired': 'Carrier service is required', 'order.pickupOrder.message.scheduleOk': 'Scheduled', 'order.pickupOrder.message.cancelOk': 'Cancelled', 'order.pickupOrder.message.cancelConfirm': 'Cancel this pickup sheet? Linked waybills will be unbound.', 'order.pickupOrder.message.rebindOk': 'Rebind succeeded', 'order.pickupOrder.message.rebindEmpty': 'Select waybills to remove or pick waybills to add', 'order.pickupOrder.message.rebindNotFound': 'Waybill not found: {nos}', 'order.pickupOrder.message.pickedOk': 'Marked as picked', 'order.pickupOrder.message.inboundOk': 'Inbound confirmed', 'order.pickupOrder.message.actionFailed': 'Action failed', 'order.pickupOrder.search.warehouse': 'Warehouse', 'order.pickupOrder.search.expectStart': 'Expect pickup from', 'order.pickupOrder.search.expectEnd': 'Expect pickup to', 'order.pickupOrder.table.settlement': 'Settlement', 'order.pickupOrder.settlementStatus.none': 'None', 'order.pickupOrder.settlementStatus.pending': 'Pending', 'order.pickupOrder.settlementStatus.settled': 'Settled', 'order.pickupOrder.actions.reschedule': 'Reschedule', 'order.pickupOrder.actions.batchConfirmFreight': 'Batch Confirm Freight', 'order.pickupOrder.actions.batchSchedule': 'Batch Draft Forecast', 'order.pickupOrder.actions.copyServiceNos': 'Copy all service Nos.', 'order.pickupOrder.create.emptyOrders': 'No bindable pre-declared waybills', 'order.pickupOrder.create.goPredeclared': 'Go to pre-declared', 'order.pickupOrder.createNext.title': 'Created', 'order.pickupOrder.createNext.desc': 'Pickup sheet {no} created. Next steps:', 'order.pickupOrder.createNext.goSchedule': 'Draft forecast', 'order.pickupOrder.createNext.goPay': 'Pay now', 'order.pickupOrder.createNext.viewDetail': 'View detail', 'order.pickupOrder.payCheck.amount': 'Amount due: ¥{amount}', 'order.pickupOrder.payCheck.balance': 'Balance: ¥{balance}', 'order.pickupOrder.payCheck.balanceUnknown': 'Balance: unavailable', 'order.pickupOrder.payCheck.shortfall': 'Shortfall: ¥{shortfall}', 'order.pickupOrder.payCheck.payAnyway': 'Pay anyway', 'order.pickupOrder.detail.timeline': 'Activity', 'order.pickupOrder.timeline.createTime': 'Created', 'order.pickupOrder.timeline.payTime': 'Paid', 'order.pickupOrder.timeline.actualPickupTime': 'Actual pickup', 'order.pickupOrder.timeline.updateTime': 'Updated', 'order.pickupOrder.message.rescheduleOk': 'Rescheduled', 'order.pickupOrder.message.noServiceNos': 'No service numbers to copy', 'order.pickupOrder.message.copyServiceNosOk': 'Service numbers copied', 'order.pickupOrder.message.copyFailed': 'Copy failed', 'order.pickupOrder.message.batchFreightNoCandidates': 'No selected sheets eligible for freight confirm', 'order.pickupOrder.message.batchFreightHint': 'Confirm freight for {count} unpaid pickup sheet(s)', 'order.pickupOrder.message.batchFreightResult': 'Batch freight: {success} succeeded, {fail} failed', 'order.pickupOrder.message.batchScheduleNoCandidates': 'No draft/scheduled sheets selected for forecast', 'order.pickupOrder.message.batchScheduleHint': 'Draft-forecast {count} pickup sheet(s)', 'order.pickupOrder.message.batchScheduleResult': 'Batch schedule: {success} succeeded, {fail} failed', 'order.platformStoreOrder.status.all': 'All', 'order.platformStoreOrder.status.pending': 'Pending', 'order.platformStoreOrder.status.toShip': 'To Ship', 'order.platformStoreOrder.status.shipped': 'Shipped', 'order.platformStoreOrder.status.suspended': 'Suspended', 'order.platformStoreOrder.status.canceled': 'Canceled', 'order.platformStoreOrder.status.completed': 'Completed', 'order.platformStoreOrder.table.platform': 'Platform', 'order.platformStoreOrder.table.destCountry': 'Country', 'order.platformStoreOrder.table.itemCount': 'Items', 'order.platformStoreOrder.table.shippingLabel': 'Label No', 'order.platformStoreOrder.table.warehouse': 'Warehouse', 'order.platformStoreOrder.table.lastSync': 'Last Sync', 'order.platformStoreOrder.table.customsOrderNo': 'Order No', 'order.platformStoreOrder.table.store': 'Store', 'order.platformStoreOrder.table.status': 'Status', 'order.platformStoreOrder.table.amount': 'Amount', 'order.platformStoreOrder.table.orderTime': 'Order Time', 'order.platformStoreOrder.table.linkedServiceNo': 'Linked Service No', 'order.platformStoreOrder.form.product': 'Sales Product', 'order.platformStoreOrder.search.customsOrderNo': 'Order No', 'order.platformStoreOrder.summary.pending': 'Pending', 'order.platformStoreOrder.summary.toShip': 'To Ship', 'order.platformStoreOrder.drawer.detail': 'Order Detail', 'order.platformStoreOrder.drawer.sectionBasic': 'Basic Info', 'order.platformStoreOrder.drawer.sectionRecipient': 'Recipient', 'order.platformStoreOrder.drawer.sectionShipping': 'Fulfillment & Shipping', 'order.platformStoreOrder.drawer.sectionLines': 'Line Items', 'order.platformStoreOrder.drawer.platformStatus': 'Platform Status', 'order.platformStoreOrder.drawer.customTags': 'Custom Tags', 'order.platformStoreOrder.drawer.multiLabel': 'Multi Label', 'order.platformStoreOrder.drawer.openLabel': 'Open Label', 'order.platformStoreOrder.recipient.name': 'Recipient', 'order.platformStoreOrder.recipient.company': 'Company', 'order.platformStoreOrder.recipient.phone': 'Phone', 'order.platformStoreOrder.recipient.telePhone': 'Tel', 'order.platformStoreOrder.recipient.email': 'Email', 'order.platformStoreOrder.recipient.destCountry': 'Country', 'order.platformStoreOrder.recipient.province': 'State/Province', 'order.platformStoreOrder.recipient.city': 'City', 'order.platformStoreOrder.recipient.zipCode': 'Zip', 'order.platformStoreOrder.recipient.address1': 'Address 1', 'order.platformStoreOrder.recipient.address2': 'Address 2', 'order.platformStoreOrder.table.recipient': 'Recipient', 'order.platformStoreOrder.line.sku': 'Platform SKU', 'order.platformStoreOrder.line.name': 'Product', 'order.platformStoreOrder.line.qty': 'Qty', 'order.platformStoreOrder.line.mappedSku': 'Mapped SKU', 'order.platformStoreOrder.line.image': 'Image', 'order.platformStoreOrder.line.variant': 'Variant', 'order.platformStoreOrder.line.price': 'Unit Price', 'order.platformStoreOrder.line.excluded': 'Excluded', 'order.platformStoreOrder.actions.match': 'Match Inventory', 'order.platformStoreOrder.actions.batchMatch': 'Batch Match', 'order.platformStoreOrder.actions.suspend': 'Suspend', 'order.platformStoreOrder.actions.resume': 'Resume', 'order.platformStoreOrder.actions.delete': 'Delete', 'order.platformStoreOrder.actions.pullOrders': 'Pull Orders', 'order.platformStoreOrder.actions.startPull': 'Start Sync', 'order.platformStoreOrder.actions.syncStatus': 'Sync Status', 'order.platformStoreOrder.actions.readyToShip': 'Ready to Ship', 'order.platformStoreOrder.actions.fetchLabel': 'Re-fetch Label', 'order.platformStoreOrder.actions.createLogistics': 'Create Waybill', 'order.platformStoreOrder.actions.createFulfill': 'Create Fulfill Waybill', 'order.platformStoreOrder.actions.more': 'More', 'order.platformStoreOrder.createLogistics.title': 'Create Waybill', 'order.platformStoreOrder.createLogistics.tip': 'Review recipient and line items for each order, then confirm the shipping product before submitting.', 'order.platformStoreOrder.createLogistics.product': 'Shipping Product', 'order.platformStoreOrder.createLogistics.productRequired': 'Please select a shipping product', 'order.platformStoreOrder.createLogistics.orderList': 'Selected Orders', 'order.platformStoreOrder.createLogistics.receiverTitle': 'Recipient Check', 'order.platformStoreOrder.createLogistics.linesTitle': 'Line Items', 'order.platformStoreOrder.createLogistics.readyMeta': '{total} selected · {ready} ready', 'order.platformStoreOrder.createLogistics.tagReceiver': 'Missing recipient', 'order.platformStoreOrder.createLogistics.tagLines': 'No lines', 'order.platformStoreOrder.createLogistics.tagUnbound': 'Unbound', 'order.platformStoreOrder.createLogistics.tagBound': '{n} bound', 'order.platformStoreOrder.createLogistics.tagOk': 'Ready', 'order.platformStoreOrder.createLogistics.selectRequired': 'Please select pending store orders first', 'order.platformStoreOrder.createLogistics.maxLimit': 'Up to 50 orders per batch', 'order.platformStoreOrder.createLogistics.invalidSelection': '{count} order(s) cannot be created (need pending, not suspended, no linked logistics order)', 'order.platformStoreOrder.createLogistics.fixIncomplete': 'Please fix the highlighted order before submit', 'order.platformStoreOrder.createLogistics.confirm': 'Create {count} logistics order(s) with product {product}. Continue?', 'order.platformStoreOrder.createLogistics.submit': 'Confirm Create', 'order.platformStoreOrder.createLogistics.success': 'Created {count} logistics order(s)', 'order.platformStoreOrder.createLogistics.partial': 'Success {success}, failed {fail}. {detail}', 'order.platformStoreOrder.createLogistics.failed': 'Failed to create logistics orders', 'order.platformStoreOrder.createLogistics.unitOrders': 'orders', 'order.platformStoreOrder.createFulfill.title': 'Create Fulfill Waybill', 'order.platformStoreOrder.createFulfill.tip': 'Compare order line items with bound inventory/parcels: check product name, SKU and quantity before submit.', 'order.platformStoreOrder.createFulfill.bindTitle': 'Bind Parcel / Inventory', 'order.platformStoreOrder.createFulfill.bindHint': 'Pick on the left, confirm qty on the right; review each order before submit', 'order.platformStoreOrder.createFulfill.bindEmpty': 'Pick inventory or parcels below to bind on the right', 'order.platformStoreOrder.createFulfill.orderSide': 'Order qty', 'order.platformStoreOrder.createFulfill.bindSide': 'Bound qty', 'order.platformStoreOrder.createFulfill.pcs': 'pcs', 'order.platformStoreOrder.createFulfill.lineCount': '{n} line(s)', 'order.platformStoreOrder.createFulfill.bindCount': '{n} resource(s)', 'order.platformStoreOrder.createFulfill.compareNeedBind': 'Nothing bound yet — pick stock/parcels to match order lines', 'order.platformStoreOrder.createFulfill.compareQtyDiff': 'Qty mismatch: order {order} vs bound {bind} — please recheck', 'order.platformStoreOrder.createFulfill.compareQtyOk': 'Quantities match — still verify product names/SKUs', 'order.platformStoreOrder.createFulfill.orderGoodsTitle': 'Order line items', 'order.platformStoreOrder.createFulfill.orderGoodsHint': 'From the store order — check name and qty', 'order.platformStoreOrder.createFulfill.boundTitle': 'Bound inventory / parcels', 'order.platformStoreOrder.createFulfill.boundHint': 'What will ship from warehouse — match against the left', 'order.platformStoreOrder.createFulfill.needQty': 'Need', 'order.platformStoreOrder.createFulfill.pickTitle': 'Pick inventory / parcels', 'order.platformStoreOrder.createFulfill.orderQtyShort': 'Need {n}', 'order.platformStoreOrder.createFulfill.bindQtyShort': 'Bound {n}', 'order.platformStoreOrder.createFulfill.tagQtyDiff': 'Qty mismatch', 'order.platformStoreOrder.createFulfill.tagQtyOk': 'Qty aligned', 'order.platformStoreOrder.createFulfill.confirm': 'Create {count} logistics order(s) and bind stock. Product: {product}; Warehouse: {warehouse}. Continue?', 'order.platformStoreOrder.createFulfill.submit': 'Confirm Create & Bind', 'order.platformStoreOrder.pull.store': 'Store', 'order.platformStoreOrder.pull.storePlaceholder': 'Select stores', 'order.platformStoreOrder.pull.status': 'Status', 'order.platformStoreOrder.pull.time': 'Time', 'order.platformStoreOrder.pull.timeHint': 'Defaults to today', 'order.platformStoreOrder.message.loadFailed': 'Failed to load orders', 'order.platformStoreOrder.message.detailFailed': 'Failed to load detail', 'order.platformStoreOrder.message.matchSuccess': 'Inventory matched', 'order.platformStoreOrder.message.matchFailed': 'Match failed', 'order.platformStoreOrder.message.warehouseRequired': 'Select warehouse', 'order.platformStoreOrder.message.suspendSuccess': 'Status updated', 'order.platformStoreOrder.message.deleteSuccess': 'Deleted', 'order.platformStoreOrder.message.batchEmpty': 'No pending orders to match on this page', 'order.platformStoreOrder.message.batchConfirm': 'Match {count} pending orders on this page and create parcel orders?', 'order.platformStoreOrder.message.batchResult': 'Batch done: {success} succeeded, {fail} failed', 'order.platformStoreOrder.message.selectOrders': 'Select orders first', 'order.platformStoreOrder.message.selectStore': 'Select stores first', 'order.platformStoreOrder.message.selectStatus': 'Select status types', 'order.platformStoreOrder.message.syncConfirm': 'Sync status for {count} orders?', 'order.platformStoreOrder.message.rtsConfirm': 'Ready-to-ship {count} orders?', 'order.platformStoreOrder.message.labelConfirm': 'Re-fetch shipping label for this order?', 'order.platformStoreOrder.message.syncResult': 'Sync done: {success} succeeded, {fail} failed', 'order.platformStoreOrder.message.rtsResult': 'RTS done: {success} succeeded, {fail} failed', 'order.platformStoreOrder.message.pullResult': 'Pull done: {success} stores ok, {fail} failed', 'order.platformStoreOrder.message.pullFailed': 'Pull failed', 'order.platformStoreOrder.message.labelSuccess': 'Label updated', 'order.platformStoreOrder.message.labelFailed': 'Failed to fetch label', 'order.platformStoreOrder.message.temuNoRts': 'Temu does not support RTS', 'order.platformStoreOrder.message.actionFailed': 'Action failed', 'menu.channel': 'Channel', 'menu.channel.channelGuide': 'Getting Started', 'menu.channel.salesProducts': 'Sales Products', 'menu.channel.serviceChannels': 'Service Channels', 'menu.channel.priceArea': 'Price Area', 'menu.channel.blacklist': 'Blacklist', 'menu.channel.remoteZones': 'Remote Zones', 'menu.channel.weightRules': 'Weight Rules', 'menu.channel.weightRounding': 'Weight Rounding', 'menu.channel.autoTrigger': 'Auto Trigger', 'menu.channel.issueTemplate': 'Issue Template', 'menu.channel.labelDesign': 'Label Design', 'menu.track': 'Track', 'menu.track.trackGuide': 'Getting Started', 'menu.track.trackOrder': 'Track Order', 'menu.track.warningOrder': 'Warning Order', 'menu.track.trackState': 'Track State', 'menu.track.trackFlag': 'Track Flag', 'menu.track.trackContent': 'Track Content', 'menu.track.trackPull': 'Track Pull', 'menu.track.trackPush': 'Track Push', 'menu.track.kpiEarlyWarningConfig': 'KPI Early Warning Config', 'menu.operation': 'Operation', 'menu.operation.inboundScan': 'Inbound Scan', 'menu.operation.outboundScan': 'Outbound Scan', 'menu.operation.printLabel': 'Print Label', 'menu.operation.parcelArrival': 'Parcel Arrival', 'menu.operation.fulfillPack': 'Fulfill Pack & Outbound', 'menu.api': 'API', 'menu.api.upstreamInterface': 'Upstream Interface', 'menu.api.downstreamInterface': 'Downstream Interface', 'menu.api.createInterface': 'Create Interface', 'menu.api.editInterface': 'Edit Interface', 'menu.api.appList': 'App List', 'menu.api.requestLog': 'Request Log', 'menu.api.callStatistics': 'Call Statistics', 'menu.api.createApplication': 'Create Application', 'menu.api.apiDebugger': 'API Debugger', 'menu.api.apiLike': 'API LIKE', 'menu.api.apiTest': 'API Test', // API - Call Statistics 'api.callStatistics.name.app': 'Application Name', 'api.callStatistics.name.provider': 'Service Provider Name', 'api.callStatistics.table.date': 'Date', 'api.callStatistics.table.interfaceName': 'Interface Name', 'api.callStatistics.table.total': 'Total Calls', 'api.callStatistics.table.succeedCount': 'Successful Calls', 'api.callStatistics.table.failCount': 'Failed Calls', 'api.callStatistics.table.successRate': 'Success Rate', 'menu.system': 'System', 'menu.system.org': 'Organization', 'menu.system.organization': 'Organization', 'menu.system.user': 'User', 'menu.system.position': 'Position', 'menu.system.role': 'Role', 'menu.system.module': 'Module', 'menu.system.menu': 'Menu', 'menu.system.dict': 'Dictionary', 'menu.system.otherConfig': 'Other Config', 'menu.system.humanCare': 'Human Care', 'menu.system.config': 'Config', 'menu.system.announcement': 'Announcement', 'menu.system.vislog': 'Visit Log', 'menu.system.oplog': 'Operation Log', 'menu.noPermission': 'No menu permission', 'menu.system.interface': 'System Interface', 'menu.system.interface.config': 'Interface Config', 'menu.system.warehouseAddress': 'Warehouse Address', 'menu.system.batchEmail': 'Batch Email', 'menu.system.aiAssistant': 'AI Assistant', 'menu.system.aiSkills': 'AI Skills', 'menu.system.mcpTools': 'MCP Tools', 'system.aiSkills.pageDesc': 'Manage platform AI skills (prompts/specs). Callers pick by scene; edit without redeploy.', 'system.aiSkills.refresh': 'Refresh', 'system.aiSkills.create': 'Create', 'system.aiSkills.sceneFilter': 'Filter by scene', 'system.aiSkills.selectHint': 'Select a skill on the left, or create one', 'system.aiSkills.editTitle': 'Edit Skill', 'system.aiSkills.createTitle': 'Create Skill', 'system.aiSkills.skillKey': 'Skill Key', 'system.aiSkills.scene': 'Scene', 'system.aiSkills.name': 'Name', 'system.aiSkills.description': 'Description', 'system.aiSkills.sortOrder': 'Sort', 'system.aiSkills.content': 'Content (sent to model)', 'system.aiSkills.save': 'Save', 'system.aiSkills.delete': 'Delete', 'system.aiSkills.cancel': 'Cancel', 'system.aiSkills.saveOk': 'Saved', 'system.aiSkills.saveFail': 'Save failed', 'system.aiSkills.loadFail': 'Load failed', 'system.aiSkills.required': 'Skill Key, scene and name are required', 'system.aiSkills.contentRequired': 'Content is required', 'system.aiSkills.enabled': 'Enabled', 'system.aiSkills.disabled': 'Disabled', 'system.aiSkills.deleteTitle': 'Delete Skill', 'system.aiSkills.deleteConfirm': 'Delete "{name}"?', 'system.aiSkills.deleteOk': 'Deleted', 'system.aiSkills.deleteFail': 'Delete failed', 'system.mcpTools.pageDesc': 'Manage lightweight MCP tools: price check, channel customer guide, and tracking. Enable, test, and try AI Agent.', 'system.mcpTools.refresh': 'Refresh', 'system.mcpTools.displayName': 'Display name', 'system.mcpTools.description': 'Description (for the model)', 'system.mcpTools.sortOrder': 'Sort', 'system.mcpTools.save': 'Save', 'system.mcpTools.saveOk': 'Saved', 'system.mcpTools.saveFail': 'Save failed', 'system.mcpTools.loadFail': 'Load failed', 'system.mcpTools.enabled': 'Enabled', 'system.mcpTools.disabled': 'Disabled', 'system.mcpTools.selectHint': 'Select a tool on the left', 'system.mcpTools.testTitle': 'Test tool', 'system.mcpTools.testHint': 'Call the OMS wrapper with JSON args (no LLM).', 'system.mcpTools.testArgsPlaceholder': `{'{ "destinationCountry": "US", "cargoWeight": 0.5 }'}`, 'system.mcpTools.runTest': 'Run', 'system.mcpTools.testFail': 'Test failed', 'system.mcpTools.argsInvalid': 'Arguments must be valid JSON', 'system.mcpTools.agentTitle': 'AI Agent', 'system.mcpTools.agentHint': 'Ask in natural language; the model may call enabled MCP tools.', 'system.mcpTools.provider': 'AI provider', 'system.mcpTools.model': 'Model', 'system.mcpTools.agentPlaceholder': 'e.g. quote US 0.5kg / can lipstick ship on channel X / track waybill xxx', 'system.mcpTools.runAgent': 'Send', 'system.mcpTools.agentReply': 'AI reply', 'system.mcpTools.toolTraces': 'Tool traces', 'system.mcpTools.agentNeedPrompt': 'Enter a question', 'system.mcpTools.agentNeedProvider': 'Select an AI provider (configure keys in AI Assistant)', 'system.mcpTools.agentFail': 'Agent failed', 'menu.system.dataPerm': 'Data Permission', 'menu.system.dataPermUsers': 'User Data Permission', 'menu.system.dataPermTemplates': 'Permission Templates', 'menu.system.dataPermAudit': 'Permission Audit', 'system.dataPerm.users.title': 'User Data Permission', 'system.dataPerm.users.desc': 'Configure direct five-dimension permissions for internal users', 'system.dataPerm.users.loading': 'Loading users...', 'system.dataPerm.users.emptySelect': 'Select a user on the left', 'system.dataPerm.users.emptyDesc': 'Configure org, data scope, biz tags, secret level and custom filters for internal users', 'system.dataPerm.panel.primaryOrg': 'Primary organization', 'system.dataPerm.panel.configType': 'Config type', 'system.dataPerm.panel.configTypeDirect': 'Direct user config', 'system.dataPerm.panel.previewModule': 'Preview module', 'system.dataPerm.panel.cannotEditSelf': 'You cannot edit your own data permissions', 'system.dataPerm.panel.stat.total': 'Direct items', 'system.dataPerm.panel.tab.org': 'Organization', 'system.dataPerm.panel.tab.scope': 'Data scope', 'system.dataPerm.panel.tab.biz': 'Business tags', 'system.dataPerm.panel.tab.secret': 'Secret level', 'system.dataPerm.panel.tab.filter': 'Custom filter', 'system.dataPerm.templates.add': 'New template', 'system.dataPerm.templates.search': 'Search name or code', 'system.dataPerm.templates.title': 'Permission templates', 'system.dataPerm.templates.loading': 'Loading templates...', 'system.dataPerm.templates.emptySelect': 'Select a template on the left, or click Add', 'system.dataPerm.templates.emptyDesc': 'Templates define five-dimension permission rules and can be applied to users or roles', 'system.dataPerm.templates.save': 'Save', 'system.dataPerm.templates.apply': 'Apply template', 'system.dataPerm.templates.field.name': 'Name', 'system.dataPerm.templates.field.code': 'Code', 'system.dataPerm.templates.field.description': 'Description', 'system.dataPerm.templates.field.roleCode': 'Bound role code', 'system.dataPerm.templates.field.bindRole': 'Linked role', 'system.dataPerm.templates.field.bindRolePlaceholder': 'Select an RBAC role', 'system.dataPerm.templates.field.bindRoleExtra': 'Saved as roleCode — identifies which job role this template belongs to', // Order - Batch Jobs 'order.batchJobs.filter.jobId': 'Job ID', 'order.batchJobs.filter.status': 'Status', 'order.batchJobs.filter.action': 'Action', 'order.batchJobs.table.jobId': 'Job ID', 'order.batchJobs.table.action': 'Action', 'order.batchJobs.table.status': 'Status', 'order.batchJobs.table.progress': 'Progress', 'order.batchJobs.table.failCount': '{count} failed', 'order.batchJobs.table.failCountShort': 'Failed', 'order.batchJobs.table.createTime': 'Created', 'order.batchJobs.table.startedAt': 'Started', 'order.batchJobs.table.finishedAt': 'Finished', 'order.batchJobs.actions.search': 'Search', 'order.batchJobs.actions.reset': 'Reset', 'order.batchJobs.actions.refresh': 'Refresh', 'order.batchJobs.actions.view': 'View', 'order.batchJobs.actions.retryFailed': 'Retry Failed', 'order.batchJobs.actions.cancelPending': 'Cancel Pending', 'order.batchJobs.drawer.title': 'Batch Job #{id}', 'order.batchJobs.items.orderId': 'Order ID', 'order.batchJobs.items.serviceNo': 'Tracking No.', 'order.batchJobs.items.clientNo': 'Customer Order No.', 'order.batchJobs.items.status': 'Item Status', 'order.batchJobs.items.failReason': 'Fail Reason', 'order.batchJobs.items.result': 'Result', 'order.batchJobs.items.rowNumber': 'Excel Row', 'order.batchJobs.items.finishedAt': 'Finished', 'order.batchJobs.items.retryCount': 'Retried {count} time(s)', 'order.batchJobs.items.viewResponse': 'View response', 'order.batchJobs.filter.allItems': 'All Items', 'order.batchJobs.filter.itemStatus': 'Item Status', 'order.batchJobs.message.running': 'Running: {progress}. Click Refresh for latest progress.', 'order.batchJobs.message.completedSuccess': 'Completed: {progress}', 'order.batchJobs.message.completedPartial': 'Completed with failures: {progress}', 'order.batchJobs.message.completedFailed': 'Failed: {progress}', 'order.batchJobs.message.loadFailed': 'Failed to load batch jobs', 'order.batchJobs.message.retrySuccess': 'Retried {count} failed item(s)', 'order.batchJobs.message.retryFailed': 'Failed to retry items', 'order.batchJobs.message.cancelConfirm': 'Cancel {count} pending item(s)?', 'order.batchJobs.message.cancelSuccess': 'Cancelled {count} pending item(s)', 'order.batchJobs.message.cancelFailed': 'Failed to cancel pending items', 'order.batchJobs.dlx.alert': 'DLX queue has {count} message(s), above threshold {threshold}', 'order.batchJobs.status.pending': 'Pending', 'order.batchJobs.status.running': 'Running', 'order.batchJobs.status.completed': 'Completed', 'order.batchJobs.status.failed': 'Failed', 'order.batchJobs.status.cancelled': 'Cancelled', 'order.batchJobs.status.unknown': 'Unknown', 'order.batchJobs.itemStatus.pending': 'Pending', 'order.batchJobs.itemStatus.running': 'Running', 'order.batchJobs.itemStatus.success': 'Success', 'order.batchJobs.itemStatus.failed': 'Failed', 'order.batchJobs.itemStatus.cancelled': 'Cancelled', 'order.batchJobs.itemStatus.unknown': 'Unknown', 'order.batchJobs.action.pay': 'Batch Pay', 'order.batchJobs.action.preDeclare': 'Batch Pre-declare', 'order.batchJobs.action.intercept': 'Batch Intercept', 'order.batchJobs.action.cancelIntercept': 'Batch Cancel Intercept', 'order.batchJobs.action.delete': 'Batch Delete', 'order.batchJobs.action.print': 'Batch Print', 'order.batchJobs.action.trackUpsert': 'Batch Track Upsert', 'order.batchJobs.action.downstreamForward': 'Batch Downstream Forward', 'order.batchJobs.action.markProblematic': 'Batch Mark Problematic', 'order.batchJobs.action.markClaimed': 'Batch Mark Claimed', 'order.batchJobs.action.handleStatusUpdate': 'Batch Handle Status', 'order.batchJobs.action.reallocate': 'Batch Reallocate', 'order.batchJobs.action.parcelCreate': 'Batch Parcel Create', 'order.batchJobs.action.importRow': 'Order Import', 'order.batchJobs.action.unknown': 'Other', 'system.dataPerm.templates.section.bindApply': 'Role link & apply', 'system.dataPerm.templates.section.applyNow': 'Apply now', 'system.dataPerm.templates.bindApplyHint': 'Linking a role is metadata only. Use "Apply now" below to write template items into role or user permissions. Linking does not apply by itself.', 'system.dataPerm.templates.applyToRole': 'Sync to linked role', 'system.dataPerm.templates.applyToRoleDesc': 'Write template items into the role\'s data permissions (replaces role direct config)', 'system.dataPerm.templates.applyToRoleBtn': 'Write to role', 'system.dataPerm.templates.applyToUsers': 'Apply to users', 'system.dataPerm.templates.applyToUsersDesc': 'Batch write direct user data permissions; replace or merge', 'system.dataPerm.templates.applyToUsersBtn': 'Apply to users', 'system.dataPerm.templates.field.targetUsers': 'Target users', 'system.dataPerm.templates.field.targetUsersPlaceholder': 'Search and select internal users', 'system.dataPerm.templates.field.applyMode': 'Apply mode', 'system.dataPerm.templates.field.temporary': 'Temporary grant (users only)', 'system.dataPerm.templates.field.effectiveTime': 'Effective from', 'system.dataPerm.templates.field.expireTime': 'Expires at', 'system.dataPerm.templates.mode.replace': 'Replace direct config', 'system.dataPerm.templates.mode.merge': 'Merge with existing', 'system.dataPerm.templates.applyNeedSave': 'Save the template before applying', 'system.dataPerm.templates.bindRoleFirst': 'Select a linked role first', 'system.dataPerm.templates.selectUsersFirst': 'Select target users', 'system.dataPerm.templates.expireTimeRequired': 'Expire time is required for temporary grants', 'system.dataPerm.templates.applySuccess': 'Applied to {count} target(s)', 'system.dataPerm.templates.applyPartial': '{success} succeeded, {fail} failed', 'system.dataPerm.templates.roleCodePlaceholder': 'Optional, auto-apply when role is assigned', 'system.dataPerm.templates.itemsTitle': '模板明细', 'system.dataPerm.templates.itemsHintForm': 'Select a permission type and fill the form — no JSON required', 'system.dataPerm.templates.addExample': 'Add example preset', 'system.dataPerm.templates.exampleAdded': 'Added example "{name}"', 'system.dataPerm.templates.itemInvalid': 'Item #{index} is incomplete: {field}', 'system.dataPerm.templates.example.salesStaff': 'Sales staff', 'system.dataPerm.templates.example.salesStaffDesc': 'Personal data scope + public/internal secret levels', 'system.dataPerm.templates.example.salesSupervisor': 'Sales supervisor', 'system.dataPerm.templates.example.salesSupervisorDesc': 'Department scope + secret levels 1–3', 'system.dataPerm.templates.example.branchManager': 'Branch manager', 'system.dataPerm.templates.example.branchManagerDesc': 'Org-tree scope + secret levels 1–3', 'system.dataPerm.templates.form.org': 'Organization', 'system.dataPerm.templates.form.orgPlaceholder': 'Select organization', 'system.dataPerm.templates.form.orgScope': 'Org scope', 'system.dataPerm.templates.form.dataScope': 'Data visibility', 'system.dataPerm.templates.form.module': 'Module', 'system.dataPerm.templates.form.moduleAll': 'All modules (leave empty)', 'system.dataPerm.templates.form.bizType': 'Tag type', 'system.dataPerm.templates.form.bizTag': 'Tag value', 'system.dataPerm.templates.form.bizTagPlaceholder': 'Select tag', 'system.dataPerm.templates.form.secretLevels': 'Allowed secret levels', 'system.dataPerm.templates.form.filterField': 'Field', 'system.dataPerm.templates.form.filterValuePlaceholder': 'e.g. Paid or 1,2 (comma-separated)', 'system.dataPerm.templates.form.addCondition': 'Add condition', 'system.dataPerm.templates.form.orgExample': 'Example: grant East China Sales Dept including sub-orgs for regional leads.', 'system.dataPerm.templates.form.dataScopeExample': 'Example: Personal = own records only; Department = all records in the dept.', 'system.dataPerm.templates.form.bizExample': 'Example: restrict to Product Line A orders or customers.', 'system.dataPerm.templates.form.secretExample': 'Example: Public + Internal means confidential data is hidden.', 'system.dataPerm.templates.form.filterExample': 'Example: Order module + OrderStatus equals Paid.', 'system.dataPerm.templates.form.tip.org': 'Which organizations\' data the user can access', 'system.dataPerm.templates.form.tip.data_scope': 'How broad the visible business data is (personal → global)', 'system.dataPerm.templates.form.tip.biz': 'Narrow data by product line, warehouse, etc.', 'system.dataPerm.templates.form.tip.secret': 'Filter by secret level; unchecked levels are hidden', 'system.dataPerm.templates.form.tip.filter': 'Simple filters on a module (multiple conditions use AND)', 'system.dataPerm.templates.form.invalid.orgOrganization': 'Please select an organization', 'system.dataPerm.templates.form.invalid.dataScope': 'Please select data scope', 'system.dataPerm.templates.form.invalid.biz': 'Please select tag type and value', 'system.dataPerm.templates.form.invalid.secretLevels': 'Select at least one secret level', 'system.dataPerm.templates.form.invalid.filterResource': 'Please select a module', 'system.dataPerm.templates.form.invalid.filterCondition': 'Add at least one filter condition', 'system.dataPerm.templates.itemJsonPlaceholder': 'JSON, e.g. {"dataScope":1}', 'system.dataPerm.templates.addItem': 'Add item row', 'system.dataPerm.templates.removeItem': 'Remove', 'system.dataPerm.templates.nameCodeRequired': 'Name and code are required', 'system.dataPerm.templates.invalidJson': 'Invalid JSON in template items', 'system.dataPerm.templates.createSuccess': 'Created', 'system.dataPerm.templates.updateSuccess': 'Updated', 'system.dataPerm.templates.deleteSuccess': 'Deleted', 'system.dataPerm.templates.builtinDeleteDenied': 'Built-in templates cannot be deleted', 'system.dataPerm.templates.deleteConfirm': 'Delete template "{name}"?', 'system.dataPerm.templates.tab.basic': 'Basic info', 'system.dataPerm.templates.tab.items': 'Template items', 'system.dataPerm.templates.itemsHint': 'Each row is a JSON config for one permission dimension', 'system.dataPerm.templates.itemsEmpty': 'No items yet. Click below to add one.', 'system.dataPerm.templates.jsonPreset': 'JSON preset', 'system.dataPerm.templates.dimensionPlaceholder': 'Select dimension', 'system.dataPerm.templates.tag.creating': 'Creating', 'system.dataPerm.templates.tag.builtin': 'Built-in', 'system.dataPerm.templates.stat.items': 'Items', 'system.dataPerm.templates.stat.dimensions': 'Dimensions', 'menu.xhs': 'Xiaohongshu', 'menu.xhs.startService': 'Start Service', 'menu.xhs.analysis': 'Content Analysis', 'menu.xhs.creation': 'Content Creation', 'menu.xhs.publishHistory': 'Publish History', 'menu.xhs.skills': 'Skill Cards', 'menu.xhs.humanSettings': 'Human-like Settings', // Top nav - contact & balance 'nav.contactService.title': 'Q&A & Support', 'nav.contactService.selectWarehouse': 'Select warehouse', 'nav.contactService.whseName': 'Warehouse name', 'nav.contactService.serviceWechat': 'Customer WeChat', 'nav.contactService.wechatQrcode': 'WeChat QR code', 'nav.contactService.phone': 'Contact phone', 'nav.contactService.workingTime': 'Service hours: Mon-Sun 9:00-22:00', 'nav.contactService.contactUs': 'Contact support', 'nanaAssistant.title': 'Nana · Exclusive Advisor', 'nanaAssistant.open': 'Open Nana exclusive advisor', 'nanaAssistant.tabAi': 'AI Nana', 'nanaAssistant.tabAdvisor': 'Exclusive Advisor', 'nanaAssistant.badge': 'Logistics Advisor', 'nanaAssistant.welcomeTitle': 'What do you need help shipping?', 'nanaAssistant.welcomeSub': 'Price, cargo eligibility, tracking — pick a capability below.', 'nanaAssistant.quickLabel': 'Common questions', 'nanaAssistant.welcomeMsg': "Hi — I'm your IDE logistics advisor. Pick a question below or type your own.", 'nanaAssistant.historyTitle': 'Chat history', 'nanaAssistant.newChat': 'New chat', 'nanaAssistant.emptyHistory': 'No conversations yet', 'nanaAssistant.searchHistory': 'Search chats or waybill no.', 'nanaAssistant.noSearchResults': 'No matching conversations', 'nanaAssistant.deleteThread': 'Delete conversation', 'nanaAssistant.hint': 'Type a question, or pick a capability above.', 'nanaAssistant.hintLive': 'Smart advisor is live — price, channel guide, tracking.', 'nanaAssistant.inputPlaceholder': 'Ask a question…', 'nanaAssistant.inputPlaceholderLive': 'Ask about price, channels, or tracking…', 'nanaAssistant.inputPlaceholderTrack': 'Enter waybill / tracking no.…', 'nanaAssistant.mcp.sectionLabel': 'Capabilities', 'nanaAssistant.mcp.required': 'Required', 'nanaAssistant.mcp.optional': 'Optional', 'nanaAssistant.mcp.missingAsk': 'Please also provide: {fields}. Then I can look it up.', 'nanaAssistant.mcp.priceTitle': 'Price check', 'nanaAssistant.mcp.priceDesc': 'Estimate freight by destCountry & weight', 'nanaAssistant.mcp.priceCoach': 'To quote I need:\n1) Destination destCountry (e.g. US)\n2) Actual weight in kg\n\nOptional: postal code, L×W×H (cm), cargo type.\nExample: US 0.5kg zip 10001', 'nanaAssistant.mcp.priceExample': 'e.g. US 0.5kg zip 10001', 'nanaAssistant.mcp.priceDraft': 'Country:\nWeight (kg):\nPostal code (optional):\nDims LWH cm (optional):', 'nanaAssistant.mcp.guideTitle': 'Can this cargo ship?', 'nanaAssistant.mcp.guideDesc': 'Check against the channel customer guide', 'nanaAssistant.mcp.guideCoach': 'I need:\n1) Sales product code or name\n2) Cargo / product name\n\nExample: product EX_ASP_HKDHL, cargo lipstick — can it ship?', 'nanaAssistant.mcp.guideExample': 'e.g. product XX, cargo lipstick OK?', 'nanaAssistant.mcp.guideDraft': 'Sales product code/name:\nCargo name:', 'nanaAssistant.mcp.trackTitle': 'Track shipment', 'nanaAssistant.mcp.trackDesc': 'Timeline by waybill number', 'nanaAssistant.mcp.trackCoach': 'Please provide a waybill / tracking / customer order number.\nIf a waybill is already loaded, tap “Track”.', 'nanaAssistant.mcp.trackExample': 'e.g. Track waybill NFXXXX', 'nanaAssistant.mcp.trackDraft': 'Waybill No.:', 'nanaAssistant.mcp.field.destCountry': 'Destination destCountry', 'nanaAssistant.mcp.field.weight': 'Weight (kg)', 'nanaAssistant.mcp.field.postal': 'Postal code', 'nanaAssistant.mcp.field.dims': 'Dimensions (cm)', 'nanaAssistant.mcp.field.cargoType': 'Cargo type', 'nanaAssistant.mcp.field.product': 'Sales product code/name', 'nanaAssistant.mcp.field.cargoName': 'Cargo name', 'nanaAssistant.mcp.field.customsOrderNo': 'Waybill No.', 'nanaAssistant.human': 'Talk to online advisor', 'nanaAssistant.wecomKf': 'Chat on WeCom', 'nanaAssistant.you': 'You', 'nanaAssistant.backToChat': 'Back to chat', 'nanaAssistant.quickSmall': 'Small or difficult orders?', 'nanaAssistant.quickPrice': 'US / EU shipping cost?', 'nanaAssistant.quickQuoteSpeed': 'How fast is a quote?', 'nanaAssistant.quickTrack': 'Track my shipment', 'nanaAssistant.quickVisibility': 'Real-time tracking?', 'nanaAssistant.quickAfterSales': 'Something went wrong?', 'nanaAssistant.quickHuman': 'Talk to online advisor', 'nanaAssistant.replySmall': 'Yes. IDE focuses on SMB sellers and shipments others decline — special routes, complex cargo, and low-volume orders are in scope. Tell me origin, destination, and cargo type to get started.', 'nanaAssistant.replyPrice': 'For a quote, destination destCountry + actual weight (kg) is enough — e.g. US 0.5kg. Postal code/dims help; origin city is not required.', 'nanaAssistant.replyQuoteSpeed': 'With destCountry + weight we can return an indicative quote right away; final billing follows inbound weight and product rules.', 'nanaAssistant.trackHint': 'Just send the waybill number to track, e.g. IDE2607281746002926', 'nanaAssistant.replyVisibility': 'You get milestone updates from pickup to delivery — pickup, export, line-haul, customs, and final delivery. We proactively flag delays before they escalate.', 'nanaAssistant.replyAfterSales': "Your dedicated advisor handles exceptions, claims, and after-sales follow-up — you won't be left chasing tickets alone. Describe the issue and tracking number if you have one.", 'nanaAssistant.replyHuman': 'Reach us via the contact page — phone 18123959245 or email bd01@1st56.com. Mention your route and cargo so we assign the right advisor.', 'nanaAssistant.fallback': 'Tell me destination destCountry + weight to quote, or paste a waybill number to track — or talk to a human advisor.', 'nanaAssistant.emptyReply': 'No useful reply came back. Please try again with destination + weight, or a waybill number.', 'nanaAssistant.aiUnavailable': 'AI advisor is not configured yet. Please contact a human advisor or try later.', 'nanaAssistant.providerLoading': 'Connecting to AI advisor… please send again in a moment.', 'nanaAssistant.toolDoneEmpty': 'Called {tools}, but the model returned no summary. Ask “summarize” or contact support.', 'nanaAssistant.sendFailedDetail': 'Request failed: {msg}', 'nanaAssistant.wechatId': 'WeChat ID', 'nanaAssistant.noAdvisor': 'No exclusive advisor assigned yet', 'nanaAssistant.noWechatQr': 'WeChat QR code not uploaded', 'nanaAssistant.greeting': "Hi, I'm Nana, your AI assistant.\n\nAsk me about tracking, shipping times, declared values, customs clearance, and more. How can I help?", 'nanaAssistant.send': 'Send', 'nanaAssistant.close': 'Close', 'nanaAssistant.back': 'Back', 'nanaAssistant.askAboutWaybill': 'Ask logistics advisor', 'nanaAssistant.actionAdvisor': 'Advisor', 'nanaAssistant.menu.advisorHint': 'Rates, tracking, human help', 'nanaAssistant.menu.batchJobs': 'Batch jobs', 'nanaAssistant.menu.batchHint': 'Progress and results', 'nanaAssistant.batchPanel.title': 'Batch jobs', 'nanaAssistant.batchPanel.empty': 'No recent batch jobs', 'nanaAssistant.batchPanel.viewAll': 'View all', 'nanaAssistant.waybillContext': 'Current waybill: {no}', 'nanaAssistant.viewWaybill': 'View waybill →', 'nanaAssistant.queryTrack': 'Track shipment', 'nanaAssistant.endWaybillConsult': 'End waybill consult', 'nanaAssistant.waybillAutoAsk': 'Please track waybill {no} for me', 'nanaAssistant.trackWaybillDemo': 'Got your request for waybill {no}. When the smart service is configured, we prefer the live API; this is a reference reply: milestones usually include pickup, export, line-haul, customs, and delivery. Your advisor will follow up on exceptions.', 'nanaAssistant.copyWechat': 'Copy WeChat ID', 'nanaAssistant.copyWechatSuccess': 'WeChat ID copied', 'nanaAssistant.copyWechatFailed': 'Copy failed — please copy manually', 'nanaAssistant.noProvider': 'AI service is not configured yet. Please contact your administrator.', 'nanaAssistant.sendFailed': 'Failed to send. Please try again later.', 'nav.balance.label': 'Balance', 'nav.balance.recharge': 'Recharge', 'nav.balance.rechargeRecord': 'Recharge records', 'nav.balance.accountFlow': 'Account transactions', // Order - My Orders 'order.myOrders.tabs.all': 'All', 'order.myOrders.tabs.draft': 'Draft', 'order.myOrders.tabs.predeclared': 'Pre-declared', 'order.myOrders.tabs.pendingAllocation': 'Pending Allocation', 'order.myOrders.tabs.pendingPayment': 'Pending Payment', 'order.myOrders.tabs.pendingShip': 'Pending Ship', 'order.myOrders.tabs.pendingOnline': 'Pending Online', 'order.myOrders.tabs.shipping': 'Shipping', 'order.myOrders.tabs.deliverySuccess': 'Delivery Success', 'order.myOrders.tabs.deliveryFailed': 'Delivery Failed', 'order.myOrders.tabs.deleted': 'Deleted', 'order.myOrders.tabs.problematic': 'Problematic', 'order.myOrders.tabs.claimed': 'Claim Item', 'order.myOrders.handleStatus.all': 'All', 'order.myOrders.handleStatus.pending': 'Pending', 'order.myOrders.handleStatus.processed': 'Processed', 'order.myOrders.handleStatus.context.problematic': 'Problematic handling', 'order.myOrders.handleStatus.context.claimed': 'Claim item handling', 'order.myOrders.actions.pay': 'Pay Now', 'order.myOrders.actions.predeclare': 'Re-predeclare', 'order.myOrders.actions.createTrackOrder': 'Create track order', 'order.myOrders.actions.forwardDownstreamCreate': 'Forward Downstream', 'order.myOrders.modal.downstreamForwardTitle': 'Downstream forward result', 'order.myOrders.modal.payTitle': 'Payment confirmation', 'order.myOrders.modal.payOrderTotal': 'Amount due', 'order.myOrders.modal.payGrandTotal': 'Total due', 'order.myOrders.modal.payConfirm': 'Confirm payment', 'order.myOrders.modal.paySuccess': 'Payment successful', 'order.myOrders.modal.payFailed': 'Payment failed', 'order.myOrders.modal.payLoadFailed': 'Failed to load fee details', 'order.myOrders.modal.payInvalidAmount': 'Invalid receivable amount', 'order.myOrders.modal.payEmpty': 'No orders to pay', 'order.myOrders.actions.intercept': 'Intercept', 'order.myOrders.actions.cancelIntercept': 'Cancel intercept', 'order.myOrders.intercept.notShippedOnly': 'Intercept applies to not-yet-shipped orders only. Remove outbound or in-transit items from selection.', 'order.myOrders.intercept.confirmTitle': 'Submit intercept request?', 'order.myOrders.intercept.confirmContent': 'This submits a request to the warehouse/carrier. Processing takes time and success is not guaranteed. Watch order status or contact support if needed.', 'order.myOrders.intercept.confirmOk': 'Submit anyway', 'order.myOrders.intercept.cancelConfirmTitle': 'Cancel intercept?', 'order.myOrders.intercept.cancelConfirmContent': 'Clears the intercept flag on selected orders. Applies to not-yet-shipped orders only.', 'order.myOrders.intercept.cancelConfirmOk': 'Confirm', 'order.myOrders.intercept.submitSuccess': 'Intercept submitted', 'order.myOrders.intercept.submitFailed': 'Intercept failed', 'order.myOrders.intercept.cancelSuccess': 'Intercept cancelled', 'order.myOrders.intercept.cancelFailed': 'Failed to cancel intercept', 'order.myOrders.actions.delete': 'Delete', 'order.myOrders.actions.print': 'Print', 'order.myOrders.actions.singlePrint': 'Print One', 'order.myOrders.actions.batchPrint': 'Batch Print', 'order.myOrders.actions.createPickup': 'Create pickup', 'order.myOrders.createPickup.title': 'Create pickup order', 'order.myOrders.createPickup.hint': '{count} selected — same warehouse & pickup address required. Carrier optional.', 'order.myOrders.createPickup.senderAddress': 'Pickup address', 'order.myOrders.createPickup.senderAddressPh': 'Select sender address', 'order.myOrders.createPickup.warehouse': 'Warehouse', 'order.myOrders.createPickup.expectTime': 'Expected pickup time', 'order.myOrders.createPickup.carrierCode': 'Carrier', 'order.myOrders.createPickup.carrierService': 'Carrier service', 'order.myOrders.createPickup.carrierServicePh': 'Select a domestic pickup sales product (optional)', 'order.myOrders.createPickup.carrierPh': 'Can fill later', 'order.myOrders.createPickup.remark': 'Remark', 'order.myOrders.createPickup.orders': 'Linked waybills', 'order.myOrders.createPickup.needSelect': 'Select waybills first', 'order.myOrders.createPickup.sameWarehouse': 'Selected waybills must share one warehouse', 'order.myOrders.createPickup.needSender': 'Select pickup address', 'order.myOrders.createPickup.needWarehouse': 'Invalid warehouse', 'order.myOrders.createPickup.needTime': 'Enter expected pickup time', 'order.myOrders.createPickup.success': 'Pickup {no} created for {count} waybill(s)', 'order.myOrders.createPickup.failed': 'Failed to create pickup', 'order.myOrders.createPickup.alreadyBound': 'Some selected waybills already have a pickup — remove them first', 'order.myOrders.createPickup.predeclaredOnly': 'Only pre-declared orders can be added to a pickup', 'order.myOrders.actions.export': 'Export', 'order.myOrders.actions.modifyOrder': 'Edit order', 'order.myOrders.actions.createProblematic': 'Create problematic', 'order.myOrders.actions.createClaimed': 'Create claim', 'order.myOrders.actions.reallocate': 'Reallocate', 'order.myOrders.actions.markProcessed': 'Mark processed', 'order.myOrders.reallocate.modalTitle': 'Reallocate ({count} selected)', 'order.myOrders.reallocate.hint': 'Only recalculates payable and updates the service channel. Receivable and dimensions are unchanged. Paid orders are skipped. Changing channel clears provider service no. / tracking no.; re-forward downstream if needed.', 'order.myOrders.reallocate.schemeLabel': 'Allocation scheme', 'order.myOrders.reallocate.scheme.costLowest': 'Price first', 'order.myOrders.reallocate.scheme.timeFastest': 'Speed first', 'order.myOrders.reallocate.scheme.overallBest': 'Best overall', 'order.myOrders.reallocate.scheme.designated': 'Designated channel', 'order.myOrders.reallocate.channelLabel': 'Service channel', 'order.myOrders.reallocate.channelTip': 'Shows the intersection of selected orders’ allocation pools. Mixing sales products may yield an empty list.', 'order.myOrders.reallocate.channelRequired': 'Please select a service channel', 'order.myOrders.reallocate.channelPoolEmpty': 'No common channel for selected orders. Narrow the selection or use an automatic scheme.', 'order.myOrders.reallocate.downstreamClearedHint': 'If the channel changed, provider service no. / tracking no. were cleared. Re-forward downstream if needed.', 'order.myOrders.reallocate.success': 'Reallocation completed', 'order.myOrders.reallocate.failed': 'Reallocation failed', 'order.myOrders.search.keywordPlaceholder': 'Waybill / Customer No. / Tracking No.', 'order.myOrders.search.dateStart': 'Created from', 'order.myOrders.search.dateEnd': 'Created to', 'order.myOrders.search.actions.search': 'Search', 'order.myOrders.search.actions.reset': 'Reset', 'order.myOrders.columnConfig.title': 'Column settings', 'order.myOrders.columnConfig.scheme': 'Display scheme', 'order.myOrders.columnConfig.defaultScheme': 'Default', 'order.myOrders.columnConfig.schemeNamePlaceholder': 'Enter scheme name', 'order.myOrders.columnConfig.rename': 'Rename', 'order.myOrders.columnConfig.confirmRename': 'OK', 'order.myOrders.columnConfig.cancel': 'Cancel', 'order.myOrders.columnConfig.saveAs': 'Save as', 'order.myOrders.columnConfig.saveAsPrompt': 'Enter a name for the new scheme', 'order.myOrders.columnConfig.saveAsSuccess': 'Scheme saved', 'order.myOrders.columnConfig.delete': 'Delete scheme', 'order.myOrders.columnConfig.deleteConfirm': 'Delete the current display scheme?', 'order.myOrders.columnConfig.hint': '{count}/{max} columns selected. Drag left/right to choose and reorder (max {max}).', 'order.myOrders.columnConfig.resetDefault': 'Reset default', 'order.myOrders.columnConfig.available': 'Available', 'order.myOrders.columnConfig.selected': 'Displayed', 'order.myOrders.columnConfig.noAvailable': 'No more fields', 'order.myOrders.columnConfig.noSelected': 'Drag fields from the left', 'order.myOrders.columnConfig.maxExceeded': 'At most {max} columns can be shown', 'order.myOrders.columnConfig.atLeastOne': 'Select at least one column', 'order.myOrders.columnConfig.nameRequired': 'Scheme name is required', 'order.myOrders.columnConfig.open': 'Configure', 'order.myOrders.columnConfig.applySuccess': 'Column settings saved', 'order.myOrders.modify.singleOnly': 'Please select only one order to edit', 'order.myOrders.empty.hint': 'No orders yet. Try checking a rate or placing an order.', 'order.myOrders.empty.goPlaceOrder': 'Place order', 'order.myOrders.empty.goPriceCheck': 'Check rates', 'order.waybillManage.empty.hint': 'No waybills found. Try another customer or filter.', 'order.waybillManage.filter.fulfillmentAll': 'All fulfillment', 'order.waybillManage.filter.fulfillmentDirect': 'Direct', 'order.waybillManage.filter.fulfillmentWarehouse': 'Fulfill', 'order.waybillManage.table.fulfillmentType': 'Fulfillment', 'order.waybillManage.fulfillmentType.direct': 'Direct', 'order.waybillManage.table.id': 'Order ID', 'order.waybillManage.table.productCode': 'Product code', 'order.waybillManage.table.channelCode': 'Channel code', 'order.waybillManage.table.downstreamSupplierCode': 'Downstream supplier', 'order.waybillManage.table.downstreamAppKey': 'Downstream AppKey', 'order.waybillManage.table.downstreamAppId': 'Downstream AppId', 'order.waybillManage.table.channelForecastCode': 'Forecast code', 'order.waybillManage.table.consigneeCountryName': 'Country name', 'order.waybillManage.table.warehouseId': 'Warehouse ID', 'order.waybillManage.table.customerId': 'Customer ID', 'order.waybillManage.table.orderSource': 'Order source', 'order.waybillManage.table.pickupTime': 'Pickup time', 'order.waybillManage.table.customerSenderAddressId': 'Sender address ID', 'order.waybillManage.table.requestId': 'Request ID', 'order.waybillManage.table.exportCustomsMode': 'Export customs mode', 'order.waybillManage.table.declaredCurrency': 'Declared currency', 'order.waybillManage.table.declaredSum': 'Declared amount', 'order.waybillManage.table.quantity': 'Parcel qty', 'order.waybillManage.table.isCod': 'COD', 'order.waybillManage.table.codCurrency': 'COD currency', 'order.waybillManage.table.codSum': 'COD amount', 'order.waybillManage.table.status': 'Status code', 'order.waybillManage.table.handleStatus': 'Handle status code', 'order.waybillManage.table.handleStatusName': 'Handle status', 'order.waybillManage.table.issueType': 'Issue type code', 'order.waybillManage.table.issueTypeName': 'Issue type', 'order.waybillManage.table.issueTitle': 'Issue title', 'order.waybillManage.table.issueContent': 'Issue content', 'order.waybillManage.table.issueTemplateId': 'Issue template ID', 'order.waybillManage.table.issueRemark': 'Issue remark', 'order.waybillManage.table.issueTime': 'Issue time', 'order.waybillManage.table.claimType': 'Claim type code', 'order.waybillManage.table.claimTypeName': 'Claim type', 'order.waybillManage.table.claimAmount': 'Claim amount', 'order.waybillManage.table.claimCurrency': 'Claim currency', 'order.waybillManage.table.claimReason': 'Claim reason', 'order.waybillManage.table.claimTime': 'Claim time', 'order.waybillManage.table.previousOrderStatus': 'Previous status', 'order.waybillManage.table.isIntercept': 'Intercepted', 'order.waybillManage.table.isRemote': 'Remote area', 'order.waybillManage.table.createBy': 'Created by', 'order.waybillManage.table.updateTime': 'Updated at', 'order.waybillManage.table.updateBy': 'Updated by', 'order.waybillManage.table.senderName': 'Sender', 'order.waybillManage.table.senderCompany': 'Sender company', 'order.waybillManage.table.senderPhone': 'Sender mobile', 'order.waybillManage.table.senderTelePhone': 'Sender phone', 'order.waybillManage.table.senderEmail': 'Sender email', 'order.waybillManage.table.senderCountryCode': 'Sender destCountry code', 'order.waybillManage.table.senderProvince': 'Sender state', 'order.waybillManage.table.senderCity': 'Sender city', 'order.waybillManage.table.senderZipCode': 'Sender zip', 'order.waybillManage.table.senderStreetAddress1': 'Sender address 1', 'order.waybillManage.table.senderStreetAddress2': 'Sender address 2', 'order.waybillManage.table.senderStreetAddress3': 'Sender address 3', 'order.waybillManage.table.senderHouseNumber': 'Sender house no.', 'order.waybillManage.table.receiverRecipientsName': 'Consignee (raw)', 'order.waybillManage.table.receiverCompanyName': 'Consignee company', 'order.waybillManage.table.receiverPhone': 'Consignee mobile (raw)', 'order.waybillManage.table.receiverTelePhone': 'Consignee phone', 'order.waybillManage.table.receiverEmail': 'Consignee email', 'order.waybillManage.table.receiverCountryCode': 'Consignee destCountry code', 'order.waybillManage.table.receiverProvince': 'Consignee state (raw)', 'order.waybillManage.table.receiverCity': 'Consignee city (raw)', 'order.waybillManage.table.receiverStreetNumber': 'Consignee street no.', 'order.waybillManage.table.receiverStreetAddress1': 'Consignee address 1', 'order.waybillManage.table.receiverStreetAddress2': 'Consignee address 2', 'order.waybillManage.table.receiverStreetAddress3': 'Consignee address 3', 'order.waybillManage.table.receiverZipCode': 'Consignee zip (raw)', 'order.waybillManage.table.receiverTaxType': 'Tax type', 'order.waybillManage.table.receiverTaxNo': 'Tax no.', 'order.waybillManage.table.receiverCertificateType': 'ID type', 'order.waybillManage.table.receiverCertificateNo': 'ID no.', 'order.waybillManage.table.receiverEori': 'Consignee EORI', 'order.waybillManage.table.receiverVat': 'Consignee VAT', 'order.myOrders.problematic.modalTitle': 'Create problematic ({count} orders)', 'order.myOrders.problematic.issueType': 'Issue type', 'order.myOrders.problematic.template': 'Issue template', 'order.myOrders.problematic.title': 'Title', 'order.myOrders.problematic.content': 'Content', 'order.myOrders.problematic.contentHint': 'Placeholders: {serviceNo} {clientNo} {trackNo} {productCode} {channelCode}', 'order.myOrders.problematic.remark': 'Remark', 'order.myOrders.problematic.success': 'Problematic orders created', 'order.myOrders.claimed.modalTitle': 'Create claim ({count} orders)', 'order.myOrders.claimed.claimType': 'Claim type', 'order.myOrders.claimed.amount': 'Claim amount', 'order.myOrders.claimed.amountPlaceholder': 'Enter amount', 'order.myOrders.claimed.currency': 'Currency', 'order.myOrders.claimed.reason': 'Reason', 'order.myOrders.claimed.reasonPlaceholder': 'Describe the reason for this claim', 'order.myOrders.claimed.remark': 'Remark', 'order.myOrders.claimed.remarkPlaceholder': 'Optional', 'order.myOrders.claimed.success': 'Claims created', 'order.myOrders.claimed.tipInsured': 'Insured — claim amount cannot exceed declared total {amount}', 'order.myOrders.claimed.tipUninsured': 'Not insured ([未购保险])', 'order.myOrders.claimed.maxHint': 'Declared total cap: {amount}', 'order.myOrders.claimType.lost': 'Lost', 'order.myOrders.claimType.damaged': 'Damaged', 'order.myOrders.claimType.delay': 'Delay', 'order.myOrders.claimType.customs': 'Customs', 'order.myOrders.claimType.fee': 'Fee dispute', 'order.myOrders.claimType.other': 'Other', 'order.myOrders.handleStatus.success': 'Marked as processed', 'order.myOrders.handleStatus.failed': 'Failed to update status', 'order.myOrders.batch.partialSuccess': '{success} succeeded, {fail} failed. {detail}', 'order.myOrders.actions.more': 'More', 'order.myOrders.actions.viewTrack': 'Track', 'order.myOrders.actions.stockBind': 'Bind parcel / inventory', 'order.myOrders.actions.stockBindConvert': 'Bind for fulfillment', 'order.myOrders.stockBind.convertTitle': 'Convert to warehouse fulfillment', 'order.myOrders.stockBind.convertContent': 'After binding parcel or inventory, this order becomes a warehouse fulfillment order. Warehouse picking/packing is required and proxy packing fees may apply. Continue?', 'order.myOrders.stockBind.convertedHint': 'Converted to fulfillment order. View bind status under Fulfillment Orders.', 'order.myOrders.stockBind.warehouseClearHint': 'After clearing binds the order stays fulfillment type; it will not revert to direct shipping.', 'order.myOrders.table.stockBindStatus': 'Bind status', 'order.myOrders.table.domesticTrackingNos': 'Domestic tracking no.', 'order.myOrders.table.stockBindQtyTotal': 'Bind qty', 'order.myOrders.table.fulfillmentSource': 'Fulfillment source', 'order.fulfillOrders.filter.progressAll': 'All', 'order.fulfillOrders.badge': 'Fulfill', 'order.fulfillOrders.actions.manageBind': 'Manage bind', 'order.fulfillOrders.source.storeFulfill': 'Store fulfill', 'order.fulfillOrders.source.postBind': 'Post bind', 'order.fulfillOrders.progress.pendingBind': 'Pending bind', 'order.fulfillOrders.progress.domesticInTransit': 'Domestic in transit', 'order.fulfillOrders.progress.arrivedPendingPick': 'Pending pick', 'order.fulfillOrders.progress.outboundDone': 'Packed', 'order.myOrders.table.fulfillProgress': 'Fulfill progress', 'order.myOrders.table.primaryBinCode': 'Pick bin', 'order.myOrders.stockBind.title': 'Bind parcel / inventory', 'order.myOrders.stockBind.tabInventory': 'Warehouse stock', 'order.myOrders.stockBind.tabParcel': 'My parcels', 'order.myOrders.stockBind.searchPlaceholder': 'Search SKU / tracking no.', 'order.myOrders.stockBind.searchSku': 'Search SKU code or name', 'order.myOrders.stockBind.searchParcel': 'Search tracking no.', 'order.myOrders.stockBind.warehouse': 'Warehouse', 'order.myOrders.stockBind.forOrder': 'Order', 'order.myOrders.stockBind.tipFreeze': 'Pick stock or parcels on the left. Saving only freezes qty; it does not deduct yet.', 'order.myOrders.stockBind.tipDeducted': 'This order is already packed. Binding is read-only.', 'order.myOrders.stockBind.pickTitle': 'Available to pick', 'order.myOrders.stockBind.cartTitle': 'Will use for this order', 'order.myOrders.stockBind.cartSummary': '{lines} line(s) · {qty} pcs', 'order.myOrders.stockBind.emptyInventory': 'No available stock in this warehouse', 'order.myOrders.stockBind.emptyParcel': 'No available parcel items', 'order.myOrders.stockBind.available': 'Available', 'order.myOrders.stockBind.total': 'Total', 'order.myOrders.stockBind.selected': 'Selected', 'order.myOrders.stockBind.clear': 'Clear all', 'order.myOrders.stockBind.save': 'Confirm binding', 'order.myOrders.stockBind.emptySelected': 'Tap items on the left to add', 'order.myOrders.stockBind.maxAvailable': 'Max available', 'order.myOrders.stockBind.qtyExceed': 'Exceeds available quantity', 'order.myOrders.stockBind.singleOnly': 'Select exactly one order to bind', 'order.myOrders.stockBind.loadFailed': 'Failed to load binding data', 'order.myOrders.stockBind.saveSuccess': 'Binding saved', 'order.myOrders.stockBind.saveFailed': 'Failed to save binding', 'order.myOrders.stockBind.clearSuccess': 'Binding cleared', 'order.myOrders.stockBind.clearFailed': 'Failed to clear binding', 'order.myOrders.stockBind.alreadyDeducted': 'Already packed; cannot rebind', 'order.myOrders.stockBind.viewEmpty': 'No bound parcels or inventory', 'order.myOrders.stockBind.bindQty': 'Bound qty', 'order.myOrders.stockBind.bindCount': '{count} item(s)', 'order.myOrders.stockBind.bin': 'Bin', 'order.myOrders.stockBind.status.none': 'None', 'order.myOrders.stockBind.status.bound': 'Bound', 'order.myOrders.stockBind.status.deducted': 'Deducted', 'order.myOrders.stockBind.status.released': 'Released', 'common.cancel': 'Cancel', 'common.save': 'Save', 'common.loading': 'Loading...', 'order.myOrders.latestTrack.loading': 'Loading track…', 'order.myOrders.latestTrack.empty': 'No tracking yet', 'order.myOrders.latestTrack.emptyWithNo': 'No track updates yet', 'order.myOrders.pagination.totalRecords': 'Total {count} records', 'order.myOrders.pagination.perPage': 'per page', 'order.myOrders.pagination.goto': 'Go to', 'order.myOrders.pagination.page': 'page', 'order.myOrders.table.actions': 'Actions', 'order.myOrders.table.serialNo': 'No.', 'order.myOrders.table.waybillNo': 'Waybill No.', 'order.myOrders.table.fulfillmentType': 'Type', 'order.myOrders.table.customerOrderNo': 'Customer Order No.', 'order.myOrders.table.trackingNo': 'Tracking No.', 'order.myOrders.table.downstreamServiceNo': 'Provider Service No.', 'order.myOrders.table.carrierWaybillNo': 'Pickup Carrier No.', 'order.myOrders.table.pickupNo': 'Pickup System No.', 'order.myOrders.table.inboundMethod': 'Inbound Method', 'order.myOrders.table.latestTrack': 'Latest track', 'order.myOrders.table.copyHint': 'Tracking No.', 'order.myOrders.table.customerName': 'Customer Name', 'order.myOrders.table.customerCode': 'Customer Code', 'order.myOrders.table.shippingMethod': 'Sales Product', 'order.myOrders.table.serviceChannel': 'Service Channel', 'order.myOrders.table.isPaid': 'Paid', 'order.myOrders.table.consignee': 'Consignee', 'order.myOrders.table.consigneeCountry': 'Consignee Country', 'order.myOrders.table.consigneePhone': 'Consignee Phone', 'order.myOrders.table.consigneeCity': 'Consignee City', 'order.myOrders.table.consigneeAddress': 'Consignee Address', 'order.myOrders.table.chargeableWeight': 'Chargeable Weight', 'order.myOrders.table.receivableAmount': 'Receivable Amount', 'order.myOrders.table.consigneePostcode': 'Consignee Postcode', 'order.myOrders.table.consigneeState': 'Consignee State', 'order.myOrders.table.ioss': 'IOSS', 'order.myOrders.table.eori': 'EORI', 'order.myOrders.table.orderStatus': 'Order Status', 'order.myOrders.table.predeclareFailReason': 'Predeclare Failure Reason', 'order.myOrders.table.allocationPendingReason': 'Allocation Pending Reason', 'order.myOrders.table.createTime': 'Create Time', 'order.myOrders.table.receiveTime': 'Receive Time', 'order.myOrders.table.shipTime': 'Ship Time', 'order.myOrders.table.payTime': 'Pay Time', 'order.myOrders.table.signTime': 'Sign Time', 'order.myOrders.table.warehouse': 'Warehouse', 'order.myOrders.table.inboundTime': 'Inbound Time', 'order.myOrders.table.outboundTime': 'Outbound Time', 'order.myOrders.status.pendingPayment': 'Pending Payment', 'order.myOrders.status.draft': 'Draft', 'order.myOrders.status.predeclared': 'Pre-declared', 'order.myOrders.status.pendingAllocation': 'Pending Allocation', 'order.myOrders.status.pendingShip': 'Pending Ship', 'order.myOrders.status.pendingOnline': 'Pending Online', 'order.myOrders.status.shipping': 'Shipping', 'order.myOrders.status.deliverySuccess': 'Delivery Success', 'order.myOrders.status.deliveryFailed': 'Delivery Failed', 'order.myOrders.status.deleted': 'Deleted', 'order.myOrders.status.problematic': 'Problematic', 'order.myOrders.status.claimed': 'Claim Item', 'order.myOrders.selectedCount': 'Selected {count} items', 'order.myOrders.drawer.title': 'Order Detail', 'order.myOrders.drawer.tabs.basic': 'Order Detail', 'order.myOrders.drawer.tabs.weightFee': 'Weight & fees', 'order.myOrders.drawer.weightFee.weightTitle': 'Weight & dimensions', 'order.myOrders.drawer.weightFee.feeTitle': 'Receivable fees', 'order.myOrders.drawer.tabs.weight': 'Weight/Dimensions', 'order.myOrders.drawer.tabs.fee': 'Receivables/Payables', 'order.myOrders.drawer.tabs.track': 'Tracking', 'order.myOrders.drawer.tabs.attachments': 'Attachments', 'order.myOrders.drawer.tabs.stockBind': 'Bound stock', 'order.myOrders.drawer.tabs.issueHandling': 'Issue handling', 'order.myOrders.drawer.issueHandling.pendingCount': 'Pending {count}', 'order.myOrders.drawer.issueHandling.processedCount': 'Processed {count}', 'order.myOrders.drawer.issueHandling.register': 'Register issue', 'order.myOrders.drawer.issueHandling.cancelRegister': 'Collapse form', 'order.myOrders.drawer.issueHandling.submitRegister': 'Submit', 'order.myOrders.drawer.issueHandling.notifyMethod': 'Notify method', 'order.myOrders.drawer.issueHandling.handlerNames': 'Handler(s)', 'order.myOrders.drawer.issueHandling.handlerNamesPlaceholder': 'Comma-separated handler names', 'order.myOrders.drawer.issueHandling.createBy': 'Created by', 'order.myOrders.drawer.issueHandling.createTime': 'Created at', 'order.myOrders.drawer.issueHandling.processedBy': 'Processed by', 'order.myOrders.drawer.issueHandling.processedTime': 'Processed at', 'order.myOrders.drawer.issueHandling.stampProcessed': 'Processed', 'order.myOrders.drawer.issueHandling.markProcessed': 'Mark processed', 'order.myOrders.drawer.issueHandling.empty': 'No issue records', 'order.myOrders.drawer.issueHandling.loadFailed': 'Failed to load issue records', 'order.myOrders.drawer.issueHandling.registerFailed': 'Failed to register issue', 'order.myOrders.drawer.issueHandling.processModalTitle': 'Confirm processed', 'order.myOrders.drawer.issueHandling.processModalHint': 'Mark this issue as processed? You may add a remark.', 'order.myOrders.drawer.issueHandling.processRemarkPlaceholder': 'Remark (optional)', 'order.myOrders.drawer.issueHandling.processSuccess': 'Marked as processed', 'order.myOrders.drawer.issueHandling.processFailed': 'Failed to mark as processed', 'order.myOrders.drawer.attachments.upload': 'Upload', 'order.myOrders.drawer.attachments.preview': 'Preview', 'order.myOrders.drawer.attachments.delete': 'Delete', 'order.myOrders.drawer.attachments.empty': 'No attachments', 'order.myOrders.drawer.attachments.loadFailed': 'Failed to load attachments', 'order.myOrders.drawer.attachments.uploadSuccess': 'Uploaded', 'order.myOrders.drawer.attachments.uploadFailed': 'Upload failed', 'order.myOrders.drawer.attachments.deleteSuccess': 'Deleted', 'order.myOrders.drawer.attachments.deleteFailed': 'Delete failed', 'order.myOrders.drawer.attachments.deleteConfirmTitle': 'Delete attachment', 'order.myOrders.drawer.attachments.deleteConfirm': 'Delete this attachment?', 'order.myOrders.drawer.attachments.types.tradeProof': 'Trade proof', 'order.myOrders.drawer.attachments.types.systemLabel': 'System label', 'order.myOrders.drawer.attachments.types.downstreamLabel': 'Downstream label', 'order.myOrders.drawer.attachments.types.lastMileLabel': 'Last-mile label', 'order.myOrders.drawer.attachments.types.infraredImage': 'Infrared image', 'order.myOrders.drawer.attachments.source.upload': 'Upload', 'order.myOrders.drawer.attachments.source.systemGenerate': 'System generated', 'order.myOrders.drawer.attachments.source.downstream': 'Downstream', 'order.myOrders.drawer.attachments.source.migrate': 'Migrated', 'order.myOrders.drawer.orderBasic': 'Basic Info', 'order.myOrders.drawer.basic.viewAll': 'All', 'order.myOrders.drawer.basic.group.identity': 'Order IDs', 'order.myOrders.drawer.basic.group.product': 'Product & Channel', 'order.myOrders.drawer.basic.group.timeline': 'Status & Timeline', 'order.myOrders.drawer.basic.group.flags': 'Business Flags', 'order.myOrders.drawer.basic.group.audit': 'Audit Trail', 'order.myOrders.drawer.sender.empty': 'No sender info', 'order.myOrders.drawer.declaration.addRow': 'Add declaration row', 'order.myOrders.drawer.declaration.action': 'Action', 'order.myOrders.drawer.declaration.delete': 'Delete', 'order.myOrders.drawer.declaration.empty': 'No declaration items', 'order.myOrders.drawer.serviceNo': 'Waybill No.', 'order.myOrders.drawer.clientNo': 'Client Order No.', 'order.myOrders.drawer.trackNo': 'Tracking No.', 'order.myOrders.drawer.downstreamServiceNo': 'Provider Service No.', 'order.myOrders.drawer.productCode': 'Product Code', 'order.myOrders.drawer.productName': 'Sales Product', 'order.myOrders.drawer.channelCode': 'Channel Code', 'order.myOrders.drawer.channelName': 'Service Channel', 'order.myOrders.allocationTrace.view': 'View allocation process', 'order.myOrders.allocationTrace.title': 'Allocation process', 'order.myOrders.allocationTrace.fromSnapshot': 'Historical snapshot (at allocation time)', 'order.myOrders.allocationTrace.fromLive': 'Live recalculation (may differ from history)', 'order.myOrders.allocationTrace.recalcLive': 'Recalculate live', 'order.myOrders.allocationTrace.scheme': 'Scheme', 'order.myOrders.allocationTrace.source': 'Scheme source', 'order.myOrders.allocationTrace.weight': 'Chargeable weight', 'order.myOrders.allocationTrace.stage': 'Billing stage', 'order.myOrders.allocationTrace.conclusion': 'Selected {channel} among {count} candidates by “{scheme}”', 'order.myOrders.allocationTrace.col.channel': 'Service channel', 'order.myOrders.allocationTrace.col.payable': 'Payable total', 'order.myOrders.allocationTrace.col.minTime': 'Transit time', 'order.myOrders.allocationTrace.col.weight': 'Overall weight', 'order.myOrders.allocationTrace.days': '{n} days', 'order.myOrders.allocationTrace.selected': 'Selected', 'order.myOrders.allocationTrace.emptyCandidates': 'No candidate channels', 'order.myOrders.allocationTrace.skippedTitle': 'Skipped', 'order.myOrders.allocationTrace.traceTime': 'Recorded at', 'order.myOrders.allocationTrace.loadFailed': 'Failed to load allocation process', 'order.myOrders.allocationTrace.noOrder': 'Invalid order', 'order.myOrders.drawer.isPaid': 'Paid', 'order.myOrders.drawer.consigneeCountry': 'Country Code', 'order.myOrders.drawer.consigneeCountryName': 'Country Name (CN)', 'order.myOrders.drawer.cargoAttribute': 'Cargo Attribute', 'order.myOrders.drawer.cargoAttribute.general': 'General', 'order.myOrders.drawer.cargoAttribute.electronics': '3C & Electronics', 'order.myOrders.drawer.cargoAttribute.sensitive': 'Sensitive', 'order.myOrders.table.cargoAttribute': 'Cargo Attribute', 'order.myOrders.drawer.orderStatus': 'Order Status', 'order.myOrders.drawer.predeclareFailReason': 'Predeclare Failure Reason', 'order.myOrders.drawer.failGuideTitle': 'Pre-declaration incomplete', 'order.myOrders.drawer.failGuideRaw': 'System response', 'order.myOrders.drawer.failGuideAskSupport': 'Contact support', 'order.myOrders.drawer.failGuideEdit': 'Edit order', 'order.myOrders.drawer.failGuideTip': 'Tip', 'order.myOrders.drawer.allocationPendingReason': 'Allocation Pending Reason', 'order.myOrders.drawer.warehouse': 'Warehouse', 'order.myOrders.drawer.quantity': 'Parcel qty', 'order.myOrders.drawer.exportCustomsMode': 'Export customs mode', 'order.myOrders.drawer.inboundMethod': 'Inbound method', 'order.myOrders.drawer.inboundMethod.selfShip': 'Self ship to warehouse', 'order.myOrders.drawer.inboundMethod.doorPickup': 'Door pickup', 'order.myOrders.drawer.pickupNo': 'Pickup no.', 'order.myOrders.drawer.pickupTime': 'Expected pickup time', 'order.myOrders.drawer.carrierWaybillNo': 'Domestic carrier waybill', 'order.myOrders.drawer.fulfillmentType': 'Fulfillment type', 'order.myOrders.drawer.fulfillProgress': 'Fulfill progress', 'order.myOrders.drawer.domesticTrackingNos': 'Domestic tracking nos.', 'order.myOrders.drawer.additionalServices': 'Additional services', 'order.myOrders.drawer.declaredCurrency': 'Declared currency', 'order.myOrders.drawer.declaredSum': 'Declared total', 'order.myOrders.drawer.receiveTime': 'Receive Time', 'order.myOrders.drawer.shipTime': 'Ship Time', 'order.myOrders.drawer.payTime': 'Pay Time', 'order.myOrders.drawer.signTime': 'Sign Time', 'order.myOrders.drawer.isCod': 'Is COD', 'order.myOrders.drawer.codCurrency': 'COD Currency', 'order.myOrders.drawer.codSum': 'COD Amount', 'order.myOrders.drawer.isIntercept': 'Is Intercept', 'order.myOrders.drawer.isRemote': 'Is Remote', 'order.myOrders.drawer.createTime': 'Create Time', 'order.myOrders.drawer.createBy': 'Created By', 'order.myOrders.drawer.updateTime': 'Update Time', 'order.myOrders.drawer.updateBy': 'Updated By', 'order.myOrders.drawer.sender': 'Sender', 'order.myOrders.drawer.recipient': 'Recipient', 'order.myOrders.drawer.declaration': 'Declaration', 'order.myOrders.drawer.senderName': 'Sender Name', 'order.myOrders.drawer.company': 'Company', 'order.myOrders.drawer.destCountry': 'Country', 'order.myOrders.drawer.province': 'Province', 'order.myOrders.drawer.city': 'City', 'order.myOrders.drawer.zipCode': 'Zip Code', 'order.myOrders.drawer.streetAddress1': 'Address 1', 'order.myOrders.drawer.streetAddress2': 'Address 2', 'order.myOrders.drawer.streetAddress3': 'Address 3', 'order.myOrders.drawer.houseNumber': 'House No.', 'order.myOrders.drawer.phone': 'Phone', 'order.myOrders.drawer.telePhone': 'Telephone', 'order.myOrders.drawer.email': 'Email', 'order.myOrders.drawer.isDefault': 'Is Default', 'order.myOrders.drawer.recipientsName': 'Recipient Name', 'order.myOrders.drawer.companyName': 'Company Name', 'order.myOrders.drawer.recipientCountry': 'Country', 'order.myOrders.drawer.recipientPhone': 'Phone', 'order.myOrders.drawer.recipientZipCode': 'Zip Code', 'order.myOrders.drawer.recipientTelePhone': 'Telephone', 'order.myOrders.drawer.streetNumber': 'Street No.', 'order.myOrders.drawer.taxType': 'Tax Type', 'order.myOrders.drawer.taxNo': 'Tax No.', 'order.myOrders.drawer.certificateType': 'Certificate Type', 'order.myOrders.drawer.certificateNo': 'Certificate No.', 'order.myOrders.drawer.eori': 'EORI', 'order.myOrders.drawer.vat': 'Vat', 'order.myOrders.drawer.declarationCnName': 'Name(CN)', 'order.myOrders.drawer.declarationEnName': 'Name(EN)', 'order.myOrders.drawer.declarationSku': 'SKU', 'order.myOrders.drawer.declarationUnit': 'Unit', 'order.myOrders.drawer.declarationUnitPrice': 'Unit Price', 'order.myOrders.drawer.declarationUnitWeight': 'Unit Weight', 'order.myOrders.drawer.declarationQuantity': 'Quantity', 'order.myOrders.drawer.declarationAmount': 'Amount', 'order.myOrders.drawer.declarationWeight': 'Weight', 'order.myOrders.drawer.declarationHsCode': 'HsCode', 'order.myOrders.drawer.declarationImHsCode': 'Import HS code', 'order.myOrders.drawer.declarationExHsCode': 'Export HS code', 'order.myOrders.drawer.declarationSkuImage': 'Image', 'order.myOrders.drawer.declarationCategory': 'Category', 'order.myOrders.drawer.declarationBrand': 'Brand', 'order.myOrders.drawer.declarationBrandType': 'Brand Type', 'order.myOrders.drawer.declarationIsMagnetic': 'Magnetic/Electric', 'order.myOrders.drawer.declarationDistribution': 'Distribution', 'order.myOrders.drawer.declarationMaterial': 'Material', 'order.myOrders.drawer.declarationEnMaterial': 'Material(EN)', 'order.myOrders.drawer.declarationPurpose': 'Purpose', 'order.myOrders.drawer.declarationAttributes': 'Attributes', 'order.myOrders.drawer.declarationOriginCountry': 'Origin Country', 'order.myOrders.drawer.declarationSalesLink': 'Sales Link', 'order.myOrders.drawer.declarationModel': 'Model', 'order.myOrders.drawer.declarationSpecifications': 'Specifications', 'order.myOrders.drawer.declarationComment': 'Comment', 'order.myOrders.drawer.yes': 'Yes', 'order.myOrders.drawer.no': 'No', 'order.myOrders.drawer.weightType': 'Type', 'order.myOrders.drawer.weightType.forecast': 'Forecast', 'order.myOrders.drawer.weightType.receive': 'Inbound', 'order.myOrders.drawer.weightType.ship': 'Outbound', 'order.myOrders.drawer.weightType.downstream': 'Downstream', 'order.myOrders.drawer.weight.viewAll': 'All', 'order.myOrders.drawer.weight.actualMeta': 'Actual {value} kg', 'order.myOrders.drawer.weight.empty.forecast': 'No forecast data', 'order.myOrders.drawer.weight.empty.receive': 'No inbound data', 'order.myOrders.drawer.weight.empty.ship': 'No outbound data', 'order.myOrders.drawer.weight.empty.downstream': 'No downstream data', 'order.myOrders.drawer.weight.emptyAll': 'No weight & dimension data', 'order.myOrders.drawer.track.count': '{count} events', 'order.myOrders.drawer.track.refresh': 'Refresh', 'order.myOrders.drawer.track.empty': 'No tracking data', 'order.myOrders.drawer.track.latest': 'Latest', 'order.myOrders.drawer.track.remark': 'Remark', 'order.myOrders.drawer.track.code': 'Track code', 'order.myOrders.drawer.track.timezone': 'TZ {zone}', 'order.myOrders.drawer.track.statusUnknown': 'Update', 'order.myOrders.drawer.weightLength': 'Length(cm)', 'order.myOrders.drawer.weightWidth': 'Width(cm)', 'order.myOrders.drawer.weightHeight': 'Height(cm)', 'order.myOrders.drawer.actualWeight': 'Actual(kg)', 'order.myOrders.drawer.volumetricWeight': 'Volumetric(kg)', 'order.myOrders.drawer.chargeableWeight': 'Chargeable(kg)', 'order.myOrders.drawer.cubic': 'Cubic(m³)', 'order.myOrders.drawer.feeType': 'Type', 'order.myOrders.drawer.chargingStage': 'Charging Stage', 'order.myOrders.drawer.actions.edit': 'Edit', 'order.myOrders.drawer.actions.save': 'Save', 'order.myOrders.drawer.actions.cancel': 'Cancel', 'order.myOrders.drawer.actions.recalculateReceivable': 'Recalc Receivable', 'order.myOrders.drawer.actions.recalculatePayable': 'Recalc Payable', 'order.myOrders.drawer.actions.addFee': 'Add Fee', 'order.myOrders.drawer.actions.additionalServices': 'Additional services', 'order.myOrders.drawer.editBasicTitle': 'Edit Order Details', 'order.myOrders.drawer.editWeightTitle': 'Edit Weight & Dimensions', 'order.myOrders.drawer.message.saveSuccess': 'Saved successfully', 'order.myOrders.drawer.message.recalculateSuccess': 'Recalculated successfully', 'order.myOrders.drawer.costItem': 'Cost Item', 'order.myOrders.drawer.amount': 'Amount', 'order.myOrders.drawer.currency': 'Currency', 'order.myOrders.drawer.downstreamProvider': 'Downstream Provider', 'order.myOrders.drawer.priceNo': 'Price No', 'order.myOrders.drawer.priceEffectiveTime': 'Price Effective Time', 'order.myOrders.drawer.fee.receivableTitle': 'Receivable Details', 'order.myOrders.drawer.fee.payableTitle': 'Payable Details', 'order.myOrders.drawer.fee.viewAll': 'All', 'order.myOrders.drawer.fee.itemCount': '{count} items', 'order.myOrders.drawer.fee.emptyReceivable': 'No receivable fees', 'order.myOrders.drawer.fee.emptyPayable': 'No payable fees', 'order.myOrders.drawer.fee.emptyAll': 'No fee data', 'order.myOrders.drawer.fee.grossProfit': 'Gross profit', 'order.myOrders.drawer.fee.grossMargin': 'Margin {value}', 'order.myOrders.drawer.fee.grossMarginEmpty': 'No margin', 'order.myOrders.drawer.fee.grossProfitFormula': 'Gross profit', 'order.myOrders.drawer.fee.forecastDiffTitle': 'Forecast → current delta', 'order.myOrders.drawer.fee.forecastReceivable': 'Forecast receivable', 'order.myOrders.drawer.fee.currentReceivable': 'Current receivable', 'order.myOrders.drawer.fee.forecastPayable': 'Forecast payable', 'order.myOrders.drawer.fee.currentPayable': 'Current payable', 'order.myOrders.drawer.fee.diff': 'Delta', 'order.myOrders.drawer.fee.negativeGrossProfitWarn': 'Negative gross profit detected — review cost and pricing', 'order.myOrders.drawer.fee.additionalServicesTitle': 'Additional services', 'order.myOrders.drawer.fee.additionalServicesEmpty': 'No additional services for this product', 'order.myOrders.drawer.fee.additionalServicesSuccess': 'Additional services updated', 'order.myOrders.drawer.fee.additionalServicesFailed': 'Failed to update additional services', 'order.myOrders.drawer.fee.addTitle': 'Add Fee', 'order.myOrders.drawer.fee.addSection.basic': 'Fee details', 'order.myOrders.drawer.fee.addSection.amount': 'Amount', 'order.myOrders.drawer.fee.addSection.optional': 'Optional', 'order.myOrders.drawer.fee.addSection.optionalHint': 'Optional', 'order.myOrders.drawer.fee.addSuccess': 'Fee added successfully', 'order.myOrders.drawer.fee.addFailed': 'Failed to add fee', 'order.myOrders.drawer.fee.addMissingOrder': 'Invalid order, cannot add fee', 'order.myOrders.drawer.fee.amountPlaceholder': 'Enter amount', 'order.myOrders.drawer.fee.downstreamProviderPlaceholder': 'Enter downstream provider', 'order.myOrders.drawer.fee.priceNoPlaceholder': 'Enter price no.', 'order.myOrders.drawer.fee.priceEffectiveTimePlaceholder': 'Select effective time', // Order - Price Check 'order.priceCheck.form.destinationCountry': 'Destination destCountry', 'order.priceCheck.form.title': 'Quick quote', 'order.priceCheck.form.subtitle': 'Pick destCountry and weight to compare; add postal code or dimensions for more accurate quotes', 'order.priceCheck.form.destinationCountry.placeholder': 'Please select', 'order.priceCheck.form.shippingMethod': 'Shipping method', 'order.priceCheck.form.shippingMethod.placeholder': 'Please select', 'order.priceCheck.form.channel': 'Channel', 'order.priceCheck.form.channel.placeholder': 'All', 'order.priceCheck.form.cargoWeight': 'Cargo weight', 'order.priceCheck.form.cargoWeight.placeholder': 'Please enter weight (KG)', 'order.priceCheck.form.dimensions': 'Dimensions', 'order.priceCheck.form.dimensions.length': 'Length/cm', 'order.priceCheck.form.dimensions.width': 'Width/cm', 'order.priceCheck.form.dimensions.height': 'Height/cm', 'order.priceCheck.form.dimensionsHint': 'Used for volumetric weight and billing weight', 'order.priceCheck.form.dimensionsHintOptional': 'Optional; leave blank to estimate by actual weight only', 'order.priceCheck.form.cargoType': 'Cargo attribute', 'order.priceCheck.form.cargoType.placeholder': 'All', 'order.priceCheck.form.warehouse': 'Warehouse', 'order.priceCheck.form.warehouse.placeholder': 'All', 'order.priceCheck.form.destinationProvince': 'State / Province', 'order.priceCheck.form.destinationProvince.placeholder': 'Please select', 'order.priceCheck.form.postalCode': 'Postal code', 'order.priceCheck.form.postalCode.tip': 'more accurate', 'order.priceCheck.form.postalCode.placeholder': 'Optional — improves zoning', 'order.priceCheck.form.moreFilters': 'More filters', 'order.priceCheck.form.activeFilters': '{count} selected', 'order.priceCheck.form.clearFilters': 'Clear', 'order.priceCheck.form.removeFilter': 'Remove filter', 'order.priceCheck.actions.query': 'Get quotes', 'order.priceCheck.actions.reset': 'Reset', 'order.priceCheck.validate.requiredBasic': 'Please enter destination destCountry and cargo weight', 'order.priceCheck.validate.partialDimensions': 'Enter length, width and height together, or leave all blank', 'order.priceCheck.message.querySuccess': 'Loaded {count} quotes', 'order.priceCheck.message.queryFailed': 'Quote search failed', 'order.priceCheck.message.recalcSuccess': 'Quote recalculated for the selected cargo/warehouse', 'order.priceCheck.message.recalcFailed': 'Failed to recalculate quote', 'order.priceCheck.message.recalcNoQuote': 'No quote for this cargo type / warehouse', 'order.priceCheck.sort.recommend': 'Best match', 'order.priceCheck.sort.price': 'Price', 'order.priceCheck.sort.time': 'Transit', 'order.priceCheck.resultCount': '{count} results', 'order.priceCheck.shortcuts.destCountryAria': 'Common destination countries', 'order.priceCheck.shortcut.US': 'United States', 'order.priceCheck.shortcut.CA': 'Canada', 'order.priceCheck.shortcut.GB': 'United Kingdom', 'order.priceCheck.shortcut.DE': 'Germany', 'order.priceCheck.shortcut.AU': 'Australia', 'order.priceCheck.shortcut.JP': 'Japan', 'order.priceCheck.shortcut.MX': 'Mexico', 'order.priceCheck.shortcut.BR': 'Brazil', 'order.priceCheck.shortcut.NZ': 'New Zealand', 'order.priceCheck.shortcut.IT': 'Italy', 'order.priceCheck.shortcut.FR': 'France', 'order.priceCheck.shortcut.ES': 'Spain', 'order.priceCheck.shortcut.NL': 'Netherlands', 'order.priceCheck.destCountry.US': 'United States', 'order.priceCheck.destCountry.UK': 'United Kingdom', 'order.priceCheck.destCountry.DE': 'Germany', 'order.priceCheck.destCountry.FR': 'France', 'order.priceCheck.shippingMethod.air': 'Air', 'order.priceCheck.shippingMethod.sea': 'Sea', 'order.priceCheck.shippingMethod.land': 'Land', 'order.priceCheck.cargoType.general': 'General cargo', 'order.priceCheck.cargoType.sensitive': 'Sensitive cargo', 'order.priceCheck.cargoType.dangerous': 'Dangerous goods', 'order.priceCheck.province.CA': 'California', 'order.priceCheck.province.NY': 'New York', 'order.priceCheck.province.TX': 'Texas', 'order.priceCheck.search.placeholder': 'Search table...', 'order.priceCheck.search.search': 'Search', 'order.priceCheck.search.clear': 'Clear', 'order.priceCheck.search.resetFilters': 'Reset filters', 'order.priceCheck.table.serialNo': 'No.', 'order.priceCheck.table.shippingMethod': 'Shipping Method', 'order.priceCheck.table.channel': 'Channel', 'order.priceCheck.table.cargoType': 'Cargo attribute', 'order.priceCheck.table.warehouse': 'Warehouse', 'order.priceCheck.table.deliveryTime': 'Transit time', 'order.priceCheck.table.days': 'days', 'order.priceCheck.table.volumetricWeight': 'Volumetric Weight (KG)', 'order.priceCheck.table.chargeableWeight': 'Chargeable Weight (KG)', 'order.priceCheck.table.volumetricWeightShort': 'Vol. wt', 'order.priceCheck.table.chargeableWeightShort': 'Billable', 'order.priceCheck.table.costFormula': 'Cost Formula', 'order.priceCheck.table.freight': 'Freight', 'order.priceCheck.table.otherFees': 'Other', 'order.priceCheck.table.feeDetail': 'Fee breakdown', 'order.priceCheck.table.otherFeesHint': 'Hover to see fee names', 'order.priceCheck.table.totalCost': 'Total', 'order.priceCheck.table.operation': 'Action', 'order.priceCheck.table.viewDetail': 'Details', 'order.priceCheck.table.viewGuide': 'Channel guide', 'order.priceCheck.table.viewGuideHint': 'Click to view route guide', 'order.priceCheck.table.customsOrderNow': 'Place order', 'order.priceCheck.table.orderNow': 'Place order', 'order.priceCheck.table.askAi': 'Ask AI', 'order.priceCheck.table.askAiCanShip': 'Can this ship?', 'order.priceCheck.table.askAiCheaper': 'Anything cheaper?', 'order.priceCheck.table.empty': 'No matching quotes', 'order.priceCheck.table.emptyHint': 'Try adding postal code, dimensions, or cargo/warehouse filters; contact support if needed.', 'order.priceCheck.tag.priceOptimal': 'Best price', 'order.priceCheck.tag.timeOptimal': 'Fastest', 'order.priceCheck.tag.estimated': 'Reference', 'order.priceCheck.hint.summaryInline': 'Indicative only; final after inbound', 'order.priceCheck.hint.postalCta': 'This is an estimate — add a postal code for better accuracy', 'order.priceCheck.hint.fillPostal': 'Add postal code', 'order.priceCheck.hint.dismiss': 'Dismiss', 'order.priceCheck.hint.bannerTitle': 'Reference quote notice', 'order.priceCheck.hint.bannerLead': 'Some details were not provided. Prices below are for reference only and may change after order or inbound weighing.', 'order.priceCheck.hint.missing.dimensions': 'No package dimensions: chargeable weight uses actual weight only; price may change after inbound measurement.', 'order.priceCheck.hint.missing.postalCode': 'No postal code: blacklist, remote and zone matching are not exact; quote is for reference only.', 'order.priceCheck.hint.missing.province': 'No state/province: zone matched at destCountry level; exact address may change the price.', 'order.priceCheck.hint.missing.cargoType': 'No cargo attribute selected: quotes shown for general, electronics, sensitive, etc.; final price depends on your selection at order time.', 'order.priceCheck.hint.missing.warehouse': 'No warehouse selected: quotes from all warehouses; confirm warehouse when placing order.', 'order.priceCheck.customerGuide.drawerTitle': 'Route guide', 'order.priceCheck.customerGuide.drawerTitleWithProduct': '{product} · Route guide', 'order.priceCheck.customerGuide.empty': 'No guide configured for this channel', 'order.priceCheck.customerGuide.loadFailed': 'Failed to load channel guide', 'order.priceCheck.customerGuide.missingProduct': 'Cannot identify channel; guide unavailable', 'order.priceCheck.guide.close': 'Close guide', 'order.priceCheck.guide.idle': 'Select a quote card to view customer guide and limits', 'order.priceCheck.empty.title': 'Start a quote', 'order.priceCheck.empty.desc': 'Pick a destCountry and weight to compare. Postal code improves accuracy.', 'order.priceCheck.empty.step1': 'Choose destination', 'order.priceCheck.empty.step2': 'Enter weight (postal recommended)', 'order.priceCheck.empty.step3': 'Search, then AI-pick by cargo', 'order.priceCheck.card.eta': 'Business days', 'order.priceCheck.card.total': 'Total', 'order.priceCheck.card.tradeTerms': 'Trade terms', 'order.priceCheck.card.productGroup': 'Product group', 'order.priceCheck.card.cargoType': 'Cargo type', 'order.priceCheck.card.warehouse': 'Warehouse', 'order.priceCheck.card.recommendTag': 'Best', 'order.priceCheck.card.showFee': 'Details', 'order.priceCheck.card.hideFee': 'Hide details', 'order.priceCheck.card.switchRecalcHint': 'Changing this will recalculate this product quote', 'order.priceCheck.card.missingProductDescription': 'Product description missing', 'order.priceCheck.tradeTerms.ddp': 'DDP (duties included)', 'order.priceCheck.tradeTerms.ddu': 'DDU (duties excluded)', 'order.priceCheck.guide.failureTitle': 'No quotes found', 'order.priceCheck.ai.title': 'AI Route Pick', 'order.priceCheck.ai.desc': 'Enter cargo name — we check customer guides for can-ship and best route', 'order.priceCheck.ai.descShort': 'Pick a route by cargo name', 'order.priceCheck.ai.productName.placeholder': 'e.g. lipstick, apparel, power bank', 'order.priceCheck.ai.action': 'AI Recommend', 'order.priceCheck.ai.validate.productName': 'Please enter a product name', 'order.priceCheck.ai.validate.needQuotes': 'Run a quote search first, then use AI recommend', 'order.priceCheck.ai.noMatch': 'No suitable channel found for "{name}"', 'order.priceCheck.ai.successAi': 'AI pick ready from customer guides', 'order.priceCheck.ai.successMcp': 'Route pick ready from customer guides', 'order.priceCheck.ai.successLocal': 'Recommendation ready from guides and quotes', 'order.priceCheck.ai.failed': 'AI recommendation failed. Please try again.', 'order.priceCheck.ai.reasonBadge': 'Verdict', 'order.priceCheck.ai.cargoLabel': 'Cargo: {name}', 'order.priceCheck.ai.verdict.ok': 'OK to ship', 'order.priceCheck.ai.verdict.caution': 'Caution', 'order.priceCheck.ai.verdict.forbid': 'Not advised', 'order.priceCheck.ai.verdict.unknown': 'Unclear', 'order.priceCheck.ai.verdictHint.ok': 'Guide supports this cargo. You can place an order; still check declaration rules.', 'order.priceCheck.ai.verdictHint.caution': 'May be restricted. Review evidence or ask the advisor first.', 'order.priceCheck.ai.verdictHint.forbid': 'Guide advises against this cargo. Try an alternative or contact support.', 'order.priceCheck.ai.verdictHint.unknown': 'Guide does not clearly mention this cargo. Expand the full guide or ask the advisor.', 'order.priceCheck.ai.alternatives': 'Also consider', 'order.priceCheck.ai.altSelected': 'Switched: {blurb}', 'order.priceCheck.ai.altSwitched': 'Switched to alternative route', 'order.priceCheck.ai.cta.order': 'Place order', 'order.priceCheck.ai.cta.ask': 'Ask advisor', 'order.priceCheck.ai.guideExpand': 'Show full customer guide', 'order.priceCheck.ai.guideCollapse': 'Hide customer guide', 'order.priceCheck.ai.guideTeaser': 'Full route limits are ready — expand when needed.', 'order.priceCheck.ai.loadingHint': 'Checking customer guides…', 'order.priceCheck.pagination.total': 'Total {count} records', 'order.priceCheck.pagination.prev': 'Prev', 'order.priceCheck.pagination.next': 'Next', 'order.priceCheck.pagination.perPage': '/page', 'order.priceCheck.pagination.goTo': 'Go to', 'order.priceCheck.pagination.page': 'page', 'order.priceCheck.pagination.invalidPage': 'Please enter a valid page number', // Order - Place Order 'order.placeOrder.template.label': 'Order template', 'order.placeOrder.template.download': 'Download', 'order.placeOrder.template.edit': 'Edit', 'order.placeOrder.template.delete': 'Delete', 'order.placeOrder.template.cancel': 'Cancel', 'order.placeOrder.template.deleteSuccess': 'Custom template deleted', 'order.placeOrder.template.deleteConfirmTitle': 'Delete custom template', 'order.placeOrder.template.deleteConfirmContent': 'Delete template "{name}"? This cannot be undone.', 'order.placeOrder.template.standard1': 'Standard template 1', 'order.placeOrder.template.standard2': 'Standard template 2', 'order.placeOrder.template.custom1': 'Custom template 1', 'order.placeOrder.template.updatedAt': 'Updated: {time}', 'order.placeOrder.upload.dropText': 'Drag file here, or click to upload', 'order.placeOrder.batch.senderLabel': 'Default sender address', 'order.placeOrder.batch.senderPlaceholder': 'Select a sender address', 'order.placeOrder.selectCustomer': 'Select customer', 'order.placeOrder.customerLabel': 'Customer', 'order.placeOrder.selectCustomerRequired': 'Select a customer first', 'order.placeOrder.batch.templateTip': 'Red headers are required. Up to 2000 orders.', 'order.placeOrder.batch.addressCardTitle': 'Customer & sender', 'order.placeOrder.batch.addressTip': 'Choose sender here, not in Excel.', 'order.placeOrder.batch.block.noSender': 'Please select a default sender address', 'order.placeOrder.batchOrder': 'Batch order', 'order.placeOrder.fromPriceCheck.filled': 'Quote details applied. Continue with recipient info.', 'order.placeOrder.fromPriceCheck.bannerTitle': 'Details carried over from price check', 'order.placeOrder.fromPriceCheck.filledLabel': 'Applied:', 'order.placeOrder.fromPriceCheck.pendingLabel': 'Still needed:', 'order.placeOrder.fromPriceCheck.item.product': 'Shipping method', 'order.placeOrder.fromPriceCheck.item.cargo': 'Cargo type', 'order.placeOrder.fromPriceCheck.item.warehouse': 'Warehouse', 'order.placeOrder.fromPriceCheck.item.weight': 'Weight', 'order.placeOrder.fromPriceCheck.item.dimensions': 'Dimensions', 'order.placeOrder.fromPriceCheck.item.destCountry': 'Destination destCountry', 'order.placeOrder.fromPriceCheck.item.zip': 'Postal code', 'order.placeOrder.fromPriceCheck.item.clientNo': 'Customer order No.', 'order.placeOrder.fromPriceCheck.item.receiverName': 'Recipient name', 'order.placeOrder.fromPriceCheck.item.receiverPhone': 'Recipient phone', 'order.placeOrder.fromPriceCheck.item.receiverAddress': 'Recipient address', 'order.placeOrder.fromPriceCheck.item.declaration': 'Declaration lines', 'order.placeOrder.fromPriceCheck.quoteWarning': 'Price check is indicative; final cost may change after inbound measurement:', 'order.placeOrder.validate.lengthRequired': 'Enter length (cm), must be greater than 0', 'order.placeOrder.validate.widthRequired': 'Enter width (cm), must be greater than 0', 'order.placeOrder.validate.heightRequired': 'Enter height (cm), must be greater than 0', 'order.placeOrder.batch.submitted': 'Batch job #{jobId} submitted ({total} items)', 'order.placeOrder.batch.syncCompleted': 'Import finished. Batch job #{jobId} ({total} items)', 'order.placeOrder.batch.viewJobs': 'View batch jobs', 'order.placeOrder.batch.uploadTitle': 'Upload & submit', 'order.placeOrder.batch.stepTemplate': 'Select template', 'order.placeOrder.batch.stepUpload': 'Upload Excel', 'order.placeOrder.batch.stepSubmit': 'Submit', 'order.placeOrder.batch.guideHint': 'Click a step to jump · pick template & sender, then upload & submit', 'order.placeOrder.batch.pickTemplateHint': 'Select a template', 'order.placeOrder.batch.block.noTemplate': 'Please select an order template on the right first', 'order.placeOrder.batch.block.templateDraft': 'Finish mapping this custom template before submitting', 'order.placeOrder.batch.block.noFile': 'Please upload an Excel file first', 'order.placeOrder.batch.block.noAgreement': 'Please accept the agreement first', 'order.placeOrder.batch.block.generic': 'Complete batch order requirements before submitting', 'order.placeOrder.agreement.required': 'Please check “I have read and agree to all terms”', 'order.placeOrder.upload.downloadTemplate': 'Download template', 'order.placeOrder.upload.fileReady': 'File ready to submit', 'order.placeOrder.upload.reselect': 'Reselect', 'order.placeOrder.upload.clearFile': 'Clear', 'order.placeOrder.upload.invalidType': 'Only .xlsx / .xls files are supported', 'order.placeOrder.upload.selectTemplateFirst': 'Please select a template first', 'order.placeOrder.templatePanel.title': 'Templates', 'order.placeOrder.templatePanel.hint': 'Click a card to select a template', 'order.placeOrder.templatePanel.emptyCustom': 'No custom templates', 'order.placeOrder.templatePanel.emptyStandard': 'No standard templates. Contact admin or refresh the page.', 'order.placeOrder.agreement.label': 'I have read and agree to all terms', 'order.placeOrder.singleOrder': 'Single order', 'order.placeOrder.confirmOrder': 'Confirm order', 'order.placeOrder.single.formTitle': 'Order details', 'order.placeOrder.single.sampleOrder': 'Mock order', 'order.placeOrder.single.sampleConfirmTitle': 'Mock order', 'order.placeOrder.single.sampleConfirmContent': 'This will overwrite the current form. Continue?', 'order.placeOrder.single.sampleConfirmOk': 'Overwrite & fill', 'order.placeOrder.single.stepBasic': 'Basic info', 'order.placeOrder.form.additionalServices': 'Additional services', 'order.placeOrder.single.stepSender': 'Sender', 'order.placeOrder.single.stepSenderOptional': 'Sender (optional)', 'order.placeOrder.single.senderModalTitle': 'Select sender address', 'order.placeOrder.single.senderSelectLabel': 'Sender address', 'order.placeOrder.single.senderSelectPlaceholder': 'Choose a sender address from Address Management', 'order.placeOrder.single.senderPreviewTitle': 'Current sender', 'order.placeOrder.single.senderDefaultTag': '(default)', 'order.placeOrder.single.senderEmpty': 'No sender address yet. Add one in Address Management first.', 'order.placeOrder.single.senderRequired': 'Please select a sender address', 'order.placeOrder.single.senderPickHint': 'Select sender address first', 'order.placeOrder.single.senderManage': 'Manage addresses', 'order.placeOrder.single.senderEditHint': 'Click to change sender', 'order.placeOrder.single.senderLoadFailed': 'Failed to load sender addresses', 'order.placeOrder.single.senderModalOk': 'Done', 'order.placeOrder.single.stepRecipient': 'Recipient', 'order.placeOrder.single.stepDeclaration': 'Declaration info', 'order.placeOrder.single.optional': 'Optional', 'order.placeOrder.single.tip1': 'Fields marked * are required. Fill in each section in order.', 'order.placeOrder.single.tip2': 'Use “Generate sample” to try the full flow quickly.', 'order.placeOrder.single.doorPickupBatchHint': 'For multiple shipments, select waybills in Waybill Manage to create pickups in bulk', 'order.placeOrder.single.doorPickupBatchHintCustomer': 'For multiple shipments, select orders in My Orders to create pickups in bulk', 'order.placeOrder.single.submitHint': 'Complete required fields and accept the agreement to submit', 'order.placeOrder.single.submitReady': 'Ready to submit', 'order.placeOrder.contact.blockTitle': 'Complete your contact info', 'order.placeOrder.contact.blockDesc': 'Add phone and email to continue placing orders', 'order.placeOrder.contact.blockAction': 'Complete now', 'order.placeOrder.contact.adminCustomerIncomplete': 'The selected customer is missing phone or email. Complete their profile before placing the order.', 'order.placeOrder.single.viewCustomerGuide': 'View customer guide', 'order.placeOrder.single.declaredCurrencyHint': 'Default is USD; enter declared prices in that currency', 'order.placeOrder.single.exportCustomsPlaceholder': 'Optional (defaults to simplified declaration)', 'order.placeOrder.single.showExtraCols': 'More fields', 'order.placeOrder.single.hideExtraCols': 'Less', 'order.placeOrder.single.showRecipientOptional': 'More fields', 'order.placeOrder.single.hideRecipientOptional': 'Less', 'order.placeOrder.single.saveReceiver': 'Save', 'order.placeOrder.single.savingReceiver': 'Saving…', 'order.placeOrder.single.saveReceiverRequired': 'Enter recipient name and address line 1 first', 'order.placeOrder.single.saveReceiverSuccess': 'Recipient address saved', 'order.placeOrder.single.saveReceiverFailed': 'Failed to save recipient address', 'order.placeOrder.single.declarationResizeHint': 'Scroll sideways for more columns; drag bottom to resize height', 'order.placeOrder.single.successTitle': 'Order created', 'order.placeOrder.single.successContent': 'You can view details and status in My Orders.', 'order.placeOrder.single.successGoOrders': 'Go to My Orders', 'order.placeOrder.single.successStay': 'Stay on this page', 'order.placeOrder.single.failed': 'Failed to place order', 'order.placeOrder.single.failTitle': 'Order was not placed', 'order.placeOrder.single.failTitleDraft': 'Pre-declaration failed (draft saved)', 'order.placeOrder.single.failWhatHappened': 'Failure reason', 'order.placeOrder.single.failHowToFix': 'Tip', 'order.placeOrder.single.failRawReason': 'System response', 'order.placeOrder.single.failAskSupport': 'Contact support', 'order.placeOrder.single.failCopied': 'Waybill No. copied', 'order.placeOrder.single.failCopyFailed': 'Copy failed. Please select the number manually.', 'order.placeOrder.single.failDraftSavedNote': 'Draft saved — edit then pre-declare (do not resubmit here)', 'order.placeOrder.single.failNotSavedNote': 'Order was not saved', 'order.placeOrder.single.failServiceNo': 'Waybill No.', 'order.placeOrder.single.failContinueEdit': 'Continue editing', 'order.placeOrder.single.failEditDraft': 'Edit draft', 'order.placeOrder.single.failKeepDraftEdit': 'Keep draft and edit', 'order.placeOrder.single.failSaveAsDraft': 'Save as draft', 'order.placeOrder.single.failSaveAsDraftOk': 'Saved as draft', 'order.placeOrder.single.failSaveAsDraftFailed': 'Failed to save draft', 'order.placeOrder.single.failSaveAsDraftGo': 'View draft', 'order.placeOrder.single.failSaveAsDraftStay': 'Stay on this page', 'order.placeOrder.single.failSaveLocal': 'Save local draft', 'order.placeOrder.single.failSaveLocalOk': 'Saved locally. You can continue later.', 'order.placeOrder.single.failSaveLocalFailed': 'Failed to save local draft', 'order.placeOrder.single.failGoDrafts': 'View draft list', 'order.placeOrder.single.failAbandon': 'Discard', 'order.placeOrder.single.failCancelSubmit': 'Cancel submission (delete draft)', 'order.placeOrder.single.failAbandonTitle': 'Discard this form?', 'order.placeOrder.single.failAbandonContent': 'The current form will be cleared. This cannot be undone.', 'order.placeOrder.single.failAbandonOk': 'Discard', 'order.placeOrder.single.failAbandonDone': 'Form cleared', 'order.placeOrder.single.failCancelDraftTitle': 'Cancel this submission?', 'order.placeOrder.single.failCancelDraftContent': 'The draft order just saved will be deleted. This cannot be undone.', 'order.placeOrder.single.failCancelDraftOk': 'Delete draft', 'order.placeOrder.single.failCancelKeep': 'Keep editing', 'order.placeOrder.single.failCancelDraftDone': 'Draft deleted', 'order.placeOrder.single.failCancelDraftFailed': 'Failed to delete draft', 'order.placeOrder.standardTemplates': 'Standard templates', 'order.placeOrder.customTemplates': 'Custom templates', 'order.placeOrder.customTemplates.add': 'Add custom template', 'order.placeOrder.progress.title': 'Processing progress', 'order.placeOrder.progress.header.serialNo': 'No.', 'order.placeOrder.progress.header.taskName': 'Task name', 'order.placeOrder.progress.header.quantity': 'Quantity', 'order.placeOrder.progress.header.status': 'Status', 'order.placeOrder.progress.header.createTime': 'Created at', 'order.placeOrder.progress.header.actions': 'Action', 'order.placeOrder.progress.view': 'View', 'order.placeOrder.status.processing': 'Processing', 'order.placeOrder.status.completed': 'Completed', 'order.placeOrder.status.pending': 'Pending', // System - Downstream service providers & interfaces 'system.serviceProviders.search.placeholder': 'Enter provider name', 'system.serviceProviders.search.refresh': 'Refresh list', 'system.serviceProviders.search.addProvider': 'Add provider', 'system.serviceProviders.dropdown.edit': 'Edit', 'system.serviceProviders.dropdown.copy': 'Create copy', 'system.serviceProviders.dropdown.authConfig': 'Auth config', 'system.serviceProviders.dropdown.accountManage': 'Account management', 'system.serviceProviders.dropdown.export': 'Export', 'system.serviceProviders.dropdown.fixedParams': 'Common parameters', 'system.serviceProviders.dropdown.delete': 'Delete', 'system.serviceProviders.list.deleteTip': 'Please delete via the action button in each provider item', 'system.serviceProviders.list.invalid': 'Invalid provider data', 'system.serviceProviders.list.deleteConfirmTitle': 'Reminder', 'system.serviceProviders.list.deleteConfirmContent': 'Are you sure you want to delete provider “{name}”? All interfaces under this provider will also be deleted.', 'system.serviceProviders.list.deleteSuccess': 'Deleted successfully', 'system.serviceProviders.list.deleteFail': 'Delete failed', 'system.serviceProviders.list.loadFail': 'Failed to load provider list', 'system.serviceProviders.interfaceList.title': 'Interface list', 'system.serviceProviders.interfaceList.refresh': 'Refresh interfaces', 'system.serviceProviders.interfaceList.add': 'Add interface', 'system.serviceProviders.interfaceList.loading': 'Loading interface list...', 'system.serviceProviders.interfaceList.empty': 'No interface data', 'system.serviceProviders.interfaceList.selectProvider': 'Please select a provider to view its interfaces', 'system.serviceProviders.interfaceList.loadFail': 'Failed to load interface list', 'system.serviceProviders.interface.needProvider': 'Please select a provider first', 'system.serviceProviders.interface.deleteTip': 'Please delete via the delete button in the interface list', 'system.serviceProviders.interface.invalid': 'Invalid interface data', 'system.serviceProviders.interface.deleteConfirmTitle': 'Reminder', 'system.serviceProviders.interface.deleteConfirmContent': 'Are you sure you want to delete interface “{name}”?', 'system.serviceProviders.interface.deleteSuccess': 'Deleted successfully', 'system.serviceProviders.interface.deleteFail': 'Delete failed', 'system.serviceProviders.detail.tab.detail': 'Interface detail', 'system.serviceProviders.detail.tab.debug': 'API Debugger', 'system.serviceProviders.detail.actions.cancel': 'Cancel', 'system.serviceProviders.detail.actions.save': 'Save', 'system.serviceProviders.interfaceDetail.saveSuccess': 'Saved successfully', // System - Service provider interface modal 'system.serviceProviders.modal.params.required': 'Required', 'system.serviceProviders.modal.form.name.placeholder': '* Please enter interface name (Chinese)', 'system.serviceProviders.modal.form.code.placeholder': 'Interface code (read only)', 'system.serviceProviders.modal.form.requestProtocol.placeholder': '* Please select protocol', 'system.serviceProviders.modal.form.requestMethod.placeholder': '* Please select method', 'system.serviceProviders.modal.form.requestAddress.placeholder': '* Example: http://xx/api/CreateOrder', 'system.serviceProviders.modal.form.contentType.placeholder': '* Please select Content-Type', 'system.serviceProviders.modal.form.responseContentType.placeholder': 'Please select Response-Content-Type', 'system.serviceProviders.modal.form.isDisableAuth.yes': 'Yes', 'system.serviceProviders.modal.form.isDisableAuth.no': 'No', 'system.serviceProviders.modal.form.mappedParamType.placeholder': 'Please select root node', 'system.serviceProviders.modal.form.description.placeholder': 'Please enter remarks', 'system.serviceProviders.modal.rules.requiredInput': 'Input cannot be empty', 'system.serviceProviders.modal.rules.requestProtocol': 'Please select protocol', 'system.serviceProviders.modal.rules.requestMethod': 'Please select method', 'system.serviceProviders.modal.rules.contentType': 'Please select Content-Type', 'system.serviceProviders.modal.rules.descriptionMax': 'Please keep within 200 characters', 'system.serviceProviders.modal.load.error': 'Failed to load interface data', 'system.serviceProviders.modal.load.notFound': 'Interface does not exist or has been deleted', 'system.serviceProviders.modal.load.noPermission': 'No permission to access this interface', 'system.serviceProviders.modal.load.serverError': 'Server error, please try again later', 'system.serviceProviders.modal.load.networkError': 'Network error, please check API endpoint', 'system.serviceProviders.modal.load.fallbackName': 'Failed to load interface data, please fill in manually', 'system.serviceProviders.modal.save.fillAll': 'Please complete all required fields', 'system.serviceProviders.modal.save.success': 'Saved successfully', 'system.serviceProviders.modal.save.fail': 'Save failed', 'system.serviceProviders.modal.params.addFail': 'Failed to add parameter, please try again', 'system.serviceProviders.modal.params.typeNotAllow': 'This parameter type cannot add child item', 'system.serviceProviders.modal.params.parse.needInput': 'Please enter content before parsing', 'system.serviceProviders.modal.params.parse.success': 'Parsed successfully', 'system.serviceProviders.modal.params.parse.fail': 'Parse failed', 'system.serviceProviders.modal.params.import.needParse': 'Import failed, please parse first', 'system.serviceProviders.modal.params.import.success': 'Imported successfully', 'system.serviceProviders.modal.params.import.fail': 'Import failed', 'system.serviceProviders.modal.params.second.addFail': 'Failed to add secondary request parameter, please try again', 'system.serviceProviders.modal.secondParams.columns.name': 'Name', 'system.serviceProviders.modal.secondParams.columns.value': 'Value', 'system.serviceProviders.modal.secondParams.columns.description': 'Description', 'system.serviceProviders.modal.secondParams.columns.action': 'Action', 'system.serviceProviders.modal.table.requestBody': 'Request body', 'system.serviceProviders.modal.table.responseBody': 'Response body', 'system.serviceProviders.modal.table.secondParams': 'Secondary request params', 'system.serviceProviders.modal.table.action.add': 'Add', 'system.serviceProviders.modal.table.button.parse': 'Parse', 'system.serviceProviders.modal.table.placeholder.paramName': 'Please enter parameter name', 'system.serviceProviders.modal.table.placeholder.cnName': 'Please enter Chinese name', 'system.serviceProviders.modal.table.placeholder.type': 'Please select type', 'system.serviceProviders.modal.table.placeholder.description': 'Please enter description', 'system.serviceProviders.modal.table.placeholder.paramValue': 'Please enter parameter value', 'system.serviceProviders.modal.drawer.title': 'Parameter parsing', 'system.serviceProviders.modal.drawer.placeholder.json': 'Please enter JSON content', 'system.serviceProviders.modal.drawer.placeholder.xml': 'Please enter XML content', 'system.serviceProviders.modal.drawer.actions.cancel': 'Cancel', 'system.serviceProviders.modal.drawer.actions.parse': 'Parse', 'system.serviceProviders.modal.drawer.actions.import': 'Import', // System - Upstream interface base form (new-port.vue) 'system.interface.form.requestAddress': 'Request URL', 'system.interface.form.requestProtocol': 'Request protocol', 'system.interface.form.requestMethod': 'Request method', 'system.interface.form.limit': 'Batch processing', 'system.interface.form.flowCode': 'Flow Code', 'system.interface.form.isDisableAuth': 'Disable auth', 'system.interface.form.rules.name.required': 'This field is required', 'system.interface.form.rules.name.max50': 'Please keep within 50 characters', 'system.interface.form.rules.limit.number': 'Only numbers are allowed', 'system.interface.form.rules.requestAddress.required': 'This field is required', 'system.interface.form.rules.requestAddress.max500': 'Please keep within 500 characters', 'system.interface.form.rules.description.max200': 'Please keep within 200 characters', 'system.interface.form.rules.category.required': 'Please select interface', 'system.interface.form.rules.requestProtocol.required': 'Please select protocol', 'system.interface.form.rules.requestMethod.required': 'Please select method', 'system.interface.form.rules.isBatch.required': 'Please select', 'system.interface.form.rules.contentType.required': 'Please select Content-Type', 'system.interface.form.rules.responseContentType.required': 'Please select Response-Content-Type', 'system.interface.params.name.required': 'Parameter name is required', 'system.interface.params.name.noChinese': 'Spaces and Chinese characters are not allowed', 'system.interface.params.description.max200': 'Please keep within 200 characters', 'system.interface.params.parameterId.required': 'Status parameter is required', 'system.interface.params.statusCode.required': 'Success value is required', 'system.interface.params.statusCode.alphaNum': 'Only letters and numbers are allowed', 'system.interface.sort.onlySameLevel': 'Only reordering within the same level is supported', 'system.interface.sort.saveSuccess': 'Sorted successfully', 'system.interface.saveFail': 'Save failed', 'system.interface.changeLevel': 'Cross-level dragging is not allowed', // System - Interface Management Page 'system.interface.search.placeholder.nameOrCode': 'Interface name/code', 'system.interface.search.placeholder.interfaceName': 'Enter interface name', 'system.interface.search.placeholder.providerName': 'Enter provider name', 'system.interface.search.placeholder.selectProviderAndInterface': 'Please select provider and interface', 'system.interface.search.button.query': 'Query', 'system.interface.actions.refresh': 'Refresh list', 'system.interface.actions.addInterface': 'Add interface', 'system.interface.actions.addMapping': 'Add mapping', 'system.interface.actions.delete': 'Delete', 'system.interface.actions.cancel': 'Cancel', 'system.interface.actions.confirm': 'Confirm', 'system.interface.table.actions': 'Action', 'system.interface.modal.add': 'Add', 'system.interface.modal.edit': 'Edit', 'system.interface.modal.addMapping': 'Add mapping', 'system.interface.modal.addUpstreamInterface': 'Add upstream interface', 'system.interface.modal.editUpstreamInterface': 'Edit upstream interface', 'system.interface.modal.confirmTitle': 'Confirm', 'system.interface.modal.deleteConfirm': 'Are you sure to delete this record?', 'system.interface.modal.deleteInterfaceConfirm': 'Are you sure to delete interface "{name}"?', 'system.interface.modal.warningTitle': 'Warning', 'system.interface.modal.ok': 'OK', 'system.interface.modal.cancel': 'Cancel', 'system.interface.modal.publishConfirm': 'Saved successfully. Go publish?', 'system.interface.message.deleteSuccess': 'Deleted successfully', 'system.interface.message.deleteFailed': 'Delete failed', 'system.interface.message.saveSuccess': 'Saved successfully', 'system.interface.message.cannotDeleteWithMapping': 'Cannot delete interface with existing mappings', 'system.interface.message.canOnlyDeleteInterface': 'Can only delete interface nodes', 'system.interface.message.selectProviderForDebug': 'Please select a provider for debugging', 'system.interface.message.selectProviderForMapping': 'Please select a provider to view mapping details', 'system.interface.message.selectLeftInterface': 'Please select an interface from the left', 'system.interface.message.selectProviderInterface': 'Please select provider interface', 'system.interface.message.selectInterfaceFirst': 'Please select an interface first', 'system.interface.mappingList.title': 'Mapping list', 'system.interface.mapping.outputMapping': 'Output mapping', 'system.interface.tabs.mappingDetail': 'Mapping detail', 'system.interface.tabs.apiDebugger': 'API Debugger', 'system.interface.tabs.interfaceDetail': 'Interface detail', 'system.interface.empty.selectLeftInterfaceForMapping': 'Please select an interface from the left to view mapping provider list', 'system.interface.empty.selectLeftInterfaceForDetail': 'Please select an interface from the left to view interface detail', 'system.interface.empty.selectInterfaceForDetail': 'Please select an interface to view details', 'system.interface.loading.interfaceList': 'Loading interface list...', 'system.interface.mapping.inputMapping': 'Input mapping', 'system.interface.mapping.outputMappingLabel': 'Output mapping', 'system.interface.mapping.table.systemParamName': 'System parameter name', 'system.interface.mapping.table.systemParamNameCn': 'System parameter description', 'system.interface.mapping.table.paramType': 'Parameter type', 'system.interface.mapping.table.providerParamName': 'Provider parameter name', 'system.interface.mapping.table.providerParamNameCn': 'Provider parameter description', 'system.interface.mapping.table.paramValue': 'Parameter value', 'system.interface.mapping.table.inputParam': 'Input parameter', 'system.interface.mapping.table.inputParamCn': 'Input parameter description', 'system.interface.mapping.actions.prefixScript': 'Prefix script', 'system.interface.mapping.actions.aiMap': 'AI mapping', 'system.interface.mapping.actions.postfixScript': 'Postfix script', 'system.interface.mapping.actions.allowUnequalMapping': 'Support array-to-object mapping', 'system.interface.mapping.actions.allowUnequalMappingTip': 'When enabled, an array field can map to an object field (structures may differ).\nExample: upstream items[] can map to downstream package (object); the system reads/builds values by the mapping. When off, only same-shape mapping is allowed (array↔array, object↔object).', 'system.interface.mapping.message.noContentToPublish': 'No content to publish', 'system.interface.mapping.message.publishCacheSuccess': 'Updated {providerName}-{interfaceName}*{count} cache successfully', 'system.interface.mapping.message.getPublishCompareFailed': 'Failed to get publish compare data', 'system.interface.mapping.modal.publishTitle': 'Publish', 'system.interface.mapping.modal.onlineCache': 'Online cache', 'system.interface.mapping.modal.updateCache': 'Update cache ({count})', 'system.interface.mapping.modal.publishWarning': 'Publishing will affect normal data forecasting, continue?', 'system.interface.mapping.modal.versionRemark': 'Please enter version remark', 'system.interface.mapping.modal.deleteConfirm': 'Are you sure to delete this record?', 'system.interface.mapping.empty.noProvider': 'No mapping provider', 'system.interface.mapping.actions.actions': 'Actions', 'system.interface.mapping.actions.delete': 'Delete', 'system.interface.mapping.actions.publish': 'Publish', 'system.interface.mapping.actions.rollback': 'Rollback', 'common.yes': 'Yes', 'common.no': 'No', // System - Interface Config Page 'system.interface.config.message.addParamFailed': 'Failed to add parameter, please try again', 'system.interface.config.message.addRequestParamFailed': 'Failed to add request parameter, please try again', 'system.interface.config.message.addResponseParamFailed': 'Failed to add response parameter, please try again', 'system.interface.config.message.typeNotAllow': 'This parameter type cannot add child item', 'system.interface.config.message.saveSuccess': 'Saved successfully', 'system.interface.config.message.saveFailed': 'Save failed, please check data', 'system.interface.config.message.cancelEditFailed': 'Failed to cancel edit', 'system.interface.config.message.editFailed': 'Edit failed, please try again', 'system.interface.config.message.addSuccess': 'Added successfully', 'system.interface.config.message.updateSuccess': 'Updated successfully', 'system.interface.config.message.parseSuccess': 'Parsed successfully', 'system.interface.config.message.importSuccess': 'Imported successfully', 'system.interface.config.message.importFailedNeedFormat': 'Import failed, please import text format first', 'system.interface.config.message.importFailedNeedParse': 'Import failed, please import text format or parse first', 'system.interface.config.modal.warningTitle': 'Warning', 'system.interface.config.modal.publishConfirm': 'Saved successfully. Go publish?', 'system.interface.config.table.requestBody': 'Request body', 'system.interface.config.table.responseBody': 'Response body', 'system.interface.config.actions.add': 'Add', 'system.interface.config.actions.parse': 'Parse', 'system.interface.config.actions.import': 'Import', 'system.interface.config.actions.cancel': 'Cancel', 'system.interface.config.placeholder.paramName': 'Enter parameter name', 'system.interface.config.placeholder.cnName': 'Enter Chinese name', 'system.interface.config.placeholder.type': 'Select type', 'system.interface.config.placeholder.description': 'Enter description', 'system.interface.config.drawer.title': 'Parameter parsing', 'system.interface.config.drawer.placeholder.import': 'Please import', 'system.interface.config.drawer.placeholder.parse': 'Please parse', // System - User Management 'system.user.search.placeholder.orgName': 'Enter organization name', 'system.user.search.placeholder.accountOrName': 'Enter account or name', 'system.user.actions.refresh': 'Refresh list', 'system.user.actions.add': 'Add', 'system.user.actions.edit': 'Edit', 'system.user.actions.delete': 'Delete', 'system.user.actions.more': 'More', 'system.user.actions.grantRole': 'Grant role', 'system.user.actions.grantResource': 'Grant resource', 'system.user.actions.resetPassword': 'Reset password', 'system.user.status.enabled': 'Enabled', 'system.user.status.disabled': 'Disabled', 'system.user.table.avatar': 'Avatar', 'system.user.table.account': 'Account', 'system.user.table.realName': 'Name', 'system.user.table.phone': 'Phone', 'system.user.table.email': 'Email', 'system.user.table.orgName': 'Organization', 'system.user.table.positionName': 'Position', 'system.user.table.roles': 'Roles', 'system.user.table.status': 'Status', 'system.user.table.createTime': 'Create time', 'system.user.table.actions': 'Action', 'system.user.message.selectUsersToDelete': 'Please select users to delete', 'system.user.message.selectUsersToGrant': 'Please select users to grant', 'system.user.message.batchGrantRolePending': 'Batch grant role feature pending', 'system.user.message.batchGrantResourcePending': 'Batch grant resource feature pending', 'system.user.message.exportPending': 'Export feature pending', 'system.user.message.importPending': 'Import feature pending', 'system.user.message.resetPasswordSuccess': 'Password reset successfully', 'system.user.message.resetPasswordFailed': 'Password reset failed', 'system.user.message.selectUsersToResetPassword': 'Please select users to reset password', 'system.user.message.deleteSuccess': 'Delete successful', 'system.user.message.updateSuccess': 'Update successful', 'system.user.message.createSuccess': 'Create successful', 'system.user.message.assignRolesSuccess': 'Roles assigned successfully', 'system.user.modal.deleteConfirmTitle': 'Delete confirmation', 'system.user.modal.deleteConfirmContent': 'Are you sure to delete {count} selected users? This action cannot be undone!', 'system.user.modal.okDelete': 'Confirm delete', 'system.user.modal.cancel': 'Cancel', 'system.user.modal.resetPasswordTitle': 'Reset password confirmation', 'system.user.modal.resetPasswordContentSingle': 'Are you sure to reset password for user "{account}"?', 'system.user.modal.resetPasswordContentBatch': 'Are you sure to reset password for {count} selected users?', // System - Role Management 'system.role.search.placeholder.orgName': 'Enter organization name', 'system.role.search.placeholder.roleNameOrCode': 'Enter role name or code', 'system.role.actions.refresh': 'Refresh list', 'system.role.actions.add': 'Add', 'system.role.actions.edit': 'Edit', 'system.role.actions.delete': 'Delete', 'system.role.actions.save': 'Save', 'system.role.emptySelect': 'Select a role on the left, or click Add', 'system.role.emptyDesc': 'Edit basic info and assign permissions after selecting a role', 'system.role.pageTitle': 'Role management', 'system.role.tab.info': 'Basic info', 'system.role.loading': 'Loading roles...', 'system.role.permission.save': 'Save permissions', 'system.role.status.enabled': 'Enabled', 'system.role.status.disabled': 'Disabled', 'system.role.category.business': 'Business role', 'system.role.category.system': 'System role', 'system.role.table.name': 'Role name', 'system.role.table.code': 'Role code', 'system.role.table.boundWarehouse': 'Bound Warehouse', 'system.role.table.category': 'Category', 'system.role.table.status': 'Status', 'system.role.table.sortCode': 'Sort', 'system.role.table.remark': 'Remark', 'system.role.table.createTime': 'Create time', 'system.role.table.actions': 'Action', 'system.role.message.selectRolesToDelete': 'Please select roles to delete', 'system.role.modal.deleteConfirmTitle': 'Delete confirmation', 'system.role.modal.deleteConfirmContent': 'Are you sure to delete {count} selected roles? This action cannot be undone!', 'system.role.modal.okDelete': 'Confirm delete', 'system.role.modal.cancel': 'Cancel', // System - Menu Management 'system.menu.search.placeholder.menuNameOrCode': 'Enter menu name or code', 'system.menu.actions.add': 'Add', 'system.menu.actions.batchImport': 'Batch import', 'system.menu.actions.delete': 'Delete', 'system.menu.actions.edit': 'Edit', 'system.menu.actions.more': 'More', 'system.menu.actions.manageButton': 'Manage button', 'system.menu.actions.syncLevel3Buttons': 'Sync level-3 buttons', 'system.menu.actions.syncSubMenusAndButtons': 'Sync sub-menus & buttons', 'system.menu.status.enabled': 'Enabled', 'system.menu.status.disabled': 'Disabled', 'system.menu.table.title': 'Menu name', 'system.menu.table.code': 'Menu code', 'system.menu.table.menuType': 'Menu type', 'system.menu.table.path': 'Route path', 'system.menu.table.component': 'Component path', 'system.menu.table.icon': 'Icon', 'system.menu.table.sortCode': 'Sort', 'system.menu.table.status': 'Status', 'system.menu.table.createTime': 'Create time', 'system.menu.table.actions': 'Action', 'system.menu.message.selectMenusToDelete': 'Please select menus to delete', 'system.menu.message.selectModuleFirst': 'Please select a module first', 'system.menu.modal.deleteConfirmTitle': 'Delete confirmation', 'system.menu.modal.deleteConfirmContent': 'Are you sure to delete {count} selected menus? This action cannot be undone!', 'system.menu.modal.okDelete': 'Confirm delete', 'system.menu.modal.cancel': 'Cancel', 'system.menu.modal.batchImportTitle': 'Batch import menus', 'system.menu.modal.batchImportContent': 'Are you sure to import all menus? Existing menus will be skipped.', 'system.menu.modal.okImport': 'Confirm import', 'system.menu.modal.syncLevel3Title': 'Sync level-3 buttons', 'system.menu.modal.syncLevel3Content': 'Sync level-3 buttons from the frontend catalog and permission tree for menu "{name}". Existing buttons will be skipped.', 'system.menu.modal.syncModuleTitle': 'Sync sub-menus & buttons', 'system.menu.modal.syncModuleContent': 'Sync level-2 page menus from route config for module "{name}", then sync level-3 buttons for each page. Existing menus/buttons will be skipped.', 'system.menu.modal.syncLevel3Ok': 'Sync now', 'system.menu.message.syncLevel3Success': 'Synced: {created} created, {skipped} skipped', 'system.menu.message.syncLevel3Skipped': 'Nothing to sync, {skipped} existing button(s) skipped', 'system.menu.message.syncLevel3Failed': 'Failed to sync level-3 buttons', 'system.menu.message.syncModuleSuccess': 'Synced: {level2Created} level-2 menu(s) created, {level2Skipped} skipped; {level3Created} level-3 button(s) created, {level3Skipped} skipped', 'system.menu.message.syncModuleSkipped': 'Nothing to sync, skipped {level2Skipped} level-2 menu(s) and {level3Skipped} level-3 button(s)', 'system.menu.message.syncModulePartialFailed': 'Some pages failed to sync level-3 buttons: {details}', // System - Organization Management 'system.organization.actions.add': 'Add Organization', 'system.organization.actions.addChild': 'Add Child Organization', 'system.organization.actions.edit': 'Edit', 'system.organization.actions.delete': 'Delete', 'system.organization.modal.add': 'Add Organization', 'system.organization.modal.edit': 'Edit Organization', 'system.organization.modal.deleteConfirm': 'Are you sure to delete?', 'system.organization.form.parentOrg': 'Parent Organization', 'system.organization.form.parentOrgPlaceholder': 'Select parent organization (leave empty for top level)', 'system.organization.form.name': 'Organization Name', 'system.organization.form.namePlaceholder': 'Enter organization name', 'system.organization.form.code': 'Organization Code', 'system.organization.form.codePlaceholder': 'Auto-generated after save', 'system.organization.form.type': 'Organization Type', 'system.organization.form.typePlaceholder': 'Select organization type', 'system.organization.form.type.company': 'Company', 'system.organization.form.type.department': 'Department', 'system.organization.form.type.group': 'Group', 'system.organization.form.type.position': 'Position', 'system.organization.form.leader': 'Leader', 'system.organization.form.leaderPlaceholder': 'Enter leader ID (optional)', 'system.organization.form.order': 'Order', 'system.organization.form.description': 'Description', 'system.organization.form.descriptionPlaceholder': 'Enter description', 'system.organization.form.isEnabled': 'Enabled', 'system.organization.table.name': 'Organization Name', 'system.organization.table.code': 'Organization Code', 'system.organization.table.type': 'Type', 'system.organization.table.order': 'Order', 'system.organization.table.status': 'Status', 'system.organization.table.actions': 'Actions', 'system.organization.status.enabled': 'Enabled', 'system.organization.status.disabled': 'Disabled', 'system.organization.type.unknown': 'Unknown', 'system.organization.rules.name.required': 'Please enter organization name', 'system.organization.rules.code.required': 'Please enter organization code', 'system.organization.rules.type.required': 'Please select organization type', // System - User Management (Additional) 'system.user.actions.batchDelete': 'Batch Delete', 'system.user.actions.assignRoles': 'Assign Roles', 'system.user.modal.add': 'Add User', 'system.user.modal.edit': 'Edit User', 'system.user.modal.assignRoles': 'Assign Roles', 'system.user.drawer.eyebrow': 'Organization User', 'system.user.drawer.desc': 'Manage account and employee profile. Phone, email and employee no. stay on the user record.', 'system.user.drawer.nameFallback': 'Unnamed user', 'system.user.drawer.accountFallback': 'Account pending', 'system.user.drawer.section.account': 'Account', 'system.user.drawer.section.accountHint': 'Login account, organization and roles', 'system.user.drawer.section.contact': 'Contact & employee no.', 'system.user.drawer.section.contactHint': 'Phone, employee number and WeChat profile', 'system.user.drawer.section.employeeHint': 'Hire info, job title and emergency contacts', 'system.user.form.name': 'User Name', 'system.user.form.namePlaceholder': 'Enter user name', 'system.user.form.account': 'Account', 'system.user.form.accountPlaceholder': 'Enter account', 'system.user.form.password': 'Password', 'system.user.form.passwordPlaceholder': 'Enter password', 'system.user.form.email': 'Email', 'system.user.form.emailPlaceholder': 'Enter email', 'system.user.form.organization': 'Organization', 'system.user.form.organizationPlaceholder': 'Select organization', 'system.user.form.avatar': 'Avatar', 'system.user.form.avatarPlaceholder': 'Enter avatar URL', 'system.user.form.roles': 'Roles', 'system.user.form.rolesPlaceholder': 'Select roles', 'system.user.form.advisorInviteLink': 'New customer invite link', 'system.user.form.advisorInviteHint': 'Customers who register via this link are auto-bound to this account as their advisor', 'system.user.actions.copyInviteLink': 'Copy link', 'system.user.message.copyInviteSuccess': 'Invite link copied', 'system.user.message.copyInviteFailed': 'Copy failed; please select the link manually', 'system.user.form.phone': 'Phone', 'system.user.form.phonePlaceholder': 'Enter phone number', 'system.user.form.employeeNo': 'Employee No.', 'system.user.form.employeeNoPlaceholder': 'Auto-generated', 'system.user.form.wechatId': 'WeChat ID', 'system.user.form.wechatIdPlaceholder': 'Enter WeChat ID', 'system.user.form.wecomKfUrl': 'WeCom support link', 'system.user.form.wecomKfUrlPlaceholder': 'e.g. https://work.weixin.qq.com/kfid/...', 'system.user.form.wechatQrCode': 'WeChat QR Code', 'system.user.form.wechatQrUpload': 'Upload QR code', 'system.user.table.employeeNo': 'Employee No.', 'system.user.message.wechatQrTooLarge': 'WeChat QR image must be under 2MB', 'system.user.search.organizationPlaceholder': 'Filter by organization', 'system.user.search.accountOrNamePlaceholder': 'Search username or account', 'system.user.rules.name.required': 'Please enter user name', 'system.user.rules.account.required': 'Please enter account', 'system.user.rules.password.required': 'Please enter password', 'system.user.rules.password.minLength': 'Password must be at least 6 characters', 'system.user.rules.email.format': 'Please enter a valid email format', 'system.employee.section': 'Employee Profile', 'system.employee.form.realName': 'Full Name', 'system.employee.form.realNamePlaceholder': 'Enter legal name', 'system.employee.form.gender': 'Gender', 'system.employee.form.birthday': 'Birthday', 'system.employee.form.idCardNo': 'ID Card No.', 'system.employee.form.idCardNoPlaceholder': 'Enter ID card number', 'system.employee.form.hireDate': 'Hire Date', 'system.employee.form.probationEndDate': 'Probation End', 'system.employee.form.regularizationDate': 'Regularization Date', 'system.employee.form.resignationDate': 'Resignation Date', 'system.employee.form.employmentStatus': 'Employment Status', 'system.employee.form.department': 'Department', 'system.employee.form.departmentPlaceholder': 'Enter department', 'system.employee.form.position': 'Position', 'system.employee.form.positionPlaceholder': 'Select position', 'system.employee.form.jobLevel': 'Job Level', 'system.employee.form.jobLevelPlaceholder': 'Select job level', 'system.employee.form.employmentType': 'Employment Type', 'system.employee.form.workLocation': 'Work Location', 'system.employee.form.workLocationPlaceholder': 'Enter work location', 'system.employee.form.contractType': 'Contract Type', 'system.employee.form.contractTypePlaceholder': 'e.g. labor contract', 'system.employee.form.contractStartDate': 'Contract Start', 'system.employee.form.contractEndDate': 'Contract End', 'system.employee.form.emergencyContact': 'Emergency Contact', 'system.employee.form.emergencyContactPlaceholder': 'Enter emergency contact', 'system.employee.form.emergencyPhone': 'Emergency Phone', 'system.employee.form.emergencyPhonePlaceholder': 'Enter emergency phone', 'system.employee.form.education': 'Education', 'system.employee.form.educationPlaceholder': 'Enter education', 'system.employee.form.address': 'Address', 'system.employee.form.addressPlaceholder': 'Enter address', 'system.employee.form.remark': 'Remark', 'system.employee.form.remarkPlaceholder': 'Enter remark', 'system.employee.form.selectPlaceholder': 'Please select', 'system.employee.form.datePlaceholder': 'Select date', 'system.employee.gender.unknown': 'Unknown', 'system.employee.gender.male': 'Male', 'system.employee.gender.female': 'Female', 'system.employee.status.probation': 'Probation', 'system.employee.status.regular': 'Regular', 'system.employee.status.suspended': 'Suspended', 'system.employee.status.resigned': 'Resigned', 'system.employee.type.fullTime': 'Full-time', 'system.employee.type.partTime': 'Part-time', 'system.employee.type.intern': 'Intern', 'system.employee.type.outsourced': 'Outsourced', 'system.employee.message.saveFailed': 'Failed to save employee profile', // System - Role Management (Additional) 'system.role.modal.add': 'Add Role', 'system.role.modal.edit': 'Edit Role', 'system.role.modal.assignPermissions': 'Assign Menus', 'system.role.form.name': 'Role Name', 'system.role.form.namePlaceholder': 'Enter role name', 'system.role.form.code': 'Role Code', 'system.role.form.codePlaceholder': 'Enter role code', 'system.role.form.boundWarehouse': 'Bound Warehouse', 'system.role.form.boundWarehousePlaceholder': 'Please select warehouse address', 'system.role.rules.name.required': 'Please enter role name', 'system.role.rules.code.required': 'Please enter role code', // System - Menu Management (Additional) 'system.menu.actions.addChild': 'Add Child Menu', 'system.menu.modal.add': 'Add Menu', 'system.menu.modal.edit': 'Edit Menu', 'system.menu.type.menu': 'Menu', 'system.menu.type.button': 'Button', 'system.menu.status.show': 'Show', 'system.menu.status.hide': 'Hide', 'system.menu.iconPicker.choose': 'Choose icon', 'system.menu.iconPicker.title': 'Choose menu icon', 'system.menu.iconPicker.placeholder': 'Enter or pick an icon, e.g. IconBook', 'system.menu.iconPicker.searchPlaceholder': 'Search icon name, e.g. Book, User, File', 'system.menu.iconPicker.current': 'Selected', 'system.menu.iconPicker.common': 'Common', 'system.menu.iconPicker.all': 'All icons', 'system.menu.iconPicker.searchResult': 'Search results', 'system.menu.iconPicker.empty': 'No matching icons', // System - Role Management (Permission Assignment) 'system.role.permission.expandAll': 'Expand All', 'system.role.permission.adminAllHint': 'Admin role has all menu and button permissions by default; no assignment needed', 'system.role.permission.collapseAll': 'Collapse All', 'system.role.permission.checkAll': 'Check All', 'system.role.permission.uncheckAll': 'Uncheck All', 'system.role.permission.loading': 'Loading permission data...', 'system.role.permission.assignSuccess': 'Permission assigned successfully', 'system.role.permission.refreshHint': 'Permissions saved. Please sign in again for them to take effect.', 'system.role.permission.search': 'Search permission name or code', 'system.role.permission.selected': 'Selected', 'system.role.permission.total': 'Total', 'system.role.permission.selectedCount': '{selected} / {total} selected', 'system.role.permission.noMatch': 'No matching permissions', 'system.role.permission.col.level1': 'Level 1 menu', 'system.role.permission.col.level2': 'Level 2 menu', 'system.role.permission.col.level3': 'Level 3 buttons', 'system.role.tag.creating': 'Creating', 'system.role.tag.boundWarehouse': 'Warehouse bound', 'system.role.message.deleteSuccess': 'Delete successful', 'system.role.message.cannotDeleteSystemRole': 'Built-in system roles (e.g. Customer) cannot be deleted', 'system.role.message.updateSuccess': 'Update successful', 'system.role.message.createSuccess': 'Create successful', // System - Organization Management 'system.org.search.placeholder.orgName': 'Enter organization name', 'system.org.search.placeholder.orgNameOrCode': 'Enter organization name or code', 'system.org.actions.refresh': 'Refresh list', 'system.org.actions.add': 'Add', 'system.org.actions.addOrg': 'Add organization', 'system.org.actions.edit': 'Edit', 'system.org.actions.delete': 'Delete', 'system.org.actions.copy': 'Copy', 'system.org.actions.select': 'Select', 'system.org.actions.cancel': 'Cancel', 'system.org.actions.confirm': 'Confirm', 'system.org.status.enabled': 'Enabled', 'system.org.status.disabled': 'Disabled', 'system.org.category.company': 'Company', 'system.org.category.dept': 'Department', 'system.org.common.yes': 'Yes', 'system.org.common.no': 'No', 'system.org.table.orgName': 'Organization name', 'system.org.table.orgFullName': 'Organization full name', 'system.org.table.category': 'Category', 'system.org.table.code': 'Code', 'system.org.table.status': 'Status', 'system.org.table.sortCode': 'Sort', 'system.org.table.createTime': 'Create time', 'system.org.table.actions': 'Action', 'system.org.form.parentOrg': 'Parent organization', 'system.org.form.orgName': 'Organization name', 'system.org.form.orgCode': 'Organization code', 'system.org.form.category': 'Organization category', 'system.org.form.status': 'Status', 'system.org.form.director': 'Director', 'system.org.form.sortCode': 'Sort', 'system.org.form.targetOrg': 'Target organization', 'system.org.form.containsChild': 'Include children', 'system.org.form.containsPosition': 'Include positions', 'system.org.form.placeholder.selectParentOrg': 'Select parent organization', 'system.org.form.placeholder.orgName': 'Enter organization name', 'system.org.form.placeholder.orgCode': 'Auto-generated after save', 'system.org.form.placeholder.selectCategory': 'Select category', 'system.org.form.placeholder.selectStatus': 'Select status', 'system.org.form.placeholder.selectTargetOrg': 'Select target organization', 'system.org.form.rules.orgNameRequired': 'Please enter organization name', 'system.org.form.rules.parentOrgRequired': 'Please select parent organization', 'system.org.form.rules.categoryRequired': 'Please select organization category', 'system.org.form.rules.statusRequired': 'Please select status', 'system.org.form.rules.targetOrgRequired': 'Please select target organization', 'system.org.form.rules.containsChildRequired': 'Please select whether to include children', 'system.org.form.rules.containsPositionRequired': 'Please select whether to include positions', 'system.org.modal.addOrgTitle': 'Add organization', 'system.org.modal.editOrgTitle': 'Edit organization', 'system.org.modal.copyOrgTitle': 'Copy organization', 'system.org.modal.deleteConfirmTitle': 'Delete confirmation', 'system.org.modal.deleteConfirmContentSingle': 'Are you sure to delete organization 【{name}】? This action cannot be undone!', 'system.org.modal.deleteConfirmContentBatch': 'Are you sure to delete {count} selected organizations? This action cannot be undone!', 'system.org.modal.okDelete': 'Confirm delete', 'system.org.modal.cancel': 'Cancel', 'system.org.message.selectOrgsToDelete': 'Please select organizations to delete', 'system.org.message.deleteSuccess': 'Delete successfully', 'system.org.message.deleteFailed': 'Delete failed', 'system.org.message.copySuccess': 'Copy successfully', 'system.org.message.copyFailed': 'Copy failed', 'system.org.message.editSuccess': 'Edit successfully', 'system.org.message.editFailed': 'Edit failed', 'system.org.message.addSuccess': 'Add successfully', 'system.org.message.addFailed': 'Add failed', 'system.org.message.getDetailFailed': 'Failed to get organization details', 'system.org.loading': 'Loading organizations...', 'system.org.level.root': 'Level 1', 'system.org.level.n': 'Level {n}', 'system.org.level.children': '{count} sub-orgs', 'system.org.users.emptySelect': 'Select an organization', 'system.org.users.emptyDesc': 'Select an organization on the left to view its users', // System - Position Management 'system.position.search.placeholder.orgName': 'Enter organization name', 'system.position.search.placeholder.positionNameOrCode': 'Enter position name or code', 'system.position.actions.refresh': 'Refresh list', 'system.position.actions.add': 'Add', 'system.position.actions.edit': 'Edit', 'system.position.actions.delete': 'Delete', 'system.position.table.name': 'Position name', 'system.position.table.code': 'Position code', 'system.position.table.sortCode': 'Sort', 'system.position.table.remark': 'Remark', 'system.position.table.createTime': 'Create time', 'system.position.table.actions': 'Action', 'system.position.message.selectPositionsToDelete': 'Please select positions to delete', 'system.position.modal.deleteConfirmTitle': 'Delete confirmation', 'system.position.modal.deleteConfirmContent': 'Are you sure to delete {count} selected positions? This action cannot be undone!', 'system.position.modal.okDelete': 'Confirm delete', 'system.position.modal.cancel': 'Cancel', // System - Module Management 'system.module.search.placeholder.moduleNameOrCode': 'Enter module name or code', 'system.module.actions.add': 'Add', 'system.module.actions.edit': 'Edit', 'system.module.actions.delete': 'Delete', 'system.module.status.enabled': 'Enabled', 'system.module.status.disabled': 'Disabled', 'system.module.table.title': 'Module name', 'system.module.table.name': 'Module alias', 'system.module.table.code': 'Module code', 'system.module.table.icon': 'Icon', 'system.module.table.status': 'Status', 'system.module.table.sortCode': 'Sort', 'system.module.table.description': 'Description', 'system.module.table.createTime': 'Create time', 'system.module.table.actions': 'Action', 'system.module.message.selectModulesToDelete': 'Please select modules to delete', 'system.module.modal.deleteConfirmTitle': 'Delete confirmation', 'system.module.modal.deleteConfirmContent': 'Are you sure to delete {count} selected modules? This action cannot be undone!', 'system.module.modal.okDelete': 'Confirm delete', 'system.module.modal.cancel': 'Cancel', // System - Dictionary Management 'system.dict.tabs.system': 'System', 'system.dict.tabs.business': 'Business', 'system.dict.search.placeholder.dictNameOrValue': 'Enter dictionary name or value', 'system.dict.search.placeholder': 'Enter dictionary code or name', 'system.dict.filter.dictType': 'Dictionary Type', 'system.dict.left.category': 'Dictionary Types', 'system.dict.left.searchPlaceholder': 'Search name or type code', 'system.dict.left.refresh': 'Refresh types', 'system.dict.left.addType': 'Add type', 'system.dict.left.editType': 'Edit type', 'system.dict.left.deleteType': 'Delete type', 'system.dict.left.loading': 'Loading dictionary types...', 'system.dict.left.emptySelect': 'Select a dictionary type from the left', 'system.dict.left.emptySelectDesc': 'Then view and manage entries under that type', 'system.dict.left.emptyTypeList': 'No dictionary types yet. Click + to add one', 'system.dict.panel.itemCount': '{count} entries', 'system.dict.panel.editType': 'Edit type', 'system.dict.form.typeRemark': 'Display name', 'system.dict.form.typeSort': 'Type sort', 'system.dict.placeholder.typeRemark': 'e.g. Order status', 'system.dict.typeModal.addTitle': 'Add Dictionary Type', 'system.dict.typeModal.editTitle': 'Edit Dictionary Type', 'system.dict.typeModal.addSuccess': 'Dictionary type added', 'system.dict.typeModal.editSuccess': 'Dictionary type updated', 'system.dict.typeModal.deleteSuccess': 'Dictionary type metadata deleted', 'system.dict.typeModal.deleteConfirm': 'Delete metadata for type [{dictType}]? Dictionary items will not be removed.', 'system.dict.message.loadTypeFailed': 'Failed to load dictionary types', 'system.dict.actions.add': 'Add', 'system.dict.actions.edit': 'Edit', 'system.dict.actions.delete': 'Delete', 'system.dict.actions.batchImport': 'Batch import', 'system.dict.batchImport.confirmTitle': 'Batch import dictionaries', 'system.dict.batchImport.confirmContent': 'Predefined dictionary rows from the OMS design spec will be created; existing rows with the same dictType and dictCode are skipped. Import order: dict types in alphabetical order; each type is fully written before the next. Rules: many rows may share one dictType; dictCode must be unique within that dictType (the same code may appear under another dictType, e.g. 1/2). Numeric dictCode starts at 1; 0 means None and is not seeded. Use yes_no for yes/no; use enable_status for disabled/enabled. Continue?', 'system.dict.batchImport.ok': 'Import', 'system.dict.batchImport.resultDetail': 'Done: created {created}, skipped {skipped}, failed {failed}.', 'system.dict.batchImport.failed': 'Batch import failed: {error}', 'system.dict.status.enabled': 'Enabled', 'system.dict.status.disabled': 'Disabled', 'system.dict.table.dictLabel': 'Dictionary name', 'system.dict.table.dictValue': 'Dictionary value', 'system.dict.table.status': 'Status', 'system.dict.table.sortCode': 'Sort', 'system.dict.table.createTime': 'Create time', 'system.dict.table.actions': 'Action', 'system.dict.table.dictType': 'Dictionary Type', 'system.dict.table.dictSort': 'Sort', 'system.dict.table.dictCode': 'Dictionary Code', 'system.dict.table.dictName': 'Dictionary Name', 'system.dict.form.dictType': 'Dictionary Type', 'system.dict.form.dictSort': 'Sort', 'system.dict.form.dictCode': 'Dictionary Code', 'system.dict.form.dictName': 'Dictionary Name', 'system.dict.placeholder.input': 'Please enter', 'system.dict.modal.addTitle': 'Add Dictionary', 'system.dict.modal.editTitle': 'Edit Dictionary', 'system.dict.modal.deleteConfirmContentSingle': 'Are you sure to delete dictionary [{dictName}]?', 'system.dict.rule.dictTypeRequired': 'Please enter dictionary type', 'system.dict.rule.dictSortRequired': 'Please enter dictionary sort', 'system.dict.rule.dictCodeRequired': 'Please enter dictionary code', 'system.dict.rule.dictNameRequired': 'Please enter dictionary name', 'system.dict.message.addSuccess': 'Added successfully', 'system.dict.message.editSuccess': 'Updated successfully', 'system.dict.message.deleteSuccess': 'Deleted successfully', 'system.dict.message.selectDictsToDelete': 'Please select dictionaries to delete', 'system.dict.message.loadDataFailed': 'Failed to load dictionary data: {error}', 'system.dict.message.unknownError': 'Unknown error', 'system.dict.modal.deleteConfirmTitle': 'Delete confirmation', 'system.dict.modal.deleteConfirmContent': 'Are you sure to delete {count} selected dictionaries? This action cannot be undone!', 'system.dict.modal.okDelete': 'Confirm delete', 'system.dict.modal.cancel': 'Cancel', // System - Other Config 'system.humanCare.pageTitle': 'Human Care', 'system.humanCare.pageDesc': 'Tune gentle login and workplace guidance. Defaults reduce pressure — never rush. Stored on this device for now.', 'system.humanCare.storageTip': 'Settings are local to this browser for now; they persist on refresh but do not sync across devices.', 'system.humanCare.save': 'Save', 'system.humanCare.reset': 'Reset defaults', 'system.humanCare.saveSuccess': 'Saved', 'system.humanCare.resetSuccess': 'Restored defaults', 'system.humanCare.resetConfirmTitle': 'Reset defaults?', 'system.humanCare.resetConfirmContent': 'This clears local human-care custom settings.', 'system.humanCare.section.switch': 'Switches', 'system.humanCare.section.threshold': 'Thresholds', 'system.humanCare.section.peak': 'Peak season', 'system.humanCare.careEnabled': 'Enable human care', 'system.humanCare.careEnabledHint': 'Master switch for banner, toast, and workplace panel.', 'system.humanCare.loginBannerEnabled': 'Login banner', 'system.humanCare.loginBannerEnabledHint': 'Care card on the admin login page.', 'system.humanCare.loginToastEnabled': 'Post-login toast', 'system.humanCare.loginToastEnabledHint': 'Liquid welcome card after entering the system.', 'system.humanCare.workplacePanelEnabled': 'Workplace “Today’s care”', 'system.humanCare.workplacePanelEnabledHint': 'Gentle guide on the workplace right rail.', 'system.humanCare.clockOutEnabled': 'Clock out', 'system.humanCare.clockOutEnabledHint': 'Local ritual only — not attendance.', 'system.humanCare.birthdayWallEnabled': 'Team birthday wall', 'system.humanCare.birthdayWallEnabledHint': 'Off by default; reserved, list not shown yet.', 'system.humanCare.longAbsenceDays': 'Long absence (days)', 'system.humanCare.lateNightThreshold': 'Late-night day threshold', 'system.humanCare.overdueCareThreshold': 'Pressure copy threshold', 'system.humanCare.peak.auto': 'Auto (year-end / Spring Festival window)', 'system.humanCare.peak.on': 'Force on', 'system.humanCare.peak.off': 'Off', 'system.humanCare.peak.start': 'Start date', 'system.humanCare.peak.end': 'End date', 'system.humanCare.peak.hint': 'Optional range when forced on; empty range means always show the tip.', 'system.otherConfig.pageTitle': 'Other Config', 'system.otherConfig.search.placeholder': 'Search by config code or name', 'system.otherConfig.actions.add': 'Add', 'system.otherConfig.actions.edit': 'Edit', 'system.otherConfig.actions.delete': 'Delete', 'system.otherConfig.actions.refresh': 'Refresh', 'system.otherConfig.status.enabled': 'Enabled', 'system.otherConfig.status.disabled': 'Disabled', 'system.otherConfig.table.configCode': 'Config Code', 'system.otherConfig.table.configName': 'Config Name', 'system.otherConfig.table.enabled': 'Status', 'system.otherConfig.table.baseUrl': 'Base URL', 'system.otherConfig.table.appKey': 'AppKey', 'system.otherConfig.table.appSecret': 'AppSecret', 'system.otherConfig.table.timeoutSeconds': 'Timeout (s)', 'system.otherConfig.table.updateTime': 'Updated At', 'system.otherConfig.form.configCode': 'Config Code', 'system.otherConfig.form.configName': 'Config Name', 'system.otherConfig.form.enabled': 'Enabled', 'system.otherConfig.form.baseUrl': 'Base URL', 'system.otherConfig.form.appKey': 'AppKey', 'system.otherConfig.form.appSecret': 'AppSecret', 'system.otherConfig.form.timeoutSeconds': 'Timeout (seconds)', 'system.otherConfig.form.remark': 'Remark', 'system.otherConfig.placeholder.input': 'Please enter', 'system.otherConfig.placeholder.configCode': 'e.g. track_service', 'system.otherConfig.placeholder.baseUrl': 'e.g. https://api.ideship.com/track', 'system.otherConfig.placeholder.appSecretEdit': 'Leave blank to keep unchanged', 'system.otherConfig.modal.addTitle': 'Add Config', 'system.otherConfig.modal.editTitle': 'Edit Config', 'system.otherConfig.modal.deleteConfirmContentSingle': 'Delete config "{configName}"?', 'system.otherConfig.rule.configCodeRequired': 'Please enter config code', 'system.otherConfig.rule.configNameRequired': 'Please enter config name', 'system.otherConfig.rule.baseUrlRequired': 'Please enter base URL', 'system.otherConfig.rule.appKeyRequired': 'Please enter AppKey', 'system.otherConfig.rule.appSecretRequired': 'Please enter AppSecret', 'system.otherConfig.rule.timeoutSecondsRequired': 'Please enter timeout seconds', 'system.otherConfig.message.addSuccess': 'Added successfully', 'system.otherConfig.message.editSuccess': 'Updated successfully', 'system.otherConfig.message.deleteSuccess': 'Deleted successfully', 'system.otherConfig.defaults.trackServiceName': 'Small Bag Track Service', 'system.otherConfig.defaults.wechatMpName': 'WeChat Official Account', 'system.otherConfig.defaults.wechatMpFollowName': 'WeChat Follow Jump URL', 'system.otherConfig.defaults.platformShopName': 'Store Auth - Common', 'system.otherConfig.defaults.platformShopTiktokName': 'Store Auth - TikTok', 'system.otherConfig.defaults.platformShopTemuName': 'Store Auth - Temu', 'system.otherConfig.defaults.platformShopShopeeName': 'Store Auth - Shopee', 'system.otherConfig.defaults.platformShopLazadaName': 'Store Auth - Lazada', 'system.otherConfig.form.preset': 'Preset', 'system.otherConfig.placeholder.preset': 'Select a preset', 'system.otherConfig.rule.remarkRequired': 'Please fill the remark / extra field', 'system.otherConfig.fields.wechat.baseUrl': 'OAuth redirect base', 'system.otherConfig.fields.wechat.appKey': 'AppId', 'system.otherConfig.fields.wechat.appSecret': 'AppSecret', 'system.otherConfig.fields.wechat.remark': 'Token', 'system.otherConfig.hint.wechat': 'BaseUrl = OAuthRedirectBase; Remark = server Token', 'system.otherConfig.fields.wechatFollow.baseUrl': 'Official account jump URL', 'system.otherConfig.hint.wechatFollow': 'Paste a WeChat-openable official-account profile / card / article URL. After registration the app jumps there to follow.', 'system.otherConfig.fields.platformShop.baseUrl': 'Frontend callback base URL', 'system.otherConfig.fields.platformShop.remark': 'StateSecret (optional)', 'system.otherConfig.hint.platformShop': 'Used to build /oauth/platform-store/{platform}; set production frontend domain', 'system.otherConfig.fields.tiktok.baseUrl': 'HostAuth', 'system.otherConfig.fields.tiktok.remark': 'HostApi', 'system.otherConfig.fields.temu.baseUrl': 'HostAuthUrl', 'system.otherConfig.fields.shopee.baseUrl': 'HostAuthUrl', 'system.otherConfig.fields.shopee.appKey': 'PartnerId', 'system.otherConfig.fields.shopee.appSecret': 'PartnerKey', 'system.otherConfig.fields.shopee.remark': 'HostUrl', 'system.otherConfig.fields.lazada.baseUrl': 'AuthorizeUrl', 'system.otherConfig.fields.lazada.remark': 'AccessTokenUrl', // System - Button Management 'system.button.actions.add': 'Add button', 'system.button.actions.batchDelete': 'Batch delete', 'system.button.actions.edit': 'Edit', 'system.button.actions.delete': 'Delete', 'system.button.form.title': 'Button name', 'system.button.form.code': 'Button code', 'system.button.form.parentMenu': 'Parent menu', 'system.button.form.sortCode': 'Sort', 'system.button.form.description': 'Remark', 'system.button.form.placeholder.title': 'Enter button name', 'system.button.form.placeholder.code': 'Enter button code', 'system.button.form.placeholder.parentMenu': 'Select parent menu', 'system.button.form.placeholder.sortCode': 'Enter sort', 'system.button.form.placeholder.description': 'Enter remark', 'system.button.form.rules.titleRequired': 'Please enter button name', 'system.button.form.rules.codeRequired': 'Please enter button code', 'system.button.table.title': 'Button name', 'system.button.table.code': 'Button code', 'system.button.table.parentId': 'Parent menu ID', 'system.button.table.sortCode': 'Sort', 'system.button.table.description': 'Remark', 'system.button.table.createTime': 'Create time', 'system.button.table.actions': 'Action', 'system.button.modal.addTitle': 'Add button', 'system.button.modal.editTitle': 'Edit button', 'system.button.modal.deleteConfirmTitle': 'Confirm delete', 'system.button.modal.deleteConfirmContentSingle': 'Are you sure to delete button "{title}"?', 'system.button.modal.deleteConfirmContentBatch': 'Are you sure to delete {count} selected buttons?', 'system.button.message.selectButtonsToDelete': 'Please select buttons to delete', 'system.button.message.deleteSuccess': 'Delete successfully', 'system.button.message.deleteFailed': 'Delete failed', 'system.button.message.editSuccess': 'Edit successfully', 'system.button.message.editFailed': 'Edit failed', 'system.button.message.addSuccess': 'Add successfully', 'system.button.message.addFailed': 'Add failed', 'system.button.message.getDetailFailed': 'Failed to get button details', 'system.button.message.unsupported': 'Button management is not supported in RBAC yet', // Operation Module - Common 'operation.common.keepScanFocus': 'Keep focus on scan field', 'operation.common.voiceBroadcast': 'Voice broadcast', 'operation.common.feedback.idle': 'Scan a number — result will appear here', 'operation.common.message.customsOrderNotFound': 'Order not found', 'operation.common.message.lookupSuccess': 'Order matched', // Operation Module - Inbound Scan 'operation.inbound.pageTitle': 'Waybill Information', 'operation.inbound.broadcastSettings': 'Broadcast Settings', 'operation.inbound.scan.title': 'Scan inbound', 'operation.inbound.tip': 'Scan to verify product and destCountry, then enter received weight and dimensions before inbound.', 'operation.inbound.preview.title': 'Verify', 'operation.inbound.preview.empty': 'Scan a number to show order info and enter weight / dimensions', 'operation.inbound.form.scanNumber': 'Scan Number:', 'operation.inbound.form.receivedWeight': 'Received Weight', 'operation.inbound.form.dimensions': 'L × W × H', 'operation.inbound.form.salesProduct': 'Sales Product', 'operation.inbound.form.destinationCountry': 'Destination Country', 'operation.inbound.form.remarks': 'Remarks:', 'operation.inbound.form.placeholder.scanOrInput': 'Scan or enter number', 'operation.inbound.form.placeholder.input': 'Please enter', 'operation.inbound.form.placeholder.length': 'Length/CM', 'operation.inbound.form.placeholder.width': 'Width/CM', 'operation.inbound.form.placeholder.height': 'Height/CM', 'operation.inbound.form.placeholder.select': 'Please select', 'operation.inbound.form.placeholder.scanFirst': 'Auto-filled after scanning', 'operation.inbound.form.hint.supportedTypes': 'Supported: Waybill number, Service provider number, Channel transfer number, Platform order number', 'operation.inbound.actions.reset': 'Reset', 'operation.inbound.actions.lookup': 'Lookup', 'operation.inbound.actions.inbound': 'Inbound', 'operation.inbound.recentOrders.title': 'Recent inbound', 'operation.inbound.recentOrders.subtitle': 'Maximum 50 recent orders displayed here', 'operation.inbound.recentOrders.empty': 'No records', 'operation.inbound.table.index': 'Index', 'operation.inbound.table.waybillNumber': 'Waybill Number', 'operation.inbound.table.weight': 'Weight', 'operation.inbound.table.dimensions': 'Dimensions', 'operation.inbound.table.product': 'Product', 'operation.inbound.table.destCountry': 'Destination Country', 'operation.inbound.table.warehouse': 'Warehouse', 'operation.inbound.table.operateTime': 'Operate Time', 'operation.inbound.table.operator': 'Operator', 'operation.inbound.table.orderStatus': 'Status', 'operation.inbound.table.reason': 'Pending reason', 'operation.inbound.message.waybillNumberRequired': 'Please enter or scan waybill number', 'operation.inbound.message.metricsRequired': 'Please enter received weight and dimensions', 'operation.inbound.message.inboundSuccess': 'Inbound successful', 'operation.inbound.message.inboundProcessing': 'Received. Billing / allocation in progress', 'operation.inbound.message.inboundSuccessWithStatus': 'Received. Current status: {status}', 'operation.inbound.message.inboundFailed': 'Inbound failed', 'operation.inbound.message.loadRecentFailed': 'Failed to load recent inbound records', 'operation.inbound.message.recalculateSuccess': 'Payable recalculation submitted', 'operation.inbound.message.recalculateFailed': 'Failed to recalculate payable', 'operation.inbound.message.rerunBillingSuccess': 'Inbound billing rerun completed', 'operation.inbound.message.rerunBillingFailed': 'Failed to rerun inbound billing', 'operation.inbound.actions.recalculatePayable': 'Recalc payable', 'operation.inbound.actions.rerunInboundBilling': 'Rerun billing', // Operation Module - Outbound Scan 'operation.outbound.pageTitle': 'Waybill Information', 'operation.outbound.broadcastSettings': 'Broadcast Settings', 'operation.outbound.scan.title': 'Scan outbound', 'operation.outbound.tip': 'Scan waybill to verify product, destCountry and channel. Weight and dimensions are optional.', 'operation.outbound.preview.title': 'Verify', 'operation.outbound.preview.empty': 'Scan a number to show order info; weight / dimensions are optional', 'operation.outbound.form.scanNumber': 'Scan Number:', 'operation.outbound.form.shipWeight': 'Shipped weight', 'operation.outbound.form.dimensions': 'L × W × H', 'operation.outbound.form.salesProduct': 'Sales product', 'operation.outbound.form.destinationCountry': 'Destination destCountry', 'operation.outbound.form.serviceChannel': 'Service channel', 'operation.outbound.form.placeholder.scanOrInput': 'Scan or enter number', 'operation.outbound.form.placeholder.input': 'Enter', 'operation.outbound.form.placeholder.length': 'L / CM', 'operation.outbound.form.placeholder.width': 'W / CM', 'operation.outbound.form.placeholder.height': 'H / CM', 'operation.outbound.form.placeholder.select': 'Select', 'operation.outbound.form.placeholder.scanFirst': 'Auto-filled after scan', 'operation.outbound.form.hint.supportedTypes': 'Supported: Waybill number only', 'operation.outbound.actions.reset': 'Reset', 'operation.outbound.actions.lookup': 'Lookup', 'operation.outbound.actions.outbound': 'Outbound', 'operation.outbound.recentOrders.title': 'Recent outbound', 'operation.outbound.recentOrders.subtitle': 'Maximum 50 recent orders displayed here', 'operation.outbound.recentOrders.empty': 'No records', 'operation.outbound.table.index': 'Index', 'operation.outbound.table.waybillNumber': 'Waybill Number', 'operation.outbound.table.weight': 'Weight', 'operation.outbound.table.dimensions': 'Dimensions', 'operation.outbound.table.product': 'Product', 'operation.outbound.table.destCountry': 'Destination', 'operation.outbound.table.serviceChannel': 'Service channel', 'operation.outbound.table.warehouse': 'Warehouse', 'operation.outbound.table.operateTime': 'Operate Time', 'operation.outbound.table.operator': 'Operator', 'operation.outbound.message.waybillNumberRequired': 'Please enter or scan waybill number', 'operation.outbound.message.outboundSuccess': 'Outbound successful', 'operation.outbound.message.outboundFailed': 'Outbound failed', 'operation.outbound.message.loadRecentFailed': 'Failed to load recent outbound records', // Operation Module - Print Label 'operation.printLabel.pageTitle': 'Print Label', 'operation.printLabel.broadcastSettings': 'Broadcast Settings', 'operation.printLabel.tip': 'Scan to print automatically. Ensure the top-bar printer is connected.', 'operation.printLabel.scan.title': 'Scan & print', 'operation.fulfillPack.scan.title': 'Scan lookup', 'operation.fulfillPack.scan.placeholder': 'Scan domestic tracking / waybill / SKU', 'operation.fulfillPack.scan.hint': 'Defaults to domestic parcel tracking; switch type if needed.', 'operation.fulfillPack.preview.title': 'Bind verification', 'operation.fulfillPack.preview.empty': 'Scan to show linked order and bind lines', 'operation.fulfillPack.actions.lookup': 'Lookup', 'operation.fulfillPack.actions.reset': 'Reset', 'operation.fulfillPack.domesticSummary': 'Domestic tracking', 'operation.fulfillPack.message.numberRequired': 'Enter or scan a number', 'operation.fulfillPack.message.lookupSuccess': 'Lookup succeeded', 'operation.fulfillPack.message.lookupFailed': 'Lookup failed', 'operation.fulfillPack.stats.summary': 'Pending {orders} orders · {qty} pcs on this page', 'operation.fulfillPack.stats.filtered': 'Filtered {orders} orders · {qty} pcs', 'operation.fulfillPack.filter.warehouse': 'Warehouse', 'operation.fulfillPack.filter.labelTemplate': 'Label template', 'operation.fulfillPack.queue.title': 'Pick queue', 'operation.fulfillPack.queue.desc': 'Bound fulfill orders not yet packed (in domestic transit or pending pick), sorted by bin. Confirm parcel arrival before marking packed; click a row or scan to locate.', 'operation.fulfillPack.actions.batchPrint': 'Batch print labels', 'operation.fulfillPack.actions.printOne': 'Print label', 'operation.fulfillPack.actions.confirmOutbound': 'Confirm pack', 'operation.fulfillPack.actions.refresh': 'Refresh', 'operation.fulfillPack.actions.clearFilter': 'Clear filter', 'operation.fulfillPack.domesticMore': '+{count} parcels', 'operation.fulfillPack.confirm.title': 'Confirm packed', 'operation.fulfillPack.confirm.content': 'Waybill {waybill}: marking packed will deduct {qty} bound item(s). Continue?', 'operation.fulfillPack.message.loadFailed': 'Failed to load pick queue', 'operation.fulfillPack.message.lookupFirst': 'Scan or select an order first', 'operation.fulfillPack.message.notBound': 'Order has no bound lines; cannot mark packed', 'operation.fulfillPack.message.domesticInTransit': 'Parcel is still in domestic transit; confirm arrival in Parcel Arrival before marking packed', 'operation.fulfillPack.message.confirmSuccess': 'Marked as packed', 'operation.fulfillPack.message.confirmFailed': 'Failed to mark packed', 'operation.fulfillPack.message.printNoWaybill': 'No waybill to print', 'operation.fulfillPack.message.batchPrintEmpty': 'Select queue rows or scan an order first', 'operation.fulfillPack.message.batchPrintSuccess': 'Submitted {count} label print(s)', 'operation.fulfillPack.message.batchPrintPartial': 'Print done: {success} ok, {fail} failed', 'operation.fulfillPack.message.skuMultiMatch': 'SKU matched {count} orders; queue filtered and selected', 'operation.fulfillPack.message.notInQueue': 'Matched order(s) not in the current pick queue (not arrived or not bound)', 'operation.fulfillPack.message.customsOrderNotInQueue': 'Order not in pick queue; check bind and arrival status', 'operation.fulfillPack.queue.emptyFiltered': 'No pending orders match the current filter', 'order.myOrders.table.sku': 'SKU', 'operation.printLabel.form.scanNumber': 'Scan number', 'operation.printLabel.form.placeholder.scanOrInput': 'Waybill / Client / Track / Parcel / SKU', 'operation.printLabel.form.placeholder.numberType': 'Number type', 'operation.printLabel.form.placeholder.labelTemplate': 'Select label template', 'operation.printLabel.form.hint.supportedTypes': 'Supports: Waybill, Client order, Tracking, Other, Parcel tracking, SKU', 'operation.printLabel.actions.reset': 'Reset', 'operation.printLabel.actions.lookup': 'Lookup', 'operation.printLabel.actions.print': 'Confirm print', 'operation.printLabel.recentOrders.subtitle': 'Maximum 50 recent records displayed here', 'operation.printLabel.recentOrders.title': 'Recent prints', 'operation.printLabel.recentOrders.empty': 'No records', 'operation.printLabel.numberType.auto': 'Auto detect', 'operation.printLabel.numberType.waybill': 'Waybill Number', 'operation.printLabel.numberType.customerOrder': 'Customer Order Number', 'operation.printLabel.numberType.tracking': 'Tracking Number', 'operation.printLabel.numberType.other': 'Other Number', 'operation.printLabel.numberType.parcel': 'Parcel tracking', 'operation.printLabel.numberType.sku': 'SKU code', 'operation.printLabel.labelTemplate.lastMile': 'Last Mile Label', 'operation.printLabel.labelTemplate.customer': 'Customer Label', 'operation.printLabel.labelTemplate.inbound': 'Inbound Label', 'operation.printLabel.labelTemplate.outbound': 'Outbound Label', 'operation.printLabel.labelTemplate.sku': 'SKU Label', 'operation.printLabel.preview.title': 'Label preview', 'operation.printLabel.preview.empty': 'Scan a number to show order info; open Preview when needed', 'operation.printLabel.preview.product': 'Product', 'operation.printLabel.preview.country': 'Destination', 'operation.printLabel.preview.status': 'Status', 'operation.printLabel.preview.order': 'Order', 'operation.printLabel.preview.bindSummary': '{lines} line(s) · {qty} pcs', 'operation.printLabel.preview.lines': 'Lines', 'operation.printLabel.preview.noneBind': 'No parcel/inventory bound — verify physical goods carefully', 'operation.printLabel.preview.multiMatch': 'Multiple orders matched — pick one to continue', 'operation.printLabel.preview.bindInventory': 'Stock', 'operation.printLabel.preview.bindParcel': 'Parcel', 'operation.printLabel.preview.bindQty': 'Ship qty', 'operation.printLabel.preview.bin': 'Bin', 'operation.printLabel.preview.sku': 'SKU', 'operation.printLabel.preview.tracking': 'Tracking', 'operation.printLabel.preview.attr': 'Spec', 'operation.printLabel.preview.selectCandidate': 'Select', 'operation.printLabel.table.index': 'Index', 'operation.printLabel.table.waybillNumber': 'Waybill Number', 'operation.printLabel.table.customerOrderNumber': 'Customer Order Number', 'operation.printLabel.table.trackingNumber': 'Tracking Number', 'operation.printLabel.table.otherNumber': 'Other Number', 'operation.printLabel.table.labelTemplate': 'Label Template', 'operation.printLabel.table.printSuccess': 'Print Success', 'operation.printLabel.table.warehouse': 'Warehouse', 'operation.printLabel.table.operateTime': 'Operate Time', 'operation.printLabel.table.operator': 'Operator', 'operation.printLabel.message.waybillNumberRequired': 'Please enter or scan number', 'operation.printLabel.message.lookupSuccess': 'Order found — verify bound goods', 'operation.printLabel.message.lookupFirst': 'Lookup and verify the order first', 'operation.printLabel.message.printSuccess': 'Print successful', 'operation.printLabel.message.printFailed': 'Print failed', 'operation.printLabel.message.noPrintFile': 'No print file returned', 'operation.printLabel.scan.autoHint': 'Scan to lookup and print automatically', 'operation.printLabel.printerStatus.ready': 'Local printer ready', 'operation.printLabel.printerStatus.off': 'Printer not connected — enable Print in the top bar', 'operation.printLabel.actions.reprint': 'Print again', 'operation.printLabel.actions.printBtn': 'Print', 'operation.printLabel.actions.preview': 'Preview', 'operation.printLabel.actions.previewHint': 'Tap to view label', 'operation.printLabel.printSuccess.yes': 'Yes', 'operation.printLabel.printSuccess.no': 'No', 'operation.printLabel.pagination.invalidPage': 'Please enter a valid page number', // System - Warehouse Address 'system.warehouseAddress.pageTitle': 'Warehouse Address', 'system.warehouseAddress.fields.warehouseName': 'Warehouse Name', 'system.warehouseAddress.fields.warehouseType': 'Warehouse Type', 'system.warehouseAddress.fields.recipient': 'Recipient', 'system.warehouseAddress.fields.contactPhone': 'Contact Phone', 'system.warehouseAddress.fields.shippingAddress': 'Shipping Address', 'system.warehouseAddress.fields.servicePhone': 'Service Phone', 'system.warehouseAddress.fields.serviceWechat': 'Service WeChat', 'system.warehouseAddress.actions.add': 'Add', 'system.warehouseAddress.actions.edit': 'Edit', 'system.warehouseAddress.actions.copy': 'Copy', 'system.warehouseAddress.actions.delete': 'Delete', 'system.warehouseAddress.actions.refresh': 'Refresh', 'system.warehouseAddress.uploadWechat': 'Upload Image', 'system.warehouseAddress.hint.wechatBase64': 'Images are stored as Base64 (data URL). Max 2MB recommended.', 'system.warehouseAddress.placeholder.input': 'Please enter', 'system.warehouseAddress.placeholder.select': 'Please select', 'system.warehouseAddress.modal.addTitle': 'Add Warehouse Address', 'system.warehouseAddress.modal.editTitle': 'Edit Warehouse Address', 'system.warehouseAddress.message.nameRequired': 'Please enter warehouse name', 'system.warehouseAddress.message.addSuccess': 'Added successfully', 'system.warehouseAddress.message.editSuccess': 'Updated successfully', 'system.warehouseAddress.message.deleteConfirm': 'Delete this warehouse?', 'system.warehouseAddress.message.deleteSuccess': 'Deleted successfully', 'system.warehouseAddress.message.deleteFailed': 'Delete failed', 'system.warehouseAddress.message.copySuccess': 'Copied to clipboard', 'system.warehouseAddress.message.copyFailed': 'Copy failed', 'system.warehouseAddress.message.imageTooLarge': 'Image must be 2MB or smaller', 'system.warehouseAddress.message.dictLoadFailed': 'Failed to load warehouse type dictionary', 'system.warehouseAddress.message.wechatQrSaveFailed': 'Failed to save WeChat QR image', // System - batch email (parity with desktop emailAuto.py) 'system.batchEmail.import': 'Import file', 'system.batchEmail.template': 'Template', 'system.batchEmail.selectTemplate': 'Select a template', 'system.batchEmail.send': 'Send batch', 'system.batchEmail.log': 'Log', 'system.batchEmail.preview': 'Template edit & preview', 'system.batchEmail.saveTpl': 'Save template', 'system.batchEmail.deleteTpl': 'Delete template', 'system.batchEmail.placeholderHint': `{'Placeholders: {客户单号}, {最新轨迹}, {换单号}'}`, 'system.batchEmail.emailConfig': 'Mailbox', 'system.batchEmail.account': 'Account', 'system.batchEmail.password': 'App password', 'system.batchEmail.passwordPlaceholder': 'Enter SMTP app password / authorization code', 'system.batchEmail.passwordPlaceholderEdit': 'Leave blank to keep the saved password', 'system.batchEmail.passwordSavedHint': 'Password is stored on the server; leave blank unless you want to change it', 'system.batchEmail.warnPassword': 'Enter app password (e.g. Aliyun authorization code)', 'system.batchEmail.serverType': 'SMTP', 'system.batchEmail.server.qiye': 'Aliyun enterprise 25', 'system.batchEmail.server.qiyeSsl': 'Aliyun enterprise SSL 465', 'system.batchEmail.server.aliyun': 'Aliyun personal 25', 'system.batchEmail.server.aliyunSsl': 'Aliyun personal SSL 465', 'system.batchEmail.server.mxhichina': 'mxhichina 25', 'system.batchEmail.saveConfig': 'Save', 'system.batchEmail.testConnection': 'Test connection', 'system.batchEmail.subject': 'Subject', 'system.batchEmail.subjectPlaceholder': `{'Placeholders supported, e.g. Order {客户单号}'}`, 'system.batchEmail.contentPlaceholder': 'Body', 'system.batchEmail.saveTplModalTitle': 'Save template', 'system.batchEmail.saveTplNamePlaceholder': 'Template name', 'system.batchEmail.logSelectTemplate': 'Template selected', 'system.batchEmail.logTemplateBodyShown': 'Body loaded', 'system.batchEmail.errMissingColumns': 'Required columns not found. Need order id column and email column; optional: tracking, 换单号', 'system.batchEmail.logImportOk': 'Imported: {name}, recipient column OK', 'system.batchEmail.logImportCount': 'Loaded {n} valid rows', 'system.batchEmail.msgImportOk': 'Imported {n} rows', 'system.batchEmail.errImport': 'Import failed', 'system.batchEmail.errLoadTemplates': 'Failed to load templates', 'system.batchEmail.errLoadRecords': 'Failed to load email records', 'system.batchEmail.recordList': 'Email records', 'system.batchEmail.record.toEmail': 'Email', 'system.batchEmail.record.subject': 'Subject', 'system.batchEmail.record.content': 'Content', 'system.batchEmail.record.sendTime': 'Sent at', 'system.batchEmail.record.sender': 'Sender', 'system.batchEmail.warnEmptyContent': 'Template body is required', 'system.batchEmail.warnEmptyName': 'Template name is required', 'system.batchEmail.confirmOverwriteTitle': 'Overwrite?', 'system.batchEmail.confirmOverwriteBody': 'Template "{name}" exists. Overwrite?', 'system.batchEmail.logSaveTplOk': 'Saved template "{name}"', 'system.batchEmail.msgSaveTplOk': 'Template "{name}" saved', 'system.batchEmail.warnSelectTplDelete': 'Select a template to delete', 'system.batchEmail.warnTplMissing': 'Template not found', 'system.batchEmail.confirmDeleteTitle': 'Delete template', 'system.batchEmail.confirmDeleteBody': 'Delete template "{name}"? This cannot be undone.', 'system.batchEmail.confirmOk': 'OK', 'system.batchEmail.confirmCancel': 'Cancel', 'system.batchEmail.logDeleteTpl': 'Deleted template "{name}"', 'system.batchEmail.msgDeleteTplOk': 'Template "{name}" deleted', 'system.batchEmail.warnAccount': 'Enter account and password', 'system.batchEmail.msgSaveConfigOk': 'Saved', 'system.batchEmail.logTesting': 'Testing SMTP...', 'system.batchEmail.logTestOk': 'Connection OK', 'system.batchEmail.msgTestOk': 'SMTP test succeeded', 'system.batchEmail.errUnknown': 'Request failed', 'system.batchEmail.logTestFail': 'Connection test failed', 'system.batchEmail.recipients': 'Recipients', 'system.batchEmail.recipientMode.manual': 'Manual entry', 'system.batchEmail.recipientMode.excel': 'Excel import', 'system.batchEmail.manualEmailsPlaceholder': 'One email per line, or separated by comma, semicolon, or space', 'system.batchEmail.parseEmails': 'Parse emails', 'system.batchEmail.clearRecipients': 'Clear', 'system.batchEmail.recipientCount': '{n} recipient(s)', 'system.batchEmail.invalidEmailCount': 'Skipped {n} invalid email(s)', 'system.batchEmail.recipientPreview': 'Recipient preview', 'system.batchEmail.recipientPreviewMore': '{n} more not shown', 'system.batchEmail.previewOrderNo': 'Order no.', 'system.batchEmail.previewTrack': 'Latest tracking', 'system.batchEmail.excelImportHint': 'Supports .xlsx / .xls with email and order id columns', 'system.batchEmail.msgManualParseOk': 'Parsed {n} valid email(s)', 'system.batchEmail.warnNoRecipients': 'Add recipient emails first', 'system.batchEmail.warnNoOrders': 'Import an Excel file first', 'system.batchEmail.warnNoTemplate': 'Select or enter a template', 'system.batchEmail.errNoAccount': 'Configure mailbox account and password', 'system.batchEmail.logSendStart': 'Sending started', 'system.batchEmail.logSkipNoEmail': 'Skipped (no valid email)', 'system.batchEmail.logFailEmptyBody': 'Failed - empty body', 'system.batchEmail.fallbackSubject': 'Order notice', 'system.batchEmail.logSendOk': 'sent successfully', 'system.batchEmail.logSendFail': 'failed - {msg}', 'system.batchEmail.logSendDone': 'Done: {total} total, {successCount} ok, {failCount} failed', 'system.batchEmail.msgSendDone': 'Done: {successCount} succeeded, {failCount} failed', // System - Announcement 'system.announcement.search.placeholder': 'Search title or content', 'system.announcement.search.reset': 'Reset', 'system.announcement.actions.add': 'Add announcement', 'system.announcement.actions.addNotice': 'Add notice', 'system.announcement.actions.addMessage': 'Add message', 'system.announcement.actions.refresh': 'Refresh', 'system.announcement.actions.batchDelete': 'Delete selected', 'system.announcement.actions.edit': 'Edit', 'system.announcement.actions.view': 'View', 'system.announcement.actions.delete': 'Delete', 'system.announcement.actions.readConfirm': 'Confirm Read', 'system.announcement.messageType.inform': 'Inform', 'system.announcement.messageType.message': 'Message', 'system.announcement.messageType.notice': 'Notice', 'system.announcement.receiverType.user': 'User', 'system.announcement.receiverType.customer': 'Customer', 'system.announcement.receiverType.all': 'Everyone', 'system.announcement.popup.yes': 'Yes', 'system.announcement.popup.no': 'No', 'system.announcement.filter.noticeType': 'Notice Type', 'system.announcement.filter.receiverType': 'Receiver Type', 'system.announcement.tab.notice': 'Notice', 'system.announcement.tab.message': 'Message', 'system.announcement.desc.notice': 'System notices for all or selected recipients, with optional popup', 'system.announcement.desc.message': 'Direct messages without a required title', 'system.announcement.sendWay.now': 'Send now', 'system.announcement.sendWay.delay': 'Delay send', 'system.announcement.sendWay.schedule': 'Schedule send', 'system.announcement.status.ready': 'Ready', 'system.announcement.status.already': 'Sent', 'system.announcement.table.index': 'Index', 'system.announcement.table.subject': 'Subject', 'system.announcement.table.category': 'Message type', 'system.announcement.table.content': 'Content', 'system.announcement.table.noticeType': 'Notice Type', 'system.announcement.table.receiverType': 'Receiver Type', 'system.announcement.table.isPopup': 'Popup', 'system.announcement.table.receiverCount': 'Receivers', 'system.announcement.table.readCount': 'Read Count', 'system.announcement.table.readStatus': 'Read status', 'system.announcement.readStatus.read': 'Read', 'system.announcement.readStatus.unread': 'Unread', 'system.announcement.table.sendWay': 'Send way', 'system.announcement.table.createTime': 'Create time', 'system.announcement.table.sendTime': 'Send time', 'system.announcement.table.status': 'Status', 'system.announcement.table.actions': 'Action', 'system.announcement.form.receiverType.appoint': 'Appoint User', 'system.announcement.form.receiverType.role': 'Appoint Role', 'system.announcement.form.noticeType': 'Notice Type', 'system.announcement.form.title': 'Title', 'system.announcement.form.content': 'Content', 'system.announcement.form.isPopup': 'Popup', 'system.announcement.form.receiverType': 'Receiver Type', 'system.announcement.form.receiverIds': 'Receivers', 'system.announcement.form.receiverIdsPlaceholderUser': 'Search and select internal users', 'system.announcement.form.receiverIdsPlaceholderCustomer': 'Search and select customers', 'system.announcement.form.receiverIdsFallback': 'Selected #{id}', 'system.announcement.form.section.basic': 'Basic info', 'system.announcement.form.section.receiver': 'Recipients', 'system.announcement.form.messageTitleHint': 'Messages do not require a title; content is shown directly', 'system.announcement.form.popupHint': 'When enabled, recipients see a required popup on the workplace (staff and customers)', 'system.announcement.form.noticeReceiverHint': 'Notices apply to all staff and customers by default; no recipients to select', 'system.announcement.drawer.close': 'Close', 'system.announcement.modal.addNoticeTitle': 'Add notice', 'system.announcement.modal.addMessageTitle': 'Add message', 'system.announcement.placeholder.input': 'Please enter', 'system.announcement.placeholder.select': 'Please select', 'system.announcement.modal.addTitle': 'Add Announcement', 'system.announcement.modal.editTitle': 'Edit Announcement', 'system.announcement.rule.noticeTypeRequired': 'Please select notice type', 'system.announcement.rule.titleRequired': 'Please enter title', 'system.announcement.rule.contentRequired': 'Please enter content', 'system.announcement.rule.receiverTypeRequired': 'Please select receiver type', 'system.announcement.rule.receiverIdsRequired': 'Please select receivers', 'system.announcement.message.addSuccess': 'Added successfully', 'system.announcement.message.editSuccess': 'Updated successfully', 'system.announcement.message.readSuccess': 'Marked as read', 'system.announcement.message.cannotEditSent': 'Sent messages cannot be modified', 'system.announcement.message.selectDataToDelete': 'Please select data to delete', 'system.announcement.message.deleteSuccess': 'Delete successfully', 'system.announcement.message.deleteFailed': 'Delete failed', 'system.announcement.modal.deleteConfirmTitle': 'Tips', 'system.announcement.modal.deleteConfirmContentSingle': 'Are you sure to delete message 【{subject}】?', 'system.announcement.modal.deleteConfirmContentBatch': 'Are you sure to delete {count} selected messages?', // System - Message 'system.message.search.placeholder': 'Enter keyword', 'system.message.actions.allRead': 'Mark all as read', 'system.message.actions.markRead': 'Mark as read', 'system.message.actions.batchDelete': 'Delete selected', 'system.message.actions.allDelete': 'Delete all', 'system.message.actions.view': 'View', 'system.message.actions.delete': 'Delete', 'system.message.messageType.inform': 'Inform', 'system.message.messageType.message': 'Message', 'system.message.messageType.notice': 'Notice', 'system.message.readStatus.read': 'Read', 'system.message.readStatus.unread': 'Unread', 'system.message.table.index': 'Index', 'system.message.table.subject': 'Subject', 'system.message.table.content': 'Content', 'system.message.table.sendTime': 'Send time', 'system.message.table.read': 'Read status', 'system.message.table.actions': 'Action', 'system.message.message.selectMessagesToRead': 'Please select messages to mark as read', 'system.message.message.markReadSuccess': 'Mark as read successfully', 'system.message.message.markReadFailed': 'Mark as read failed', 'system.message.message.allReadSuccess': 'Mark all as read successfully', 'system.message.message.allReadFailed': 'Mark all as read failed', 'system.message.message.selectMessagesToDelete': 'Please select messages to delete', 'system.message.message.deleteSuccess': 'Delete successfully', 'system.message.message.deleteFailed': 'Delete failed', 'system.message.message.allDeleteSuccess': 'Delete all successfully', 'system.message.message.allDeleteFailed': 'Delete all failed', // System - Log Record 'system.log.table.index': 'Index', 'system.log.table.requestId': 'Request ID', 'system.log.table.requestTime': 'Request time', 'system.log.table.appOrProvider': 'App/Provider', 'system.log.table.name': 'Name', 'system.log.table.interfaceName': 'Interface name', 'system.log.table.interfaceCode': 'Interface code', 'system.log.table.clientIP': 'Client IP', 'system.log.table.address': 'Request address', 'system.log.table.cost': 'Response time', 'system.log.table.isSuccess': 'Is success', 'system.log.table.actions': 'Action', 'system.log.placeholder.requestId': 'Request ID', 'system.log.placeholder.requestTime': 'Request time', 'system.log.placeholder.appOrProvider': 'App/Provider', 'system.log.placeholder.name': 'Name', 'system.log.placeholder.interfaceName': 'Interface name', 'system.log.placeholder.cost': 'Response time', 'system.log.placeholder.isSuccess': 'Is success', 'system.log.placeholder.clientIP': 'Request IP', 'system.log.placeholder.address': 'Request address', 'system.log.placeholder.appName': 'App name', 'system.log.placeholder.providerName': 'Provider name', 'system.log.placeholder.appOrProviderName': 'App/Provider name', 'system.log.options.app': 'App', 'system.log.options.provider': 'Provider', 'system.log.pagination.total': 'Total {count} records', 'system.log.pagination.prevPage': 'Previous', 'system.log.pagination.nextPage': 'Next', 'system.log.pagination.itemsPerPage': 'items/page', 'system.log.pagination.goTo': 'Go to', 'system.log.pagination.page': 'page', 'system.log.modal.viewDetail': 'View details', 'system.log.modal.tabs.requestBody': 'Request body', 'system.log.modal.tabs.requestHeaders': 'cURL', 'system.log.modal.tabs.response': 'Response', 'system.log.modal.tabs.exception': 'Exception', 'system.log.modal.tabs.queueResult': 'Queue result', 'system.log.actions.copy': 'Copy', 'system.log.actions.copyCurrentTab': 'Copy current tab content', 'system.log.message.loadFailed': 'Failed to load logs', 'system.log.message.invalidPageNumber': 'Please enter a valid page number', 'system.log.message.loadDetailFailed': 'Failed to load log details', 'system.log.message.copySuccess': 'Copy successfully', 'system.log.message.copyEmpty': 'Content is empty, cannot copy', 'system.log.message.copyFailed': 'Copy failed', // User - Recharge 'user.recharge.deposit.panel.subtitle': 'Fund Recharge', 'user.recharge.deposit.panel.title': 'Complete Recharge in 3 Steps', 'user.recharge.deposit.panel.desc': 'Select Amount · Upload Voucher · Wait for Review', 'user.recharge.deposit.steps.selectAmount.title': 'Select Amount', 'user.recharge.deposit.steps.selectAmount.desc': 'Select amount and confirm payment method', 'user.recharge.deposit.steps.uploadVoucher.title': 'Upload Voucher', 'user.recharge.deposit.steps.uploadVoucher.desc': 'Upload transfer screenshot', 'user.recharge.deposit.steps.review.title': 'Review', 'user.recharge.deposit.steps.review.desc': 'Wait for finance confirmation', 'user.recharge.deposit.steps.tip.selectAmount': 'Select amount and confirm', 'user.recharge.deposit.steps.tip.uploadVoucher': 'Upload recharge voucher', 'user.recharge.deposit.steps.tip.review': 'Review processing', 'user.recharge.deposit.steps.tip.complete': 'Complete', 'user.recharge.deposit.tips.title': 'Tips', 'user.recharge.deposit.tips.item1': 'Recharge and balance 1:1 arrival', 'user.recharge.deposit.tips.item2': 'Upload clear and complete payment screenshot', 'user.recharge.deposit.tips.item3': 'SMS/In-site message reminder after funds arrive', 'user.recharge.deposit.form.currentAmount': 'Current recharge amount', 'user.recharge.deposit.form.stepChip': 'Step {step} · {tip}', 'user.recharge.deposit.form.selectAmount': 'Select Amount', 'user.recharge.deposit.form.custom': 'Custom', 'user.recharge.deposit.form.inputAmount': 'Enter Amount', 'user.recharge.deposit.form.paymentMethod': 'Payment Method', 'user.recharge.deposit.form.qrTip': 'Click QR code to zoom in and view details', 'user.recharge.deposit.form.uploadVoucher': 'Upload Voucher', 'user.recharge.deposit.form.uploadVoucherDesc': 'Please upload a clear payment screenshot for quick finance confirmation', 'user.recharge.deposit.form.uploading': 'Uploading', 'user.recharge.deposit.form.uploadScreenshot': 'Upload Screenshot', 'user.recharge.deposit.payment.alipay': 'Alipay', 'user.recharge.deposit.payment.alipayDesc': 'Support scan code and transfer', 'user.recharge.deposit.payment.wechat': 'WeChat Pay', 'user.recharge.deposit.payment.wechatDesc': 'Recommended for fast arrival', 'user.recharge.deposit.result.title': 'Submitted Successfully', 'user.recharge.deposit.result.subtitle': 'Under review, please wait patiently', 'user.recharge.deposit.result.actions.rechargeAgain': 'Recharge Again', 'user.recharge.deposit.result.actions.viewBill': 'View Bill', 'user.recharge.deposit.actions.prevStep': 'Previous', 'user.recharge.deposit.actions.nextStep': 'Next', 'user.recharge.deposit.actions.submitReview': 'Submit for Review', 'user.recharge.deposit.message.selectAmount': 'Please select recharge amount', 'user.recharge.deposit.message.uploadSuccess': 'Upload successfully', 'user.recharge.deposit.message.uploadFailed': 'Upload failed', 'user.recharge.deposit.message.uploadVoucherFirst': 'Please upload recharge voucher first', 'user.recharge.deposit.message.submitFailed': 'Submit failed', 'user.recharge.deposit.message.submitSuccess': 'Recharge application submitted, pending review', // User - Recharge Record 'user.recharge.record.search.serialNo': 'Serial No', 'user.recharge.record.search.serialNoPlaceholder': 'Search serial no', 'user.recharge.record.search.status': 'Recharge Status', 'user.recharge.record.search.statusPlaceholder': 'Please select', 'user.recharge.record.search.statusAll': 'All', 'user.recharge.record.search.statusPending': 'Pending', 'user.recharge.record.search.statusSuccess': 'Success', 'user.recharge.record.search.statusFailed': 'Failed', 'user.recharge.record.search.actions.search': 'Search', 'user.recharge.record.search.actions.reset': 'Reset', 'user.recharge.record.search.actions.export': 'Export', 'user.recharge.record.search.dateRange': 'Recharge time', 'user.recharge.record.search.customerId': 'Customer ID', 'user.recharge.record.search.customerIdPlaceholder': 'Optional', 'user.recharge.record.modal.rejectTitle': 'Reject recharge', 'user.recharge.record.modal.rejectRemark': 'Reason', 'user.recharge.record.modal.rejectRemarkPlaceholder': 'Optional reason', 'user.recharge.record.modal.approveConfirmTitle': 'Confirm approval', 'user.recharge.record.modal.approveConfirm': 'Approve this recharge request?', 'user.recharge.record.modal.rejectConfirmTitle': 'Confirm rejection', 'user.recharge.record.modal.rejectConfirm': 'Reject this recharge request?', 'user.recharge.record.message.loadError': 'Failed to load', 'user.recharge.record.message.approveError': 'Approve failed', 'user.recharge.record.message.rejectError': 'Reject failed', 'user.recharge.record.table.serialNo': 'Serial No', 'user.recharge.record.table.payTime': 'Recharge Time', 'user.recharge.record.table.payType': 'Payment Method', 'user.recharge.record.table.payAmount': 'Recharge Amount', 'user.recharge.record.table.payImage': 'Recharge Screenshot', 'user.recharge.record.table.payStatus': 'Recharge Status', 'user.recharge.record.table.remarks': 'Remarks', 'user.recharge.record.payment.alipay': 'Alipay', 'user.recharge.record.payment.wechat': 'WeChat', 'user.recharge.record.actions.approve': 'Approve', 'user.recharge.record.actions.reject': 'Reject', 'user.recharge.record.message.approveSuccess': 'Approved', 'user.recharge.record.message.rejectSuccess': 'Rejected', 'user.recharge.record.message.exportSuccess': 'Exported successfully', 'user.accountFlow.search.keywordPlaceholder': 'Serial no. / related no.', 'user.accountFlow.search.bizTypePlaceholder': 'Business type', 'user.accountFlow.search.bizTypeAll': 'All', 'user.accountFlow.search.customerIdPlaceholder': 'Customer ID (optional)', 'user.accountFlow.search.dateRange': 'Transaction time', 'user.accountFlow.search.actions.search': 'Search', 'user.accountFlow.search.actions.reset': 'Reset', 'user.accountFlow.bizType.recharge': 'Recharge credit', 'user.accountFlow.bizType.orderPay': 'Order payment', 'user.accountFlow.message.loadError': 'Failed to load account transactions', 'user.accountFlow.table.serialNumber': 'Serial no.', 'user.accountFlow.table.createTime': 'Time', 'user.accountFlow.table.bizType': 'Type', 'user.accountFlow.table.bizNo': 'Related no.', 'user.accountFlow.table.amount': 'Amount', 'user.accountFlow.table.balanceBefore': 'Balance before', 'user.accountFlow.table.balanceAfter': 'Balance after', 'user.accountFlow.table.remark': 'Remark', 'user.accountFlow.table.customerCode': 'Customer code', // Finance - receivable & payable 'finance.receivablePayable.search.keywordPlaceholder': 'Service no. / client no. / track no.', 'finance.receivablePayable.search.feeTypePlaceholder': 'Fee type', 'finance.receivablePayable.search.feeTypeAll': 'All', 'finance.receivablePayable.search.costItemPlaceholder': 'Cost item', 'finance.receivablePayable.search.costItemAll': 'All cost items', 'finance.receivablePayable.search.chargingStagePlaceholder': 'Charging stage', 'finance.receivablePayable.search.chargingStageAll': 'All', 'finance.receivablePayable.search.customerCodePlaceholder': 'Customer code', 'finance.receivablePayable.search.customerIdPlaceholder': 'Customer ID (optional)', 'finance.receivablePayable.search.dateRange': 'Order created time', 'finance.receivablePayable.search.timeField': 'Time field', 'finance.receivablePayable.search.timeFieldCreateTime': 'Order created', 'finance.receivablePayable.search.timeFieldReceiveTime': 'Received', 'finance.receivablePayable.search.timeFieldShipTime': 'Shipped', 'finance.receivablePayable.search.timeFieldPayTime': 'Paid', 'finance.receivablePayable.search.dateRangeCreateTime': 'Order created time', 'finance.receivablePayable.search.dateRangeReceiveTime': 'Receive time', 'finance.receivablePayable.search.dateRangeShipTime': 'Ship time', 'finance.receivablePayable.search.dateRangePayTime': 'Pay time', 'finance.receivablePayable.search.effectiveStageOnlyHint': 'When enabled, each fee item keeps only the highest charging stage (outbound > inbound > forecast) to avoid double counting.', 'finance.receivablePayable.search.actions.search': 'Search', 'finance.receivablePayable.search.actions.reset': 'Reset', 'finance.receivablePayable.search.actions.export': 'Export', 'finance.receivablePayable.search.viewMode': 'View', 'finance.receivablePayable.search.viewModeDetail': 'Fee lines', 'finance.receivablePayable.search.viewModeByOrder': 'By order', 'finance.receivablePayable.search.effectiveStageOnly': 'Effective stage only', 'finance.receivablePayable.search.columnConfig': 'Columns', 'finance.receivablePayable.summary.totalLines': '{count} fee line(s) in total', 'finance.receivablePayable.summary.totalOrders': '{count} order(s) in total', 'finance.receivablePayable.summary.receivable': 'Total receivable', 'finance.receivablePayable.summary.payable': 'Total payable', 'finance.receivablePayable.summary.grossProfit': 'Gross profit', 'finance.receivablePayable.message.exportSuccess': 'Export completed', 'finance.receivablePayable.message.exportError': 'Export failed', 'finance.receivablePayable.message.summaryError': 'Failed to load summary', 'finance.receivablePayable.message.openOrderError': 'Unable to open order detail', 'finance.receivablePayable.table.receivableSummary': 'Receivable total', 'finance.receivablePayable.table.payableSummary': 'Payable total', 'finance.receivablePayable.table.grossProfitSummary': 'Gross profit', 'finance.receivablePayable.table.lineCount': 'Fee lines', 'finance.receivablePayable.feeType.receivable': 'Receivable', 'finance.receivablePayable.feeType.payable': 'Payable', 'finance.receivablePayable.chargingStage.forecast': 'Forecast', 'finance.receivablePayable.chargingStage.inbound': 'Inbound', 'finance.receivablePayable.chargingStage.outbound': 'Outbound', 'finance.receivablePayable.isPaid.yes': 'Paid', 'finance.receivablePayable.isPaid.no': 'Unpaid', 'finance.receivablePayable.message.loadError': 'Failed to load receivables & payables', 'finance.receivablePayable.table.serviceNo': 'Service no.', 'finance.receivablePayable.table.clientNo': 'Client no.', 'finance.receivablePayable.table.trackNo': 'Track no.', 'finance.receivablePayable.table.customerCode': 'Customer code', 'finance.receivablePayable.table.feeType': 'Fee type', 'finance.receivablePayable.table.costItem': 'Cost item', 'finance.receivablePayable.table.amount': 'Amount', 'finance.receivablePayable.table.currency': 'Currency', 'finance.receivablePayable.table.chargingStage': 'Charging stage', 'finance.receivablePayable.table.orderStatus': 'Order status', 'finance.receivablePayable.table.isPaid': 'Payment status', 'finance.receivablePayable.table.productCode': 'Product code', 'finance.receivablePayable.table.channelCode': 'Channel code', 'finance.receivablePayable.table.consigneeCountryName': 'Destination destCountry', 'finance.receivablePayable.table.downstreamProvider': 'Downstream provider', 'finance.receivablePayable.table.priceNo': 'Price no.', 'finance.receivablePayable.table.priceEffectiveTime': 'Price effective time', 'finance.receivablePayable.table.payTime': 'Pay time', 'finance.receivablePayable.table.receiveTime': 'Receive time', 'finance.receivablePayable.table.shipTime': 'Ship time', 'user.recharge.record.message.exportError': 'Export failed', 'user.recharge.record.pagination.total': '{count} total', 'user.recharge.record.pagination.prev': 'Prev', 'user.recharge.record.pagination.next': 'Next', 'user.recharge.record.pagination.perPage': '/page', 'user.recharge.record.pagination.goTo': 'Go to', 'user.recharge.record.pagination.page': 'page', 'user.recharge.record.pagination.invalidPage': 'Please enter a valid page number', // Personal Center 'profile.defaultName': 'User', 'profile.contactInfo': 'Contact Info', 'profile.quickActions': 'Quick Actions', 'profile.myOrders': 'My Orders', 'profile.accountDetails': 'Account Details', 'profile.edit': 'Edit Profile', 'profile.resetPassword': 'Reset Password', 'profile.editProfile': 'Edit Profile', 'profile.changePassword': 'Change Password', 'profile.oldPassword': 'Current Password', 'profile.newPassword': 'New Password', 'profile.confirmPassword': 'Confirm New Password', 'profile.passwordMismatch': 'Passwords do not match', 'profile.changePasswordSuccess': 'Password changed successfully, please login again', 'profile.changePasswordFailed': 'Failed to change password', 'profile.welcomeDesc': 'View your balance, quota usage, and manage your profile here.', 'profile.greetingMorning': 'Good morning, {name}', 'profile.greetingAfternoon': 'Good afternoon, {name}', 'profile.greetingEvening': 'Good evening, {name}', 'profile.accountOverview': 'Account Overview', 'profile.myProfile': 'My Profile', 'profile.quotaUsage': 'Quota Usage', 'profile.availableQuota': 'Available Quota', 'profile.lowBalanceTip': 'Balance is low. Recharge soon to avoid order interruptions.', 'profile.memberSince': 'Member since {date}', 'profile.support': 'Your Support Team', 'profile.supportTip': 'Contact your sales rep or advisor for ordering, billing, or system help.', 'profile.copySuccess': 'Copied to clipboard', 'profile.copyFailed': 'Copy failed, please copy manually', 'profile.retry': 'Reload', 'profile.loadFailed': 'Failed to load profile', 'profile.noLoginInfo': 'Customer login info not found', 'profile.notFound': 'Current customer record not found', 'profile.actionHint': 'Tap to open', // Customer Management 'user.customer.searchPlaceholder': 'Customer code/name/phone', 'user.customer.actions.add': 'Add', 'user.customer.actions.search': 'Search', 'user.customer.actions.reset': 'Reset', 'user.customer.actions.edit': 'Edit', 'user.customer.actions.delete': 'Delete', 'user.customer.actions.resetPassword': 'Reset Password', 'user.customer.actions.omsLogin': 'OMS Login', 'user.customer.fields.customerCode': 'Customer Code', 'user.customer.fields.customerName': 'Customer Name', 'user.customer.fields.wechatAvatar': 'WeChat Avatar', 'user.customer.fields.wechatAvatarUrl': 'WeChat Avatar URL', 'user.customer.fields.wechatNickname': 'WeChat Nickname', 'user.customer.fields.email': 'Email', 'user.customer.fields.phone': 'Phone', 'user.customer.fields.password': 'Password', 'user.customer.fields.accountBalance': 'Account Balance', 'user.customer.fields.totalQuota': 'Total Quota', 'user.customer.fields.usedQuota': 'Used Quota', 'user.customer.fields.status': 'Status', 'user.customer.fields.customerGroup': 'Customer Group', 'user.customer.fields.memberLevel': 'Member Level', 'user.customer.fields.priceTierKey': 'Price Tier Key', 'user.customer.fields.remark': 'Remark', 'user.customer.fields.createTime': 'Create Time', 'user.customer.fields.createdAt': 'Created At', 'user.customer.fields.createBy': 'Create By', 'user.customer.fields.createdBy': 'Created By', 'user.customer.fields.updateTime': 'Update Time', 'user.customer.fields.updateBy': 'Update By', 'user.customer.fields.salesPerson': 'Sales Person', 'user.customer.fields.customerService': 'Advisor', 'user.customer.fields.role': 'Role', 'user.customer.role.customer': 'Customer', 'user.customer.role.admin': 'Admin', 'user.customer.role.operator': 'Operator', 'user.customer.role.viewer': 'Viewer', 'user.customer.fields.lastOnlineTime': 'Last Online Time', 'user.customer.fields.lastOnlineIp': 'Last Online IP', 'user.customer.table.actions': 'Actions', 'user.customer.status.enabled': 'Enabled', 'user.customer.status.disabled': 'Disabled', 'user.customer.status.frozen': 'Frozen', 'user.customer.group.normal': 'Normal', 'user.customer.group.vip1': 'VIP1', 'user.customer.group.vip2': 'VIP2', 'user.customer.group.vip3': 'VIP3', 'user.customer.group.vip4': 'VIP4', 'user.customer.group.vip5': 'VIP5', 'user.customer.placeholder.input': 'Please enter', 'user.customer.placeholder.select': 'Please select', 'user.customer.modal.addTitle': 'Add Customer', 'user.customer.modal.editTitle': 'Edit Customer', 'user.customer.modal.deleteConfirm': 'Are you sure to delete this customer?', 'user.customer.rules.customerNameRequired': 'Please enter customer name', 'user.customer.rules.phoneRequired': 'Please enter phone number', 'user.customer.rules.emailRequired': 'Please enter email', 'user.customer.rules.passwordRequired': 'Please enter password', 'user.customer.rules.passwordLetterAndDigit': 'Password must contain both letters and numbers', 'user.customer.hint.autoCustomerCode': 'Auto-generated on save (e.g. AF0A1, 1st customer in Jun 2026)', 'user.customer.message.loadFailed': 'Load failed', 'user.customer.message.createSuccess': 'Created successfully', 'user.customer.message.updateSuccess': 'Updated successfully', 'user.customer.message.deleteSuccess': 'Deleted successfully', 'user.customer.message.deleteFailed': 'Delete failed', 'user.customer.message.saveFailed': 'Save failed', 'user.customer.message.resetPasswordSuccess': 'Password reset successfully', 'user.customer.message.resetPasswordFailed': 'Password reset failed', 'user.customer.pagination.total': 'Total {count} records', 'user.customer.pagination.prev': 'Prev', 'user.customer.pagination.next': 'Next', 'user.customer.pagination.perPage': '/page', 'user.customer.pagination.goTo': 'Go to', 'user.customer.pagination.page': 'Page', 'user.customer.pagination.invalidPage': 'Please enter a valid page number', 'user.subAccount.searchPlaceholder': 'Sub-account code/name/phone', 'user.subAccount.filter.mainCustomer': 'Filter by main customer', 'user.subAccount.actions.add': 'Add Sub Account', 'user.subAccount.fields.customerCode': 'Sub Account Code', 'user.subAccount.fields.customerName': 'Sub Account Name', 'user.subAccount.fields.phone': 'Phone', 'user.subAccount.fields.email': 'Email', 'user.subAccount.fields.password': 'Password', 'user.subAccount.fields.status': 'Status', 'user.subAccount.fields.remark': 'Remark', 'user.subAccount.fields.permissions': 'Permissions', 'user.subAccount.fields.parentCustomerId': 'Main Customer ID', 'user.subAccount.fields.createTime': 'Create Time', 'user.subAccount.fields.updateTime': 'Update Time', 'user.subAccount.status.enabled': 'Normal', 'user.subAccount.status.disabled': 'Disabled', 'user.subAccount.status.frozen': 'Frozen', 'user.subAccount.placeholder.input': 'Please enter', 'user.subAccount.placeholder.select': 'Please select', 'user.subAccount.modal.addTitle': 'Add Sub Account', 'user.subAccount.rules.customerCodeRequired': 'Please enter sub account code', 'user.subAccount.rules.customerNameRequired': 'Please enter sub account name', 'user.subAccount.rules.phoneRequired': 'Please enter phone number', 'user.subAccount.rules.passwordRequired': 'Please enter password', 'user.subAccount.message.loadFailed': 'Load failed', 'user.subAccount.message.createSuccess': 'Sub account created', 'user.subAccount.message.createFailed': 'Create failed', 'user.subAccount.tip.mainCustomerOnly': 'Only main customer accounts can create sub accounts. Please log in as main customer.', 'user.subAccount.permission.expandAll': 'Expand All', 'user.subAccount.permission.collapseAll': 'Collapse All', 'user.subAccount.permission.checkAll': 'Select All', 'user.subAccount.permission.uncheckAll': 'Clear All', 'user.subAccount.permission.loading': 'Loading permissions...', // System - Config 'system.config.tabs.sysConfig': 'System Config', 'system.config.tabs.safety': 'Safety Config', 'system.config.message.loadFailed': 'Failed to load system config', // System Config - Base Config 'system.config.sysBase.form.sysName': 'System Name', 'system.config.sysBase.form.sysVersion': 'System Version', 'system.config.sysBase.form.copyright': 'Copyright', 'system.config.sysBase.form.copyrightUrl': 'Copyright URL', 'system.config.sysBase.form.webStatus': 'Website Access (Business Only)', 'system.config.sysBase.form.tenantOptions': 'Multi-tenant Config', 'system.config.sysBase.form.webClosePrompt': 'Website Close Prompt', 'system.config.sysBase.form.footerLinks': 'Footer Links', 'system.config.sysBase.form.logo': 'System Logo', 'system.config.sysBase.form.linkName': 'Link Name', 'system.config.sysBase.form.linkUrl': 'Link URL', 'system.config.sysBase.form.sortCode': 'Sort', 'system.config.sysBase.form.placeholder.sysName': 'Please enter system name', 'system.config.sysBase.form.placeholder.sysVersion': 'Please enter system version', 'system.config.sysBase.form.placeholder.copyright': 'Please enter copyright', 'system.config.sysBase.form.placeholder.copyrightUrl': 'Please enter copyright URL', 'system.config.sysBase.form.placeholder.webClosePrompt': 'Please enter website close prompt', 'system.config.sysBase.form.placeholder.linkName': 'Please enter link name', 'system.config.sysBase.form.placeholder.linkUrl': 'Please enter link URL', 'system.config.sysBase.form.placeholder.sortCode': 'Please enter sort', 'system.config.sysBase.form.logoPreviewTip': 'Click image to preview, click delete to remove', 'system.config.sysBase.form.rules.sysNameRequired': 'Please enter system name', 'system.config.sysBase.form.rules.sysVersionRequired': 'Please enter system version', 'system.config.sysBase.form.rules.copyrightRequired': 'Please enter system copyright', 'system.config.sysBase.form.rules.copyrightUrlRequired': 'Please enter system copyright URL', 'system.config.sysBase.form.rules.linkNameRequired': 'Please enter link name', 'system.config.sysBase.form.rules.linkUrlRequired': 'Please enter link URL', 'system.config.sysBase.form.rules.sortCodeRequired': 'Please enter sort', 'system.config.sysBase.options.enable': 'Enable', 'system.config.sysBase.options.disable': 'Disable', 'system.config.sysBase.options.close': 'Close', 'system.config.sysBase.options.open': 'Open', 'system.config.sysBase.actions.add': 'Add', 'system.config.sysBase.actions.save': 'Save', 'system.config.sysBase.actions.reset': 'Reset', 'system.config.sysBase.actions.uploadLogo': 'Upload Logo', 'system.config.sysBase.modal.linkTitle': 'Link Information', 'system.config.sysBase.message.saveSuccess': 'Save successful', 'system.config.sysBase.message.saveFailed': 'Save failed', 'system.config.sysBase.message.fileNotExists': 'File does not exist', 'system.config.sysBase.message.onlyImageAllowed': 'Only image files are allowed', 'system.config.sysBase.message.imageSizeExceeded': 'Image size cannot exceed 5MB', 'system.config.sysBase.message.uploadSuccess': 'Logo upload successful', 'system.config.sysBase.message.uploadFailedNoFileId': 'Upload failed: File ID not obtained', 'system.config.sysBase.message.uploadFailed': 'Logo upload failed', 'system.config.sysBase.message.logoRemoved': 'Logo removed', // System Config - Safety Config 'system.config.safety.tabs.login': 'Login Policy', 'system.config.safety.tabs.password': 'Password Policy', 'system.config.safety.common.yes': 'Yes', 'system.config.safety.common.no': 'No', 'system.config.safety.common.save': 'Save', 'system.config.safety.common.reset': 'Reset', 'system.config.safety.common.saveSuccess': 'Save successful', 'system.config.safety.common.saveFailed': 'Save failed', 'system.config.safety.login.form.singleOpen': 'Single User Login', 'system.config.safety.login.form.captchaOpen': 'Login Captcha', 'system.config.safety.login.form.errorCount': 'Allowed Login Error Count', 'system.config.safety.login.form.resetTime': 'Login Error Reset Time (minutes)', 'system.config.safety.login.form.lockTime': 'Account Lock Duration (minutes)', 'system.config.safety.login.form.captchaType': 'Login Captcha Type', 'system.config.safety.login.form.placeholder.errorCount': 'Please enter allowed login error count', 'system.config.safety.login.form.placeholder.resetTime': 'Please enter login error reset time', 'system.config.safety.login.form.placeholder.lockTime': 'Please enter account lock duration', 'system.config.safety.login.form.placeholder.captchaType': 'Please select captcha type', 'system.config.safety.login.form.rules.errorCountRequired': 'Please enter allowed login error count', 'system.config.safety.login.form.rules.resetTimeRequired': 'Please enter login error reset time', 'system.config.safety.login.form.rules.lockTimeRequired': 'Please enter account lock duration', 'system.config.safety.login.form.rules.captchaTypeRequired': 'Please select login captcha type', 'system.config.safety.login.form.rules.singleOpenRequired': 'Please select single user login', 'system.config.safety.login.form.rules.captchaOpenRequired': 'Please select login captcha', 'system.config.safety.login.options.arithmetic': 'Arithmetic Captcha', 'system.config.safety.login.options.chinese': 'Chinese Captcha', 'system.config.safety.login.options.slider': 'Slider Captcha', 'system.config.safety.password.form.defaultPassword': 'System Default Password', 'system.config.safety.password.form.minLength': 'Password Min Length', 'system.config.safety.password.form.remind': 'Password Remind Update', 'system.config.safety.password.form.remindDay': 'Password Remind Update Time (days)', 'system.config.safety.password.form.updateDefault': 'Update Initial Password Remind', 'system.config.safety.password.form.containNum': 'Contain Number', 'system.config.safety.password.form.containLower': 'Contain Lowercase', 'system.config.safety.password.form.containUpper': 'Contain Uppercase', 'system.config.safety.password.form.containCharacter': 'Contain Special Character', 'system.config.safety.password.form.placeholder.defaultPassword': 'Please enter system default password', 'system.config.safety.password.form.placeholder.minLength': 'Please enter password min length', 'system.config.safety.password.form.placeholder.remindDay': 'Please enter password remind update time', 'system.config.safety.password.form.rules.defaultPasswordRequired': 'Please enter system default password', 'system.config.safety.password.form.rules.remindRequired': 'Please select password remind update', 'system.config.safety.password.form.rules.remindDayRequired': 'Please enter password remind update time', 'system.config.safety.password.form.rules.updateDefaultRequired': 'Please select update initial password remind', 'system.config.safety.password.form.rules.minLengthRequired': 'Please enter password min length', 'system.config.safety.password.form.rules.containNumRequired': 'Please select contain number', 'system.config.safety.password.form.rules.containLowerRequired': 'Please select contain lowercase', 'system.config.safety.password.form.rules.containUpperRequired': 'Please select contain uppercase', 'system.config.safety.password.form.rules.containCharacterRequired': 'Please select contain special character', // System - Audit Log - Operation Log 'system.audit.oplog.search.placeholder': 'Enter keyword', 'system.audit.oplog.type.operate': 'Operation Log', 'system.audit.oplog.type.exception': 'Exception Log', 'system.audit.oplog.table.name': 'Name', 'system.audit.oplog.table.opIp': 'IP Address', 'system.audit.oplog.table.opAddress': 'Address', 'system.audit.oplog.table.className': 'Class Name', 'system.audit.oplog.table.methodName': 'Method Name', 'system.audit.oplog.table.opUser': 'User', 'system.audit.oplog.table.opAccount': 'Account', 'system.audit.oplog.table.opTime': 'Operation Time', 'system.audit.oplog.table.operation': 'Action', 'system.audit.oplog.actions.clear': 'Clear', 'system.audit.oplog.actions.clearCurrent': 'Clear current log', 'system.audit.oplog.actions.view': 'View', 'system.audit.oplog.modal.clearConfirmTitle': 'Confirm Clear', 'system.audit.oplog.modal.clearConfirmContent': 'Are you sure to {msg}?', 'system.audit.oplog.message.loadFailed': 'Failed to load operation log', 'system.audit.oplog.message.clearSuccess': 'Clear successfully', 'system.audit.oplog.message.clearFailed': 'Clear failed', // System - Audit Log - Visit Log 'system.audit.vislog.search.placeholder': 'Enter keyword', 'system.audit.vislog.type.login': 'Login Log', 'system.audit.vislog.type.logout': 'Logout Log', 'system.audit.vislog.table.name': 'Name', 'system.audit.vislog.table.opIp': 'IP Address', 'system.audit.vislog.table.opAddress': 'Address', 'system.audit.vislog.table.opBrowser': 'Browser', 'system.audit.vislog.table.opOs': 'Operating System', 'system.audit.vislog.table.opUser': 'User', 'system.audit.vislog.table.opAccount': 'Account', 'system.audit.vislog.table.opTime': 'Operation Time', 'system.audit.vislog.table.operation': 'Action', 'system.audit.vislog.actions.clear': 'Clear', 'system.audit.vislog.actions.clearCurrent': 'Clear current log', 'system.audit.vislog.actions.view': 'View', 'system.audit.vislog.modal.clearConfirmTitle': 'Confirm Clear', 'system.audit.vislog.modal.clearConfirmContent': 'Are you sure to {msg}?', 'system.audit.vislog.message.loadFailed': 'Failed to load visit log', 'system.audit.vislog.message.clearSuccess': 'Clear successfully', 'system.audit.vislog.message.clearFailed': 'Clear failed', // System - Upstream interface parameter maintenance (new-port.vue) 'system.interface.section.basicInfo': 'Basic Info', 'system.interface.section.requestParams': 'Request Parameters', 'system.interface.section.secondRequestParams': 'Secondary Request Parameters', 'system.interface.section.responseParams': 'Response Parameters', 'system.interface.actions.addParam': 'Add Parameter', 'system.interface.actions.paramParse': 'Parse Parameters', 'system.interface.actions.add': 'Add', 'system.interface.actions.save': 'Save', 'system.interface.parse.needImportFirst': 'Import failed, please provide content in the required format first', 'system.interface.parse.needImportOrParseFirst': 'Import failed, please provide content in the required format or parse it first', 'system.interface.parse.success': 'Parsed successfully', 'system.interface.import.success': 'Imported successfully', 'system.interface.import.fail': 'Import failed', // Channel - Label Design 'channel.labelDesign.pageTitle': 'Label Template Config', 'channel.labelDesign.configTitle': 'Template Config', 'channel.labelDesign.sizeLabel': 'Label Size (W×H)', 'channel.labelDesign.widthPlaceholder': 'Width', 'channel.labelDesign.heightPlaceholder': 'Height', 'channel.labelDesign.titleLabel': 'Label Title', 'channel.labelDesign.titlePlaceholder': 'Enter label title', 'channel.labelDesign.contentLabel': 'Label Content', 'channel.labelDesign.contentPlaceholder': 'Enter label content', 'channel.labelDesign.apply': 'Apply', 'channel.labelDesign.reset': 'Reset', 'channel.labelDesign.previewTitle': 'Preview (drag to move, resize from corner)', 'channel.labelDesign.sizeMinError': 'Min size is 50px', 'channel.labelDesign.noTitle': 'No title', 'channel.labelDesign.noContent': 'No content', 'channel.labelDesign.applySuccess': 'Config applied', 'channel.labelDesign.resetSuccess': 'Config reset', 'channel.labelDesign.searchPlaceholder': 'Search by name', 'channel.labelDesign.typePlaceholder': 'Template type', 'channel.labelDesign.namePlaceholder': 'Template name', 'channel.labelDesign.loadingDesigner': 'Loading designer…', 'channel.labelDesign.total': '{n} total', 'channel.labelDesign.table.name': 'Name', 'channel.labelDesign.table.type': 'Type', 'channel.labelDesign.table.updateTime': 'Updated', 'channel.labelDesign.table.actions': 'Actions', 'channel.labelDesign.actions.search': 'Search', 'channel.labelDesign.actions.create': 'New template', 'channel.labelDesign.actions.edit': 'Design', 'channel.labelDesign.actions.delete': 'Delete', 'channel.labelDesign.actions.refresh': 'Refresh', 'channel.labelDesign.actions.back': 'Back', 'channel.labelDesign.actions.preview': 'Preview', 'channel.labelDesign.actions.print': 'Print', 'channel.labelDesign.actions.save': 'Save', 'channel.labelDesign.actions.openTemplate': 'Open template', 'channel.labelDesign.actions.open': 'Open', 'channel.labelDesign.actions.startDesign': 'Start design', 'channel.labelDesign.actions.cancel': 'Cancel', 'channel.labelDesign.loadingList': 'Loading templates…', 'channel.labelDesign.emptySelect': 'Select a template on the left, or create one', 'channel.labelDesign.openModal.title': 'Open system template', 'channel.labelDesign.openModal.confirmTitle': 'Switch template', 'channel.labelDesign.openModal.confirmContent': 'Unsaved canvas changes will be lost. Open the selected template?', 'channel.labelDesign.message.loadFailed': 'Failed to load templates', 'channel.labelDesign.message.saveSuccess': 'Template saved', 'channel.labelDesign.message.saveFailed': 'Save failed', 'channel.labelDesign.message.deleteSuccess': 'Deleted', 'channel.labelDesign.message.nameRequired': 'Template name is required', 'channel.labelDesign.message.alreadyOpen': 'This template is already open', 'channel.labelDesign.message.openSuccess': 'Opened: {name}', 'channel.labelDesign.fieldDictionary': 'Order fields', 'channel.labelDesign.fieldsInjectedHint': 'Order fields injected (platform/custom groups hidden)', 'channel.labelDesign.fieldsInjectFailed': 'Failed to inject order fields into the designer. Please refresh.', 'channel.labelDesign.message.fieldCopied': 'Copied field: {field}', 'channel.labelDesign.message.previewEmpty': 'Nothing to preview', 'channel.labelDesign.message.previewFailed': 'PDF preview failed', // Channel - Sales Products 'channel.salesProducts.search.placeholder': 'Enter product name', 'channel.salesProducts.search.refresh': 'Refresh list', 'channel.salesProducts.search.addProduct': 'Add product', 'channel.salesProducts.tabs.config': 'Product config', 'channel.salesProducts.tabs.price': 'Product pricing', 'channel.salesProducts.tabs.rules': 'Shipping rules', 'channel.salesProducts.tabs.customerGuide': 'Customer guide', 'channel.salesProducts.tabs.records': 'Publish records', 'channel.salesProducts.actions.save': 'Save', 'channel.salesProducts.actions.saveDraft': 'Save draft', 'channel.salesProducts.actions.saveAndPublish': 'Save & publish', 'channel.salesProducts.actions.add': 'Add', 'channel.salesProducts.actions.edit': 'Edit', 'channel.salesProducts.actions.delete': 'Delete', 'channel.salesProducts.actions.publish': 'Publish', 'channel.salesProducts.actions.rollback': 'Rollback to this version', 'channel.salesProducts.customerGuide.editing': 'Editing', 'channel.salesProducts.customerGuide.cancel': 'Cancel', 'channel.salesProducts.customerGuide.useTemplate': 'Use template', 'channel.salesProducts.customerGuide.clear': 'Clear', 'channel.salesProducts.customerGuide.source': 'Markdown source', 'channel.salesProducts.customerGuide.preview': 'Preview', 'channel.salesProducts.customerGuide.previewEmpty': 'Preview will appear here after you enter Markdown', 'channel.salesProducts.customerGuide.placeholder': 'Enter customer-facing notes (Markdown supported)', 'channel.salesProducts.customerGuide.empty': 'No customer guide yet. Click Edit or Use template', 'channel.salesProducts.customerGuide.selectProduct': 'Select a sales product on the left first', 'channel.salesProducts.price.effectiveVersion': 'Effective version: {version}', 'channel.salesProducts.empty.selectProduct': 'Select a product from the left', 'channel.salesProducts.context.product': 'Product', 'channel.salesProducts.context.group': 'Group', 'channel.salesProducts.context.unsaved': 'Unsaved', 'channel.salesProducts.unsaved.title': 'Unsaved changes', 'channel.salesProducts.unsaved.message': 'This tab has unsaved changes. Switching will discard them. Continue?', 'channel.salesProducts.unsaved.discard': 'Discard', 'channel.salesProducts.unsaved.stay': 'Stay', 'channel.salesProducts.saveConfirm.title': 'Save confirmation', 'channel.salesProducts.saveConfirm.message': 'After saving, the publish preview opens. Publish only after you confirm the diff.', 'channel.salesProducts.saveConfirm.cancel': 'Cancel', 'channel.salesProducts.messages.saveDraftSuccess': 'Draft saved (not published)', 'channel.salesProducts.messages.saveFailed': 'Save failed', 'channel.salesProducts.messages.toggleDisableTitle': 'Confirm disable', 'channel.salesProducts.messages.toggleDisableConfirm': 'This product will not be available for new orders. Disable "{name}"?', 'channel.salesProducts.publish.title': 'Publish confirmation', 'channel.salesProducts.publish.priceFlowTitle': 'Price publish', 'channel.salesProducts.publish.step1Title': 'AI risk analysis', 'channel.salesProducts.publish.step1Desc': 'Review diffs and generate a risk report', 'channel.salesProducts.publish.step1Hint': 'Finish AI analysis on the left flow card and adopt the report before formal publish.', 'channel.salesProducts.publish.step2Title': 'Formal publish', 'channel.salesProducts.publish.step2Desc': 'Confirm report, notes, and effective time', 'channel.salesProducts.publish.step2LockedHint': 'Unlocks after AI risk analysis is adopted.', 'channel.salesProducts.publish.step2ReadyHint': 'Analysis done — continue here to add notes and publish.', 'channel.salesProducts.publish.flowStatus.todo': 'Pending', 'channel.salesProducts.publish.flowStatus.doing': 'In progress', 'channel.salesProducts.publish.flowStatus.done': 'Done', 'channel.salesProducts.publish.flowStatus.locked': 'Locked', 'channel.salesProducts.publish.flowStatus.ready': 'Ready', 'channel.salesProducts.publish.flowRisk': 'Risk', 'channel.salesProducts.publish.startAi': 'Start AI analysis', 'channel.salesProducts.publish.gotoStep2': 'Continue to publish', 'channel.salesProducts.publish.backToStep1': 'Back', 'channel.salesProducts.publish.changeSummary': 'Change summary', 'channel.salesProducts.publish.advancedJson': 'Advanced: raw JSON snapshots', 'channel.salesProducts.publish.expandReport': 'Expand full AI report', 'channel.salesProducts.publish.highRiskAck': 'I reviewed the high-risk items and still want to publish', 'channel.salesProducts.publish.highRiskNeedAck': 'High-risk publish requires confirmation checkbox', 'channel.salesProducts.publish.finalConfirmHighRisk': 'Confirm high-risk publish', 'channel.salesProducts.publish.finalConfirm': 'Confirm publish', 'channel.salesProducts.publish.reanalyzeHint': 'Re-run analysis if you doubt the conclusion', 'channel.salesProducts.publish.remarkPlaceholder': 'Version note (optional)', 'channel.salesProducts.publish.effectiveTime': 'Effective time', 'channel.salesProducts.publish.effectiveTimeHint': 'Leave empty for immediate effect', 'channel.salesProducts.publish.success': 'Published successfully', 'channel.salesProducts.publish.fail': 'Publish failed', 'channel.salesProducts.publish.status.synced': 'Content matches the live cache; no republish needed', 'channel.salesProducts.publish.status.changed': '{count} change(s) detected; confirm to update the live cache', 'channel.salesProducts.publish.status.first': 'Not published yet; confirm to write to the live cache', 'channel.salesProducts.publish.onlineCache': 'Live cache', 'channel.salesProducts.publish.pendingCache': 'Pending publish', 'channel.salesProducts.publish.diffCount': 'Diff count: {count}', 'channel.salesProducts.publish.showOnlyDiff': 'Show diff only', 'channel.salesProducts.publish.confirm': 'Publish', 'channel.salesProducts.publish.noNeed': 'No publish needed', 'channel.salesProducts.publish.noDiffDetail': 'Matches the latest published version', 'channel.salesProducts.publish.legend.add': 'Added', 'channel.salesProducts.publish.legend.remove': 'Removed', 'channel.salesProducts.publish.legend.change': 'Changed', 'channel.salesProducts.publish.legend.same': 'Unchanged', 'channel.salesProducts.publish.badge.pending': 'Pending', 'channel.salesProducts.publish.badge.synced': 'Synced', 'channel.salesProducts.rules.schemeTitle': 'Shipping scheme', 'channel.salesProducts.rules.scheme.costLowest': 'Lowest cost', 'channel.salesProducts.rules.scheme.timeFastest': 'Fastest time', 'channel.salesProducts.rules.scheme.overallBest': 'Best overall', 'channel.salesProducts.rules.scheme.explanation': '(Use a scoring mechanism, the lowest score is considered optimal)', 'channel.salesProducts.table.providers.serialNo': 'No.', 'channel.salesProducts.table.providers.providerName': 'Provider name', 'channel.salesProducts.table.providers.serviceChannel': 'Service channel', 'channel.salesProducts.table.providers.weight': 'Weight', 'channel.salesProducts.table.providers.customers': 'Customers', 'channel.salesProducts.table.providers.actions': 'Action', 'channel.salesProducts.table.providers.placeholder.providerName': 'Enter provider name', 'channel.salesProducts.table.providers.placeholder.serviceChannel': 'Enter service channel', 'channel.salesProducts.table.price.status': 'Status', 'channel.salesProducts.publish.tabs.price': 'Price', 'channel.salesProducts.publish.tabs.rules': 'Rules', 'channel.salesProducts.publish.versionRemark': 'Version note', 'channel.salesProducts.publish.noRemark': 'No notes', 'channel.salesProducts.ai.open': 'AI analysis', 'channel.salesProducts.ai.openRequired': 'Required: AI analysis', 'channel.salesProducts.ai.openAgain': 'Re-run AI analysis', 'channel.salesProducts.ai.title': 'Step 1 · AI risk analysis', 'channel.salesProducts.ai.configLink': 'Configure AI', 'channel.salesProducts.ai.intro': 'Compare pending vs live prices and generate a risk report. Adopting it moves you to Step 2 Formal publish; the report is stored with the version.', 'channel.salesProducts.ai.introSimple': 'One-click compare pending vs live prices and generate a risk report; adopt it to continue publishing.', 'channel.salesProducts.ai.oneClick': 'Analyze now', 'channel.salesProducts.ai.advanced': 'Advanced (AI / model / prompt)', 'channel.salesProducts.ai.prefsHint': 'Using: {provider} · {model}', 'channel.salesProducts.ai.prefsNeedConfig': 'Pick AI and model in Advanced, or open Configure AI', 'channel.salesProducts.ai.provider': 'AI provider', 'channel.salesProducts.ai.providerPlaceholder': 'Select AI', 'channel.salesProducts.ai.model': 'Model', 'channel.salesProducts.ai.modelPlaceholder': 'Select or type a model', 'channel.salesProducts.ai.sendSkill': 'Send price-risk skill', 'channel.salesProducts.ai.sendSkillHint': 'Includes checklist and report format (recommended)', 'channel.salesProducts.ai.skillSelect': 'Skill', 'channel.salesProducts.ai.skillSelectPlaceholder': 'Pick a configured skill', 'channel.salesProducts.ai.prompt': 'Analysis request', 'channel.salesProducts.ai.promptPlaceholder': 'e.g. flag amount anomalies and customer-group price changes… (Ctrl+Enter)', 'channel.salesProducts.ai.generate': 'Analyze', 'channel.salesProducts.ai.generating': 'Analyzing…', 'channel.salesProducts.ai.clear': 'Clear result', 'channel.salesProducts.ai.result': 'Risk report', 'channel.salesProducts.ai.advice': 'Advice', 'channel.salesProducts.ai.rawReply': 'Full reply', 'channel.salesProducts.ai.copyReport': 'Copy report', 'channel.salesProducts.ai.skipAnalysis': 'Skip analysis', 'channel.salesProducts.ai.adoptReport': 'Adopt report', 'channel.salesProducts.ai.adoptAndContinue': 'Adopt and continue to publish', 'channel.salesProducts.ai.adopted': 'Report adopted', 'channel.salesProducts.ai.adoptedToStep2': 'Report adopted — confirm notes then publish', 'channel.salesProducts.ai.skippedToStep2': 'Analysis skipped — confirm notes then publish', 'channel.salesProducts.ai.skipSummary': '{operator} skipped AI analysis at {time}', 'channel.salesProducts.ai.needReportBeforeAdopt': 'Generate a report first', 'channel.salesProducts.ai.requireBeforePublish': 'Complete Step 1: AI analysis and adopt the report', 'channel.salesProducts.ai.pendingChangedNeedReanalyze': 'Pending prices changed — re-run AI analysis', 'channel.salesProducts.ai.statusPending': 'Step 1 incomplete', 'channel.salesProducts.ai.statusSkipped': 'Analysis skipped', 'channel.salesProducts.ai.statusReady': 'Step 1 done · {level}', 'channel.salesProducts.ai.statusSaved': 'Saved', 'channel.salesProducts.ai.confirmReportLabel': 'Adopted AI report (will be saved)', 'channel.salesProducts.ai.historyReport': 'AI analysis', 'channel.salesProducts.ai.copied': 'Report copied', 'channel.salesProducts.ai.copyFail': 'Copy failed', 'channel.salesProducts.ai.generateOk': 'Analysis ready — review then adopt to continue', 'channel.salesProducts.ai.generateFail': 'Analysis failed', 'channel.salesProducts.ai.emptyReply': 'Empty AI reply', 'channel.salesProducts.ai.parseFail': 'Could not parse a structured report; see full reply', 'channel.salesProducts.ai.needProviderModelPrompt': 'Select AI, model, and enter a request', 'channel.salesProducts.ai.loadProvidersFail': 'Failed to load AI providers', 'channel.salesProducts.ai.noDiff': 'Matches live cache; nothing to analyze', 'channel.salesProducts.ai.diffHint': '{count} change(s)', 'channel.salesProducts.modal.publishDateTitle': 'Select publish date', 'channel.salesProducts.modal.publishDate.placeholder': 'Please select date', 'channel.salesProducts.modal.actions.cancel': 'Cancel', 'channel.salesProducts.modal.actions.ok': 'OK', 'channel.salesProducts.form.productCode': 'Product code', 'channel.salesProducts.form.productName': 'Product name', 'channel.salesProducts.form.group': 'Group', 'channel.salesProducts.form.efficiency': 'Transit time', 'channel.salesProducts.form.tradeTerms': 'Trade terms', 'channel.salesProducts.form.routeSort': 'Route sort', 'channel.salesProducts.form.routeSortTip': 'Website lane order; smaller numbers appear first', 'channel.salesProducts.form.customerWaybill': 'System label', 'channel.salesProducts.form.placeholder.labelTemplate': 'Select label template (global default if empty)', 'channel.salesProducts.form.blacklistArea': 'Blacklist area', 'channel.salesProducts.form.remoteAreaDivision': 'Remote area division', 'channel.salesProducts.form.priceArea': 'Price area', 'channel.salesProducts.form.additionalServices': 'Additional services', 'channel.salesProducts.billingSimulate.open': 'Billing simulate', 'channel.salesProducts.billingSimulate.title': 'Billing simulate', 'channel.salesProducts.billingSimulate.destCountry': 'Country', 'channel.salesProducts.billingSimulate.province': 'Province/State', 'channel.salesProducts.billingSimulate.city': 'City', 'channel.salesProducts.billingSimulate.zipCode': 'Zip code', 'channel.salesProducts.billingSimulate.length': 'Length (cm)', 'channel.salesProducts.billingSimulate.width': 'Width (cm)', 'channel.salesProducts.billingSimulate.height': 'Height (cm)', 'channel.salesProducts.billingSimulate.weight': 'Actual weight (kg)', 'channel.salesProducts.billingSimulate.cargoAttribute': 'Cargo attribute', 'channel.salesProducts.billingSimulate.warehouse': 'Warehouse', 'channel.salesProducts.billingSimulate.additionalServices': 'Additional services', 'channel.salesProducts.billingSimulate.declaredSum': 'Declared amount', 'channel.salesProducts.billingSimulate.declaredCurrency': 'Declared currency', 'channel.salesProducts.billingSimulate.isRemote': 'Remote area', 'channel.salesProducts.billingSimulate.isRemoteAuto': 'By product zone', 'channel.salesProducts.billingSimulate.run': 'Simulate', 'channel.salesProducts.billingSimulate.chargeableWeight': 'Chargeable weight', 'channel.salesProducts.billingSimulate.zoneKeys': 'Zones', 'channel.salesProducts.billingSimulate.receivable': 'Receivable', 'channel.salesProducts.billingSimulate.payable': 'Payable', 'channel.salesProducts.billingSimulate.total': 'Total', 'channel.salesProducts.billingSimulate.margin': 'Margin', 'channel.salesProducts.billingSimulate.warnings': 'Warnings', 'channel.salesProducts.billingSimulate.emptyResult': 'No simulation result yet', 'channel.salesProducts.billingSimulate.needProduct': 'Select a sales product first', 'channel.salesProducts.billingSimulate.needCountry': 'Please select a destCountry', 'channel.salesProducts.billingSimulate.costItem': 'Cost item', 'channel.salesProducts.billingSimulate.amount': 'Amount', 'channel.salesProducts.billingSimulate.currency': 'Currency', 'channel.salesProducts.billingSimulate.formula': 'Formula', 'channel.salesProducts.form.weightCalculationRule': 'Weight rule', 'channel.salesProducts.form.weightRounding': 'Weight rounding', 'channel.salesProducts.form.productDescription': 'Product description', 'channel.salesProducts.form.preStorageScript': 'Pre-storage script', 'channel.salesProducts.form.placeholder.input': 'Please enter', 'channel.salesProducts.form.placeholder.min': 'Min', 'channel.salesProducts.form.placeholder.max': 'Max', 'channel.salesProducts.form.placeholder.select': 'Please select', 'channel.salesProducts.referencePreview.view': 'View details', 'channel.salesProducts.referencePreview.title': 'View: {name}', 'channel.salesProducts.referencePreview.noSelection': 'Please select an item first', 'channel.salesProducts.referencePreview.loadFailed': 'Failed to load details', 'channel.salesProducts.referencePreview.empty': 'No detail data', 'channel.salesProducts.drawer.tabs.basic': 'Basic info', 'channel.salesProducts.drawer.tabs.priceList': 'Price table', 'channel.salesProducts.drawer.form.costItem': 'Cost item', 'channel.salesProducts.drawer.form.costItemHelpTitle': 'How to configure', 'channel.salesProducts.drawer.form.costItemHelp.insurance': '1. Enable additional service "Insurance" on the sales product\n2. Set cost item to Insurance\n3. Formula = Declared-value %; put rate in the price table (e.g. 0.5 = 0.5% of declared sum)\n4. Billing condition: 附加服务包含(\'insurance\')\n5. Charged only when the customer selects insurance and enters a declared amount\nYou may use Total for a fixed amount with the same condition.', 'channel.salesProducts.drawer.form.costItemHelp.fuelSurcharge': '1. Set cost item to Fuel surcharge\n2. Formula = Freight %; put rate in the price table (e.g. 5 = 5% of same-currency freight total)\n3. Leave billing condition empty to always charge (or add filters as needed)\n4. The product must also have a freight item that produces an amount; fuel is based on that batch freight total\n5. You can use "All customers" for a single rate column', 'channel.salesProducts.drawer.form.costUnit': 'Cost unit', 'channel.salesProducts.drawer.form.currency': 'Currency', 'channel.salesProducts.drawer.form.chargingCondition': 'Billing condition', 'channel.salesProducts.billingCondition.placeholder': "e.g. 附加服务包含('insurance'); leave empty to always charge", 'channel.salesProducts.billingCondition.aiWrite': 'AI formula', 'channel.salesProducts.billingCondition.insertField': 'Insert field', 'channel.salesProducts.billingCondition.operators': 'Operators', 'channel.salesProducts.billingCondition.fields': 'Fields', 'channel.salesProducts.billingCondition.hint': 'Collapsed by default. Use AI to draft a formula, or Insert field to build manually. Empty = always charge.', 'channel.salesProducts.drawer.section.billingFactors': 'Billing factors', 'channel.salesProducts.drawer.table.billingFactors.serialNo': 'No.', 'channel.salesProducts.drawer.table.billingFactors.factor': 'Factor', 'channel.salesProducts.drawer.table.billingFactors.factorValues': 'Factor values', 'channel.salesProducts.drawer.table.billingFactors.actions': 'Action', 'channel.salesProducts.drawer.section.priceListTitle': 'Freight', 'channel.salesProducts.drawer.table.priceList.division': 'Division', 'channel.salesProducts.drawer.table.priceList.cargoType': 'Cargo type', 'channel.salesProducts.drawer.table.priceList.billingWeight': 'Billing weight/kg', 'channel.salesProducts.drawer.table.priceList.calculationFormula': 'Formula', 'channel.salesProducts.drawer.table.priceList.calculatedValue': 'Value', 'channel.salesProducts.drawer.table.priceList.customerGroup1': 'Customer group 1', 'channel.salesProducts.drawer.table.priceList.customerGroup2': 'Customer group 2', 'channel.salesProducts.drawer.footer.cancel': 'Cancel', 'channel.salesProducts.drawer.footer.generatePriceList': 'Generate price table', 'channel.salesProducts.drawer.footer.syncPriceList': 'Sync price table', 'channel.salesProducts.drawer.footer.save': 'Save', 'channel.salesProducts.drawer.priceList.hint': 'Existing rows keep prices; select rows to batch-fill', 'channel.salesProducts.drawer.priceList.batchFill': 'Batch fill', 'channel.salesProducts.drawer.priceList.batchFillEmpty': 'Fill empty/0 only', 'channel.salesProducts.drawer.priceList.copyPrev': 'Copy previous row', 'channel.salesProducts.drawer.priceList.batchFillSelected': '{count} rows selected', 'channel.salesProducts.drawer.priceList.batchFillValue': 'Price', // Channel - Service Channels 'channel.serviceChannels.search.placeholder': 'Enter channel name', 'channel.serviceChannels.search.refresh': 'Refresh list', 'channel.serviceChannels.search.addProvider': 'Add provider', 'channel.serviceChannels.search.addChannel': 'Add channel', 'channel.serviceChannels.leftMenu.editProvider': 'Edit provider', 'channel.serviceChannels.leftMenu.deleteProvider': 'Delete provider', 'channel.serviceChannels.leftMenu.addChannelHere': 'Add channel', 'channel.serviceChannels.leftMenu.editChannel': 'Edit channel', 'channel.serviceChannels.tabs.config': 'Channel config', 'channel.serviceChannels.tabs.price': 'Channel pricing', 'channel.serviceChannels.tabs.record': 'Publish records', 'channel.serviceChannels.actions.save': 'Save', 'channel.serviceChannels.actions.saveDraft': 'Save draft', 'channel.serviceChannels.actions.saveAndPublish': 'Save & publish', 'channel.serviceChannels.actions.add': 'Add', 'channel.serviceChannels.actions.edit': 'Edit', 'channel.serviceChannels.actions.delete': 'Delete', 'channel.serviceChannels.form.channelCode': 'Channel code', 'channel.serviceChannels.form.channelName': 'Channel name', 'channel.serviceChannels.form.timeLimit': 'Transit time', 'channel.serviceChannels.form.forecastConfig': 'Forecast config', 'channel.serviceChannels.form.forecastType': 'Forecast number type', 'channel.serviceChannels.form.forecastType.standard': 'Standard forecast', 'channel.serviceChannels.form.forecastType.custom': 'Custom forecast', 'channel.serviceChannels.form.forecastCode': 'Forecast channel code', 'channel.serviceChannels.form.remoteArea': 'Remote area', 'channel.serviceChannels.form.description': 'Channel description', 'channel.serviceChannels.form.preScript': 'Pre-forecast script', 'channel.serviceChannels.form.placeholder.input': 'Please enter', 'channel.serviceChannels.form.placeholder.min': 'Min', 'channel.serviceChannels.form.placeholder.max': 'Max', 'channel.serviceChannels.form.placeholder.selectForecastType': 'Please select forecast number type', 'channel.serviceChannels.form.placeholder.forecastCode': 'Enter forecast channel code', 'channel.serviceChannels.form.placeholder.description': 'Enter channel description', 'channel.serviceChannels.form.placeholder.preScript': 'Enter pre-forecast script', 'channel.serviceChannels.price.effectiveVersion': 'Effective version: {version}', 'channel.serviceChannels.price.table.serialNo': 'No.', 'channel.serviceChannels.price.table.status': 'Status', 'channel.serviceChannels.price.table.priceName': 'Price name', 'channel.serviceChannels.price.table.costItem': 'Cost item', 'channel.serviceChannels.price.table.costUnit': 'Cost unit', 'channel.serviceChannels.price.table.currency': 'Currency', 'channel.serviceChannels.price.table.billingFactors': 'Billing factors', 'channel.serviceChannels.price.table.modifyTime': 'Modify time', 'channel.serviceChannels.price.table.modifier': 'Modifier', 'channel.serviceChannels.price.table.actions': 'Action', 'channel.serviceChannels.record.tabs.price': 'Price', 'channel.serviceChannels.record.tabs.rules': 'Rules', 'channel.serviceChannels.record.actions.publish': 'Publish', 'channel.serviceChannels.record.actions.rollback': 'Rollback to this version', 'channel.serviceChannels.record.versionRemark': 'Version note', 'channel.serviceChannels.record.noRemark': 'No notes', 'channel.serviceChannels.record.versionNumber': 'Version: {version}', 'channel.serviceChannels.modal.publishDateTitle': 'Select publish date', 'channel.serviceChannels.modal.publishDate.placeholder': 'Please select date', 'channel.serviceChannels.modal.actions.cancel': 'Cancel', 'channel.serviceChannels.modal.actions.ok': 'OK', 'channel.serviceChannels.drawer.title.addPrice': 'Add price config', 'channel.serviceChannels.drawer.tabs.basic': 'Basic info', 'channel.serviceChannels.drawer.tabs.priceList': 'Price table', 'channel.serviceChannels.drawer.form.costItem': 'Cost item', 'channel.serviceChannels.drawer.form.costUnit': 'Cost unit', 'channel.serviceChannels.drawer.form.currency': 'Currency', 'channel.serviceChannels.drawer.form.chargingCondition': 'Billing condition', 'channel.serviceChannels.drawer.section.billingFactors': 'Billing factors', 'channel.serviceChannels.drawer.section.priceListTitle': 'Freight', 'channel.serviceChannels.drawer.table.billingFactors.serialNo': 'No.', 'channel.serviceChannels.drawer.table.billingFactors.factor': 'Factor', 'channel.serviceChannels.drawer.table.billingFactors.factorValues': 'Factor values', 'channel.serviceChannels.drawer.table.billingFactors.actions': 'Action', 'channel.serviceChannels.drawer.footer.cancel': 'Cancel', 'channel.serviceChannels.drawer.footer.generatePriceList': 'Generate price table', 'channel.serviceChannels.drawer.footer.syncPriceList': 'Sync price table', 'channel.serviceChannels.drawer.footer.save': 'Save', 'channel.serviceChannels.drawer.priceList.hint': 'Existing combos keep unit prices; select rows to batch-fill', 'channel.serviceChannels.drawer.priceList.batchFill': 'Batch fill', 'channel.serviceChannels.drawer.priceList.batchFillEmpty': 'Fill empty/0 only', 'channel.serviceChannels.drawer.priceList.copyPrev': 'Copy previous row', 'channel.serviceChannels.drawer.priceList.batchFillSelected': '{count} rows selected', 'channel.serviceChannels.drawer.priceList.batchFillValue': 'Unit price', 'channel.serviceChannels.createTime': 'Created: {time}', 'channel.serviceChannels.empty.selectChannel': 'Select a channel from the left', 'channel.serviceChannels.context.channel': 'Channel', 'channel.serviceChannels.context.group': 'Provider group', 'channel.serviceChannels.context.app': 'Application', 'channel.serviceChannels.context.apiProvider': 'API provider', 'channel.serviceChannels.context.unsaved': 'Unsaved', 'channel.serviceChannels.saveConfirm.title': 'Save confirmation', 'channel.serviceChannels.saveConfirm.message': 'Save only keeps a draft; save & publish pushes channel rules to the live cache.', 'channel.serviceChannels.saveConfirm.saveOnly': 'Save only', 'channel.serviceChannels.saveConfirm.saveAndPublish': 'Save & publish', 'channel.serviceChannels.saveConfirm.cancel': 'Cancel', 'channel.serviceChannels.unsaved.title': 'Unsaved changes', 'channel.serviceChannels.unsaved.message': 'Channel config has unsaved changes. Switching will discard them. Continue?', 'channel.serviceChannels.unsaved.discard': 'Discard', 'channel.serviceChannels.unsaved.stay': 'Stay', 'channel.serviceChannels.messages.saveDraftSuccess': 'Draft saved (not published)', 'channel.serviceChannels.messages.saveAndPublishSuccess': 'Saved and published', 'channel.serviceChannels.messages.publishFailedAfterSave': 'Config saved, but publish failed: {msg}', 'channel.serviceChannels.messages.toggleDisableConfirm': 'This channel will not be available for new orders. Disable "{name}"?', 'channel.serviceChannels.messages.toggleDisableTitle': 'Confirm disable', 'channel.serviceChannels.publish.title': 'Confirm price publish', 'channel.serviceChannels.publish.status.synced': 'Pricing matches the live cache; no republish needed', 'channel.serviceChannels.publish.status.changed': '{count} change(s) detected; confirm to update the live cache', 'channel.serviceChannels.publish.status.first': 'No published pricing yet; confirm to write to the live cache', 'channel.serviceChannels.publish.onlineCache': 'Live cache', 'channel.serviceChannels.publish.pendingCache': 'Pending publish', 'channel.serviceChannels.publish.diffCount': 'Diff count: {count}', 'channel.serviceChannels.publish.showOnlyDiff': 'Show diff only', 'channel.serviceChannels.publish.confirm': 'Publish', 'channel.serviceChannels.publish.noNeed': 'No publish needed', 'channel.serviceChannels.publish.noDiffDetail': 'Pricing matches the latest published version', 'channel.serviceChannels.publish.legend.add': 'Added', 'channel.serviceChannels.publish.legend.remove': 'Removed', 'channel.serviceChannels.publish.legend.change': 'Changed', 'channel.serviceChannels.publish.legend.same': 'Unchanged', 'channel.serviceChannels.publish.badge.pending': 'Pending', 'channel.serviceChannels.publish.badge.synced': 'Synced', // Channel - Blacklist/Remote Zones (shared) 'channel.area.listTitle': 'List', 'channel.area.search.placeholder': 'Enter keyword', 'channel.area.search.refresh': 'Refresh list', 'channel.area.search.addArea': 'Add area', 'channel.area.empty': 'No data', 'channel.area.actions.addDetail': 'Add area detail', 'channel.area.actions.edit': 'Edit', 'channel.area.actions.delete': 'Delete', 'channel.area.pagination.total': 'Total {count} records', 'channel.area.pagination.prev': 'Previous', 'channel.area.pagination.next': 'Next', 'channel.area.pagination.perPage': 'per page', 'channel.area.pagination.goTo': 'Go to', 'channel.area.pagination.page': 'page', 'channel.area.form.keyword': 'Keyword', 'channel.area.form.areaName': 'Area name', 'channel.area.form.destCountry': 'Country/Region', 'channel.area.form.province': 'State/Province', 'channel.area.form.city': 'City', 'channel.area.form.leftPostCode': 'Start postcode', 'channel.area.form.rightPostCode': 'End postcode', 'channel.area.form.placeholder.keyword': 'Enter keyword', 'channel.area.form.placeholder.areaName': 'Enter area name', 'channel.area.form.placeholder.input': 'Please enter', 'channel.area.form.rules.areaNameRequired': 'Please enter area name', 'channel.area.form.rules.destCountryRequired': 'Please select destCountry/region', 'channel.area.form.rules.maxLength128': 'Cannot exceed 128 characters', 'channel.area.form.rules.maxLength30': 'Cannot exceed 30 characters', 'channel.area.form.rules.noChinese': 'Cannot contain Chinese characters', 'channel.area.form.rules.noSpacesOnly': 'Start postcode cannot be spaces only', 'channel.area.form.rules.noSpacesOnlyEnd': 'End postcode cannot be spaces only', 'channel.area.modal.addArea': 'Add area', 'channel.area.modal.editArea': 'Edit area', 'channel.area.modal.addDetail': 'Add area detail', 'channel.area.modal.editDetail': 'Edit area detail', 'channel.area.modal.deleteConfirm': 'Are you sure to delete?', 'channel.area.modal.deleteConfirmDetail': 'Confirm deletion?', 'channel.area.modal.warningTitle': 'Warning', 'channel.area.table.serialNo': 'No.', 'channel.area.table.leftPostcode': 'Start postcode', 'channel.area.table.rightPostcode': 'End postcode', 'channel.area.table.leftPostCode': 'Start postcode code', 'channel.area.table.rightPostCode': 'End postcode code', 'channel.area.table.remark': 'Remark', 'channel.area.table.actions': 'Action', 'channel.area.message.deleteSuccess': 'Deleted successfully', 'channel.area.message.loadFailed': 'Failed to load data', 'channel.area.message.invalidPage': 'Please enter a valid page number', 'channel.area.search.button.query': 'Query', 'channel.area.search.button.reset': 'Reset', // Channel config shared 'channel.config.emptySelect': 'Select an item on the left first', 'channel.config.emptySelectDesc': 'Select a record from the left list or click "+" to create one, then manage details on the right.', 'channel.config.selectFirst': 'Please select a record on the left first', 'channel.config.selectFirstAction': 'Please select a record on the left before {action}', 'channel.config.detailCount': '{count} detail record(s)', 'channel.area.tip.addArea': 'Areas group detail records. Use a clear name such as "US West Coast" or "EU Remote".', 'channel.area.tip.editArea': 'Renaming an area does not change existing details. Avoid duplicate names.', 'channel.area.tip.addDetail': 'Country/region is required; state/province and city are optional. When using postcodes, start must not exceed end. Country only matches all postcodes in that destCountry.', 'channel.area.tip.editDetail': 'Changes apply immediately to channel matching. Verify destCountry and postcode range.', 'channel.area.form.placeholder.provinceOptional': 'Optional; leave blank for any state/province', 'channel.area.form.placeholder.cityOptional': 'Optional; leave blank for any city', 'channel.area.form.placeholder.leftPostCode': 'Optional; pair with end postcode', 'channel.area.form.placeholder.rightPostCode': 'Optional; must be greater than or equal to start', 'channel.area.form.rules.maxLength50': 'Cannot exceed 50 characters', 'channel.area.form.rules.postcodeRangeInvalid': 'Start postcode cannot be greater than end postcode', 'channel.area.modal.deleteConfirmWithName': 'Delete area "{name}"? All details under it will be removed.', 'channel.area.message.destCountryLoadFailed': 'Failed to load countries. Please refresh and try again.', 'channel.area.message.destCountryQuickTagMiss': 'Country not matched. Please select from the dropdown.', 'channel.area.message.editMissingRow': 'Record not found. Please refresh and try again.', 'channel.area.message.deleteFailed': 'Delete failed. Please try again later.', // Channel - Weight Rules 'channel.weightRules.listTitle': 'List', 'channel.weightRules.search.placeholder': 'Enter keyword', 'channel.weightRules.search.refresh': 'Refresh list', 'channel.weightRules.search.addRule': 'Add rule', 'channel.weightRules.empty': 'No data', 'channel.weightRules.actions.add': 'Add', 'channel.weightRules.actions.delete': 'Delete', 'channel.weightRules.pagination.total': 'Total {count} records', 'channel.weightRules.pagination.prev': 'Previous', 'channel.weightRules.pagination.next': 'Next', 'channel.weightRules.pagination.perPage': 'per page', 'channel.weightRules.pagination.goTo': 'Go to', 'channel.weightRules.pagination.page': 'page', 'channel.weightRules.form.keyword': 'Keyword', 'channel.weightRules.form.ruleName': 'Area name', 'channel.weightRules.form.condition': 'Condition expression', 'channel.weightRules.form.billableWeight': 'Billable weight value', 'channel.weightRules.form.volumetricFactor': 'Volumetric factor', 'channel.weightRules.form.placeholder.keyword': 'Enter keyword', 'channel.weightRules.form.placeholder.ruleName': 'Enter area name', 'channel.weightRules.form.placeholder.condition': 'Enter condition expression', 'channel.weightRules.form.placeholder.billableWeight': 'Enter billable weight value', 'channel.weightRules.form.placeholder.volumetricFactor': 'Enter volumetric factor', 'channel.weightRules.form.rules.ruleNameRequired': 'Please enter area name', 'channel.weightRules.form.rules.conditionRequired': 'Please enter condition expression', 'channel.weightRules.form.rules.billableWeightRequired': 'Please enter billable weight value', 'channel.weightRules.form.rules.volumetricFactorRequired': 'Please enter volumetric factor', 'channel.weightRules.modal.addArea': 'Add area', 'channel.weightRules.modal.editArea': 'Edit area', 'channel.weightRules.modal.addRule': 'Add rule', 'channel.weightRules.modal.editRule': 'Edit rule', 'channel.weightRules.modal.deleteConfirm': 'Are you sure to delete?', 'channel.weightRules.modal.deleteConfirmDetail': 'Confirm deletion?', 'channel.weightRules.modal.warningTitle': 'Warning', 'channel.weightRules.table.serialNo': 'No.', 'channel.weightRules.table.condition': 'Condition expression', 'channel.weightRules.table.billableWeight': 'Billable weight value', 'channel.weightRules.table.volumetricFactor': 'Volumetric factor', 'channel.weightRules.table.actions': 'Action', 'channel.weightRules.message.deleteSuccess': 'Deleted successfully', 'channel.weightRules.message.loadFailed': 'Failed to load data', 'channel.weightRules.message.invalidPage': 'Please enter a valid page number', 'channel.weightRules.search.button.query': 'Query', 'channel.weightRules.search.button.reset': 'Reset', 'channel.weightRules.updateTime': 'Updated: {time}', 'channel.weightRules.tip.emptySelectDesc': 'Select or create a weight rule group on the left, then manage billing conditions on the right.', 'channel.weightRules.tip.addRuleGroup': 'Rule groups separate business scenarios, e.g. "Standard" or "Oversize".', 'channel.weightRules.tip.editRuleGroup': 'Renaming a group does not change existing detail rules.', 'channel.weightRules.tip.addRule': 'Select condition and billable weight source. Volumetric factor must be a positive number (common values: 5000 or 6000).', 'channel.weightRules.tip.editRule': 'Changes affect billed weight calculation. Verify condition and volumetric factor.', 'channel.weightRules.form.rules.volumetricFactorPositive': 'Volumetric factor must be a number greater than 0', 'channel.weightRules.modal.deleteConfirmWithName': 'Delete rule group "{name}"? All detail rules will be removed.', 'channel.weightRules.message.dictLoadFailed': 'Failed to load dictionary data; dropdown options may be incomplete', 'channel.weightRules.message.deleteFailed': 'Delete failed. Please try again later.', // Channel - Weight Rounding 'channel.weightRounding.listTitle': 'List', 'channel.weightRounding.search.placeholder': 'Enter keyword', 'channel.weightRounding.search.refresh': 'Refresh list', 'channel.weightRounding.search.addRounding': 'Add rounding', 'channel.weightRounding.empty': 'No data', 'channel.weightRounding.actions.add': 'Add', 'channel.weightRounding.actions.delete': 'Delete', 'channel.weightRounding.pagination.total': 'Total {count} records', 'channel.weightRounding.pagination.prev': 'Previous', 'channel.weightRounding.pagination.next': 'Next', 'channel.weightRounding.pagination.perPage': 'per page', 'channel.weightRounding.pagination.goTo': 'Go to', 'channel.weightRounding.pagination.page': 'page', 'channel.weightRounding.form.keyword': 'Keyword', 'channel.weightRounding.form.roundingName': 'Rounding name', 'channel.weightRounding.form.startValue': 'Start value', 'channel.weightRounding.form.endValue': 'End value', 'channel.weightRounding.form.public': 'Rounding value (kg)', 'channel.weightRounding.form.placeholder.keyword': 'Enter keyword', 'channel.weightRounding.form.placeholder.roundingName': 'Enter rounding name', 'channel.weightRounding.form.placeholder.startValue': 'Enter start value', 'channel.weightRounding.form.placeholder.endValue': 'Enter end value', 'channel.weightRounding.form.placeholder.public': 'e.g. 0.5 means round up per 0.5 kg', 'channel.weightRounding.form.rules.roundingNameRequired': 'Please enter rounding name', 'channel.weightRounding.form.rules.startValueRequired': 'Please enter start value', 'channel.weightRounding.form.rules.endValueRequired': 'Please enter end value', 'channel.weightRounding.form.rules.publicRequired': 'Please enter rounding value', 'channel.weightRounding.modal.addRounding': 'Add rounding', 'channel.weightRounding.modal.editRounding': 'Edit rounding', 'channel.weightRounding.modal.addRule': 'Add rule', 'channel.weightRounding.modal.editRule': 'Edit rule', 'channel.weightRounding.modal.deleteConfirm': 'Are you sure to delete?', 'channel.weightRounding.modal.deleteConfirmDetail': 'Confirm deletion?', 'channel.weightRounding.modal.warningTitle': 'Warning', 'channel.weightRounding.table.serialNo': 'No.', 'channel.weightRounding.table.startValue': 'Start value', 'channel.weightRounding.table.endValue': 'End value', 'channel.weightRounding.table.public': 'Rounding value (kg)', 'channel.weightRounding.table.actions': 'Action', 'channel.weightRounding.message.deleteSuccess': 'Deleted successfully', 'channel.weightRounding.message.loadFailed': 'Failed to load data', 'channel.weightRounding.message.invalidPage': 'Please enter a valid page number', 'channel.weightRounding.search.button.query': 'Query', 'channel.weightRounding.search.button.reset': 'Reset', 'channel.weightRounding.updateTime': 'Updated: {time}', 'channel.weightRounding.tip.emptySelectDesc': 'Select or create a rounding scheme on the left, then manage weight intervals on the right.', 'channel.weightRounding.tip.addRoundingGroup': 'Rounding schemes define how billed weight is rounded, e.g. 0.5 kg or 1 kg steps.', 'channel.weightRounding.tip.editRoundingGroup': 'Renaming a scheme does not change existing interval rules.', 'channel.weightRounding.tip.addRule': 'Start value must be less than end value. Rounding value is the step size (e.g. 0.5 rounds up per 0.5 kg).', 'channel.weightRounding.tip.editRule': 'Changes affect rounding results. Ensure intervals do not overlap and values are correct.', 'channel.weightRounding.form.rules.rangeInvalid': 'Start value must be less than end value', 'channel.weightRounding.form.rules.publicPositive': 'Rounding value must be a number greater than 0', 'channel.weightRounding.form.rules.numberRequired': 'Please enter {field}', 'channel.weightRounding.form.rules.numberInvalid': '{field} must be a valid number', 'channel.weightRounding.modal.deleteConfirmWithName': 'Delete rounding scheme "{name}"? All rules under it will be removed.', 'channel.weightRounding.message.deleteFailed': 'Delete failed. Please try again later.', // Channel - Auto Trigger 'channel.autoTrigger.actions.add': 'Add', 'channel.autoTrigger.pagination.total': 'Total {count} records', 'channel.autoTrigger.pagination.prev': 'Previous', 'channel.autoTrigger.pagination.next': 'Next', 'channel.autoTrigger.pagination.perPage': 'per page', 'channel.autoTrigger.table.serialNo': 'No.', 'channel.autoTrigger.table.ruleName': 'Rule name', 'channel.autoTrigger.table.priority': 'Priority', 'channel.autoTrigger.table.status': 'Status', 'channel.autoTrigger.table.operation': 'Operation', 'channel.autoTrigger.table.triggerTiming': 'Trigger timing', 'channel.autoTrigger.table.triggerCondition': 'Trigger condition', 'channel.autoTrigger.table.promptMessage': 'Prompt message', 'channel.autoTrigger.table.notifier': 'Notifier', 'channel.autoTrigger.table.createTime': 'Create time', 'channel.autoTrigger.table.creator': 'Creator', 'channel.autoTrigger.table.actions': 'Action', 'channel.autoTrigger.actions.edit': 'Edit', 'channel.autoTrigger.actions.delete': 'Delete', 'channel.autoTrigger.message.statusEnabled': 'Status enabled', 'channel.autoTrigger.message.statusDisabled': 'Status disabled', 'channel.autoTrigger.message.deletePending': 'Delete function pending', 'channel.autoTrigger.message.editPending': 'Edit function pending', 'channel.autoTrigger.message.addPending': 'Add function pending', 'channel.autoTrigger.empty': 'No data', 'channel.autoTrigger.form.ruleNameRequired': 'Please enter a rule name', 'channel.autoTrigger.form.promptRequired': 'Please enter a prompt message', 'channel.autoTrigger.form.ruleNamePlaceholder': 'e.g. UK oversize intercept', 'channel.autoTrigger.form.promptPlaceholder': 'e.g. Oversize — order blocked', 'channel.autoTrigger.form.notifierPlaceholder': 'Optional notifier users for warn/problem', 'channel.autoTrigger.form.loadExample': 'Load oversize example', 'channel.autoTrigger.form.legacyTitle': 'Legacy plain-text condition detected — rebuild with the builder below', 'channel.autoTrigger.form.testFormula': 'Verify condition', 'channel.autoTrigger.form.testSample': 'Sample data', 'channel.autoTrigger.form.testByOrder': 'Real order', 'channel.autoTrigger.form.testHint': 'Evaluate the formula against sample data or an existing order. Does not affect live orders.', 'channel.autoTrigger.form.testRun': 'Run test', 'channel.autoTrigger.form.testNeedFormula': 'Enter a trigger formula first', 'channel.autoTrigger.form.testNeedOrderId': 'Enter a valid order ID', 'channel.autoTrigger.form.testOrderId': 'Order ID', 'channel.autoTrigger.form.testOrderIdPlaceholder': 't_order.Id', 'channel.autoTrigger.form.testMatched': 'Matched (true)', 'channel.autoTrigger.form.testNotMatched': 'Not matched (false)', 'channel.autoTrigger.form.testFailed': 'Formula test failed', 'channel.autoTrigger.form.sampleCountry': 'Country code', 'channel.autoTrigger.form.sampleCountryName': 'Country name', 'channel.autoTrigger.form.sampleCustomer': 'Customer name', 'channel.autoTrigger.form.sampleProduct': 'Product code', 'channel.autoTrigger.form.sampleLength': 'Length (cm)', 'channel.autoTrigger.form.sampleWidth': 'Width (cm)', 'channel.autoTrigger.form.sampleHeight': 'Height (cm)', 'channel.autoTrigger.form.sampleWeight': 'Weight (kg)', 'channel.autoTrigger.ai.open': 'AI formula', 'channel.autoTrigger.ai.toolbarHint': 'Describe the rule and let AI fill the formula', 'channel.autoTrigger.ai.title': 'AI trigger condition', 'channel.autoTrigger.ai.configLink': 'Configure AI', 'channel.autoTrigger.ai.intro': 'Pick an enabled AI provider and model, optionally send the formula skill, then generate and fill.', 'channel.autoTrigger.ai.provider': 'AI provider', 'channel.autoTrigger.ai.providerPlaceholder': 'Select AI', 'channel.autoTrigger.ai.model': 'Model', 'channel.autoTrigger.ai.modelPlaceholder': 'Select or type a model', 'channel.autoTrigger.ai.sendSkill': 'Send formula skill', 'channel.autoTrigger.ai.sendSkillHint': 'Includes syntax rules and field catalog (recommended)', 'channel.autoTrigger.ai.skillSelect': 'Skill', 'channel.autoTrigger.ai.skillSelectPlaceholder': 'Pick a configured skill', 'channel.autoTrigger.ai.prompt': 'Rule description', 'channel.autoTrigger.ai.promptPlaceholder': 'e.g. UK oversize intercept… (Ctrl+Enter to generate)', 'channel.autoTrigger.ai.generate': 'Generate', 'channel.autoTrigger.ai.generating': 'Generating…', 'channel.autoTrigger.ai.clear': 'Clear result', 'channel.autoTrigger.ai.result': 'Parsed result', 'channel.autoTrigger.ai.sampleHint': 'Sample', 'channel.autoTrigger.ai.rawReply': 'Full reply', 'channel.autoTrigger.ai.fillFormula': 'Fill formula', 'channel.autoTrigger.ai.filled': 'Formula filled', 'channel.autoTrigger.ai.generateOk': 'Formula ready — review then fill', 'channel.autoTrigger.ai.generateFail': 'Generation failed', 'channel.autoTrigger.ai.emptyReply': 'Empty AI reply', 'channel.autoTrigger.ai.parseFail': 'Could not parse a formula from the reply', 'channel.autoTrigger.ai.needProviderModelPrompt': 'Select AI, model, and enter a description', 'channel.autoTrigger.ai.loadProvidersFail': 'Failed to load AI providers', // Channel - Issue Template 'channel.issueTemplate.actions.add': 'Add', 'channel.issueTemplate.actions.edit': 'Edit', 'channel.issueTemplate.actions.delete': 'Delete', 'channel.issueTemplate.pagination.total': 'Total {count} records', 'channel.issueTemplate.pagination.prev': 'Previous', 'channel.issueTemplate.pagination.next': 'Next', 'channel.issueTemplate.table.status': 'Status', 'channel.issueTemplate.table.organization': 'Organization', 'channel.issueTemplate.table.issueType': 'Issue Type', 'channel.issueTemplate.table.title': 'Title', 'channel.issueTemplate.table.content': 'Content', 'channel.issueTemplate.table.notifyMethod': 'Notify Method', 'channel.issueTemplate.table.handlerType': 'Handler type', 'channel.issueTemplate.table.handlerUser': 'Assigned handler', 'channel.issueTemplate.handlerType.customer': 'Customer (order owner account)', 'channel.issueTemplate.handlerType.user': 'Specific user', 'channel.issueTemplate.form.handlerUserPlaceholder': 'Select handler', 'channel.issueTemplate.form.customerHandlerHint': 'Uses the order customer login account when creating issues; in-app notification only for now', 'channel.issueTemplate.org.platform': 'Platform Default', 'channel.issueTemplate.issueType.address': 'Address Issue', 'channel.issueTemplate.issueType.customs': 'Customs Issue', 'channel.issueTemplate.issueType.weight': 'Weight Issue', 'channel.issueTemplate.issueType.document': 'Document Issue', 'channel.issueTemplate.issueType.cargo': 'Cargo Issue', 'channel.issueTemplate.issueType.channel': 'Channel Issue', 'channel.issueTemplate.issueType.payment': 'Payment Issue', 'channel.issueTemplate.issueType.other': 'Other', 'channel.issueTemplate.notify.inApp': 'In-app', 'channel.issueTemplate.notify.email': 'Email', 'channel.issueTemplate.notify.sms': 'SMS', 'channel.issueTemplate.notify.feishu': 'Feishu', 'channel.issueTemplate.notify.wechat': 'WeChat', 'channel.issueTemplate.message.statusEnabled': 'Enabled', 'channel.issueTemplate.message.statusDisabled': 'Disabled', 'channel.issueTemplate.message.deleteConfirm': 'Delete this issue template?', 'channel.issueTemplate.message.loadFailed': 'Failed to load', 'channel.issueTemplate.message.saveFailed': 'Failed to save', // Track Center - Track Order 'track.order.search.placeholder.customsOrderNo': 'Enter order number', 'track.order.search.placeholder.isExternal': 'Please select if external', 'track.order.search.label.showTrajectory': 'Show track', 'track.order.search.label.hideTrajectory': 'Hide track', 'track.order.search.placeholder.time': 'Enter time', 'track.order.search.placeholder.timezone': 'Enter timezone', 'track.order.search.placeholder.location': 'Enter location', 'track.order.search.placeholder.content': 'Enter content', 'track.order.search.placeholder.remark': 'Enter remark', 'track.order.drawer.tabs.detail': 'Detail', 'track.order.drawer.tabs.pushRecord': 'Push record', 'track.order.drawer.tabs.log': 'Log', 'track.order.drawer.tabs.pullConfig': 'Track pull config', 'track.order.drawer.tabs.track': 'Order tracking', 'track.order.drawer.tabs.externalTrack': 'External order tracking', 'track.order.drawer.tabs.small': 'Small package', 'track.order.drawer.tabs.main': 'Main order', 'track.order.table.orderType': 'Order type', 'track.order.table.orderNo': 'Order number', 'track.order.table.customsOrderNo': 'Customer order number', 'track.order.table.customerShortName': 'Customer short name', 'track.order.table.thirdPartyOrderNo': 'Last mile order number', 'track.order.table.estimatedDeliveryTime': 'Estimated delivery time', 'track.order.table.deliveryTimezone': 'Delivery timezone', 'track.order.table.latestTrajectoryStatus': 'Latest trajectory status', 'track.order.table.latestTrajectoryContent': 'Latest trajectory content', 'track.order.table.latestTrajectoryContentEn': 'Latest trajectory content (EN)', 'track.order.table.latestTrajectoryTime': 'Latest trajectory time', 'track.order.table.latestTrajectoryTimezone': 'Latest trajectory timezone', 'track.order.table.latestTrajectoryLocation': 'Latest trajectory location', 'track.order.table.isComplete': 'Is complete', 'track.order.table.createTime': 'Create time', 'track.order.table.actions': 'Action', 'track.order.table.trackNo': 'Last mile order number', 'track.order.table.otherNo': 'Other order number', 'track.order.table.product': 'Sales product', 'track.order.table.channel': 'Service channel', 'track.order.table.apiCode': 'API service provider', 'track.order.table.countryCode': 'Country', 'track.order.table.destCountryCode': 'Country', 'track.order.table.province': 'Province/State', 'track.order.table.city': 'City', 'track.order.table.postcode': 'Postcode', 'track.order.table.email': 'Email', 'track.order.detail.title.trajectoryCode': 'Track code', 'track.order.detail.title.trajectoryContent': 'Track content', 'track.order.detail.title.trajectoryContentEn': 'Track content (EN)', 'track.order.detail.title.remark': 'Remark', 'track.order.detail.title.createUser': 'Creator', 'track.order.detail.title.trajectoryType': 'Track type', 'track.order.detail.title.trackTime': 'Track time', 'track.order.detail.title.trackTimeZone': 'Track timezone', 'track.order.detail.title.pushDetail': 'Push detail', 'track.order.detail.title.originTrackContent': 'Service provider source track content', 'track.order.detail.title.serviceProvider': 'Service provider', 'track.order.detail.title.trackPlaceCity': 'Track location (city)', 'track.order.detail.title.trackPlaceProvince': 'Track location (province/state)', 'track.order.detail.title.trackPlaceNation': 'Track location (destCountry/region)', 'track.order.detail.title.trackPlacePostcode': 'Track location postcode', 'track.order.detail.title.trackPlace': 'Track location', 'track.order.detail.title.isVisibility': 'Is visible', 'track.order.detail.trajectoryType.external': 'External service provider created', 'track.order.detail.trajectoryType.internal': 'Internal system created', 'track.order.detail.trajectoryType.manual': 'Manual created', 'track.order.detail.showAllSourceTrajectory': 'Show all source tracks from service provider', 'track.order.pagination.total': 'Total {count} records', 'track.order.pagination.prev': 'Previous', 'track.order.pagination.next': 'Next', 'track.order.pagination.perPage': 'per page', 'track.order.pagination.goTo': 'Go to', 'track.order.pagination.page': 'page', 'track.order.table.serialNo': 'No.', 'track.order.table.appName': 'Application', 'track.order.actions.addTrajectory': 'Add track', 'track.order.actions.updateTrajectory': 'Update track', 'track.order.actions.refreshTrajectory': 'Refresh track', 'track.order.actions.deleteTrajectory': 'Delete track', 'track.order.actions.pushTrajectory': 'Push track', 'track.order.actions.deleteOrder': 'Delete order', 'track.order.actions.batchUpdatePullConfig': 'Batch update pull config', 'track.order.actions.more': 'More', 'track.order.columnConfig.saveSuccess': 'Column settings saved', 'track.order.columnConfig.atLeastOne': 'Keep at least one column', 'track.order.modal.addTrajectory': 'Add track', 'track.order.modal.updateTrajectory': 'Update track', 'track.order.modal.deleteTrajectory': 'Delete track', 'track.order.modal.pushTrajectory': 'Push track', 'track.order.modal.viewDetail': 'View detail', 'track.order.modal.deleteSingleTrajectory': 'Are you sure to delete track {content}?', 'track.order.modal.deleteMultipleTrajectory': 'Are you sure to delete the following {count} tracks?', 'track.order.modal.deleteOrder': 'Are you sure to delete order {customsOrderNo}?', 'track.order.modal.deleteMultipleOrders': 'Are you sure to delete the following {count} orders?', 'track.order.message.selectSameOrderType': 'Please select the same order type and subsystem', 'track.order.message.selectSameOrderTypeOnly': 'Please select the same order type', 'track.order.message.cannotDeleteExternal': 'Tracks from external service providers cannot be deleted', 'track.order.message.operationSuccess': 'Operation successful, please check the result later.', 'track.order.message.refreshSuccess': 'Operation successful, please check the result later.', 'track.order.message.invalidPage': 'Page number out of range', 'track.order.log.table.optionType': 'Operation type', 'track.order.log.table.content': 'Log source text', 'track.order.log.table.createUserName': 'Operator', 'track.order.log.table.createTime': 'Operation time', 'track.order.pushRecord.table.requestId': 'Request ID', 'track.order.pushRecord.table.isSuccess': 'Is success', 'track.order.pushRecord.table.message': 'Message', 'track.order.pushRecord.table.optionType': 'Operation type', 'track.order.pushRecord.table.trackStatus': 'Track status', 'track.order.pushRecord.table.trackCode': 'Track content code', 'track.order.pushRecord.table.trackContent': 'Track content', 'track.order.pushRecord.table.trackPlace': 'Track location', 'track.order.pushRecord.table.trackGTMTimeZone': 'Track timezone', 'track.order.pushRecord.table.pushContent': 'Push detail', 'track.order.pushRecord.table.createUser': 'Creator', 'track.order.pushRecord.table.createTime': 'Create time', 'track.order.titleStrs.trajectoryCode': 'Track code', 'track.order.titleStrs.trajectoryContent': 'Track content', 'track.order.titleStrs.trajectoryContentEn': 'Track content (EN)', 'track.order.common.yes': 'Yes', 'track.order.common.no': 'No', 'track.order.pullConfig.appKey': 'App Key', 'track.order.pullConfig.orderType': 'Order Type', 'track.order.pullConfig.customsOrderNos': 'Order Numbers', 'track.order.pullConfig.items': 'Config Items', 'track.order.pullConfig.noData': 'No data', 'track.order.pullConfig.table.index': 'No.', 'track.order.pullConfig.table.pullOrderNo': 'Pull order no', 'track.order.pullConfig.table.serviceCode': 'Service provider', 'track.order.pullConfig.table.startCode': 'Start track pull', 'track.order.pullConfig.table.endCode': 'End track pull', 'track.order.pullConfig.table.silenceTime': 'Silence before start (h)', 'track.order.pullConfig.table.stopTime': 'Silence after end (h)', 'track.order.pullConfig.table.pullStatus': 'Pull status', 'track.order.pullConfig.table.startTime': 'Cron start time', 'track.order.pullConfig.table.endTime': 'Cron end time', 'track.order.pullConfig.pullStatus.initial': 'Initial', 'track.order.pullConfig.pullStatus.silenceBeforeStart': 'Silence before start', 'track.order.pullConfig.pullStatus.pulling': 'Pulling', 'track.order.pullConfig.pullStatus.silenceAfterEnd': 'Silence after end', 'track.order.pullConfig.pullStatus.completed': 'Completed', 'track.order.modal.columnConfig': 'Column config', 'track.order.modal.columnOrderTitle': 'Column order settings', 'track.order.modal.currentOrder': 'Current order', 'track.order.modal.editOrder': 'Edit order', 'track.order.modal.moveUp': 'Move up', 'track.order.modal.moveDown': 'Move down', 'track.order.modal.resetDefault': 'Reset default', 'track.order.pushRecord.title': 'Push record', 'track.order.pushRecord.table.pushContentCol': 'Push content', 'track.order.pushRecord.table.pushTime': 'Push time', 'track.order.pushRecord.table.pushStatus': 'Push status', 'track.order.pushRecord.table.pushResult': 'Push result', 'track.order.modal.batchInput': 'Batch input', 'track.order.modal.multiValueTips': 'Enter multiple values, one per line; paste comma-separated data to convert to rows; support copy, paste, cut; duplicates are auto-removed', 'track.order.modal.multiValuePlaceholder': 'Enter values, one per line, or paste comma-separated data', 'track.order.modal.valueCount': '{count} values', 'track.order.modal.noOrderNo': 'No order numbers', 'track.order.pagination.selectedCount': 'Selected', 'track.order.pagination.records': ' records', // Track Center - Warning Order 'track.warningOrder.tabs.return': 'Track return', 'track.warningOrder.tabs.transitTime': 'Transit time', 'track.warningOrder.tabs.complete': 'Trajectory complete', 'track.warningOrder.status.aboutToTimeout': 'About to timeout', 'track.warningOrder.status.timeout': 'Timeout', 'track.warningOrder.status.completed': 'Completed', 'track.warningOrder.status.timeoutCompleted': 'Timeout completed', 'track.warningOrder.status.closed': 'Closed', 'track.warningOrder.actions.addTrajectory': 'Add track', 'track.warningOrder.actions.refreshTrajectory': 'Refresh track', 'track.warningOrder.actions.pushTrajectory': 'Push track', 'track.warningOrder.pushRecord.title': 'Push record', 'track.warningOrder.modal.addTrajectory': 'Add track', 'track.warningOrder.modal.missingTrackDetail': 'Missing track detail', 'track.warningOrder.pagination.total': 'Total {count} records', 'track.warningOrder.pagination.prev': 'Previous', 'track.warningOrder.pagination.next': 'Next', 'track.warningOrder.pagination.perPage': 'per page', 'track.warningOrder.pagination.goTo': 'Go to', 'track.warningOrder.pagination.page': 'page', 'track.warningOrder.table.serialNo': 'No.', 'track.warningOrder.table.customsOrderNo': 'Order number', 'track.warningOrder.table.status': 'Status', 'track.warningOrder.table.createTime': 'Create time', 'track.warningOrder.message.loadFailed': 'Failed to load data', 'track.warningOrder.message.invalidPage': 'Please enter a valid page number', // Track Center - Track State 'track.state.search.placeholder': 'Enter track status code or name', 'track.state.actions.add': 'Add', 'track.state.actions.edit': 'Edit', 'track.state.actions.delete': 'Delete', 'track.state.modal.add': 'Add', 'track.state.modal.edit': 'Edit', 'track.state.modal.deleteConfirm': 'Are you sure to delete? If track content is bound to this status, deletion is prohibited. Please confirm.', 'track.state.modal.warningTitle': 'Warning', 'track.state.message.deleteSuccess': 'Deleted successfully', 'track.state.table.serialNo': 'No.', 'track.state.table.statusCode': 'Track status code', 'track.state.table.status': 'Track status', 'track.state.table.statusEn': 'Track status (EN)', 'track.state.table.isComplete': 'Is complete', 'track.state.table.isBroadcast': 'Is broadcast', 'track.state.table.createTime': 'Create time', 'track.state.table.creator': 'Creator', 'track.state.table.modifyTime': 'Modify time', 'track.state.table.modifier': 'Modifier', 'track.state.table.application': 'Application', 'track.state.table.actions': 'Action', 'track.state.form.statusCode': 'Track status code', 'track.state.form.statusCodeRequired': 'Please enter track status code', 'track.state.form.statusCodePlaceholder': 'Enter track status code', 'track.state.form.status': 'Track status', 'track.state.form.statusRequired': 'Please enter track status', 'track.state.form.statusPlaceholder': 'Enter track status', 'track.state.form.statusEn': 'Track status (EN)', 'track.state.form.statusEnRequired': 'Please enter track status (EN)', 'track.state.form.statusEnOnlyAlphanumeric': 'Only letters, numbers and underscores allowed', 'track.state.form.statusEnPlaceholder': 'Enter track status (EN)', 'track.state.form.isComplete': 'Is complete', 'track.state.form.isCompletePlaceholder': 'Please select if complete', 'track.state.form.isBroadcast': 'Is broadcast', 'track.state.form.isBroadcastPlaceholder': 'Please select if broadcast', 'track.state.form.application': 'Application', 'track.state.form.applicationRequired': 'Please select application', 'track.state.form.applicationPlaceholder': 'Please select application', 'track.state.common.yes': 'Yes', 'track.state.common.no': 'No', // Track Center - Track Flag 'track.flag.search.placeholder': 'Enter flag name', 'track.flag.actions.add': 'Add', 'track.flag.actions.edit': 'Edit', 'track.flag.actions.delete': 'Delete', 'track.flag.modal.add': 'Add', 'track.flag.modal.edit': 'Edit', 'track.flag.modal.deleteConfirm': 'Are you sure to delete? Deletion will affect track flag push. Please confirm.', 'track.flag.modal.warningTitle': 'Warning', 'track.flag.message.deleteSuccess': 'Deleted successfully', 'track.flag.table.serialNo': 'No.', 'track.flag.table.flag': 'Flag', 'track.flag.table.code': 'Code', 'track.flag.table.isBroadcast': 'Is broadcast', 'track.flag.table.createTime': 'Create time', 'track.flag.table.creator': 'Creator', 'track.flag.table.modifyTime': 'Modify time', 'track.flag.table.modifier': 'Modifier', 'track.flag.table.application': 'Application', 'track.flag.table.actions': 'Action', 'track.flag.form.flag': 'Flag', 'track.flag.form.flagRequired': 'Please enter flag', 'track.flag.form.flagOnlyChinese': 'Only Chinese characters allowed', 'track.flag.form.flagPlaceholder': 'Enter flag', 'track.flag.form.code': 'Code', 'track.flag.form.codeRequired': 'Please enter 2 uppercase letters', 'track.flag.form.codePlaceholder': 'Enter 2 uppercase letters', 'track.flag.form.isBroadcast': 'Is broadcast', 'track.flag.form.isBroadcastPlaceholder': 'Please select if broadcast', 'track.flag.form.application': 'Application', 'track.flag.form.applicationRequired': 'Please select application', 'track.flag.form.applicationPlaceholder': 'Please select application', 'track.flag.common.yes': 'Yes', 'track.flag.common.no': 'No', // Track Center - Track Content 'track.content.modal.addTitle': 'Add track content', 'track.content.modal.deleteConfirm': 'Are you sure to delete? If templates are bound to this track content, deletion is prohibited. Please confirm.', 'track.content.modal.warningTitle': 'Warning', 'track.content.message.deleteSuccess': 'Deleted successfully', 'track.content.search.placeholder': 'Enter track code or content', 'track.content.form.application': 'Application', 'track.content.form.applicationRequired': 'Please select application', 'track.content.form.applicationPlaceholder': 'Please select application', 'track.content.actions.add': 'Add', 'track.content.actions.edit': 'Edit', 'track.content.actions.delete': 'Delete', 'track.content.table.serialNo': 'No.', 'track.content.table.trajectoryCode': 'Track code', 'track.content.table.trajectoryContent': 'Track content', 'track.content.table.trajectoryContentEn': 'Track content (EN)', 'track.content.table.status': 'Status', 'track.content.table.flag': 'Track flag', 'track.content.table.isExternal': 'Is external', 'track.content.table.isRepeatable': 'Is repeatable', 'track.content.table.allowManualModify': 'Allow manual modify', 'track.content.table.allowManualCreate': 'Allow manual create', 'track.content.table.createTime': 'Create time', 'track.content.table.creator': 'Creator', 'track.content.table.modifyTime': 'Modify time', 'track.content.table.modifier': 'Modifier', 'track.content.table.application': 'Application', 'track.content.table.actions': 'Action', 'track.content.form.status': 'Status', 'track.content.form.statusPlaceholder': 'Please select', 'track.content.form.statusRequired': 'Please select status', 'track.content.form.trajectoryCode': 'Track code', 'track.content.form.trajectoryCodePlaceholder': 'Enter track code', 'track.content.form.trajectoryCodeRequired': 'Please enter track code', 'track.content.form.trajectoryContent': 'Track content', 'track.content.form.trajectoryContentPlaceholder': 'Enter track content', 'track.content.form.trajectoryContentRequired': 'Please enter track content', 'track.content.form.trajectoryContentEn': 'Track content (EN)', 'track.content.form.trajectoryContentEnPlaceholder': 'Enter track content (EN)', 'track.content.form.trajectoryContentEnRequired': 'Please enter track content (EN)', 'track.content.form.trajectoryContentEnNoChinese': 'Chinese characters not allowed', 'track.content.form.trackContentEnNoChinese': 'Chinese characters not allowed', 'track.content.form.flag': 'Track flag', 'track.content.form.flagPlaceholder': 'Please select', 'track.content.form.isExternal': 'Is external', 'track.content.form.isExternalPlaceholder': 'Please select if external', 'track.content.form.isRepeatable': 'Is repeatable', 'track.content.form.isRepeatablePlaceholder': 'Please select if repeatable', 'track.content.form.allowManualCreate': 'Support manual create', 'track.content.form.allowManualCreatePlaceholder': 'Please select if support manual create', 'track.content.form.allowManualModify': 'Support manual modify', 'track.content.form.allowManualModifyPlaceholder': 'Please select if support manual modify', 'track.content.titleStrs.statusCode': 'Track status code', 'track.content.titleStrs.status': 'Track status', 'track.content.titleStrs.flag': 'Flag', 'track.content.titleStrs.code': 'Code', 'track.content.titleStrs.isBroadcast': 'Is broadcast', 'track.content.common.yes': 'Yes', 'track.content.common.no': 'No', // Track Center - Track Push 'track.push.table.serialNo': 'No.', 'track.push.table.pushOrder': 'Push order', 'track.push.table.trajectoryCode': 'Track code', 'track.push.table.trajectoryContent': 'Track content', 'track.push.table.trajectoryContentEn': 'Track content (EN)', 'track.push.table.trackCode': 'Track code', 'track.push.table.trackContent': 'Track content', 'track.push.table.trackContentEn': 'Track content (EN)', 'track.push.table.standardTrajectory': 'Standard trajectory', 'track.push.table.standardTrack': 'Standard track', 'track.push.table.systemStandardTrack': 'System standard track', 'track.push.table.pushTrajectoryCode': 'Push track code', 'track.push.table.pushTrajectoryStatus': 'Push track status', 'track.push.table.pushTrajectoryContent': 'Push track content', 'track.push.table.pushTrajectoryContentEn': 'Push track content (EN)', 'track.push.table.pushExtendedField': 'Push extended field', 'track.push.table.actions': 'Action', 'track.push.form.application': 'Application', 'track.push.form.applicationRequired': 'Please select application', 'track.push.form.applicationPlaceholder': 'Please select application', 'track.push.form.customer': 'Customer', 'track.push.form.customerPlaceholder': 'Enter customer', 'track.push.form.customerRequired': 'Please select customer', 'track.push.form.serviceProvider': 'Service provider', 'track.push.form.serviceProviderPlaceholder': 'Please select service provider', 'track.push.form.serviceProviderRequired': 'Please select service provider', 'track.push.form.isAutoPush': 'Is auto push', 'track.push.form.isAutoPushPlaceholder': 'Please select if auto push', 'track.push.form.supportRepush': 'Support repush', 'track.push.form.supportRepushPlaceholder': 'Please select if support repush', 'track.push.form.supportDelete': 'Support delete', 'track.push.form.supportDeletePlaceholder': 'Please select if support delete', 'track.push.form.isFullPush': 'Is full push', 'track.push.form.isFullPushPlaceholder': 'Please select if full push', 'track.push.form.isLatestFullPush': 'Is full push (latest)', 'track.push.form.isLatestFullPushPlaceholder': 'Please select if full push latest', 'track.push.form.pushTimeStyle': 'Push time style', 'track.push.form.pushTimeStyle.none': 'Default', 'track.push.form.pushTimeStyle.timestamp': 'Timestamp', 'track.push.form.pushTimeStyle.timezone': 'Time + timezone', 'track.push.form.time': 'Time', 'track.push.form.timePlaceholder': 'Time format: yyyy-MM-dd HH:mm:ss or yyyy/MM/dd HH:mm:ss', 'track.push.form.timezone': 'Timezone', 'track.push.form.timezonePlaceholder': 'Timezone format: GMT/UTC', 'track.push.form.trajectoryCode': 'Track code', 'track.push.form.trajectoryCodeRequired': 'Please select track code', 'track.push.form.trackCode': 'Track code', 'track.push.form.trackCodeRequired': 'Please select track code', 'track.push.form.pushTrajectoryStatus': 'Push track status', 'track.push.form.pushTrajectoryStatusPlaceholder': 'Enter parameter value', 'track.push.form.pushTrackStatus': 'Push track status', 'track.push.form.pushTrackStatusPlaceholder': 'Enter parameter value', 'track.push.form.pushTrajectoryCode': 'Push track code', 'track.push.form.pushTrackCode': 'Push track code', 'track.push.form.pushTrajectoryContent': 'Push track content', 'track.push.form.pushTrackContent': 'Push track content', 'track.push.form.pushTrajectoryContentEn': 'Push track content (EN)', 'track.push.form.pushTrackContentEn': 'Push track content (EN)', 'track.push.form.pushExtendedField': 'Push track extended field', 'track.push.form.swapTrackContent': 'Swap track content', 'track.push.actions.add': 'Add', 'track.push.actions.edit': 'Edit', 'track.push.actions.delete': 'Delete', 'track.push.modal.deleteConfirm': 'Are you sure to delete?', 'track.push.modal.warningTitle': 'Warning', 'track.push.message.deleteSuccess': 'Deleted successfully', 'track.push.search.placeholder': 'Enter service provider name or appkey', 'track.push.actions.refresh': 'Refresh list', 'track.push.actions.addPush': 'Add push', 'track.push.common.yes': 'Yes', 'track.push.common.no': 'No', 'track.push.titleStrs.trajectoryCode': 'Track code', 'track.push.titleStrs.trajectoryContent': 'Track content', 'track.push.titleStrs.trackCode': 'Track code', 'track.push.titleStrs.trackContent': 'Track content', // Track Center - Warning Config 'track.warningConfig.tabs.complete': 'Track complete', 'track.warningConfig.tabs.transitTime': 'Transit time', 'track.warningConfig.tabs.returnTime': 'Track return', 'track.warningConfig.search.placeholder.customer': 'Enter customer short name', 'track.warningConfig.search.label.customer': 'Customer short name', 'track.warningConfig.search.label.kpiName': 'KPI name', 'track.warningConfig.search.placeholder.kpiName': 'Enter KPI name', 'track.warningConfig.search.label.status': 'Status', 'track.warningConfig.search.status.enabled': 'Enabled', 'track.warningConfig.search.status.disabled': 'Disabled', 'track.warningConfig.search.button.query': 'Query', 'track.warningConfig.search.button.reset': 'Reset', 'track.warningConfig.actions.refresh': 'Refresh list', 'track.warningConfig.actions.addRule': 'Add warning rule', 'track.warningConfig.actions.addScene': 'Add scene', 'track.warningConfig.actions.editScene': 'Edit scene', 'track.warningConfig.message.getRuleItemsFailed': 'Failed to get scene rule items data', 'track.warningConfig.message.getSceneFailed': 'Failed to get scene data', 'track.warningConfig.message.deleteSuccess': 'Deleted successfully', 'track.warningConfig.message.selectRuleFirst': 'Please select a warning rule item from the left list first', 'track.warningConfig.message.selectRule': 'Please select a warning rule from the left first', 'track.warningConfig.message.enterAtLeastOneFactor': 'Please enter at least one factor value', 'track.warningConfig.message.saveSuccess': 'Saved successfully', 'track.warningConfig.message.getSceneDetailFailed': 'Failed to get scene details', 'track.warningConfig.modal.deletePushConfirm': 'Confirm to delete this push?', 'track.warningConfig.modal.deleteSceneConfirm': 'Confirm to delete [{summary}]?', 'track.warningConfig.modal.warningTitle': 'Warning', 'track.warningConfig.factor.type.cargoType': 'Cargo type', 'track.warningConfig.factor.type.month': 'Month', 'track.warningConfig.factor.type.division': 'Division', 'track.warningConfig.factor.type.isTransit': 'Is transit', 'track.warningConfig.factor.type.port': 'Port', 'track.warningConfig.factor.type.salesProduct': 'Sales product', // Track Center - Track Pull 'track.pull.table.trackKeyword': 'Pull track keyword', 'track.pull.table.trackKeywordReverse': 'Pull track keyword (filter)', 'track.pull.table.trackPlaceValue': 'Fallback track location', 'track.pull.table.standardTrack': 'Standard track', 'track.pull.actions.add': 'Add', 'track.pull.actions.edit': 'Edit', 'track.pull.actions.delete': 'Delete', 'track.pull.actions.addPull': 'Add pull', 'track.pull.modal.deleteConfirm': 'Are you sure to delete this pull?', 'track.pull.modal.deleteContentConfirm': 'Are you sure to delete this pull content?', 'track.pull.modal.warningTitle': 'Warning', 'track.pull.message.deleteSuccess': 'Deleted successfully', ...localeSettings, ...localeLogin, ...localeWechat, ...localeH5TrackQuery, ...localeH5Center, ...localeWorkplace, ...localeMonitor, ...marketingEn, ...kbEn, };