All checks were successful
Build and Deploy Front / deploy (push) Successful in 5m42s
保留核心 InterfaceDetail/ApiTest 的 vxe;去掉死代码映射页,预警/账户等次要表迁 a-table;构建默认跳过 brotli、mermaid 分包;面单按需 EP;修复标签刷新竞态与 COS 打印鉴权。 Co-authored-by: Cursor <cursoragent@cursor.com>
5527 lines
336 KiB
TypeScript
5527 lines
336 KiB
TypeScript
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,
|
||
};
|