Browse Source

退款相关的国际化

npzzwq99 2 tuần trước cách đây
mục cha
commit
d31d9f5a1e
6 tập tin đã thay đổi với 521 bổ sung109 xóa
  1. 111 2
      locale/en.json
  2. 110 1
      locale/zh-Hans.json
  3. 110 2
      locale/zh-Hant.json
  4. 23 23
      pages/user/refund/apply.vue
  5. 147 61
      pages/user/refund/details.vue
  6. 20 20
      pages/user/refund/edit.vue

+ 111 - 2
locale/en.json

@@ -1480,5 +1480,114 @@
   "refundList.info5": "Refund request closed",
   "refundList.info6": "Refund after merchant confirms receipt",
   "refundList.info7": "Refund will return to original payment",
-  "refundList.info8": "Express payment refund failed"
-}
+  "refundList.info8": "Express payment refund failed",
+  "apply.logisticsStatus": "Logistics Status",
+  "apply.whetherReceived": "Whether Received",
+  "apply.refundType": "Refund Type",
+  "apply.selectRefundType": "Select Refund Type",
+  "apply.refundReason": "Refund Reason",
+  "apply.refundReasonPlaceholder": "Reason for refund",
+  "apply.refundAmount": "Refund Amount",
+  "apply.uploadProof": "Upload Proof",
+  "apply.refundDescription": "Refund Description",
+  "apply.optional": "Optional",
+  "apply.confirm": "Confirm Submit",
+  "apply.notReceived": "Not Received",
+  "apply.received": "Received",
+  "apply.refundOnly": "Refund Only",
+  "apply.refundAndReturn": "Refund & Return",
+  "apply.dislike": "Dislike",
+  "apply.emptyPackage": "Empty Package",
+  "apply.notDelivered": "Not Delivered On Time",
+  "apply.colorSizeMismatch": "Color/Size Mismatch",
+  "apply.qualityIssue": "Quality Issue",
+  "apply.missingItems": "Missing Items",
+  "apply.counterfeitBrand": "Counterfeit Brand",
+  "apply.pleaseSelectLogistics": "Please select logistics status",
+  "apply.pleaseSelectRefundType": "Please select refund type",
+  "apply.pleaseSelectReason": "Please select refund reason",
+  "apply.maxRefundAmount": "Maximum refund {price} yuan",
+  "apply.refundAmountExceedsLimit": "Refund amount exceeds limit",
+  "apply.refundAmountCannotExceed": "Refund amount cannot exceed order amount",
+  "edit.logisticsStatus": "Logistics Status",
+  "edit.refundType": "Refund Type",
+  "edit.refundReason": "Refund Reason",
+  "edit.refundAmount": "Refund Amount",
+  "edit.optional": "Optional",
+  "edit.confirm": "Confirm",
+  "edit.uploadProof": "Upload Proof",
+  "edit.upload": "Upload",
+  "edit.notReceived": "Not Received",
+  "edit.received": "Received",
+  "edit.refundNoReturn": "Refund Only (No Return)",
+  "edit.refundAndReturn": "Return & Refund",
+  "edit.dontLike": "Dislike",
+  "edit.emptyPackage": "Empty Package",
+  "edit.notDelivered": "Not Delivered On Time",
+  "edit.colorSizeMismatch": "Color/Size Mismatch",
+  "edit.qualityIssue": "Quality Issue",
+  "edit.missingItems": "Missing Items",
+  "edit.counterfeitBrand": "Counterfeit Brand",
+  "edit.maxRefundAmount": "Maximum refund {price} yuan",
+  "edit.priceCannotBeEmpty": "Price cannot be empty",
+  "edit.refundCannotExceed": "Refund cannot exceed HKD{amount}",
+  "edit.uploadFailed": "Upload failed: ",
+  "edit.refundDescription": "Refund Description",
+  "details.closeRefund": "Close Refund",
+  "details.editApplication": "Edit Application",
+  "details.groupOrder": "Group Order",
+  "details.expressNumber": "Express Number",
+  "details.pleaseEnterExpressNumber": "Please enter express number",
+  "details.expressCompany": "Express Company",
+  "details.pleaseSelect": "Please Select",
+  "details.confirmReturn": "Confirm Return",
+  "details.refusalReason": "Refusal Reason",
+  "details.platformIntervention": "Platform Intervention",
+  "details.refundDetails": "Refund Details",
+  "details.refundHistory": "Refund History",
+  "details.refundType": "Refund Type",
+  "details.refundReason": "Refund Reason",
+  "details.refundAmount": "Refund Amount",
+  "details.logisticsStatus": "Logistics Status",
+  "details.refundTime": "Refund Time",
+  "details.sellerAgreeOrTimeout": "Seller agrees or timeout, system will auto-confirm",
+  "details.ifRefundRejected": "If refund is rejected, you can modify and resubmit",
+  "details.doNotUseNormalMail": "Do not use normal mail or cash on delivery",
+  "details.pleaseFillRealExpressInfo": "Please fill in real express information",
+  "details.sellerTimeout": "Seller timeout, system will auto-confirm",
+  "details.serviceReviewing": "Customer service is reviewing",
+  "details.answerWithin1to3Days": "Please wait 1-3 working days for response",
+  "details.waitingSellerAgree": "Waiting for seller agreement",
+  "details.waitingBuyerReturn": "Waiting for buyer return",
+  "details.sellerRejectRefund": "Seller rejected refund",
+  "details.refundCompleted": "Refund Completed",
+  "details.refundClosed": "Refund Closed",
+  "details.waitingSellerReceive": "Waiting for seller to receive",
+  "details.thirdPartyRefunding": "Third-party refunding",
+  "details.refundFailed": "Refund Failed",
+  "details.refundWillReturn": "Refund will return via original path within 24 hours",
+  "details.contactPlatformService": "Please contact platform service",
+  "details.refundTotalAmount": "Total Refund Amount",
+  "details.specifications": "Specifications:",
+  "details.refundLabel": "Refund:",
+  "details.pleaseInputExpressNo": "Please enter express number",
+  "details.pleaseSelectExpressCompany": "Please select express company",
+  "details.submitFailed": "Submit failed",
+  "details.operationFailed": "Operation failed",
+  "details.pleaseWait": "Please wait",
+  "details.remainingMinutes": "Remaining {minutes} minutes",
+  "details.remainingHoursMinutes": "Remaining {hours} hours {minutes} minutes",
+  "details.remainingDaysHoursMinutes": "Remaining {days} days {hours} hours {minutes} minutes",
+  "details.waitingPlatformProcess": "Waiting for platform processing",
+  "details.estimated24HoursReturn": "Estimated return within 24 hours",
+  "details.contactPlatformServiceText": "Please contact platform service",
+    "details.recipient": "Recipient",
+  "details.refundInitiated": "Refund request initiated",
+  "details.sellerAgreed": "Seller has agreed to refund",
+  "details.canModifyRefund": "You can modify refund request",
+  "details.platformInterventionApplied": "Platform intervention applied",
+  "details.merchantConfirmReceive": "Merchant will confirm receipt and refund",
+  "edit.maxRefundAmountNoFreight": "Maximum refund {price} yuan (excluding freight {freight} yuan)",
+  "edit.submitting": "Submitting",
+  "edit.modifyFailed": "Modify failed"
+}

+ 110 - 1
locale/zh-Hans.json

@@ -1453,5 +1453,114 @@
   "refundList.info5": "退款申请已关闭",
   "refundList.info6": "如商户确认收货将退款",
   "refundList.info7": "退款将原路返回",
-  "refundList.info8": "快捷支付退款失败"
+  "refundList.info8": "快捷支付退款失败",
+  "apply.logisticsStatus": "物流状态",
+  "apply.whetherReceived": "是否已收货",
+  "apply.refundType": "退款类型",
+  "apply.selectRefundType": "选择退款类型",
+  "apply.refundReason": "退款原因",
+  "apply.refundReasonPlaceholder": "退款的原因",
+  "apply.refundAmount": "退款金额",
+  "apply.uploadProof": "上传凭证",
+  "apply.refundDescription": "退款说明",
+  "apply.optional": "选填",
+  "apply.confirm": "确认提交",
+  "apply.notReceived": "未收货",
+  "apply.received": "已收货",
+  "apply.refundOnly": "仅退款",
+  "apply.refundAndReturn": "退款并退货",
+  "apply.dislike": "不喜欢",
+  "apply.emptyPackage": "空包裹",
+  "apply.notDelivered": "未按时发货",
+  "apply.colorSizeMismatch": "色差/尺码不符",
+  "apply.qualityIssue": "质量问题",
+  "apply.missingItems": "缺少零件",
+  "apply.counterfeitBrand": "假冒品牌",
+  "apply.pleaseSelectLogistics": "请选择物流状态",
+  "apply.pleaseSelectRefundType": "请选择退款类型",
+  "apply.pleaseSelectReason": "请选择退款原因",
+  "apply.maxRefundAmount": "最多退款 {price} 元",
+  "apply.refundAmountExceedsLimit": "退款金额超出限制",
+  "apply.refundAmountCannotExceed": "退款金额不能超过订单金额",
+  "edit.logisticsStatus": "物流状态",
+  "edit.refundType": "退款类型",
+  "edit.refundReason": "退款原因",
+  "edit.refundAmount": "退款金额",
+  "edit.optional": "选填",
+  "edit.confirm": "确认",
+  "edit.uploadProof": "上传凭证",
+  "edit.upload": "上传",
+  "edit.notReceived": "未收货",
+  "edit.received": "已收货",
+  "edit.refundNoReturn": "我要退款(无需退货)",
+  "edit.refundAndReturn": "退货退款",
+  "edit.dontLike": "不喜欢",
+  "edit.emptyPackage": "空包裹",
+  "edit.notDelivered": "未按时发货",
+  "edit.colorSizeMismatch": "色差/尺码不符",
+  "edit.qualityIssue": "质量问题",
+  "edit.missingItems": "缺少零件",
+  "edit.counterfeitBrand": "假冒品牌",
+  "edit.maxRefundAmount": "最多退款{price}元",
+  "edit.priceCannotBeEmpty": "价格不能为空",
+  "edit.refundCannotExceed": "退款不能超过HKD{amount}元",
+  "edit.uploadFailed": "上传失败:",
+  "edit.refundDescription": "退款说明",
+  "details.closeRefund": "关闭退款",
+  "details.editApplication": "修改申请",
+  "details.groupOrder": "拼团订单",
+  "details.expressNumber": "快递单号",
+  "details.pleaseEnterExpressNumber": "请填写快递单号",
+  "details.expressCompany": "快递公司",
+  "details.pleaseSelect": "请选择",
+  "details.confirmReturn": "确认退货",
+  "details.refusalReason": "拒绝理由",
+  "details.platformIntervention": "平台介入",
+  "details.refundDetails": "退款详情",
+  "details.refundHistory": "退款历史",
+  "details.refundType": "退款类型",
+  "details.refundReason": "退款原因",
+  "details.refundAmount": "退款金额",
+  "details.logisticsStatus": "物流状态",
+  "details.refundTime": "退款时间",
+  "details.sellerAgreeOrTimeout": "卖家同意或超时未处理,系统将自动确认",
+  "details.ifRefundRejected": "如果退款被拒绝,您可以修改申请重新发起",
+  "details.doNotUseNormalMail": "请勿使用平邮或到付,以免商家无法收到退货",
+  "details.pleaseFillRealExpressInfo": "请填写真实快递信息,如超时则关闭退款",
+  "details.sellerTimeout": "卖家超时未处理,系统将自动确认",
+  "details.serviceReviewing": "客服正在审核退款详情及退款历史记录",
+  "details.answerWithin1to3Days": "大概1-3个工作日做出答复,请耐心等待",
+  "details.waitingSellerAgree": "等待卖家同意",
+  "details.waitingBuyerReturn": "等待买家退货",
+  "details.sellerRejectRefund": "卖家拒绝退款",
+  "details.refundCompleted": "退款完成",
+  "details.refundClosed": "退款关闭",
+  "details.waitingSellerReceive": "等待卖家收货",
+  "details.thirdPartyRefunding": "第三方退款中",
+  "details.refundFailed": "退款失败",
+  "details.refundWillReturn": "因第三方快捷支付订单,退款将在24小时内原路返还",
+  "details.contactPlatformService": "请联系平台客服",
+  "details.refundTotalAmount": "退款总金额",
+  "details.specifications": "规格:",
+  "details.refundLabel": "退款:",
+  "details.pleaseInputExpressNo": "请输入物流单号",
+  "details.pleaseSelectExpressCompany": "请选择物流公司",
+  "details.submitFailed": "提交失败",
+  "details.operationFailed": "操作失败",
+  "details.pleaseWait": "请稍候",
+  "details.remainingMinutes": "剩余 {minutes} 分钟",
+  "details.remainingHoursMinutes": "剩余 {hours} 小时 {minutes} 分钟",
+  "details.remainingDaysHoursMinutes": "剩余 {days} 天 {hours} 小时 {minutes} 分钟",
+  "details.waitingPlatformProcess": "等待平台处理",
+  "details.estimated24HoursReturn": "预计24小时内原路退回",
+  "details.contactPlatformServiceText": "请联系平台客服",
+  "details.recipient": "收件人",
+  "details.refundInitiated": "已成功发起退款申请",
+  "details.sellerAgreed": "卖家已同意退款",
+  "details.canModifyRefund": "可修改退货申请",
+  "details.platformInterventionApplied": "已申请平台介入",
+  "details.merchantConfirmReceive": "如商户确认收货将退款",
+  "edit.maxRefundAmountNoFreight": "最多退款{price}元(不含运费{freight}元)",
+  "edit.submitting": "提交中",
+  "edit.modifyFailed": "修改失败"
 }

+ 110 - 2
locale/zh-Hant.json

@@ -1506,5 +1506,113 @@
   "refundList.info5": "退款申請已關閉",
   "refundList.info6": "如商戶確認收貨將退款",
   "refundList.info7": "退款將原路返回",
-  "refundList.info8": "快捷支付退款失敗"
-}
+  "refundList.info8": "快捷支付退款失敗",
+  "apply.logisticsStatus": "物流狀態",
+  "apply.whetherReceived": "是否已收貨",
+  "apply.refundType": "退款類型",
+  "apply.selectRefundType": "選擇退款類型",
+  "apply.refundReason": "退款原因",
+  "apply.refundReasonPlaceholder": "退款的原因",
+  "apply.refundAmount": "退款金額",
+  "apply.uploadProof": "上傳憑證",
+  "apply.refundDescription": "退款說明",
+  "apply.optional": "選填",
+  "apply.confirm": "確認提交",
+  "apply.notReceived": "未收貨",
+  "apply.received": "已收貨",
+  "apply.refundOnly": "僅退款",
+  "apply.refundAndReturn": "退款並退貨",
+  "apply.dislike": "不喜歡",
+  "apply.emptyPackage": "空包裹",
+  "apply.notDelivered": "未按時發貨",
+  "apply.colorSizeMismatch": "色差/尺碼不符",
+  "apply.qualityIssue": "質量問題",
+  "apply.missingItems": "缺少零件",
+  "apply.counterfeitBrand": "假冒品牌",
+  "apply.pleaseSelectLogistics": "請選擇物流狀態",
+  "apply.pleaseSelectRefundType": "請選擇退款類型",
+  "apply.pleaseSelectReason": "請選擇退款原因",
+  "apply.maxRefundAmount": "最多退款 {price} 元",
+  "apply.refundAmountExceedsLimit": "退款金額超出限制",
+  "apply.refundAmountCannotExceed": "退款金額不能超過訂單金額",
+  "edit.logisticsStatus": "物流狀態",
+  "edit.refundType": "退款類型",
+  "edit.refundReason": "退款原因",
+  "edit.refundAmount": "退款金額",
+  "edit.optional": "選填",
+  "edit.confirm": "確認",
+  "edit.uploadProof": "上傳憑證",
+  "edit.upload": "上傳",
+  "edit.notReceived": "未收貨",
+  "edit.received": "已收貨",
+  "edit.refundNoReturn": "我要退款(無需退貨)",
+  "edit.refundAndReturn": "退貨退款",
+  "edit.dontLike": "不喜歡",
+  "edit.emptyPackage": "空包裹",
+  "edit.notDelivered": "未按時發貨",
+  "edit.colorSizeMismatch": "色差/尺碼不符",
+  "edit.qualityIssue": "質量問題",
+  "edit.missingItems": "缺少零件",
+  "edit.counterfeitBrand": "假冒品牌",
+  "edit.maxRefundAmount": "最多退款{price}元",
+  "edit.priceCannotBeEmpty": "價格不能為空",
+  "edit.refundCannotExceed": "退款不能超過HKD{amount}元",
+  "edit.uploadFailed": "上傳失敗:",
+  "details.closeRefund": "關閉退款",
+  "details.editApplication": "修改申請",
+  "details.groupOrder": "拼團訂單",
+  "details.expressNumber": "快遞單號",
+  "details.pleaseEnterExpressNumber": "請填寫快遞單號",
+  "details.expressCompany": "快遞公司",
+  "details.pleaseSelect": "請選擇",
+  "details.confirmReturn": "確認退貨",
+  "details.refusalReason": "拒絕理由",
+  "details.platformIntervention": "平台介入",
+  "details.refundDetails": "退款詳情",
+  "details.refundHistory": "退款歷史",
+  "details.refundType": "退款類型",
+  "details.refundReason": "退款原因",
+  "details.refundAmount": "退款金額",
+  "details.logisticsStatus": "物流狀態",
+  "details.refundTime": "退款時間",
+  "details.sellerAgreeOrTimeout": "賣家同意或超時未處理,系統將自動確認",
+  "details.ifRefundRejected": "如果退款被拒絕,您可以修改申請重新發起",
+  "details.doNotUseNormalMail": "請勿使用平郵或到付,以免商家無法收到退貨",
+  "details.pleaseFillRealExpressInfo": "請填寫真實快遞信息,如超時則關閉退款",
+  "details.sellerTimeout": "賣家超時未處理,系統將自動確認",
+  "details.serviceReviewing": "客服正在審核退款詳情及退款歷史記錄",
+  "details.answerWithin1to3Days": "大概1-3個工作日做出答覆,請耐心等待",
+  "details.waitingSellerAgree": "等待賣家同意",
+  "details.waitingBuyerReturn": "等待買家退貨",
+  "details.sellerRejectRefund": "賣家拒絕退款",
+  "details.refundCompleted": "退款完成",
+  "details.refundClosed": "退款關閉",
+  "details.waitingSellerReceive": "等待賣家收貨",
+  "details.thirdPartyRefunding": "第三方退款中",
+  "details.refundFailed": "退款失敗",
+  "details.refundWillReturn": "因第三方快捷支付訂單,退款將在24小時內原路返還",
+  "details.contactPlatformService": "請聯繫平台客服",
+  "details.refundTotalAmount": "退款總金額",
+  "details.specifications": "規格:",
+  "details.refundLabel": "退款:",
+  "details.pleaseInputExpressNo": "請輸入物流單號",
+  "details.pleaseSelectExpressCompany": "請選擇物流公司",
+  "details.submitFailed": "提交失敗",
+  "details.operationFailed": "操作失敗",
+  "details.pleaseWait": "請稍候",
+  "details.remainingMinutes": "剩餘 {minutes} 分鐘",
+  "details.remainingHoursMinutes": "剩餘 {hours} 小時 {minutes} 分鐘",
+  "details.remainingDaysHoursMinutes": "剩餘 {days} 天 {hours} 小時 {minutes} 分鐘",
+  "details.waitingPlatformProcess": "等待平台處理",
+  "details.estimated24HoursReturn": "預計24小時內原路退回",
+  "details.contactPlatformServiceText": "請聯繫平台客服",
+  "details.recipient": "收件人",
+  "details.refundInitiated": "已成功發起退款申請",
+  "details.sellerAgreed": "賣家已同意退款",
+  "details.canModifyRefund": "可修改退貨申請",
+  "details.platformInterventionApplied": "已申請平台介入",
+  "details.merchantConfirmReceive": "如商戶確認收貨將退款",
+  "edit.maxRefundAmountNoFreight": "最多退款{price}元(不含運費{freight}元)",
+  "edit.submitting": "提交中",
+  "edit.modifyFailed": "修改失敗"
+}

+ 23 - 23
pages/user/refund/apply.vue

@@ -9,48 +9,48 @@
 				<view class="margin-bottom-xs">
 					<view class="text-cut-2">{{ goods.title }}</view>
 				</view>
-				<view class="wanl-gray">規格:{{ goods.difference }}</view>
+				<view class="wanl-gray">{{$t('cart.spec')}}:{{ goods.difference }}</view>
 			</view>
 		</view>
 
 		<!-- 退款表单 -->
 		<view class="margin-top-bj">
 			<view class="cu-form-group">
-				<view class="title">物流狀態</view>
+				<view class="title">{{$t('apply.logisticsStatus')}}</view>
 				<picker @change="expressChange" :value="refund.expressType" :range="expressList">
 					<view class="picker">
 						<text v-if="refund.expressType > -1">{{ expressList[refund.expressType] }}</text>
-						<text class="wanl-gray-light" v-else>是否已收貨</text>
+						<text class="wanl-gray-light" v-else>{{$t('apply.whetherReceived')}}</text>
 					</view>
 				</picker>
 			</view>
 			<view class="cu-form-group">
-				<view class="title">退款類型</view>
+				<view class="title">{{$t('apply.refundType')}}</view>
 				<picker @change="typeChange" :value="refund.type" :range="typeList">
 					<view class="picker">
 						<text v-if="refund.type > -1">{{ typeList[refund.type] }}</text>
-						<text class="wanl-gray-light" v-else>選擇退款類型</text>
+						<text class="wanl-gray-light" v-else>{{$t('apply.selectRefundType')}}</text>
 					</view>
 				</picker>
 			</view>
 			<view class="cu-form-group">
-				<view class="title">退款原因</view>
+				<view class="title">{{$t('apply.refundReason')}}</view>
 				<picker @change="reasonChange" :value="refund.reason" :range="reasonList">
 					<view class="picker">
 						<text v-if="refund.reason > -1">{{ reasonList[refund.reason] }}</text>
-						<text class="wanl-gray-light" v-else>選擇退款原因</text>
+						<text class="wanl-gray-light" v-else>{{$t('apply.pleaseSelectReason')}}</text>
 					</view>
 				</picker>
 			</view>
 			<view class="cu-form-group margin-top-bj">
-				<view class="title">退款金額</view>
+				<view class="title">{{$t('apply.refundAmount')}}</view>
 				<input type="digit" :placeholder="amount.placeholder" @input="moneyInput" :disabled="amount.total == 0" />
 			</view>
 
 			<!-- 上傳憑證 -->
 			<view class="bg-white margin-top-bj">
 				<view class="cu-form-group">
-					<view class="title">上傳憑證</view>
+					<view class="title">{{$t('apply.uploadProof')}}</view>
 				</view>
 				<view class="grid col-4 grid-square flex-sub padding-lr">
 					<view class="bg-img" v-for="(item, index) in refund.images" :key="index" @tap="viewImage(index)">
@@ -64,15 +64,15 @@
 			</view>
 
 			<view class="cu-form-group margin-top-bj">
-				<view class="title">退款說明</view>
-				<input placeholder="選填" v-model="refund.refund_content" />
+				<view class="title">{{$t('apply.refundDescription')}}</view>
+				<input :placeholder="$t('apply.optional')" v-model="refund.refund_content" />
 			</view>
 		</view>
 
 		<view class="edgeInsetBottom"></view>
 		<!-- 提交按鈕 -->
 		<view class="wanlian cu-bar tabbar foot flex flex-direction">
-			<button class="cu-btn wanl-bg-orange lg" @tap="addData">確認提交</button>
+			<button class="cu-btn wanl-bg-orange lg" @tap="addData">{{$t('apply.confirm')}}</button>
 		</view>
 	</view>
 </template>
@@ -106,14 +106,14 @@ export default {
 	},
 	computed: {
 		expressList() {
-			return ['未收貨', '已收貨']
+			return [this.$t('apply.notReceived'), this.$t('apply.received')]
 		},
 		typeList() {
-			return ['僅退款', '退款並退貨']
+			return [this.$t('apply.refundOnly'), this.$t('apply.refundAndReturn')]
 		},
 		reasonList() {
-			return ['不喜歡', '空包裹', '未按時發貨', '色差/尺碼不符', '質量問題', '缺少零件', '假冒品牌']
-		}
+        return [this.$t('apply.dislike'), this.$t('apply.emptyPackage'), this.$t('apply.notDelivered'), this.$t('apply.colorSizeMismatch'), this.$t('apply.qualityIssue'), this.$t('apply.missingItems'), this.$t('apply.counterfeitBrand')]
+    }
 	},
 	onLoad(option) {
 		let data = JSON.parse(option.data)
@@ -126,11 +126,11 @@ export default {
 		// 計算退款金額
 		if (this.goods_number == 1 || this.freight_type == 2) {
 			let price = this.bcadd(data.goods.actual_payment, data.goods.freight_price)
-			this.amount.placeholder = `最多退款 ${price} 元`
+			this.amount.placeholder = this.$t('apply.maxRefundAmount', { price })
 			this.amount.total = Number(price)
 		} else {
 			let price = data.goods.actual_payment
-			this.amount.placeholder = `最多退款 ${price} 元`
+			this.amount.placeholder = this.$t('apply.maxRefundAmount', { price })
 			this.amount.total = Number(price)
 		}
 	},
@@ -138,19 +138,19 @@ export default {
 		/** 提交退款申請 */
 		async addData() {
 			if (this.refund.money > this.amount.total) {
-				uni.showToast({ title: this.amount.info || '退款金額超出限制', icon: 'none' })
+				uni.showToast({ title: this.amount.info || this.$t('apply.refundAmountExceedsLimit'), icon: 'none' })
 				return
 			}
 			if (this.refund.expressType == -1) {
-				uni.showToast({ title: '請選擇物流狀態', icon: 'none' })
+				uni.showToast({ title: this.$t('apply.pleaseSelectLogistics'), icon: 'none' })
 				return
 			}
 			if (this.refund.type == -1) {
-				uni.showToast({ title: '請選擇退款類型', icon: 'none' })
+				uni.showToast({ title: this.$t('apply.pleaseSelectRefundType'), icon: 'none' })
 				return
 			}
 			if (this.refund.reason == -1) {
-				uni.showToast({ title: '請選擇退款原因', icon: 'none' })
+				uni.showToast({ title: this.$t('apply.pleaseSelectReason'), icon: 'none' })
 				return
 			}
 			uni.showLoading({ title: '提交中' })
@@ -186,7 +186,7 @@ export default {
 		moneyInput(e) {
 			let money = e.detail.value
 			if (money > this.amount.total) {
-				uni.showToast({ title: '退款金額不能超過訂單金額', icon: 'none' })
+				uni.showToast({ title: this.$t('apply.refundAmountCannotExceed'), icon: 'none' })
 			}
 			this.refund.money = e.detail.value
 		},

+ 147 - 61
pages/user/refund/details.vue

@@ -23,12 +23,16 @@
 			<!-- state=0: 等待卖家同意 -->
 			<view class="bg-white solid-top padding-bj current" v-if="refundData.state == 0">
 				<view class="wanl-gray text-sm">
-					<view><text class="wlIcon-dot margin-right-sm"></text>賣家同意或超時將自動退款</view>
-					<view class="margin-top-xs"><text class="wlIcon-dot margin-right-sm"></text>如退款被拒絕可修改申請</view>
+					<view><text class="wlIcon-dot margin-right-sm"></text>{{ $t('details.sellerAgreeOrTimeout') }}</view>
+					<view class="margin-top-xs"><text class="wlIcon-dot margin-right-sm"></text>{{ $t('details.ifRefundRejected')
+						}}
+					</view>
 				</view>
 				<view class="flex justify-end margin-top">
-					<button class="cu-btn line-black margin-lr-xs" @tap="closeRefund(refundData.id)">關閉退款</button>
-					<button class="cu-btn line-orange" @tap="editRefund(refundData.id)">修改申請</button>
+					<button class="cu-btn line-black margin-lr-xs" @tap="closeRefund(refundData.id)">{{ $t('details.closeRefund')
+						}}</button>
+					<button class="cu-btn line-orange" @tap="editRefund(refundData.id)">{{ $t('details.editApplication')
+						}}</button>
 				</view>
 			</view>
 
@@ -40,7 +44,7 @@
 					</view>
 					<view class="content">
 						<view class="flex justify-between">
-							<text>收件人:{{ refundData.shopConfig.returnName }}</text>
+							<text>{{$t('details.recipient')}}:{{ refundData.shopConfig.returnName }}</text>
 							<text>{{ refundData.shopConfig.returnPhoneNum }}</text>
 						</view>
 						<view class="margin-top-xs">
@@ -50,25 +54,25 @@
 				</view>
 				<view class="bg-white padding-bj solid-top">
 					<view class="wanl-gray text-sm">
-						<view><text class="wlIcon-dot margin-right-sm"></text>請勿使用平郵或到付</view>
-						<view class="margin-top-xs"><text class="wlIcon-dot margin-right-sm"></text>請填寫真實物流信息</view>
+						<view><text class="wlIcon-dot margin-right-sm"></text>{{ $t('details.doNotUseNormalMail') }}</view>
+						<view class="margin-top-xs"><text class="wlIcon-dot margin-right-sm"></text>{{ $t('details.pleaseFillRealExpressInfo') }}</view>
 					</view>
 				</view>
 				<view class="cu-form-group margin-top-bj">
 					<view class="title">物流單號:</view>
-					<input placeholder="請輸入物流單號" v-model="returnData.express_no" />
+					<input :placeholder="$t('details.pleaseInputExpressNo')" v-model="returnData.express_no" />
 				</view>
 				<view class="cu-form-group">
 					<view class="title">物流公司:</view>
 					<picker @change="kuaidiChange" :range="refundData.kuaidi" range-key="name">
 						<view class="picker">
-							{{ kuaidiKey > -1 ? refundData.kuaidi[kuaidiKey].name : '請選擇' }}
+							{{ kuaidiKey > -1 ? refundData.kuaidi[kuaidiKey].name : $t('details.pleaseSelect') }}
 						</view>
 					</picker>
 				</view>
 				<view class="bg-white padding-bj current">
 					<view class="flex justify-end">
-						<button class="cu-btn line-orange margin-lr-xs" @tap="toExpress(refundData.id)">確認退貨</button>
+						<button class="cu-btn line-orange margin-lr-xs" @tap="toExpress(refundData.id)">{{ $t('details.confirmReturn') }}</button>
 					</view>
 				</view>
 			</view>
@@ -76,12 +80,14 @@
 			<!-- state=6: 已提交退貨 -->
 			<view class="bg-white current" v-if="refundData.state == 6">
 				<view class="bg-white solid-top padding-bj">
-					退貨物流<text class="wanl-gray">{{ refundData.express_name }}({{ refundData.express_no }})</text>
+					{{ $t('details.expressNumber') }}<text class="wanl-gray">{{ refundData.express_name }}({{ refundData.express_no
+						}})</text>
 				</view>
 				<view class="bg-white solid-top padding-bj current">
 					<view class="wanl-gray text-sm">
-						<view><text class="wlIcon-dot margin-right-sm"></text>如退款被拒絕可修改申請</view>
-						<view class="margin-top-xs"><text class="wlIcon-dot margin-right-sm"></text>賣家超時未處理將自動退款</view>
+						<view><text class="wlIcon-dot margin-right-sm"></text>{{ $t('details.ifRefundRejected') }}</view>
+						<view class="margin-top-xs"><text class="wlIcon-dot margin-right-sm"></text>{{ $t('details.sellerTimeout') }}
+						</view>
 					</view>
 				</view>
 			</view>
@@ -89,64 +95,67 @@
 			<!-- state=2: 賣家拒絕 -->
 			<view class="bg-white solid-top padding-bj current" v-if="refundData.state == 2">
 				<view class="text-sm">
-					拒絕原因:<text class="wanl-gray">{{ refundData.refuse_content }}</text>
+					{{ $t('details.refusalReason') }}:<text class="wanl-gray">{{ refundData.refuse_content }}</text>
 				</view>
 				<view class="flex justify-end margin-top">
-					<button class="cu-btn line-black" @tap="arbitrationRefund(refundData.id)">平台介入</button>
-					<button class="cu-btn line-orange margin-left-xs" @tap="editRefund(refundData.id)">修改申請</button>
+					<button class="cu-btn line-black"
+						@tap="arbitrationRefund(refundData.id)">{{ $t('details.platformIntervention') }}</button>
+					<button class="cu-btn line-orange margin-left-xs"
+						@tap="editRefund(refundData.id)">{{ $t('details.editApplication') }}</button>
 				</view>
 			</view>
 
 			<!-- state=3: 平台介入 -->
 			<view class="bg-white solid-top padding-bj current" v-if="refundData.state == 3">
 				<view class="wanl-gray text-sm">
-					<view><text class="wlIcon-dot margin-right-sm"></text>客服正在審核中</view>
-					<view class="margin-top-xs"><text class="wlIcon-dot margin-right-sm"></text>預計1-3個工作日回覆</view>
+					<view><text class="wlIcon-dot margin-right-sm"></text>{{$t('details.serviceReviewing')}}</view>
+					<view class="margin-top-xs"><text class="wlIcon-dot margin-right-sm"></text>{{$t('details.answerWithin1to3Days')}}</view>
 				</view>
 			</view>
 
 			<!-- state=4: 退款完成 -->
 			<view class="bg-white padding-bj flex justify-between align-center" v-if="refundData.state == 4">
-				<text>退款總金額</text>
+				<text>{{$t('details.refundTotalAmount')}}</text>
 				<text class="text-price wanl-orange">{{ refundData.price }}</text>
 			</view>
 
 			<!-- 退款歷史入口 -->
 			<view class="bg-white padding-bj margin-top-bj flex justify-between align-center" @tap="refundLog(refundData.id)">
-				<text>退款歷史</text>
+				<text>{{$t('details.refundHistory')}}</text>
 				<text class="wlIcon-fanhui2"></text>
 			</view>
 
 			<!-- 退款詳情 -->
-			<view class="bg-white padding-bj margin-top-bj">退款詳情</view>
+			<view class="bg-white padding-bj margin-top-bj">{{$t('details.refundDetails')}}</view>
 			<view class="padding-bj flex">
-				<view class="cu-avatar xl margin-right-bj" :style="{backgroundImage: 'url(' + $appKit.oss(refundData.goods.image, 70, 70) + ')'}"></view>
+				<view class="cu-avatar xl margin-right-bj"
+					:style="{ backgroundImage: 'url(' + $appKit.oss(refundData.goods.image, 70, 70) + ')' }"></view>
 				<view class="text-sm" style="width: calc(100% - 128rpx);">
 					<view class="margin-bottom-xs">
 						<view class="text-cut-2">{{ refundData.goods.title }}</view>
 					</view>
-					<view class="wanl-gray">規格:{{ refundData.goods.difference }}</view>
+					<view class="wanl-gray">{{$t('details.specifications')}}:{{ refundData.goods.difference }}</view>
 				</view>
 			</view>
 			<view class="bg-white padding-bj text-sm">
 				<view class="item flex">
-					<text class="wanl-gray">退款類型:</text>
+					<text class="wanl-gray">{{$t('details.refundType')}}:</text>
 					<text>{{ refundData.type_text }}</text>
 				</view>
 				<view class="item flex margin-top-bj">
-					<text class="wanl-gray">退款原因:</text>
+					<text class="wanl-gray">{{$t('details.refundReason')}}:</text>
 					<text>{{ refundData.reason_text }}</text>
 				</view>
 				<view class="item flex margin-top-bj">
-					<text class="wanl-gray">退款金額:</text>
+					<text class="wanl-gray">{{$t('details.refundAmount')}}:</text>
 					<text class="text-price">{{ refundData.price }}</text>
 				</view>
 				<view class="item flex margin-top-bj">
-					<text class="wanl-gray">物流狀態:</text>
+					<text class="wanl-gray">{{$t('details.logisticsStatus')}}:</text>
 					<text>{{ refundData.expressType_text }}</text>
 				</view>
 				<view class="item flex margin-top-bj">
-					<text class="wanl-gray">退款時間:</text>
+					<text class="wanl-gray">{{$t('details.refundTime')}}:</text>
 					<text>{{ refundData.createtime_text }}</text>
 				</view>
 			</view>
@@ -189,33 +198,33 @@ export default {
 				if (res.state == 0) {
 					var diff = (res.createtime + res.config.autoagree * 86400) - Date.parse(new Date()) / 1000
 					var days = Math.floor(diff / 86400), hours = Math.floor(diff % 86400 / 3600), minutes = Math.floor(diff % 86400 % 3600 / 60)
-					if (minutes > 0 && hours == 0 && days == 0) this.refundData.statetime = `剩餘 ${minutes} 分鐘`
-					else if (hours > 0 && days == 0) this.refundData.statetime = `剩餘 ${hours} 小時 ${minutes} 分鐘`
-					else if (days > 0) this.refundData.statetime = `剩餘 ${days} 天 ${hours} 小時 ${minutes} 分鐘`
+					if (minutes > 0 && hours == 0 && days == 0) this.refundData.statetime = this.$t('details.remainingMinutes', { minutes })
+					else if (hours > 0 && days == 0) this.refundData.statetime = this.$t('details.remainingHoursMinutes', { hours, minutes })
+					else if (days > 0) this.refundData.statetime = this.$t('details.remainingDaysHoursMinutes', { days, hours, minutes })
 				} else if (res.state == 1) {
 					var diff = (res.agreetime + res.config.returntime * 86400) - Date.parse(new Date()) / 1000
 					var days = Math.floor(diff / 86400), hours = Math.floor(diff % 86400 / 3600), minutes = Math.floor(diff % 86400 % 3600 / 60)
-					if (minutes > 0 && hours == 0 && days == 0) this.refundData.statetime = `剩餘 ${minutes} 分鐘`
-					else if (hours > 0 && days == 0) this.refundData.statetime = `剩餘 ${hours} 小時 ${minutes} 分鐘`
-					else if (days > 0) this.refundData.statetime = `剩餘 ${days} 天 ${hours} 小時 ${minutes} 分鐘`
+					if (minutes > 0 && hours == 0 && days == 0) this.refundData.statetime = this.$t('details.remainingMinutes', { minutes })
+					else if (hours > 0 && days == 0) this.refundData.statetime = this.$t('details.remainingHoursMinutes', { hours, minutes })
+					else if (days > 0) this.refundData.statetime = this.$t('details.remainingDaysHoursMinutes', { days, hours, minutes })
 				} else if (res.state == 2) {
 					this.refundData.statetime = res.rejecttime_text
 				} else if (res.state == 6) {
 					var diff = (res.returntime + res.config.receivingtime * 86400) - Date.parse(new Date()) / 1000
 					var days = Math.floor(diff / 86400), hours = Math.floor(diff % 86400 / 3600), minutes = Math.floor(diff % 86400 % 3600 / 60)
-					if (minutes > 0 && hours == 0 && days == 0) this.refundData.statetime = `剩餘 ${minutes} 分鐘`
-					else if (hours > 0 && days == 0) this.refundData.statetime = `剩餘 ${hours} 小時 ${minutes} 分鐘`
-					else if (days > 0) this.refundData.statetime = `剩餘 ${days} 天 ${hours} 小時 ${minutes} 分鐘`
+					if (minutes > 0 && hours == 0 && days == 0) this.refundData.statetime = this.$t('details.remainingMinutes', { minutes })
+					else if (hours > 0 && days == 0) this.refundData.statetime = this.$t('details.remainingHoursMinutes', { hours, minutes })
+					else if (days > 0) this.refundData.statetime = this.$t('details.remainingDaysHoursMinutes', { days, hours, minutes })
 				} else if (res.state == 3) {
-					this.refundData.statetime = '等待平台處理'
+					this.refundData.statetime = this.$t('details.waitingPlatformProcess')
 				} else if (res.state == 4) {
 					this.refundData.statetime = res.completetime_text
 				} else if (res.state == 5) {
 					this.refundData.statetime = res.closingtime_text
 				} else if (res.state == 7) {
-					this.refundData.statetime = '預計24小時內原路退回'
+					this.refundData.statetime = this.$t('details.estimated24HoursReturn')
 				} else if (res.state == 8) {
-					this.refundData.statetime = '請聯繫平台客服'
+					this.refundData.statetime = this.$t('details.contactPlatformServiceText')
 				}
 			} catch (e) {
 				console.error('[refund] loadData', e)
@@ -224,12 +233,32 @@ export default {
 
 		/** 退款状态文字 */
 		getStateText(state) {
-			return ['等待賣家同意', '等待買家退貨', '賣家拒絕退款', '平台介入處理', '退款完成', '退款已關閉', '等待賣家收貨', '第三方退款中', '退款失敗'][state]
+			return [
+        this.$t('details.waitingSellerAgree'),
+        this.$t('details.waitingBuyerReturn'),
+        this.$t('details.sellerRejectRefund'),
+        this.$t('details.platformIntervention'),
+        this.$t('details.refundCompleted'),
+        this.$t('details.refundClosed'),
+        this.$t('details.waitingSellerReceive'),
+        this.$t('details.thirdPartyRefunding'),
+        this.$t('details.refundFailed')
+    ][state]
 		},
 
 		/** 退款状态描述 */
 		getStateInfo(state) {
-			return ['已成功發起退款申請', '賣家已同意退款', '可修改退貨申請', '已申請平台介入', '退款已完成', '退款申請已關閉', '如商戶確認收貨將退款', '退款將原路返回', '快捷支付退款失敗'][state]
+			return [
+        this.$t('details.refundInitiated'),
+        this.$t('details.sellerAgreed'),
+        this.$t('details.canModifyRefund'),
+        this.$t('details.platformInterventionApplied'),
+        this.$t('details.refundCompleted'),
+        this.$t('details.refundClosed'),
+        this.$t('details.merchantConfirmReceive'),
+        this.$t('details.refundWillReturn'),
+        this.$t('details.refundFailed')
+    ][state]
 		},
 
 		/** 选择快递公司 */
@@ -245,24 +274,24 @@ export default {
 
 		/** 平台介入 */
 		async arbitrationRefund(id) {
-			uni.showLoading({ title: '請稍候' })
+			uni.showLoading({ title: this.$t('details.pleaseWait') })
 			try {
 				await postRefundArbitration({ id })
 				this.loadData({ id })
 			} catch (e) {
-				uni.showToast({ title: '操作失敗', icon: 'none' })
+				uni.showToast({ title: this.$t('details.operationFailed'), icon: 'none' })
 			}
 			uni.hideLoading()
 		},
 
 		/** 关闭退款 */
 		async closeRefund(id) {
-			uni.showLoading({ title: '請稍候' })
+			uni.showLoading({ title: this.$t('details.pleaseWait') })
 			try {
 				await postRefundClose({ id })
 				this.loadData({ id })
 			} catch (e) {
-				uni.showToast({ title: '操作失敗', icon: 'none' })
+				uni.showToast({ title: this.$t('details.operationFailed'), icon: 'none' })
 			}
 			uni.hideLoading()
 		},
@@ -270,19 +299,19 @@ export default {
 		/** 提交退货物流 */
 		async toExpress() {
 			if (!this.returnData.express_no) {
-				uni.showToast({ title: '請輸入物流單號', icon: 'none' })
+				uni.showToast({ title: this.$t('details.pleaseInputExpressNo'), icon: 'none' })
 				return
 			}
 			if (!this.returnData.express_name) {
-				uni.showToast({ title: '請選擇物流公司', icon: 'none' })
+				uni.showToast({ title: this.$t('details.pleaseSelectExpressCompany'), icon: 'none' })
 				return
 			}
-			uni.showLoading({ title: '請稍候' })
+			uni.showLoading({ title: this.$t('details.pleaseWait') })
 			try {
 				const res = await postRefundExpress(this.returnData)
 				this.loadData({ id: res })
 			} catch (e) {
-				uni.showToast({ title: '提交失敗', icon: 'none' })
+				uni.showToast({ title: this.$t('details.submitFailed'), icon: 'none' })
 			}
 			uni.hideLoading()
 		},
@@ -296,15 +325,72 @@ export default {
 </script>
 
 <style scoped>
-.edgeInsetTop { height: var(--status-bar-height); }
-.wanl-refund .header { width: 100%; height: 180rpx; position: relative; background-color: #f72b36; }
-.wanl-refund .header .content { width: 100%; height: 180rpx; position: absolute; z-index: 10; left: 0; top: 0; display: flex; align-items: center; justify-content: space-between; padding: 0 60rpx; box-sizing: border-box; }
-.wanl-refund .header .status-text { font-size: 34rpx; line-height: 34rpx; color: #FEFEFE; }
-.wanl-refund .header .reason { font-size: 24rpx; line-height: 24rpx; color: rgba(254, 254, 254, 0.75); padding-top: 15rpx; display: flex; align-items: center; }
-.wanl-refund .header .reason-text { padding-right: 12rpx; white-space: pre-wrap; }
-.wanl-refund .current .cu-btn { width: 140rpx; font-size: 26rpx; padding: 0 12rpx; }
-.wanl-refund .receipt { display: flex; align-items: center; }
-.wanl-orange { color: #ff6b35; }
-.line-orange { border-color: #ff6b35 !important; color: #ff6b35 !important; }
-.edgeInsetBottom { height: 30rpx; }
+.edgeInsetTop {
+	height: var(--status-bar-height);
+}
+
+.wanl-refund .header {
+	width: 100%;
+	height: 180rpx;
+	position: relative;
+	background-color: #f72b36;
+}
+
+.wanl-refund .header .content {
+	width: 100%;
+	height: 180rpx;
+	position: absolute;
+	z-index: 10;
+	left: 0;
+	top: 0;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	padding: 0 60rpx;
+	box-sizing: border-box;
+}
+
+.wanl-refund .header .status-text {
+	font-size: 34rpx;
+	line-height: 34rpx;
+	color: #FEFEFE;
+}
+
+.wanl-refund .header .reason {
+	font-size: 24rpx;
+	line-height: 24rpx;
+	color: rgba(254, 254, 254, 0.75);
+	padding-top: 15rpx;
+	display: flex;
+	align-items: center;
+}
+
+.wanl-refund .header .reason-text {
+	padding-right: 12rpx;
+	white-space: pre-wrap;
+}
+
+.wanl-refund .current .cu-btn {
+	width: 140rpx;
+	font-size: 26rpx;
+	padding: 0 12rpx;
+}
+
+.wanl-refund .receipt {
+	display: flex;
+	align-items: center;
+}
+
+.wanl-orange {
+	color: #ff6b35;
+}
+
+.line-orange {
+	border-color: #ff6b35 !important;
+	color: #ff6b35 !important;
+}
+
+.edgeInsetBottom {
+	height: 30rpx;
+}
 </style>

+ 20 - 20
pages/user/refund/edit.vue

@@ -9,39 +9,39 @@
 				<view class="margin-bottom-xs">
 					<view class="text-cut-2">{{ refund.goods.title }}</view>
 				</view>
-				<view class="wanl-gray">規格:{{ refund.goods.difference }}</view>
+				<view class="wanl-gray">{{ $t('apply.mall.comment.spec') }}:{{ refund.goods.difference }}</view>
 			</view>
 		</view>
 
 		<!-- 编辑退款表单 -->
 		<view class="margin-top-bj">
 			<view class="cu-form-group">
-				<view class="title">物流狀態</view>
+				<view class="title">{{ $t('apply.logisticsStatus') }}</view>
 				<picker @change="expressChange" :value="refund.expressType" :range="expressList">
 					<view class="picker">{{ expressList[refund.expressType] }}</view>
 				</picker>
 			</view>
 			<view class="cu-form-group">
-				<view class="title">退款類型</view>
+				<view class="title">{{ $t('apply.refundType') }}</view>
 				<picker @change="typeChange" :value="refund.type" :range="typeList">
 					<view class="picker">{{ typeList[refund.type] }}</view>
 				</picker>
 			</view>
 			<view class="cu-form-group">
-				<view class="title">退款原因</view>
+				<view class="title">{{ $t('apply.refundReason') }}</view>
 				<picker @change="reasonChange" :value="refund.reason" :range="reasonList">
 					<view class="picker">{{ reasonList[refund.reason] }}</view>
 				</picker>
 			</view>
 			<view class="cu-form-group margin-top-bj">
-				<view class="title">退款金額</view>
+				<view class="title">{{ $t('apply.refundAmount') }}</view>
 				<input type="digit" :placeholder="amount.info" @input="moneyInput" :value="refund.price" :disabled="amount.total == 0" />
 			</view>
 
 			<!-- 上傳憑證 -->
 			<view class="bg-white margin-top-bj">
 				<view class="cu-form-group">
-					<view class="title">上傳憑證</view>
+					<view class="title">{{ $t('apply.uploadProof') }}</view>
 				</view>
 				<view class="grid col-4 grid-square flex-sub padding-lr">
 					<view class="bg-img" v-for="(item, index) in refund.images" :key="index" @tap="viewImage(index)">
@@ -49,21 +49,21 @@
 						<view class="cu-tag bg-red" @tap.stop="delImg(index)"><text class="wlIcon-31guanbi"></text></view>
 					</view>
 					<view class="dashed" @tap="chooseImage" v-if="refund.images.length < 4">
-						<text class="wlIcon-31paishe">上傳</text>
+						<text class="wlIcon-31paishe">{{ $t('edit.upload') }}</text>
 					</view>
 				</view>
 			</view>
 
 			<view class="cu-form-group margin-top-bj">
-				<view class="title">退款說明</view>
-				<input placeholder="選填" v-model="refund.refund_content" />
+				<view class="title">{{ $t('apply.refundDescription') }}</view>
+				<input :placeholder="$t('edit.optional')" v-model="refund.refund_content" />
 			</view>
 		</view>
 
 		<view class="edgeInsetBottom"></view>
 		<!-- 提交按鈕 -->
 		<view class="wanlian cu-bar tabbar foot flex flex-direction">
-			<button class="cu-btn wanl-bg-orange lg" @tap="addData">確認修改</button>
+			<button class="cu-btn wanl-bg-orange lg" @tap="addData">{{ $t('apply.confirmModify') }}</button>
 		</view>
 	</view>
 </template>
@@ -91,13 +91,13 @@ export default {
 	},
 	computed: {
 		expressList() {
-			return ['未收貨', '已收貨']
+			return [this.$t('edit.notReceived'), this.$t('edit.received')]
 		},
 		typeList() {
-			return ['僅退款', '退款並退貨']
+			return [this.$t('edit.refundNoReturn'), this.$t('edit.refundAndReturn')]
 		},
 		reasonList() {
-			return ['不喜歡', '空包裹', '未按時發貨', '色差/尺碼不符', '質量問題', '缺少零件', '假冒品牌']
+			return [this.$t('edit.dontLike'), this.$t('edit.emptyPackage'), this.$t('edit.notDelivered'), this.$t('edit.colorSizeMismatch'), this.$t('edit.qualityIssue'), this.$t('edit.missingItems'), this.$t('edit.counterfeitBrand')]
 		}
 	},
 	onLoad(option) {
@@ -113,10 +113,10 @@ export default {
 				var freight_price = parseInt(res.goods.freight_price)
 				this.amount.freight = freight_price
 				if (res.goods_number == 1 || res.freight_type == 2) {
-					this.amount.info = `最多退款 ${price + freight_price} 元(含運費 ${freight_price} 元)`
+					this.amount.info = this.amount.info = this.$t('edit.maxRefundAmount', { price: price + freight_price })
 					this.amount.total = price + freight_price
 				} else {
-					this.amount.info = `最多退款 ${price} 元(不含運費 ${freight_price} 元)`
+					this.amount.info = this.$t('edit.maxRefundAmountNoFreight', { price, freight: freight_price })
 					this.amount.total = price
 				}
 			} catch (e) {
@@ -127,14 +127,14 @@ export default {
 		/** 提交修改 */
 		async addData() {
 			if (this.refund.price <= 0) {
-				uni.showToast({ title: '退款金額不能為空', icon: 'none' })
+				uni.showToast({ title: this.$t('edit.priceCannotBeEmpty'), icon: 'none' })
 				return
 			}
 			if (this.refund.price > this.amount.total) {
-				uni.showToast({ title: `退款不能超過 ${this.amount.total}`, icon: 'none' })
+				uni.showToast({ title: this.$t('edit.refundCannotExceed', { amount: this.amount.total }), icon: 'none' })
 				return
 			}
-			uni.showLoading({ title: '提交中' })
+			uni.showLoading({ title: this.$t('edit.submitting') })
 			try {
 				const res = await postRefundEdit({
 					id: this.refund.id,
@@ -149,7 +149,7 @@ export default {
 				uni.navigateTo({ url: `/pages/user/refund/details?id=${res}` })
 			} catch (e) {
 				uni.hideLoading()
-				uni.showToast({ title: '修改失敗', icon: 'none' })
+				uni.showToast({ title: this.$t('edit.modifyFailed'), icon: 'none' })
 			}
 		},
 
@@ -157,7 +157,7 @@ export default {
 		moneyInput(e) {
 			let money = e.detail.value
 			if (money > this.amount.total) {
-				uni.showToast({ title: `退款不能超過 ${this.amount.total}`, icon: 'none' })
+				uni.showToast({ title: this.$t('edit.refundCannotExceed', { amount: this.amount.total }), icon: 'none' })
 			}
 			this.refund.price = money
 		},