All checks were successful
Build and Deploy Front / deploy (push) Successful in 5m43s
工具栏增加创建轨迹订单按钮,调用 track-upsert-big-bag 并展示三步结果。 Co-authored-by: Cursor <cursoragent@cursor.com>
6176 lines
383 KiB
TypeScript
6176 lines
383 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.exportQualification': 'Export Qualification',
|
||
'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.declareElement': 'Export Declare Element',
|
||
'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.declareElement': 'Export Declare Element',
|
||
'warehouse.sku.form.declareElementPlaceholder': 'Customs export declare elements (optional)',
|
||
'warehouse.sku.form.showExtra': 'Show declaration extras (EN name / HS / declare element / remark)',
|
||
'warehouse.sku.form.hideExtra': 'Hide declaration extras',
|
||
'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.sku.tip.currentWarehouse': 'SKU belongs to the current warehouse; switch it from the top bar',
|
||
'warehouse.sku.tip.skuCode': 'Cannot change after create; letters/numbers only',
|
||
'warehouse.sku.tip.image': 'Prefer a clear front image, max 5MB',
|
||
'warehouse.sku.tip.weightSize': 'Used for billing and packing estimates; all optional',
|
||
'warehouse.sku.tip.volume': 'Auto-estimated from L×W×H; shows - if size is empty',
|
||
'warehouse.sku.tip.skuNameEn': 'English name for customs declaration',
|
||
'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.placeholder.binCode': 'e.g. A-01-01',
|
||
'warehouse.binLocation.placeholder.binName': 'Optional display name',
|
||
'warehouse.binLocation.placeholder.zoneCode': 'e.g. Zone A (optional)',
|
||
'warehouse.binLocation.placeholder.remark': 'Optional',
|
||
'warehouse.binLocation.tip.warehouse': 'Bin belongs to the warehouse selected on the left',
|
||
'warehouse.binLocation.tip.binCode': 'Unique in the warehouse; used when putting away stock',
|
||
'warehouse.binLocation.tip.zoneCode': 'For zone grouping; may match bin code prefix',
|
||
'warehouse.binLocation.tip.isEnabled': 'Disabled bins cannot be selected for putaway',
|
||
'warehouse.binLocation.hint.enabledOn': 'Enabled',
|
||
'warehouse.binLocation.hint.enabledOff': 'Disabled',
|
||
'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.form.warehousePlaceholder': 'Select warehouse',
|
||
'warehouse.parcel.tip.currentWarehouse': 'New parcels go to the current warehouse; switch it from the top bar',
|
||
'warehouse.parcel.tip.warehouse': 'Changing this reassigns the parcel warehouse',
|
||
'warehouse.parcel.tip.trackingNo': 'Domestic tracking number; barcode scanner supported',
|
||
'warehouse.parcel.tip.carrierName': 'Carrier name for receiving checks (optional)',
|
||
'warehouse.parcel.tip.products': 'At least one product is required; image, attributes and remark are optional',
|
||
'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.tip.currentWarehouse': 'Notice belongs to the current warehouse; switch it from the top bar',
|
||
'warehouse.inbound.tip.markReference': 'Usually the tracking number or master mark for receiving checks',
|
||
'warehouse.inbound.tip.inboundType': 'Normal or return inbound; used for later reporting',
|
||
'warehouse.inbound.tip.boxSkuDetail': 'Maintain SKUs and planned qty per box; add one box or five at once',
|
||
'warehouse.inbound.tip.markBoxNo': 'Per-box mark / box number (optional)',
|
||
'warehouse.inbound.tip.skuLines': 'Select at least one SKU per box; a blank row is added after selection',
|
||
'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.section.platform': 'Select platform',
|
||
'order.platformStore.section.store': 'Store info',
|
||
'order.platformStore.tip.add': 'Pick a platform, fill store info, then start authorization. Temu requires an auth code.',
|
||
'order.platformStore.tip.edit': 'You can update the nickname and related fields; platform cannot be changed after binding.',
|
||
'order.platformStore.tip.platform': 'Choose the marketplace; authorization steps differ by platform',
|
||
'order.platformStore.tip.nickname': 'Custom display name for recognition; does not change the platform store name',
|
||
'order.platformStore.tip.authCode': 'Get the auth code from Temu seller store management',
|
||
'order.platformStore.tip.siteCountry': 'Store site/country; affects which orders can be pulled',
|
||
'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.exportQualification.searchPlaceholder':
|
||
'Company / credit code / consignor / producer',
|
||
'user.exportQualification.actions.add': 'Add Filing',
|
||
'user.exportQualification.modal.add': 'Add Export Qualification',
|
||
'user.exportQualification.modal.edit': 'Edit Export Qualification',
|
||
'user.exportQualification.fields.companyName': 'Company Name',
|
||
'user.exportQualification.fields.socialCreditCode': 'Social Credit Code',
|
||
'user.exportQualification.fields.domesticConsignor': 'Domestic Consignor',
|
||
'user.exportQualification.fields.domesticConsignorCustomsCode':
|
||
'Domestic Consignor Customs Code',
|
||
'user.exportQualification.fields.producerName': 'Producer / Seller',
|
||
'user.exportQualification.fields.producerCustomsCode': 'Producer Customs Code',
|
||
'user.exportQualification.fields.customsPort': 'Customs Port of Filing',
|
||
'user.exportQualification.table.companyName': 'Company Name',
|
||
'user.exportQualification.table.socialCreditCode': 'Social Credit Code',
|
||
'user.exportQualification.table.domesticConsignor': 'Domestic Consignor',
|
||
'user.exportQualification.table.domesticConsignorCustomsCode':
|
||
'Domestic Consignor Customs Code',
|
||
'user.exportQualification.table.producerName': 'Producer / Seller',
|
||
'user.exportQualification.table.producerCustomsCode': 'Producer Customs Code',
|
||
'user.exportQualification.table.customsPort': 'Customs Port of Filing',
|
||
'user.exportQualification.table.isDefault': 'Default',
|
||
'user.exportQualification.table.remark': 'Remark',
|
||
'user.exportQualification.table.createTime': 'Created',
|
||
'user.exportQualification.fields.isDefault': 'Set as Default',
|
||
'user.exportQualification.fields.remark': 'Remark',
|
||
'user.exportQualification.actions.setDefault': 'Set Default',
|
||
'user.exportQualification.tip.isDefault':
|
||
'Only one default filing per customer; used for customs autofill later',
|
||
'user.exportQualification.hint.defaultOn': 'Default',
|
||
'user.exportQualification.hint.defaultOff': 'Not default',
|
||
'user.exportQualification.placeholder.input': 'Please enter',
|
||
'user.exportQualification.placeholder.remark': 'Optional',
|
||
'user.exportQualification.message.loadFailed': 'Failed to load filings',
|
||
'user.exportQualification.message.saveSuccess': 'Saved',
|
||
'user.exportQualification.message.saveFailed': 'Save failed',
|
||
'user.exportQualification.message.deleteSuccess': 'Deleted',
|
||
'user.exportQualification.message.setDefaultSuccess': 'Default filing updated',
|
||
'user.exportQualification.message.companyNameRequired': 'Company name is required',
|
||
'user.exportQualification.message.socialCreditCodeRequired':
|
||
'Social credit code is required',
|
||
'user.exportQualification.message.domesticConsignorRequired':
|
||
'Domestic consignor is required',
|
||
'user.exportQualification.message.producerNameRequired': 'Producer name is required',
|
||
'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': 'Domestic sender',
|
||
'user.senderAddress.type.return': 'Domestic return',
|
||
'user.senderAddress.type.pickup': 'Domestic pickup',
|
||
'user.senderAddress.type.receiver': 'Overseas 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.section.typeContact': 'Type & Contact',
|
||
'user.senderAddress.section.address': 'Address',
|
||
'user.senderAddress.section.other': 'Other',
|
||
'user.senderAddress.tip.addressType':
|
||
'Domestic sender / return / pickup / overseas receiver; one default per type',
|
||
'user.senderAddress.tip.addressName': 'Short name for quick pick when placing orders',
|
||
'user.senderAddress.tip.countryCode': 'ISO alpha-2, e.g. CN, US, GB',
|
||
'user.senderAddress.tip.isDefault': 'Replaces the previous default for this type',
|
||
'user.senderAddress.hint.defaultOn': 'Default',
|
||
'user.senderAddress.hint.defaultOff': 'Not default',
|
||
'user.senderAddress.placeholder.selectType': 'Select address type',
|
||
'user.senderAddress.placeholder.addressName': 'e.g. Warehouse',
|
||
'user.senderAddress.placeholder.senderName': 'Enter contact name',
|
||
'user.senderAddress.placeholder.phone': 'Enter phone',
|
||
'user.senderAddress.placeholder.company': 'Optional',
|
||
'user.senderAddress.placeholder.countryCode': 'e.g. CN',
|
||
'user.senderAddress.placeholder.province': 'Province / state',
|
||
'user.senderAddress.placeholder.city': 'City',
|
||
'user.senderAddress.placeholder.zipCode': 'Zip / postal code',
|
||
'user.senderAddress.placeholder.streetAddress1': 'Enter street address',
|
||
'user.senderAddress.placeholder.streetAddress2': 'Optional',
|
||
'user.senderAddress.placeholder.houseNumber': 'Optional',
|
||
'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': 'Forward Downstream',
|
||
'order.customs9610.modal.edit': 'Edit 9610 declaration',
|
||
'order.customs9610.modal.detail': '9610 declaration detail',
|
||
'order.customs9610.modal.tipEdit':
|
||
'Verify platform, numbers and enterprise fields before save. Item rows can be added or removed; the table scrolls.',
|
||
'order.customs9610.modal.tipDetail': 'Declared records are view-only.',
|
||
'order.customs9610.section.basic': 'Basic Info',
|
||
'order.customs9610.section.enterprise': 'Enterprise',
|
||
'order.customs9610.section.more': 'More',
|
||
'order.customs9610.placeholder.region': 'SZ / other',
|
||
'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': 'Export 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': 'Forward Downstream',
|
||
'order.customs9610.confirm.batchDeclarationFormContent':
|
||
'Forward {count} pending record(s) downstream (create9610Order / BH). Continue?',
|
||
'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': 'Downstream forward failed',
|
||
'order.customs9610.modal.downstreamForwardTitle': 'Downstream forward result',
|
||
'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.direction.forward': 'Forward',
|
||
'order.pickupOrder.direction.reverse': 'Reverse',
|
||
'order.pickupOrder.direction.forwardHint': 'Customer pickup address → warehouse',
|
||
'order.pickupOrder.direction.reverseHint': 'Warehouse → customer pickup address',
|
||
'order.pickupOrder.table.direction': 'Direction',
|
||
'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.createForward': 'Create Forward Pickup',
|
||
'order.pickupOrder.actions.createReverse': 'Create Reverse Pickup',
|
||
'order.pickupOrder.actions.submit': 'Submit',
|
||
'order.pickupOrder.modal.create': 'Create Pickup Order',
|
||
'order.pickupOrder.modal.createForward': 'Create Forward Pickup',
|
||
'order.pickupOrder.modal.createReverse': 'Create Reverse Pickup',
|
||
'order.pickupOrder.route.from': 'Pickup from',
|
||
'order.pickupOrder.route.to': 'Deliver to',
|
||
'order.pickupOrder.route.customer': 'Customer address',
|
||
'order.pickupOrder.route.warehouse': 'Warehouse',
|
||
'order.pickupOrder.route.forwardLabel': 'Customer address → Warehouse',
|
||
'order.pickupOrder.route.reverseLabel': 'Warehouse → Customer address',
|
||
'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.sectionMode': 'Create mode',
|
||
'order.pickupOrder.create.sectionPickup': 'Pickup details',
|
||
'order.pickupOrder.create.sectionCargo': 'Cargo details',
|
||
'order.pickupOrder.create.sectionOrders': 'Select waybills',
|
||
'order.pickupOrder.tip.selectOrders': 'Only unbound pre-declared waybills; multi-select must share one warehouse',
|
||
'order.pickupOrder.tip.pickup':
|
||
'Use a Domestic pickup address; forward = customer → warehouse, reverse = warehouse → customer',
|
||
'order.pickupOrder.tip.cargo': 'Cargo and product are used for the new waybill pricing and inbound',
|
||
'order.pickupOrder.form.remarkPlaceholder': 'Optional pickup notes',
|
||
'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': 'Pickup address',
|
||
'order.pickupOrder.form.senderAddressPlaceholder': 'Select a domestic pickup 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 Domestic pickup address in Address Management first',
|
||
'order.pickupOrder.message.senderRequired': 'Pickup 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.pickupOrder.message.downstreamNeedSelect': 'Select pickup sheets to forward downstream',
|
||
'order.pickupOrder.message.downstreamNoBoundOrders': 'Selected pickup sheets cannot be forwarded',
|
||
'order.pickupOrder.message.downstreamPartialEmpty': 'Skipped pickup sheets: {pickups}',
|
||
'order.pickupOrder.message.trackNeedSelect': 'Select pickup sheets to create track orders',
|
||
'order.pickupOrder.modal.trackUpsertTitle': 'Create track order result',
|
||
'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.panel.tabsAria': 'Data permission dimensions',
|
||
'system.dataPerm.audit.tabsAria': 'Audit log types',
|
||
'system.dataPerm.audit.tab.change': 'Config change log',
|
||
'system.dataPerm.audit.tab.access': 'Data access log',
|
||
'system.dataPerm.audit.accessTip':
|
||
'Access logs are not written automatically in P1; this page is reserved until internal audit is enabled.',
|
||
'system.dataPerm.audit.targetType': 'Target type',
|
||
'system.dataPerm.audit.targetId': 'Target ID',
|
||
'system.dataPerm.audit.userId': 'User GUID',
|
||
'system.dataPerm.audit.module': 'Module',
|
||
'system.dataPerm.audit.target.user': 'User',
|
||
'system.dataPerm.audit.target.role': 'Role',
|
||
'system.dataPerm.audit.target.template': 'Template',
|
||
'system.dataPerm.audit.module.order': 'Order',
|
||
'system.dataPerm.audit.module.customer': 'Customer',
|
||
'system.dataPerm.audit.col.time': 'Time',
|
||
'system.dataPerm.audit.col.target': 'Target',
|
||
'system.dataPerm.audit.col.targetId': 'Target ID',
|
||
'system.dataPerm.audit.col.action': 'Action',
|
||
'system.dataPerm.audit.col.operatorMapId': 'Operator mapId',
|
||
'system.dataPerm.audit.col.module': 'Module',
|
||
'system.dataPerm.audit.col.api': 'API',
|
||
'system.dataPerm.audit.col.rowCount': 'Rows',
|
||
'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',
|
||
'nav.printControl.download': 'Download print control / one-click parcel plugin',
|
||
|
||
// 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 a domestic pickup 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.waybillManage.importDownstream.action': 'Import reconcile weight',
|
||
'order.waybillManage.importDownstream.modalTitle': 'Import reconcile weight',
|
||
'order.waybillManage.importDownstream.tip':
|
||
'Writes agent-reconciled weight to downstream dimensions and recalculates payable on the current channel only. Receivable is never changed. Length/width/height are optional (falls back to receive/ship). Actual weight is required. Max 2000 rows per file.',
|
||
'order.waybillManage.importDownstream.downloadTemplate': 'Download template',
|
||
'order.waybillManage.importDownstream.submit': 'Import',
|
||
'order.waybillManage.importDownstream.cancel': 'Cancel',
|
||
'order.waybillManage.importDownstream.downloadSuccess': 'Template downloaded',
|
||
'order.waybillManage.importDownstream.downloadFailed': 'Template download failed',
|
||
'order.waybillManage.importDownstream.needFile': 'Please select an Excel file',
|
||
'order.waybillManage.importDownstream.success': 'Import succeeded',
|
||
'order.waybillManage.importDownstream.failed': 'Import failed',
|
||
'order.waybillManage.importDownstream.partialSuccess': 'Some rows failed; see details below',
|
||
'order.waybillManage.importDownstream.allFailed': 'Import failed; check the file',
|
||
'order.waybillManage.importDownstream.resultSummary': '{success} succeeded, {fail} failed',
|
||
'order.waybillManage.importDownstream.failRow': 'Row {row} ({waybill}): {reason}',
|
||
'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.section.scheme': 'Allocation scheme',
|
||
'order.myOrders.reallocate.section.channel': 'Designated channel',
|
||
'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.modalTip':
|
||
'Pick an issue type first. Optional templates auto-fill title and content; placeholders are supported.',
|
||
'order.myOrders.problematic.section.basic': 'Classification',
|
||
'order.myOrders.problematic.section.content': 'Details',
|
||
'order.myOrders.problematic.issueType': 'Issue type',
|
||
'order.myOrders.problematic.template': 'Issue template',
|
||
'order.myOrders.problematic.templateTip': 'Selecting a template fills title and content; you can edit afterwards',
|
||
'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.remarkPlaceholder': 'Optional notes',
|
||
'order.myOrders.problematic.success': 'Problematic orders created',
|
||
'order.myOrders.claimed.modalTitle': 'Create claim ({count} orders)',
|
||
'order.myOrders.claimed.modalTip':
|
||
'Fill claim type and amount. Amount should not exceed the declared total when available.',
|
||
'order.myOrders.claimed.section.basic': 'Claim Info',
|
||
'order.myOrders.claimed.section.detail': 'Reason',
|
||
'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': 'Fulfillment',
|
||
'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.previewFailed': 'Preview failed',
|
||
'order.myOrders.drawer.attachments.previewBlocked': 'Please allow pop-ups to preview the attachment',
|
||
'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.poolSummary': 'Pool {pool}, condition pass {pass}, candidates {cand}',
|
||
'order.myOrders.allocationTrace.stage.condition': 'Match condition',
|
||
'order.myOrders.allocationTrace.stage.customer': 'Customer list',
|
||
'order.myOrders.allocationTrace.stage.channel': 'Service channel',
|
||
'order.myOrders.allocationTrace.stage.buyPrice': 'Buy price',
|
||
'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.declarationDeclareElement': 'Export declare element',
|
||
'order.myOrders.drawer.declarationSkuImage': 'Image',
|
||
'order.myOrders.drawer.declarationSkuImageView': 'View 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.receiverModalTitle': 'Select recipient address',
|
||
'order.placeOrder.single.receiverSelectLabel': 'Recipient address',
|
||
'order.placeOrder.single.receiverSelectPlaceholder': 'Choose a recipient address from Address Management',
|
||
'order.placeOrder.single.receiverPreviewTitle': 'Current recipient',
|
||
'order.placeOrder.single.receiverEmpty': 'No recipient address yet. Add one in Address Management or fill manually.',
|
||
'order.placeOrder.single.receiverPickHint': 'Select saved recipient',
|
||
'order.placeOrder.single.receiverEditHint': 'Click to change recipient',
|
||
'order.placeOrder.single.receiverLoadFailed': 'Failed to load recipient addresses',
|
||
'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.selfShipAddressTitle': 'Ship to warehouse',
|
||
'order.placeOrder.single.selfShipRecipient': 'Recipient',
|
||
'order.placeOrder.single.selfShipPhone': 'Phone',
|
||
'order.placeOrder.single.selfShipAddress': 'Address',
|
||
'order.placeOrder.single.selfShipClientNo': 'Client No.',
|
||
'order.placeOrder.single.selfShipCopy': 'Copy',
|
||
'order.placeOrder.single.selfShipCopySuccess': 'Warehouse shipping info copied',
|
||
'order.placeOrder.single.selfShipCopyFailed': 'Copy failed',
|
||
'order.placeOrder.single.selfShipSelectWarehouse': 'Select a warehouse above first',
|
||
'order.placeOrder.single.selfShipAddressEmpty':
|
||
'This warehouse has no shipping address yet. Contact support or choose another warehouse.',
|
||
'order.placeOrder.single.selfShipAddressHint':
|
||
'Ship to this address yourself. Put the client number on the courier label so the warehouse can match it.',
|
||
'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': 'Copy',
|
||
'system.serviceProviders.dropdown.authConfig': 'Auth config',
|
||
'system.serviceProviders.dropdown.accountManage': 'Account management',
|
||
'system.serviceProviders.dropdown.export': 'Export',
|
||
'system.serviceProviders.dropdown.import': 'Import provider',
|
||
'system.serviceProviders.import.success': 'Imported',
|
||
'system.serviceProviders.import.fail': 'Import failed',
|
||
'system.serviceProviders.dropdown.fixedParams': 'Common params',
|
||
'system.serviceProviders.dropdown.delete': 'Delete',
|
||
|
||
'system.serviceProviders.publish.title': 'Publish mapping cache · {name}',
|
||
'system.serviceProviders.publish.tip': 'After auth, common params, or provider changes are saved, remapped system interfaces must be republished to refresh the live cache.',
|
||
'system.serviceProviders.publish.confirmAfterSave': 'Saved. Common params / config take effect online only after publishing mapping cache. Check and publish now?',
|
||
'system.serviceProviders.publish.goPublish': 'Publish',
|
||
'system.serviceProviders.publish.later': 'Later',
|
||
'system.serviceProviders.publish.close': 'Close',
|
||
'system.serviceProviders.publish.checkAll': 'Recheck',
|
||
'system.serviceProviders.publish.recheck': 'Recheck',
|
||
'system.serviceProviders.publish.publishAll': 'Publish all changes',
|
||
'system.serviceProviders.publish.summary': '{total} mapping(s), {changed} pending',
|
||
'system.serviceProviders.publish.col.interface': 'System interface',
|
||
'system.serviceProviders.publish.col.code': 'Code',
|
||
'system.serviceProviders.publish.col.status': 'Status',
|
||
'system.serviceProviders.publish.col.diff': 'Diffs',
|
||
'system.serviceProviders.publish.status.pending': 'Checking',
|
||
'system.serviceProviders.publish.status.synced': 'Synced',
|
||
'system.serviceProviders.publish.status.changed': '{count} change(s)',
|
||
'system.serviceProviders.publish.status.first': 'First publish',
|
||
'system.serviceProviders.publish.status.error': 'Check failed',
|
||
'system.serviceProviders.publish.emptyMaps': 'No upstream mappings for this provider',
|
||
'system.serviceProviders.publish.loadFail': 'Failed to load mappings',
|
||
'system.serviceProviders.publish.noProvider': 'Missing provider',
|
||
'system.serviceProviders.publish.allSynced': 'All mappings are already in sync',
|
||
'system.serviceProviders.publish.batchRemark': 'Batch publish after provider config change',
|
||
'system.serviceProviders.publish.batchDone': 'Published {count} mapping(s)',
|
||
'system.serviceProviders.publish.publishFail': 'Publish failed',
|
||
'system.serviceProviders.publish.saveOkOnly': 'Saved',
|
||
'system.serviceProviders.publish.saveSuccessAction': '{action} succeeded',
|
||
|
||
'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.rollbackCacheSuccess': 'Rolled back {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.confirmPublishTitle': 'Confirm publish',
|
||
'system.interface.mapping.modal.confirmPublish': 'Confirm publish',
|
||
'system.interface.mapping.modal.noNeedPublish': 'No publish needed',
|
||
'system.interface.mapping.modal.onlineCache': 'Online cache',
|
||
'system.interface.mapping.modal.updateCache': 'Pending cache',
|
||
'system.interface.mapping.modal.updateCacheWithCount': 'Pending cache ({count})',
|
||
'system.interface.mapping.modal.diffSummary': 'Change summary',
|
||
'system.interface.mapping.modal.publishTip': 'Review online vs pending diffs before publish. Publishing affects live forecasting.',
|
||
'system.interface.mapping.modal.publishWarning': 'Publishing will affect normal data forecasting, continue?',
|
||
'system.interface.mapping.modal.versionRemark': 'Version remark (optional)',
|
||
'system.interface.mapping.modal.versionRemarkLabel': 'Version remark',
|
||
'system.interface.mapping.modal.deleteConfirm': 'Are you sure to delete this record?',
|
||
'system.interface.mapping.modal.showAll': 'All',
|
||
'system.interface.mapping.modal.showOnlyDiff': 'Diff only',
|
||
'system.interface.mapping.modal.legend.add': 'Added',
|
||
'system.interface.mapping.modal.legend.remove': 'Removed',
|
||
'system.interface.mapping.modal.legend.change': 'Changed',
|
||
'system.interface.mapping.modal.legend.same': 'Unchanged',
|
||
'system.interface.mapping.modal.status.synced': 'Content matches the live cache; no republish needed',
|
||
'system.interface.mapping.modal.status.changed': '{count} change(s) detected; confirm to update the live cache',
|
||
'system.interface.mapping.modal.status.first': 'Not published yet; confirm to write to the live cache',
|
||
'system.interface.mapping.modal.status.syncedRollback': 'This version already matches the live cache; no rollback needed',
|
||
'system.interface.mapping.modal.status.changedRollback': 'Rolling back to {version} will apply {count} change(s)',
|
||
'system.interface.mapping.modal.status.firstRollback': 'No live cache yet; confirm to write this version',
|
||
'system.interface.mapping.modal.advancedRawJson': 'Advanced: raw JSON',
|
||
'system.interface.mapping.modal.liveCompareTitle': 'Online vs target version',
|
||
'system.interface.mapping.modal.rollbackTargetLabel': 'Target version {version}',
|
||
'system.interface.mapping.modal.rollbackTitle': 'Rollback',
|
||
'system.interface.mapping.modal.rollbackTip': 'Select a history version on the left to compare live cache vs that version, then confirm rollback.',
|
||
'system.interface.mapping.modal.rollbackToVersion': 'Rollback to this version',
|
||
'system.interface.mapping.modal.rollbackSelectTip': 'Select a history version to compare',
|
||
'system.interface.mapping.modal.rollbackConfirmOk': 'Confirm rollback',
|
||
'system.interface.mapping.modal.noNeedRollback': 'No rollback needed',
|
||
'system.interface.mapping.modal.operatorPublish': 'Publish',
|
||
'system.interface.mapping.modal.versionNo': 'Version',
|
||
'system.interface.mapping.modal.noRemark': 'No remark',
|
||
'system.interface.mapping.modal.emptyHistory': 'No publish history',
|
||
'system.interface.mapping.modal.rollbackWarning': 'Rollback will affect normal data forecasting, continue?',
|
||
'system.interface.mapping.modal.rollbackWarningWithVersion': 'Rollback to version {version}? This affects live forecasting.',
|
||
'system.interface.mapping.modal.rollbackConfirmTitle': 'Confirm rollback',
|
||
'system.interface.mapping.modal.noDiffToRollback': 'Nothing to roll back',
|
||
'system.interface.mapping.modal.diffCountZero': 'No cache updates to roll back',
|
||
'system.interface.mapping.modal.onlineCacheLabel': 'Online cache',
|
||
'system.interface.mapping.modal.rollbackCacheLabel': 'Cache after rollback ({count} diffs)',
|
||
'system.interface.mapping.modal.rollbackOk': 'Rollback',
|
||
'system.interface.mapping.modal.invalidTime': '--',
|
||
'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.user.form.newPassword': 'New password',
|
||
'system.user.form.newPasswordPlaceholder': 'Enter new password (min 6 chars)',
|
||
'system.user.form.confirmPassword': 'Confirm password',
|
||
'system.user.form.confirmPasswordPlaceholder': 'Enter new password again',
|
||
'system.user.rules.password.confirmMismatch': 'The two passwords do not match',
|
||
|
||
// 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.modal.tip':
|
||
'Used for people and data scope. Leave parent empty for a top-level org; code is auto-generated on save.',
|
||
'system.organization.modal.tipEdit': 'You can update hierarchy and display info; organization code cannot be changed.',
|
||
'system.organization.section.basic': 'Basic Info',
|
||
'system.organization.section.more': 'More Settings',
|
||
'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.modal.tip':
|
||
'Menus are navigation entries; buttons are permission points. Leave parent empty for a top-level menu.',
|
||
'system.menu.modal.tipEdit': 'Update structure and display. Button type does not need route or component.',
|
||
'system.menu.section.basic': 'Basic Info',
|
||
'system.menu.section.route': 'Route & Display',
|
||
'system.menu.section.more': 'More',
|
||
'system.menu.form.parent': 'Parent Menu',
|
||
'system.menu.form.parentPlaceholder': 'Select parent menu (leave empty for top level)',
|
||
'system.menu.form.type': 'Menu Type',
|
||
'system.menu.form.name': 'Menu Name',
|
||
'system.menu.form.namePlaceholder': 'Enter menu name',
|
||
'system.menu.form.permissionCode': 'Permission Code',
|
||
'system.menu.form.permissionCodePlaceholder': 'Enter permission code',
|
||
'system.menu.form.icon': 'Icon',
|
||
'system.menu.form.route': 'Route',
|
||
'system.menu.form.routePlaceholder': 'Enter route path',
|
||
'system.menu.form.component': 'Component',
|
||
'system.menu.form.componentPlaceholder': 'Enter component path',
|
||
'system.menu.form.order': 'Order',
|
||
'system.menu.form.isHidden': 'Hidden',
|
||
'system.menu.form.isCached': 'Cached',
|
||
'system.menu.form.description': 'Description',
|
||
'system.menu.form.descriptionPlaceholder': 'Enter description',
|
||
'system.menu.type.menu': 'Menu',
|
||
'system.menu.type.button': 'Button',
|
||
'system.menu.rules.name.required': 'Please enter menu name',
|
||
'system.menu.rules.type.required': 'Please select menu type',
|
||
'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.tip':
|
||
'Prefer snake_case English codes (e.g. warehouse_type). Chinese name is shown in the left menu.',
|
||
'system.dict.typeModal.tipEdit': 'You can update the Chinese name and sort; type code cannot be changed.',
|
||
'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.tip': 'Codes must be unique within a type; lower sort values appear first.',
|
||
'system.dict.modal.tipEdit': 'You can update sort and name; change type/code carefully after save.',
|
||
'system.dict.section.basic': 'Dictionary Item',
|
||
'system.dict.section.type': 'Type Info',
|
||
'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.tip':
|
||
'Pick a preset to prefill code and field labels. Keep secrets safe per environment.',
|
||
'system.otherConfig.modal.tipEdit':
|
||
'Update connection settings and enabled state; code cannot change. Leave secret blank to keep it.',
|
||
'system.otherConfig.section.basic': 'Basic Info',
|
||
'system.otherConfig.section.connection': 'Connection',
|
||
'system.otherConfig.section.more': 'More',
|
||
'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.apiCenterName': 'API Center 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.apiCenter.baseUrl': 'API Center URL',
|
||
'system.otherConfig.fields.apiCenter.appKey': 'App Key',
|
||
'system.otherConfig.fields.apiCenter.appSecret': 'App Secret',
|
||
'system.otherConfig.hint.apiCenter':
|
||
'InterfaceForward (itfx) gateway: URL + app AppKey/AppSecret. Used as fallback when GetInfo has no Secret and the order AppKey matches',
|
||
'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.modal.tip':
|
||
'Warehouse shipping info for order and fulfillment. Name is required; type comes from warehouse_type dict.',
|
||
'system.warehouseAddress.modal.tipEdit': 'Update warehouse name, type, and shipping contact details.',
|
||
'system.warehouseAddress.section.basic': 'Basic Info',
|
||
'system.warehouseAddress.section.contact': 'Shipping Contact',
|
||
'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.tabsAria': 'Notice type',
|
||
'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.placeholder.customerName': 'Enter customer name',
|
||
'user.customer.placeholder.phone': 'Enter phone number',
|
||
'user.customer.placeholder.email': 'Enter email',
|
||
'user.customer.placeholder.password': 'Must include letters and digits',
|
||
'user.customer.placeholder.wechatNickname': 'Optional',
|
||
'user.customer.placeholder.wechatAvatarUrl': 'Avatar image URL (optional)',
|
||
'user.customer.placeholder.amount': 'Amount',
|
||
'user.customer.placeholder.priceTierKey': 'Select or enter price tier',
|
||
'user.customer.placeholder.remark': 'Optional remark',
|
||
'user.customer.section.basic': 'Basic Info',
|
||
'user.customer.section.contact': 'Contact',
|
||
'user.customer.section.account': 'Account & Quota',
|
||
'user.customer.section.level': 'Level & Ownership',
|
||
'user.customer.tip.customerCode': 'Customer code cannot be changed after creation',
|
||
'user.customer.tip.status': 'Disabled customers cannot sign in',
|
||
'user.customer.tip.password': 'Password must contain both letters and digits',
|
||
'user.customer.tip.wechatAvatar': 'Accessible image URL for the avatar',
|
||
'user.customer.tip.accountBalance': 'Available balance — adjust carefully',
|
||
'user.customer.tip.totalQuota': 'Credit limit',
|
||
'user.customer.tip.usedQuota': 'Used quota, usually accumulated by the system',
|
||
'user.customer.tip.memberLevel': 'Used for points upgrade and optional extra discount',
|
||
'user.customer.tip.priceTierKey': 'Controls quote price tier; independent of member level upgrade',
|
||
'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.\nIf allocation / downstream settings changed: also publish service-channel rules; existing orders need reallocation before forecast uses the new binding.',
|
||
'channel.salesProducts.saveConfirm.cancel': 'Cancel',
|
||
'channel.salesProducts.messages.saveDraftSuccess': 'Draft saved (not published)',
|
||
'channel.salesProducts.messages.downstreamSyncTip':
|
||
'Tip: allocation/downstream drafts take effect only after rules publish. If channel downstream changed, publish service-channel rules too; reallocate existing orders.',
|
||
'channel.salesProducts.publish.downstreamSyncTip':
|
||
'After rules publish, new orders use the new snapshot. If downstream changed, ensure related service channels are published; existing orders need reallocation to refresh Downstream fields.',
|
||
'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.matchCondition': 'Match condition',
|
||
'channel.salesProducts.table.providers.matchConditionAll': 'All orders',
|
||
'channel.salesProducts.table.providers.matchConditionEdit': 'Edit condition',
|
||
'channel.salesProducts.table.providers.matchConditionLegacy': 'Legacy customer list — switch to match condition',
|
||
'channel.salesProducts.table.providers.matchConditionModalTitle': 'Allocation match condition',
|
||
'channel.salesProducts.table.providers.matchConditionHint':
|
||
'Decide whether the order can use this service channel. Empty means all orders. Customer, cargo attribute, etc. belong in the formula. Eligible channels are filtered first, then the allocation scheme picks one.',
|
||
'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.section.basic': 'Basic info',
|
||
'channel.salesProducts.section.route': 'Route & label',
|
||
'channel.salesProducts.section.zoneWeight': 'Zones & weight',
|
||
'channel.salesProducts.section.desc': 'Description',
|
||
'channel.salesProducts.form.showAdvanced': 'Show advanced (pre-storage script)',
|
||
'channel.salesProducts.form.hideAdvanced': 'Hide advanced',
|
||
'channel.salesProducts.placeholder.productCode': 'Unique product code',
|
||
'channel.salesProducts.placeholder.productName': 'Enter product name',
|
||
'channel.salesProducts.placeholder.productDescription': 'Customer-facing description (optional)',
|
||
'channel.salesProducts.placeholder.preStorageScript': 'Script before order persistence (optional)',
|
||
'channel.salesProducts.tip.productCode': 'Avoid changing after create; linked by prices and orders',
|
||
'channel.salesProducts.tip.group': 'Used for website/admin grouping, e.g. express parcel',
|
||
'channel.salesProducts.tip.efficiency': 'Estimated transit days shown to customers',
|
||
'channel.salesProducts.tip.labelTemplate': 'System label template used when printing',
|
||
'channel.salesProducts.tip.preStorageScript': 'Advanced: rewrite/validate order fields before save; leave empty if unused',
|
||
'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.drawer.section.feeBasic': 'Fee setup',
|
||
'channel.salesProducts.drawer.tip.costUnit': 'Unit used by the price table (e.g. shipment / KG)',
|
||
'channel.salesProducts.drawer.tip.chargingCondition': 'Empty = always try to charge; use AI or insert fields to build a formula',
|
||
'channel.salesProducts.drawer.tip.billingFactors': 'Factor combinations drive price rows; sync the price table after changes',
|
||
'channel.salesProducts.drawer.actions.addFactor': 'Add',
|
||
'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.app': 'App',
|
||
'channel.serviceChannels.form.apiProvider': 'API provider',
|
||
'channel.serviceChannels.form.providerName': 'Provider name',
|
||
'channel.serviceChannels.form.showAdvanced': 'Show advanced (pre-forecast script)',
|
||
'channel.serviceChannels.form.hideAdvanced': 'Hide advanced',
|
||
'channel.serviceChannels.section.providerBasic': 'Basic info',
|
||
'channel.serviceChannels.section.channelBasic': 'Basic info',
|
||
'channel.serviceChannels.section.forecast': 'Forecast config',
|
||
'channel.serviceChannels.section.desc': 'Description',
|
||
'channel.serviceChannels.modal.addProvider': 'Add provider',
|
||
'channel.serviceChannels.modal.editProvider': 'Edit provider',
|
||
'channel.serviceChannels.modal.addChannel': 'Add service channel',
|
||
'channel.serviceChannels.placeholder.selectApp': 'Select app',
|
||
'channel.serviceChannels.placeholder.selectApiProvider': 'Select API provider',
|
||
'channel.serviceChannels.placeholder.providerName': 'Display name; may differ from API provider',
|
||
'channel.serviceChannels.placeholder.channelCode': 'Unique channel code',
|
||
'channel.serviceChannels.placeholder.channelName': 'Enter channel name',
|
||
'channel.serviceChannels.tip.app': 'Tenant app this provider belongs to',
|
||
'channel.serviceChannels.tip.apiProvider': 'Upstream API provider account',
|
||
'channel.serviceChannels.tip.providerName': 'Name shown in the left menu',
|
||
'channel.serviceChannels.tip.channelCode': 'Avoid changing after create; linked by buy prices and forecast',
|
||
'channel.serviceChannels.tip.timeLimit': 'Transit day range (optional)',
|
||
'channel.serviceChannels.tip.forecastType': 'Rules for forecast tracking numbers',
|
||
'channel.serviceChannels.tip.forecastCode': 'Upstream forecast channel code required by the provider',
|
||
'channel.serviceChannels.tip.remoteArea': 'Remote-area partition scheme',
|
||
'channel.serviceChannels.tip.preScript': 'Script to rewrite/validate fields before forecast; leave empty if unused',
|
||
'channel.serviceChannels.form.placeholder.input': 'Please enter',
|
||
'channel.serviceChannels.form.placeholder.select': 'Please select',
|
||
'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.feeBasic': 'Fee setup',
|
||
'channel.serviceChannels.drawer.tip.costItem': 'Cost item for this buy-price entry',
|
||
'channel.serviceChannels.drawer.tip.costUnit': 'Unit used by the price table (e.g. shipment / KG)',
|
||
'channel.serviceChannels.drawer.tip.chargingCondition': 'Empty = always try to charge; use AI or insert fields to build a formula',
|
||
'channel.serviceChannels.drawer.tip.billingFactors': 'Factor combinations drive price rows; sync the price table after changes',
|
||
'channel.serviceChannels.drawer.actions.addFactor': 'Add',
|
||
'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.context.rulesPublishPending': 'Rules pending publish',
|
||
'channel.serviceChannels.saveConfirm.title': 'Save confirmation',
|
||
'channel.serviceChannels.saveConfirm.message':
|
||
'Save only keeps a draft; save & publish pushes channel rules to the live cache.\nIf downstream credentials are affected: also publish related sales-product rules; existing orders need reallocation before forecast uses the new config.',
|
||
'channel.serviceChannels.saveConfirm.saveOnly': 'Save only',
|
||
'channel.serviceChannels.saveConfirm.saveAndPublish': 'Save & publish',
|
||
'channel.serviceChannels.saveConfirm.cancel': 'Cancel',
|
||
'channel.serviceChannels.messages.downstreamSyncTip':
|
||
'Tip: channel rules must be published to affect forecast credentials. Also publish related sales-product rules; reallocate existing orders.',
|
||
'channel.serviceChannels.editProvider.downstreamConfirmTitle': 'Downstream settings changed',
|
||
'channel.serviceChannels.editProvider.downstreamConfirmOk': 'Confirm save',
|
||
'channel.serviceChannels.editProvider.downstreamConfirmContent':
|
||
'App or API provider was changed. After save, please: ① publish rules for each channel under this group; ② publish related sales-product rules; ③ reallocate existing orders. Otherwise forecast may still use old snapshots.',
|
||
'channel.serviceChannels.editProvider.downstreamSavedTip':
|
||
'Provider downstream settings saved. Next: publish service-channel rules under this group → publish related sales-product rules → reallocate existing orders.',
|
||
'channel.serviceChannels.publish.downstreamSyncTip':
|
||
'Channel rules publish freezes AppKey/AppSecret/supplierCode. Also publish related sales-product rules; existing orders need reallocation to refresh Downstream bindings.',
|
||
'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.country': 'Country/Region',
|
||
'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.countryRequired': 'Please select country/region',
|
||
'channel.area.form.rules.destCountryRequired': 'Please select country/region',
|
||
'channel.area.section.match': 'Match scope',
|
||
'channel.area.section.postcode': 'Postcode range',
|
||
'channel.area.tip.country': 'Required; country only matches all postcodes in that country',
|
||
'channel.area.tip.province': 'Optional; blank means any state/province',
|
||
'channel.area.tip.city': 'Optional; blank means any city',
|
||
'channel.area.tip.leftPostCode': 'Pair with end postcode; if one side is filled the other is required',
|
||
'channel.area.tip.rightPostCode': 'Must be greater than or equal to start postcode',
|
||
'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': 'e.g. 5000 or 6000',
|
||
'channel.weightRules.form.rules.ruleNameRequired': 'Please enter area name',
|
||
'channel.weightRules.form.rules.conditionRequired': 'Please select condition expression',
|
||
'channel.weightRules.form.rules.billableWeightRequired': 'Please select billable weight value',
|
||
'channel.weightRules.form.rules.volumetricFactorRequired': 'Please enter volumetric factor',
|
||
'channel.weightRules.section.basic': 'Basic info',
|
||
'channel.weightRules.section.rule': 'Weight rule',
|
||
'channel.weightRules.tip.ruleName': 'Rule group name used to distinguish business scenarios in the left list',
|
||
'channel.weightRules.tip.condition': 'This weight rule applies when the condition is met',
|
||
'channel.weightRules.tip.billableWeight': 'Billable weight from actual, volumetric, or the greater value, etc.',
|
||
'channel.weightRules.tip.volumetricFactor': 'Volumetric weight = L×W×H / factor; common values 5000 or 6000',
|
||
'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': 'e.g. 0',
|
||
'channel.weightRounding.form.placeholder.endValue': 'e.g. 30',
|
||
'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.section.basic': 'Basic info',
|
||
'channel.weightRounding.section.rule': 'Rounding range',
|
||
'channel.weightRounding.tip.roundingName': 'Rounding scheme name shown in the left list',
|
||
'channel.weightRounding.tip.startValue': 'Inclusive lower bound; must be less than end value',
|
||
'channel.weightRounding.tip.endValue': 'Upper bound; must be greater than start value',
|
||
'channel.weightRounding.tip.public': 'Round-up step in kg, e.g. 0.5 rounds up per 0.5 kg',
|
||
'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.notifier.missing': 'Inactive user',
|
||
'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.form.titlePlaceholder': 'e.g. Incomplete address, please supplement',
|
||
'channel.issueTemplate.form.contentPlaceholder': 'Describe the issue, required customer actions, or internal handling guide',
|
||
'channel.issueTemplate.section.basic': 'Basic info',
|
||
'channel.issueTemplate.section.content': 'Issue content',
|
||
'channel.issueTemplate.section.handler': 'Handling & notify',
|
||
'channel.issueTemplate.tip.add': 'Configure reusable title, content and notify methods. Platform default is visible to all orgs.',
|
||
'channel.issueTemplate.tip.edit': 'Changes apply to newly created issues; existing ones are not updated automatically.',
|
||
'channel.issueTemplate.tip.status': 'When off, the template cannot be selected; can be re-enabled anytime',
|
||
'channel.issueTemplate.tip.organization': 'Empty means platform default; otherwise only that org can use it',
|
||
'channel.issueTemplate.tip.issueType': 'Used for filtering and stats; pick by business scenario',
|
||
'channel.issueTemplate.tip.title': 'Short title shown to handlers or customers',
|
||
'channel.issueTemplate.tip.content': 'Handling guide, required documents, or customer messaging',
|
||
'channel.issueTemplate.tip.handlerType': 'Specific user for ops handling; customer notifies the order owner account',
|
||
'channel.issueTemplate.tip.handlerUser': 'Pick the default handler from internal users',
|
||
'channel.issueTemplate.tip.notifyMethod': 'Multi-select; customer handlers currently support in-app only',
|
||
'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': 'Select occurrence time',
|
||
'track.order.search.placeholder.timezone': 'Select timezone',
|
||
'track.order.search.placeholder.location': 'Enter location',
|
||
'track.order.search.placeholder.content': 'Select track content',
|
||
'track.order.search.placeholder.remark': 'Enter remark (optional)',
|
||
'track.order.form.label.orderNo': 'Order No.',
|
||
'track.order.form.label.trackContent': 'Track content',
|
||
'track.order.form.label.trackTime': 'Occurrence time',
|
||
'track.order.form.label.trackTimeZone': 'Timezone',
|
||
'track.order.form.label.trackPlace': 'Location',
|
||
'track.order.form.label.customerVisible': 'Visible to customer',
|
||
'track.order.form.label.remark': 'Remark',
|
||
'track.order.form.rule.trackContent': 'Please select track content',
|
||
'track.order.form.rule.trackTime': 'Please select occurrence time',
|
||
'track.order.form.rule.trackTimeZone': 'Please select timezone',
|
||
'track.order.form.rule.trackPlace': 'Please enter location',
|
||
'track.order.form.tooltip.customerVisible':
|
||
'When off, this track is internal only and hidden from customers',
|
||
'track.order.form.switch.visible': 'On',
|
||
'track.order.form.switch.hidden': 'Off',
|
||
'track.order.form.selectedOrders': '{count} selected',
|
||
'track.order.form.copyOrderNos': 'Copy',
|
||
'track.order.form.copySuccess': 'Copied',
|
||
'track.order.form.fillNow': 'Now',
|
||
'track.order.form.saveAndContinue': 'Save & continue',
|
||
'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.batchPullConfig.tip': 'Update pull schedule for selected orders. Empty fields keep existing values.',
|
||
'track.order.batchPullConfig.sectionOrders': 'Selected orders',
|
||
'track.order.batchPullConfig.orderCount': '{count} orders',
|
||
'track.order.batchPullConfig.collapse': 'Collapse',
|
||
'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.flagTip': 'Chinese name shown in lists',
|
||
'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.codeTip': '2 uppercase letters; cannot change after create',
|
||
'track.flag.form.codeImmutable': 'Cannot be changed after creation',
|
||
'track.flag.form.isBroadcast': 'Broadcast',
|
||
'track.flag.form.isBroadcastPlaceholder': 'Please select if broadcast',
|
||
'track.flag.form.isBroadcastTip': 'When on, this flag is included in MQ broadcast',
|
||
'track.flag.form.application': 'Application',
|
||
'track.flag.form.applicationRequired': 'Please select application',
|
||
'track.flag.form.applicationPlaceholder': 'Please select application',
|
||
'track.flag.form.applicationTip': 'Usually follows the current app; change with care',
|
||
'track.flag.form.sectionBasic': 'Basic info',
|
||
'track.flag.form.sectionPermission': 'Push settings',
|
||
'track.flag.form.sectionApp': '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.form.applicationTip': 'Usually follows the current app; change with care',
|
||
'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.trajectoryCodeImmutable': 'Cannot be changed after creation',
|
||
'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': 'Select (multiple)',
|
||
'track.content.form.flagTip': 'Optional tags for classification or broadcast',
|
||
'track.content.form.isExternal': 'Visible to customer',
|
||
'track.content.form.isExternalPlaceholder': 'Please select if external',
|
||
'track.content.form.isExternalTip': 'When on, customers can see this track',
|
||
'track.content.form.isRepeatable': 'Repeatable',
|
||
'track.content.form.isRepeatablePlaceholder': 'Please select if repeatable',
|
||
'track.content.form.isRepeatableTip': 'Allow the same track more than once on an order',
|
||
'track.content.form.allowManualCreate': 'Allow manual create',
|
||
'track.content.form.allowManualCreatePlaceholder': 'Please select if support manual create',
|
||
'track.content.form.allowManualCreateTip': 'Whether this content can be used when manually adding tracks',
|
||
'track.content.form.allowManualModify': 'Allow manual modify',
|
||
'track.content.form.allowManualModifyPlaceholder': 'Please select if support manual modify',
|
||
'track.content.form.allowManualModifyTip': 'Whether existing tracks with this content can be edited',
|
||
'track.content.form.sectionBasic': 'Basic info',
|
||
'track.content.form.sectionPermission': 'Permissions',
|
||
'track.content.form.sectionApp': 'Application',
|
||
'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.table.customHeader': 'Custom columns',
|
||
'track.push.table.customColumnPlaceholder': 'Enter field name, press Enter or click Add',
|
||
'track.push.table.customColumnNamePlaceholder': 'Enter field name',
|
||
'track.push.table.customHeaderTipTitle': 'Configure upstream push fields',
|
||
'track.push.table.customHeaderTip':
|
||
'Enter field names used by the upstream API when pushing tracks; they must match the upstream contract.',
|
||
'track.push.table.customHeaderCount': '{count} fields added',
|
||
'track.push.table.customHeaderEditHint': 'Double-click a field name to edit',
|
||
'track.push.table.customHeaderAdd': 'Add',
|
||
'track.push.table.customHeaderEmpty': 'No custom fields yet',
|
||
'track.push.form.application': 'Application',
|
||
'track.push.form.applicationRequired': 'Please select application',
|
||
'track.push.form.applicationPlaceholder': 'Please select application',
|
||
'track.push.form.applicationTip': 'Usually follows the current app; change with care',
|
||
'track.push.form.customer': 'Customer short name',
|
||
'track.push.form.customerPlaceholder': 'Enter customer short name',
|
||
'track.push.form.customerRequired': 'Please enter customer short name',
|
||
'track.push.form.customerTip': 'Customer this push config applies to',
|
||
'track.push.form.product': 'Product',
|
||
'track.push.form.productPlaceholder': 'Optional product filter',
|
||
'track.push.form.productTip': 'Optional; empty means all products',
|
||
'track.push.form.serviceProvider': 'Provider',
|
||
'track.push.form.serviceProviderPlaceholder': 'Please select provider',
|
||
'track.push.form.serviceProviderRequired': 'Please select provider',
|
||
'track.push.form.serviceProviderTip': 'Tracks will be pushed to this provider',
|
||
'track.push.form.sectionBasic': 'Basic info',
|
||
'track.push.form.sectionPush': 'Push switches',
|
||
'track.push.form.sectionTime': 'Time format',
|
||
'track.push.form.isAutoPush': 'Auto push',
|
||
'track.push.form.isAutoPushPlaceholder': 'Please select if auto push',
|
||
'track.push.form.isAutoPushTip': 'Automatically push tracks to the provider',
|
||
'track.push.form.supportRepush': 'Allow repush',
|
||
'track.push.form.supportRepushPlaceholder': 'Please select if support repush',
|
||
'track.push.form.supportRepushTip': 'Allow pushing tracks that were already pushed',
|
||
'track.push.form.supportDelete': 'Allow delete',
|
||
'track.push.form.supportDeletePlaceholder': 'Please select if support delete',
|
||
'track.push.form.supportDeleteTip': 'Allow sending track delete requests to the provider',
|
||
'track.push.form.isFullPush': 'Full push',
|
||
'track.push.form.isFullPushPlaceholder': 'Please select if full push',
|
||
'track.push.form.isFullPushTip': 'Push all tracks each time instead of incremental',
|
||
'track.push.form.isLatestFullPush': 'Full push latest only',
|
||
'track.push.form.isLatestFullPushPlaceholder': 'Please select if full push latest',
|
||
'track.push.form.isLatestFullPushTip': 'When full pushing, include only the latest track',
|
||
'track.push.form.pushTimeStyle': 'Push time style',
|
||
'track.push.form.pushTimeStyleTip': 'How datetime fields are formatted for the provider',
|
||
'track.push.form.pushTimeStyle.none': 'Default',
|
||
'track.push.form.pushTimeStyle.timestamp': 'Timestamp',
|
||
'track.push.form.pushTimeStyle.timezone': 'Time + timezone',
|
||
'track.push.form.time': 'Time format',
|
||
'track.push.form.timePlaceholder': 'e.g. yyyy-MM-dd HH:mm:ss',
|
||
'track.push.form.timeTip': 'Custom datetime string format',
|
||
'track.push.form.timezone': 'Timezone',
|
||
'track.push.form.timezonePlaceholder': 'e.g. GMT / UTC',
|
||
'track.push.form.timezoneTip': 'Timezone notation paired with the time format',
|
||
'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.mapping.form.sectionStandard': 'Standard track',
|
||
'track.push.mapping.form.sectionMapping': 'Push mapping',
|
||
'track.push.mapping.form.sectionCustom': 'Custom fields',
|
||
'track.push.mapping.form.trackCodePlaceholder': 'Select standard track to map',
|
||
'track.push.mapping.form.trackCodeTip': 'System standard track; empty push fields fall back to it',
|
||
'track.push.mapping.form.pushStatusPlaceholder': 'Optional override for status',
|
||
'track.push.mapping.form.pushStatusTip': 'Status sent to provider; empty uses standard status',
|
||
'track.push.mapping.form.pushCodePlaceholder': 'Optional override for code',
|
||
'track.push.mapping.form.pushCodeTip': 'Track code sent to provider; empty uses standard code',
|
||
'track.push.mapping.form.pushContentPlaceholder': 'Optional override for Chinese content',
|
||
'track.push.mapping.form.pushContentTip': 'Chinese content sent to provider; empty uses standard',
|
||
'track.push.mapping.form.pushContentEnPlaceholder': 'Optional override for English content',
|
||
'track.push.mapping.form.pushContentEnTip': 'English content for provider; no Chinese; empty uses standard',
|
||
'track.push.mapping.form.customFieldPlaceholder': 'Enter {name}',
|
||
'track.push.mapping.form.customFieldTip': 'Custom header field required by the provider',
|
||
'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.message.columnExists': 'This field name already exists',
|
||
'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.addMapping': 'Add mapping',
|
||
'track.pull.modal.editMapping': 'Edit mapping',
|
||
'track.pull.form.label.trackContent': 'Mapped track content',
|
||
'track.pull.form.label.trackCode': 'Track code',
|
||
'track.pull.form.label.trackKeywords': 'Pull keywords',
|
||
'track.pull.form.label.trackKeywordReverses': 'Pull keywords (filter)',
|
||
'track.pull.form.placeholder.trackContent': 'Select standard track to map',
|
||
'track.pull.form.placeholder.keyword': 'Enter match keyword, press Enter',
|
||
'track.pull.form.placeholder.keywordFilter': 'Enter exclude keyword, press Enter',
|
||
'track.pull.form.addKeyword': 'Add',
|
||
'track.pull.form.emptyKeyword': 'No match keywords',
|
||
'track.pull.form.emptyKeywordFilter': 'No exclude keywords',
|
||
'track.pull.form.rule.trackContent': 'Please select mapped track content',
|
||
'track.pull.form.tooltip.trackContent': 'Standard track to map when keywords match',
|
||
'track.pull.form.tooltip.trackKeywords':
|
||
'Map to the standard track when provider content contains these keywords',
|
||
'track.pull.form.tooltip.trackKeywordReverses':
|
||
'Exclude mapping when provider content contains these keywords',
|
||
'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',
|
||
'track.pull.config.form.sectionBasic': 'Basic info',
|
||
'track.pull.config.form.sectionSchedule': 'Pull schedule',
|
||
'track.pull.config.form.application': 'Application',
|
||
'track.pull.config.form.applicationRequired': 'Please select application',
|
||
'track.pull.config.form.applicationPlaceholder': 'Please select application',
|
||
'track.pull.config.form.applicationTip': 'Usually follows the current app; change with care',
|
||
'track.pull.config.form.provider': 'Provider',
|
||
'track.pull.config.form.providerRequired': 'Please select provider',
|
||
'track.pull.config.form.providerPlaceholder': 'Please select provider',
|
||
'track.pull.config.form.providerTip': 'Tracks will be pulled for this provider',
|
||
'track.pull.config.form.startTrack': 'Start track',
|
||
'track.pull.config.form.startTrackPlaceholder': 'Select start track',
|
||
'track.pull.config.form.startTrackTip': 'Normal pulling starts after this track appears',
|
||
'track.pull.config.form.silenceBeforeStart': 'Silence before start (hours)',
|
||
'track.pull.config.form.silenceBeforeStartPlaceholder': '1–48',
|
||
'track.pull.config.form.silenceBeforeStartTip': 'Hours to wait quietly before the start track',
|
||
'track.pull.config.form.silenceBeforeStartRule': 'Enter an integer between 1 and 48',
|
||
'track.pull.config.form.endTrack': 'End track',
|
||
'track.pull.config.form.endTrackPlaceholder': 'Select end track',
|
||
'track.pull.config.form.endTrackTip': 'Enter wrap-up pulling after this track appears',
|
||
'track.pull.config.form.silenceAfterEnd': 'Continue after end (days)',
|
||
'track.pull.config.form.silenceAfterEndPlaceholder': '1–14',
|
||
'track.pull.config.form.silenceAfterEndTip': 'Days to keep pulling after the end track',
|
||
'track.pull.config.form.silenceAfterEndRule': 'Enter an integer between 1 and 14',
|
||
'track.pull.config.form.trackCodeCol': 'Track code',
|
||
'track.pull.config.form.trackContentCol': 'Track content',
|
||
'track.pull.priority.modal.add': 'Add priority',
|
||
'track.pull.priority.modal.edit': 'Edit priority',
|
||
'track.pull.priority.form.sectionTarget': 'Target',
|
||
'track.pull.priority.form.sectionPull': 'Pull strategy',
|
||
'track.pull.priority.form.customer': 'Customer short name',
|
||
'track.pull.priority.form.customerRequired': 'Please enter customer short name',
|
||
'track.pull.priority.form.customerPlaceholder': 'Enter customer short name',
|
||
'track.pull.priority.form.customerTip': 'Customer short name used to match pull priority',
|
||
'track.pull.priority.form.orderNoType': 'Order No. type',
|
||
'track.pull.priority.form.orderNoTypeRequired': 'Please select order No. type',
|
||
'track.pull.priority.form.orderNoTypePlaceholder': 'Please select',
|
||
'track.pull.priority.form.orderNoTypeTip': 'Which order number is used when pulling from provider',
|
||
'track.pull.priority.form.orderNoType.client': 'Client No.',
|
||
'track.pull.priority.form.orderNoType.track': 'Tracking No.',
|
||
'track.pull.priority.form.orderNoType.other': 'Other No.',
|
||
'track.pull.priority.form.pullTimes': 'Pulls per day',
|
||
'track.pull.priority.form.pullTimesRequired': 'Please enter pulls per day',
|
||
'track.pull.priority.form.pullTimesPlaceholder': '1–12',
|
||
'track.pull.priority.form.pullTimesTip': 'Max pulls per day for this customer (1–12)',
|
||
'track.pull.priority.form.pullTimesRule': 'Pulls per day must be between 1 and 12',
|
||
'track.pull.priority.form.priority': 'Priority',
|
||
'track.pull.priority.form.priorityRequired': 'Please enter priority',
|
||
'track.pull.priority.form.priorityPlaceholder': 'Higher number = higher priority',
|
||
'track.pull.priority.form.priorityTip': 'Higher number means higher pull priority',
|
||
|
||
...localeSettings,
|
||
...localeLogin,
|
||
...localeWechat,
|
||
...localeH5TrackQuery,
|
||
...localeH5Center,
|
||
...localeWorkplace,
|
||
|
||
...localeMonitor,
|
||
...marketingEn,
|
||
...kbEn,
|
||
};
|