Files
vmall/apps/shop-admin/locales-extra.ts
T
james 9904696e76 feat: wave 2 migration (P3, P5, P7 openspec changes)
Implements, verifies, and archives the three remaining Wave 2 changes from
openspec/MIGRATION-PLAN.md.

- add-wallet-settlement (P3): demo recharge, guarded withdrawal freeze and
  one-time admin review, paginated own fund entries, idempotent per-shop
  weekly/monthly settlement statements with commission rate and one-time
  payout confirmation.
- add-merchant-onboarding (P5): personal/enterprise applications with one live
  application per user, guarded review with mandatory rejection reason, and
  transactional shop + owner provisioning returning one-time credentials;
  mall onboarding/status pages and an admin review console.
- add-membership-messaging (P7): platform member levels, append-only growth
  accrual on order completion with guarded one-way leveling, order/shipment/
  refund system messages with unread/read state and soft deletion, plus the
  mall header unread badge.

Backend: migrations 0019-0023, new wallet, settlement, merchant_onboarding,
membership and messaging modules, event hooks in order/fulfillment/aftersale,
and integration suites for each. Shared contract extended and all three
frontends updated; code indexes, domain docs, backend guidelines and the
migration tracker synced.

Verification: cargo test -p vmall-api green twice consecutively; mall, admin
and shop-admin builds pass; browser smoke on every new surface; openspec
validate --all --strict green (33 passed).

The three changes share the @vmall/shared contract, the mall mock adapter and
per-app locale/nav files, so they are committed together to keep every commit
buildable.
2026-09-25 15:25:29 +00:00

721 lines
25 KiB
TypeScript

// App-local message extensions, deep-merged over @vmall/shared locales.
// Add keys here (never edit the shared locale files from an app agent).
export const enExtra = {
auth: {
shopRoleError: "This account is not authorized for the merchant console.",
},
nav: {
coupons: "Coupons",
flashSales: "Flash sales",
groupBuying: "Group buying",
shopProfile: "Shop profile",
aftersales: "After-sales",
freightTemplates: "Freight templates",
reviews: "Reviews",
settlements: "Settlements",
shopAccount: "Shop account",
},
shop: {
profileSaved: "Shop profile saved.",
bilingualRequired: "Both English and Chinese text are required.",
profileLogo: "Logo URL",
profileBanner: "Banner URL",
profileCompany: "Company",
profileRegion: "Region",
profileAddressEn: "Address (English)",
profileAddressZh: "Address (中文)",
profileNoticeEn: "Notice (English)",
profileNoticeZh: "Notice (中文)",
profileAfterSaleEn: "After-sale policy (English)",
profileAfterSaleZh: "After-sale policy (中文)",
dashboardTitle: "Merchant dashboard",
profile: "Shop profile",
shopStatus: "Shop status",
slug: "Slug",
totalProducts: "Total products",
publishedProducts: "Published products",
pendingPaymentOrders: "Pending payment",
paidOrders: "Paid orders",
fulfillingOrders: "Fulfilling orders",
shippedOrders: "Shipped orders",
pendingInvoices: "Pending invoice requests",
productList: "Product catalog",
orderList: "Orders",
shipmentList: "Shipments",
invoiceList: "Invoices",
filterStatus: "Filter by status",
filterOrderStatus: "Filter by order status",
created: "Created",
skuCount: "SKUs",
noSkus: "No SKUs",
newProduct: "New product",
saveProduct: "Save product",
updateProduct: "Update product",
productSaved: "Product saved.",
slugInvalid: "Use lowercase letters, numbers, and dashes only.",
productNameRequired: "English product name is required.",
categoryOptional: "No category",
imagesHint: "One URL per line",
skuManager: "SKU manager",
skuPriceMajor: "Price (major units)",
stock: "Stock",
active: "Active",
addSku: "Add SKU",
skuSaved: "SKU saved.",
skuWeight: "Weight (g)",
skuWeightGrams: "Weight (grams, optional)",
skuWeightInvalid: "Weight must be a positive integer.",
freightTemplate: "Freight template",
freightTemplateDefault: "Shop default",
actions: "Actions",
edit: "Edit",
invoiceNo: "Invoice no.",
noInvoice: "—",
status: "Status",
orderNo: "Order no.",
items: "Items",
total: "Total",
details: "Details",
address: "Shipping address",
recipient: "Recipient",
phone: "Phone",
carrier: "Carrier",
trackingNo: "Tracking number",
shippingCompany: "Shipping company",
selectShippingCompany: "Select a shipping company",
shippingCompanyRequired: "Choose a shipping company.",
shipmentQuantities: "Shipment quantities",
unshipped: "Unshipped",
createShipment: "Create shipment",
shipmentCreated: "Shipment created.",
issueInvoice: "Issue invoice",
taxNo: "Tax number",
kind: "Type",
couponList: "Coupons",
newCoupon: "New coupon",
editCoupon: "Edit coupon",
couponTitleEn: "Title (English)",
couponTitleZh: "Title (中文)",
couponAmount: "Discount (minor units)",
couponThreshold: "Minimum spend (minor units)",
couponCurrency: "Currency",
couponStock: "Claim stock",
couponEnabled: "Enabled",
couponStartsAt: "Starts at",
couponEndsAt: "Ends at",
createCoupon: "Create coupon",
updateCoupon: "Update coupon",
couponSaved: "Coupon saved.",
couponDeleted: "Coupon deleted.",
couponTitleRequired: "Both language titles are required.",
couponAmountInvalid: "Discount must be a positive integer.",
couponThresholdInvalid: "Minimum spend cannot be negative.",
couponStockInvalid: "Claim stock cannot be negative.",
couponWindowInvalid: "End must not precede start.",
enabledOn: "Enabled",
enabledOff: "Disabled",
flashSaleList: "Flash sales",
newFlashSale: "New session",
editFlashSale: "Edit session",
flashLabelEn: "Label (English)",
flashLabelZh: "Label (中文)",
flashStartsAt: "Starts at",
flashEndsAt: "Ends at",
flashEnabled: "Enabled",
createFlashSale: "Create session",
updateFlashSale: "Update session",
flashSaleSaved: "Session saved.",
flashItemSaved: "Activity item saved.",
flashItems: "Activity items",
noFlashItems: "No activity items yet.",
newFlashItem: "Add activity item",
editFlashItem: "Edit activity item",
flashSku: "SKU",
flashSelectSku: "Select a SKU",
flashSalePrice: "Sale price (minor units)",
flashReservedStock: "Reserved stock",
flashPerCustomerLimit: "Per-customer limit",
saveFlashItem: "Save item",
flashOriginalPrice: "Catalog price",
flashSold: "Sold",
flashRemaining: "Remaining",
flashLabelRequired: "Both language labels are required.",
flashSkuRequired: "Choose a SKU.",
flashPriceInvalid: "Sale price must be a positive integer.",
flashStockInvalid: "Reserved stock cannot be negative.",
flashLimitInvalid: "Per-customer limit must be a positive integer.",
flashWindowInvalid: "End must not precede start.",
groupBuyingList: "Group buying",
newGroupActivity: "New activity",
editGroupActivity: "Edit activity",
groupNameEn: "Name (English)",
groupNameZh: "Name (中文)",
groupDescriptionEn: "Description (English)",
groupDescriptionZh: "Description (中文)",
groupSku: "SKU",
groupPrice: "Group price (minor units)",
groupRequiredMembers: "Required paid members",
groupLifetimeHours: "Group lifetime (hours)",
groupStartsAt: "Starts at",
groupEndsAt: "Ends at",
groupEnabled: "Enabled",
createGroupActivity: "Create activity",
updateGroupActivity: "Update activity",
groupActivitySaved: "Activity saved.",
groupOpenGroups: "Open groups",
groupNoOpenGroups: "No open groups.",
groupPaidMembers: "Joined",
groupExpiresAt: "Expires",
groupNameRequired: "Both language names are required.",
groupSkuRequired: "Choose a SKU.",
groupPriceInvalid: "Group price must be a positive integer.",
groupMembersInvalid: "At least two paid members are required.",
groupLifetimeInvalid: "Group lifetime must be a positive number of hours.",
groupWindowInvalid: "End must not precede start.",
settlement: {
generate: "Generate statement",
generateHint:
"Pick any date inside the target week or month. An existing statement for the same period is returned unchanged.",
periodKind: "Period",
periodWeek: "Week",
periodMonth: "Month",
periodDate: "Date inside the period",
period: "Period",
orderCount: "Orders",
gross: "Gross",
refund: "Refunds",
commissionRate: "Commission rate",
commission: "Commission",
payable: "Payable",
confirmedAt: "Confirmed at",
generatedNew: "Statement generated.",
generatedExisting:
"A statement for this period already exists; the existing statement is shown.",
newStatement: "New",
existingStatement: "Existing",
notClosed:
"That period has not closed yet, so it cannot be settled. Only completed periods can be settled.",
dateRequired: "Pick a date inside the period.",
detail: "Statement detail",
orders: "Contributing orders",
noOrders: "No orders in this period.",
orderNo: "Order no.",
orderCurrency: "Order currency",
hideDetail: "Hide detail",
status: {
pending: "Pending",
confirmed: "Confirmed",
},
},
account: {
available: "Available balance",
frozen: "Frozen balance",
frozenHint: "Frozen while a withdrawal request awaits platform review.",
withdraw: "Request a withdrawal",
amount: "Amount",
method: "Payout method",
methodBank: "Bank transfer",
methodDemo: "Demo channel",
account: "Payout account",
holder: "Account holder (optional)",
withdrawHint:
"The amount is frozen immediately and stays pending until the platform reviews the request.",
submitWithdrawal: "Submit request",
withdrawalRequested: "Withdrawal request submitted; the amount is now frozen pending review.",
withdrawalHistory: "Withdrawal history",
noWithdrawals: "No withdrawal requests yet.",
reviewNote: "Review note",
reviewedAt: "Reviewed at",
entries: "Recent fund entries",
noEntries: "No fund entries yet.",
accountKind: "Account",
entryReason: "Reason",
delta: "Change",
balanceAfter: "Balance after",
amountInvalid: "Enter a positive amount valid for this currency.",
methodRequired: "Choose a payout method.",
accountRequired: "Enter the payout account.",
insufficient: "The amount exceeds your available balance.",
kind: {
available: "Available",
frozen: "Frozen",
},
status: {
pending: "Pending",
approved: "Approved",
rejected: "Rejected",
},
reason: {
wallet_recharge: "Demo recharge",
wallet_withdrawal_freeze: "Withdrawal frozen",
wallet_withdrawal_approved: "Withdrawal paid out",
wallet_withdrawal_rejected: "Withdrawal unfrozen",
settlement_payout: "Settlement payout",
},
},
},
freight: {
title: "Freight templates",
newTemplate: "New template",
editTemplate: "Edit template",
name: "Template name",
pricingMethod: "Pricing method",
methodByPiece: "By piece",
methodByWeight: "By weight",
unitPiece: "pcs",
unitGram: "g",
firstFeeShort: "First fee",
additionalFeeShort: "Additional fee",
firstFeeMajor: "First fee (major units)",
additionalFeeMajor: "Additional fee (major units)",
firstUnit: "First unit",
additionalUnit: "Additional unit",
freeThresholdMajor: "Free shipping over (major units, optional)",
alwaysFree: "Always free",
isDefault: "Default template",
defaultTag: "Default",
createTemplate: "Create template",
updateTemplate: "Update template",
saved: "Freight template saved.",
deleted: "Freight template deleted.",
setDefault: "Set as default",
defaultSaved: "Default template updated.",
nameRequired: "Template name is required.",
feeInvalid: "Fees must be non-negative amounts.",
unitInvalid: "Unit sizes must be positive integers.",
thresholdInvalid: "Free-shipping threshold must be a non-negative amount.",
regionRules: "Region rules",
noRegionRules: "No region rules yet.",
addRule: "Add rule",
ruleRegions: "Regions (comma separated)",
ruleRegionsRequired: "Each rule needs at least one region.",
deleteRule: "Delete rule",
deleteRuleConfirm: "Delete this region rule?",
deleteConfirm: "Delete this freight template?",
},
aftersale: {
title: "After-sales",
detail: "After-sale detail",
buyer: "Buyer",
amount: "Refund amount",
remaining: "Remaining refundable",
reason: "Reason",
item: "Item",
order: "Order",
viewOrder: "View order",
evidence: "Evidence",
noEvidence: "No evidence provided.",
returnShipping: "Return shipping",
messages: "Messages",
noMessages: "No messages yet.",
messageEn: "Message (English)",
messageZh: "Message (中文)",
messageEvidence: "Evidence URL (optional)",
sendMessage: "Send message",
messageSent: "Message sent.",
approve: "Approve",
reject: "Reject",
confirmReceipt: "Confirm return receipt",
refund: "Issue refund",
approved: "Application approved.",
rejected: "Application rejected.",
receiptConfirmed: "Return receipt confirmed.",
refunded: "Refund completed.",
staleAction:
"The after-sale state changed while you were acting; the latest state is shown below.",
reopened: "Reopened",
role: {
buyer: "Buyer",
merchant: "Merchant",
platform: "Platform",
},
kind: {
refund_only: "Refund only",
return_refund: "Return & refund",
},
status: {
pending: "Pending",
approved: "Approved",
rejected: "Rejected",
buyer_shipping: "Return in transit",
merchant_confirmed: "Return received",
refunded: "Refunded",
cancelled: "Cancelled",
},
},
review: {
title: "Product reviews",
product: "Product",
buyer: "Buyer",
rating: "Rating",
content: "Review",
createdAt: "Reviewed at",
replyStatus: "Reply status",
replied: "Replied",
unreplied: "Not replied",
reply: "Reply",
replyPlaceholder: "Type the reply to this customer…",
replyAt: "Replied at",
replySaved: "Reply sent.",
replyConflict: "This review already has a reply; the latest state is shown below.",
replyRequired: "Reply text is required.",
},
} as Record<string, unknown>;
export const zhExtra = {
auth: {
shopRoleError: "此账号无权访问商家控制台。",
},
nav: {
coupons: "优惠券",
flashSales: "秒杀",
groupBuying: "拼团",
reviews: "评价",
shopProfile: "店铺资料",
aftersales: "售后",
freightTemplates: "运费模板",
settlements: "结算对账",
shopAccount: "店铺账户",
},
shop: {
profileSaved: "店铺资料已保存。",
bilingualRequired: "中英文内容均为必填项。",
profileLogo: "Logo 链接",
profileBanner: "横幅链接",
profileCompany: "公司",
profileRegion: "地区",
profileAddressEn: "地址(英文)",
profileAddressZh: "地址(中文)",
profileNoticeEn: "公告(英文)",
profileNoticeZh: "公告(中文)",
profileAfterSaleEn: "售后政策(英文)",
profileAfterSaleZh: "售后政策(中文)",
dashboardTitle: "商家仪表盘",
profile: "店铺信息",
shopStatus: "店铺状态",
slug: "别名",
totalProducts: "商品总数",
publishedProducts: "已上架商品",
pendingPaymentOrders: "待支付订单",
paidOrders: "已支付订单",
fulfillingOrders: "履约中订单",
shippedOrders: "已发货订单",
pendingInvoices: "待处理发票申请",
productList: "商品目录",
orderList: "订单",
shipmentList: "发货单",
invoiceList: "发票",
filterStatus: "按状态筛选",
filterOrderStatus: "按订单状态筛选",
created: "创建时间",
skuCount: "SKU 数量",
noSkus: "暂无 SKU",
newProduct: "新建商品",
saveProduct: "保存商品",
updateProduct: "更新商品",
productSaved: "商品已保存。",
slugInvalid: "只能使用小写字母、数字和短横线。",
productNameRequired: "英文商品名称为必填项。",
categoryOptional: "无分类",
imagesHint: "每行一个链接",
skuManager: "SKU 管理",
skuPriceMajor: "价格(主单位)",
stock: "库存",
active: "启用",
skuSaved: "SKU 已保存。",
skuWeight: "重量(克)",
skuWeightGrams: "重量(克,可选)",
skuWeightInvalid: "重量必须为正整数。",
freightTemplate: "运费模板",
freightTemplateDefault: "店铺默认",
actions: "操作",
edit: "编辑",
addSku: "添加 SKU",
status: "状态",
invoiceNo: "发票号",
noInvoice: "—",
orderNo: "订单号",
items: "商品数",
total: "合计",
details: "详情",
address: "收货地址",
recipient: "收货人",
phone: "电话",
carrier: "承运商",
trackingNo: "物流单号",
shippingCompany: "物流公司",
selectShippingCompany: "请选择物流公司",
shippingCompanyRequired: "请选择物流公司。",
shipmentQuantities: "发货数量",
unshipped: "待发货",
createShipment: "创建发货单",
shipmentCreated: "发货单已创建。",
issueInvoice: "开具发票",
taxNo: "税号",
kind: "类型",
couponList: "优惠券",
newCoupon: "新建优惠券",
editCoupon: "编辑优惠券",
couponTitleEn: "标题(英文)",
couponTitleZh: "标题(中文)",
couponAmount: "优惠金额(最小单位)",
couponThreshold: "使用门槛(最小单位)",
couponCurrency: "币种",
couponStock: "可领取库存",
couponEnabled: "启用",
couponStartsAt: "开始时间",
couponEndsAt: "结束时间",
createCoupon: "创建优惠券",
updateCoupon: "更新优惠券",
couponSaved: "优惠券已保存。",
couponDeleted: "优惠券已删除。",
couponTitleRequired: "中英文标题均为必填项。",
couponAmountInvalid: "优惠金额必须为正整数。",
couponThresholdInvalid: "使用门槛不能为负数。",
couponStockInvalid: "可领取库存不能为负数。",
couponWindowInvalid: "结束时间不能早于开始时间。",
enabledOn: "已启用",
enabledOff: "已停用",
flashSaleList: "秒杀活动",
newFlashSale: "新建场次",
editFlashSale: "编辑场次",
flashLabelEn: "标题(英文)",
flashLabelZh: "标题(中文)",
flashStartsAt: "开始时间",
flashEndsAt: "结束时间",
flashEnabled: "启用",
createFlashSale: "创建场次",
updateFlashSale: "更新场次",
flashSaleSaved: "场次已保存。",
flashItemSaved: "活动商品已保存。",
flashItems: "活动商品",
noFlashItems: "暂无活动商品。",
newFlashItem: "添加活动商品",
editFlashItem: "编辑活动商品",
flashSku: "SKU",
flashSelectSku: "请选择 SKU",
flashSalePrice: "秒杀价(最小单位)",
flashReservedStock: "活动库存",
flashPerCustomerLimit: "每人限购",
saveFlashItem: "保存商品",
flashOriginalPrice: "原价",
flashSold: "已售",
flashRemaining: "剩余",
flashLabelRequired: "中英文标题均为必填项。",
flashSkuRequired: "请选择 SKU。",
flashPriceInvalid: "秒杀价必须为正整数。",
flashStockInvalid: "活动库存不能为负数。",
flashLimitInvalid: "每人限购必须为正整数。",
flashWindowInvalid: "结束时间不能早于开始时间。",
groupBuyingList: "拼团活动",
newGroupActivity: "新建活动",
editGroupActivity: "编辑活动",
groupNameEn: "名称(英文)",
groupNameZh: "名称(中文)",
groupDescriptionEn: "描述(英文)",
groupDescriptionZh: "描述(中文)",
groupSku: "SKU",
groupPrice: "拼团价(最小单位)",
groupRequiredMembers: "成团人数",
groupLifetimeHours: "团有效期(小时)",
groupStartsAt: "开始时间",
groupEndsAt: "结束时间",
groupEnabled: "启用",
createGroupActivity: "创建活动",
updateGroupActivity: "更新活动",
groupActivitySaved: "活动已保存。",
groupOpenGroups: "进行中的团",
groupNoOpenGroups: "暂无进行中的团。",
groupPaidMembers: "已参团",
groupExpiresAt: "到期",
groupNameRequired: "中英文名称均为必填项。",
groupSkuRequired: "请选择 SKU。",
groupPriceInvalid: "拼团价必须为正整数。",
groupMembersInvalid: "成团人数至少为 2。",
groupLifetimeInvalid: "团有效期必须为正数小时。",
groupWindowInvalid: "结束时间不能早于开始时间。",
settlement: {
generate: "生成结算单",
generateHint: "可选择目标周/月内的任意一天;同一周期已存在的结算单会原样返回。",
periodKind: "周期类型",
periodWeek: "周",
periodMonth: "月",
periodDate: "周期内日期",
period: "周期",
orderCount: "订单数",
gross: "销售总额",
refund: "退款额",
commissionRate: "佣金比例",
commission: "佣金",
payable: "应结金额",
confirmedAt: "确认时间",
generatedNew: "结算单已生成。",
generatedExisting: "该周期已存在结算单,下方展示的是已有结算单。",
newStatement: "新建",
existingStatement: "已存在",
notClosed: "该周期尚未结束,无法结算,只有已结束的周期可以结算。",
dateRequired: "请选择周期内的日期。",
detail: "结算单详情",
orders: "关联订单",
noOrders: "该周期内没有订单。",
orderNo: "订单号",
orderCurrency: "订单币种",
hideDetail: "收起详情",
status: {
pending: "待确认",
confirmed: "已确认",
},
},
account: {
available: "可用余额",
frozen: "冻结余额",
frozenHint: "提现申请待平台审核期间该金额会被冻结。",
withdraw: "申请提现",
amount: "金额",
method: "提现方式",
methodBank: "银行转账",
methodDemo: "演示渠道",
account: "收款账户",
holder: "开户人(可选)",
withdrawHint: "提交后金额立即冻结,在平台审核前保持待审核状态。",
submitWithdrawal: "提交申请",
withdrawalRequested: "提现申请已提交,金额已冻结待审核。",
withdrawalHistory: "提现记录",
noWithdrawals: "暂无提现申请。",
reviewNote: "审核备注",
reviewedAt: "审核时间",
entries: "最近资金流水",
noEntries: "暂无资金流水。",
accountKind: "账户",
entryReason: "原因",
delta: "变动",
balanceAfter: "变动后余额",
amountInvalid: "请输入该币种下的有效正数金额。",
methodRequired: "请选择提现方式。",
accountRequired: "请填写收款账户。",
insufficient: "金额超过可用余额。",
kind: {
available: "可用",
frozen: "冻结",
},
status: {
pending: "待审核",
approved: "已通过",
rejected: "已拒绝",
},
reason: {
wallet_recharge: "演示充值",
wallet_withdrawal_freeze: "提现冻结",
wallet_withdrawal_approved: "提现已打款",
wallet_withdrawal_rejected: "提现解冻",
settlement_payout: "结算打款",
},
},
},
freight: {
title: "运费模板",
newTemplate: "新建运费模板",
editTemplate: "编辑运费模板",
name: "模板名称",
pricingMethod: "计价方式",
methodByPiece: "按件",
methodByWeight: "按重量",
unitPiece: "件",
unitGram: "克",
firstFeeShort: "首费",
additionalFeeShort: "续费",
firstFeeMajor: "首费(主单位)",
additionalFeeMajor: "续费(主单位)",
firstUnit: "首段单位量",
additionalUnit: "续段单位量",
freeThresholdMajor: "满额免运费(主单位,可留空)",
alwaysFree: "全程包邮",
isDefault: "默认模板",
defaultTag: "默认",
createTemplate: "创建模板",
updateTemplate: "更新模板",
saved: "运费模板已保存。",
deleted: "运费模板已删除。",
setDefault: "设为默认",
defaultSaved: "默认模板已更新。",
nameRequired: "模板名称为必填项。",
feeInvalid: "费用必须为非负金额。",
unitInvalid: "单位量必须为正整数。",
thresholdInvalid: "免运费门槛必须为非负金额。",
regionRules: "地区规则",
noRegionRules: "暂无地区规则。",
addRule: "添加规则",
ruleRegions: "地区(逗号分隔)",
ruleRegionsRequired: "每条规则至少填写一个地区。",
deleteRule: "删除规则",
deleteRuleConfirm: "确定删除该地区规则?",
deleteConfirm: "确定删除该运费模板?",
},
aftersale: {
title: "售后",
detail: "售后详情",
buyer: "买家",
amount: "退款金额",
remaining: "剩余可退",
reason: "申请原因",
item: "商品",
order: "订单",
viewOrder: "查看订单",
evidence: "凭证",
noEvidence: "暂无凭证。",
returnShipping: "退货物流",
messages: "留言",
noMessages: "暂无留言。",
messageEn: "留言(英文)",
messageZh: "留言(中文)",
messageEvidence: "凭证链接(可选)",
sendMessage: "发送留言",
messageSent: "留言已发送。",
approve: "批准",
reject: "拒绝",
confirmReceipt: "确认收货",
refund: "退款",
approved: "已批准申请。",
rejected: "已拒绝申请。",
receiptConfirmed: "已确认收货。",
refunded: "退款已完成。",
staleAction: "售后状态已发生变化,下方为最新状态。",
reopened: "已重新申请",
role: {
buyer: "买家",
merchant: "商家",
platform: "平台",
},
kind: {
refund_only: "仅退款",
return_refund: "退货退款",
},
status: {
pending: "待处理",
approved: "已批准",
rejected: "已拒绝",
buyer_shipping: "买家退货中",
merchant_confirmed: "商家已收货",
refunded: "已退款",
cancelled: "已取消",
},
},
review: {
title: "商品评价",
product: "商品",
buyer: "买家",
rating: "星级",
content: "评价内容",
createdAt: "评价时间",
replyStatus: "回复状态",
replied: "已回复",
unreplied: "未回复",
reply: "回复",
replyPlaceholder: "输入给买家的回复…",
replyAt: "回复时间",
replySaved: "回复已发送。",
replyConflict: "该评价已有回复,已为你展示最新状态。",
replyRequired: "回复内容不能为空。",
},
} as Record<string, unknown>;