feat: 新增多语言文案并修复动态国际化调用问题

1. 新增多语言文件覆盖组件、页面、公共模块的翻译文案
2. 修复多处动态拼接lang key的调用,增加兜底逻辑避免空值或原始key暴露
3. 补全DIY组件、业务页面的国际化适配
4. 新增P2动态key国际化处理方案文档
This commit is contained in:
2026-06-29 15:29:24 +08:00
parent c3956f7bcd
commit c7810f16f7
115 changed files with 1343 additions and 153 deletions

View File

@@ -1,4 +1,13 @@
export const lang = {
//title为每个页面的标题
title: 'Agreement',
// agreement/contenr.vue page new translation items
agreement: {
// No content
noContent: 'No content',
// This agreement content has not been set
noContentDesc: 'This agreement content has not been set',
// Reload
reload: 'Reload',
},
}

View File

@@ -262,4 +262,17 @@ export const lang = {
locationParamFormatError: 'Invalid location parameter format',
keyCannotBeEmpty: 'Key cannot be empty',
},
// Common JS text
auth: {
miniProgramConfigError: 'Mini program configuration error',
},
map: {
openMapFailed: 'Failed to open map, please try again later',
},
unit: {
piece: 'pc',
},
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-channel-video channel video component
// View count suffix: {count} is the view count placeholder
viewCountSuffix: '{count} views',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-goods-recommend product recommendation component
// Sold prefix
soldPrefix: 'Sold ',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-kefu customer service component
// Add now
addNow: 'Add Now',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-listmenu list menu component
// View
view: 'View',
}

View File

@@ -0,0 +1,7 @@
export const lang = {
// diy-live live streaming component
// Anchor prefix
anchorPrefix: 'Anchor: ',
// Live goods prefix
goodsPrefix: 'Live Products: ',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-map map component
// One-click navigation
navigate: 'Navigate',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-notes notes component
// Read prefix
readPrefix: 'Reads',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-search search component
// Search button
searchBtn: 'Search',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-text text component
// Zone label
zone: 'Zone',
}

View File

@@ -0,0 +1,11 @@
export const lang = {
// chat-message component
components: {
chatMessage: {
// Customer service offline hint
customerOffline: 'Customer service is offline',
// Customer service online hint
customerOnline: 'Customer service is online',
},
},
}

View File

@@ -0,0 +1,11 @@
export const lang = {
// ns-chat-goods chat goods component
components: {
chatGoods: {
// Sent status
sent: 'Sent',
// Send button
send: 'Send',
},
},
}

View File

@@ -0,0 +1,13 @@
export const lang = {
// ns-chat-receiveGoods chat received goods component
components: {
chatReceiveGoods: {
// Stock prefix
stockPrefix: 'Stock:',
// Sales prefix
salesPrefix: 'Sales:',
// View goods button
viewGoods: 'View Product',
},
},
}

View File

@@ -0,0 +1,9 @@
export const lang = {
// ns-goods-sku product SKU component
components: {
nsGoodsSku: {
// Point suffix: {point} is the points amount placeholder
pointSuffix: '{point} points',
},
},
}

View File

@@ -0,0 +1,9 @@
export const lang = {
// ns-video-player-popup video popup component
components: {
videoPlayerPopup: {
// Video URL does not exist hint
videoUrlNotExist: 'Video URL does not exist',
},
},
}

View File

@@ -0,0 +1,11 @@
export const lang = {
// pick-regions region picker component
components: {
pickRegions: {
// Cancel button
cancel: 'Cancel',
// Confirm button
confirm: 'Done',
},
},
}

View File

@@ -1,4 +1,16 @@
export const lang = {
//title为每个页面的标题
title: 'Bill'
}
title: 'Bill',
// fenxiao/bill.vue page new translation items
fenxiao: {
// Bill
bill: {
// Bill number prefix
billNoPrefix: 'Bill No.:',
// No bill information
noBill: 'No bill information',
// Distribution is not enabled by merchant
addonClosed: 'Distribution is not enabled by merchant',
},
},
}

View File

@@ -1,4 +1,13 @@
export const lang = {
//title为每个页面的标题
title: 'File Preview',
// file-preview/file-preview.vue page new translation items
filePreview: {
// File URL does not exist
fileUrlNotExist: 'File URL does not exist',
// Video URL does not exist
videoUrlNotExist: 'Video URL does not exist',
// This file type preview is not supported
unsupportedFileType: 'This file type preview is not supported',
},
}

View File

@@ -1,4 +1,9 @@
export const lang = {
//title为每个页面的标题
title: 'Brand Zone'
title: 'Brand Zone',
// goods/brand.vue page new translation items
brand: {
// No more brands
noMoreBrand: 'No more brands, go to the homepage',
},
}

View File

@@ -20,4 +20,6 @@ export const lang = {
minPriceGreaterThanMax: 'Minimum price cannot be greater than maximum price',
maxPriceLessThanMin: 'Maximum price cannot be less than minimum price',
// pages_goods/public/js/list.js new translation items
buyText: 'Buy',
}

View File

@@ -1,4 +1,9 @@
export const lang = {
//title为每个页面的标题
title: 'Product Not Found',
// goods/not_exist.vue page new translation items
notExist: {
// The product you are viewing does not exist, it may have been removed or deleted
message: 'The product you are viewing does not exist, it may have been removed or deleted',
},
}

View File

@@ -1,4 +1,6 @@
export const lang = {
//title为每个页面的标题
title: 'Help Detail'
}
// Page title
title: 'Help Detail',
// Publish time prefix
publishTimePrefix: 'Published at: ',
}

View File

@@ -1,5 +1,7 @@
export const lang = {
//title为每个页面的标题
// Page title
title: 'Help Center',
emptyText: 'No help information available'
}
emptyText:"No help information",
// No help
noHelp: 'No help',
}

View File

@@ -1,3 +1,8 @@
export const lang = {
title: ''
title: '',
// index/diy.vue page new translation items
diy: {
// I got it
iKnow: 'Got it',
},
};

View File

@@ -34,5 +34,10 @@ export const lang = {
enterMobileTip: 'Please enter mobile phone number',
enterCorrectMobileTip: 'Please enter correct mobile phone number',
enterCaptchaTip: 'Please enter verification code',
requestFailTip: 'request:fail'
requestFailTip: 'request:fail',
// Login validation and countdown text
mobileRequired: 'Please enter mobile phone number',
mobileFormatError: 'Please enter correct mobile phone number',
resendAfterSeconds: '{seconds}s before resend',
}

View File

@@ -1,3 +1,14 @@
export const lang = {
title: 'Account Cancellation',
// member/cancelrefuse.vue page new translation items
cancelrefuse: {
// Your application has been rejected
title: 'Your application has been rejected',
// Reason for rejection:
reasonPrefix: 'Reason for rejection: ',
// Back
back: 'Back',
// Reapply
reapply: 'Reapply',
},
}

View File

@@ -1,3 +1,12 @@
export const lang = {
title: 'Account Cancellation',
// member/cancelsuccess.vue page new translation items
cancelsuccess: {
// You have successfully cancelled your account
title: 'You have successfully cancelled your account',
// Looking forward to seeing you again. To use again, please re-register
desc: 'Looking forward to seeing you again. To use again, please re-register',
// Done
done: 'Done',
},
}

View File

@@ -58,4 +58,10 @@ export const lang = {
// 协议
privacyPolicy: 'Privacy Policy',
registrationAgreement: 'Registration Agreement',
// member/index.vue page new translation items
index: {
// I got it
iKnow: 'Got it',
},
}

View File

@@ -0,0 +1,11 @@
export const lang = {
// member/public member common mixin
member: {
public: {
// Risk warning
riskWarningTitle: 'Risk Warning',
// Confirm account cancellation
cancelAccountConfirm: 'Are you sure you want to cancel the current account?',
},
},
}

View File

@@ -1,4 +1,6 @@
export const lang = {
//title为每个页面的标题
title: 'Notice Detail'
}
// Page title
title: 'Announcement Detail',
// Publish time prefix
publishTimePrefix: 'Published at: ',
}

View File

@@ -1,6 +1,10 @@
export const lang = {
//title为每个页面的标题
title: 'Notice List',
emptyText:"No more information available",
contentTitle:'Upgrade Notice'
}
// Page title
title: 'Announcement List',
emptyText:"No more information",
contentTitle:'Upgrade Announcement',
// Top tag
topTag: 'Top',
// No announcements
noNotice: 'No announcements',
}

View File

@@ -33,5 +33,14 @@ export const lang = {
// ====== Form Validation ======
validate: {
pleaseSelectRefundReason: 'Please select a refund reason'
}
},
// ====== Refund Method Popup ======
// pages_order/public/js/refundMethod.js new translation items
refund: {
// After cancellation, this application will be closed; you can reapply later if needed
cancelRefundContent: 'After cancellation, this application will be closed; you can reapply later if needed.',
// Do not cancel for now
cancelRefundCancelText: 'Do not cancel for now',
},
}

View File

@@ -1,4 +1,11 @@
export const lang = {
//title为每个页面的标题
title: 'Recharge Records',
// recharge/order_list.vue page new translation items
recharge: {
// Recharge successful
rechargeSuccess: 'Recharge Successful',
// No recharge records
noRecord: 'No recharge records',
},
}

View File

@@ -1,4 +1,27 @@
export const lang = {
//title为每个页面的标题
title: 'Structure Selection',
// seal/structure.vue page new translation items
structure: {
// Current choice prefix
currentChoicePrefix: 'Current choice: ',
// Please select
pleaseSelect: 'Please select',
// Result prefix
resultPrefix: 'Selection result: ',
// Result file
resultFile: 'Result file',
// Please select material
selectMaterial: 'Please select material',
// Please select structure
selectStructure: 'Please select structure',
// Upload image
uploadImage: 'Upload Image',
// Please upload image
pleaseUploadImage: 'Please upload image',
// Submit requirement
submitRequirement: 'Submit Requirement',
// Submit successful
submitSuccess: 'Submitted Successfully',
},
}

View File

@@ -1,4 +1,13 @@
export const lang = {
//title为每个页面的标题
title: '协议',
// agreement/contenr.vue 页面新增翻译项
agreement: {
// 暂无内容
noContent: '暂无内容',
// 该协议内容暂未设置
noContentDesc: '该协议内容暂未设置',
// 重新加载
reload: '重新加载',
},
}

View File

@@ -260,4 +260,17 @@ export const lang = {
keyCannotBeEmpty: 'key值不能为空',
},
// 公共 JS 文案
auth: {
miniProgramConfigError: '小程序配置错误',
},
map: {
openMapFailed: '打开地图失败,请稍后重试',
},
unit: {
piece: '件',
},
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-channel-video 视频号组件
// 观看次数后缀: {count} 为次数占位符
viewCountSuffix: '{count}次观看',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-goods-recommend 商品推荐组件
// 销量前缀
soldPrefix: '售',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-kefu 客服组件
// 立即添加
addNow: '立即添加',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-listmenu 列表菜单组件
// 查看
view: '查看',
}

View File

@@ -0,0 +1,7 @@
export const lang = {
// diy-live 直播组件
// 主播前缀
anchorPrefix: '主播:',
// 直播商品前缀
goodsPrefix: '直播商品:',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-map 地图组件
// 一键导航
navigate: '一键导航',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-notes 笔记组件
// 阅读前缀
readPrefix: '阅读',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-search 搜索组件
// 搜索按钮
searchBtn: '搜索',
}

View File

@@ -0,0 +1,5 @@
export const lang = {
// diy-text 文本组件
// 专区标签
zone: '专区',
}

View File

@@ -0,0 +1,11 @@
export const lang = {
// chat-message 组件
components: {
chatMessage: {
// 客服不在线提示
customerOffline: '客服不在线',
// 客服在线提示
customerOnline: '客服在线',
},
},
}

View File

@@ -0,0 +1,11 @@
export const lang = {
// ns-chat-goods 聊天商品组件
components: {
chatGoods: {
// 已发送状态
sent: '已发送',
// 发送按钮
send: '发送',
},
},
}

View File

@@ -0,0 +1,13 @@
export const lang = {
// ns-chat-receiveGoods 聊天收到商品组件
components: {
chatReceiveGoods: {
// 库存前缀
stockPrefix: '库存:',
// 销量前缀
salesPrefix: '销量:',
// 查看商品按钮
viewGoods: '查看商品',
},
},
}

View File

@@ -0,0 +1,9 @@
export const lang = {
// ns-goods-sku 商品 SKU 组件
components: {
nsGoodsSku: {
// 积分后缀: {point} 为积分数量占位符
pointSuffix: '{point}积分',
},
},
}

View File

@@ -0,0 +1,9 @@
export const lang = {
// ns-video-player-popup 视频弹窗组件
components: {
videoPlayerPopup: {
// 视频地址不存在提示
videoUrlNotExist: '视频地址不存在',
},
},
}

View File

@@ -0,0 +1,11 @@
export const lang = {
// pick-regions 地区选择组件
components: {
pickRegions: {
// 取消按钮
cancel: '取消',
// 完成按钮
confirm: '完成',
},
},
}

View File

@@ -1,4 +1,16 @@
export const lang = {
//title为每个页面的标题
title: '账单'
title: '账单',
// fenxiao/bill.vue 页面新增翻译项
fenxiao: {
// 账单
bill: {
// 账单编号前缀
billNoPrefix: '账单编号:',
// 暂无账单信息
noBill: '暂无账单信息',
// 商家未开启分销
addonClosed: '商家未开启分销',
},
},
}

View File

@@ -1,4 +1,13 @@
export const lang = {
//title为每个页面的标题
title: '文件预览',
// file-preview/file-preview.vue 页面新增翻译项
filePreview: {
// 文件地址不存在
fileUrlNotExist: '文件地址不存在',
// 视频地址不存在
videoUrlNotExist: '视频地址不存在',
// 暂不支持该类型文件预览
unsupportedFileType: '暂不支持该类型文件预览',
},
}

View File

@@ -1,4 +1,9 @@
export const lang = {
//title为每个页面的标题
title: '品牌专区'
title: '品牌专区',
// goods/brand.vue 页面新增翻译项
brand: {
// 没有更多品牌了
noMoreBrand: '暂无更多品牌,去首页看看吧',
},
}

View File

@@ -20,4 +20,6 @@ export const lang = {
minPriceGreaterThanMax: '最低价不能大于最高价',
maxPriceLessThanMin: '最高价不能小于最低价',
// pages_goods/public/js/list.js 新增翻译项
buyText: '购买',
}

View File

@@ -1,4 +1,9 @@
export const lang = {
//title为每个页面的标题
title: '商品找不到',
// goods/not_exist.vue 页面新增翻译项
notExist: {
// 您查看的商品不存在,可能已下架或被删除
message: '您查看的商品不存在,可能已下架或被删除',
},
}

View File

@@ -1,4 +1,6 @@
export const lang = {
//title为每个页面的标题
title: '帮助详情'
title: '帮助详情',
// 发布时间前缀
publishTimePrefix: '发布时间:',
}

View File

@@ -1,5 +1,7 @@
export const lang = {
//title为每个页面的标题
title: '帮助中心',
emptyText:"当前暂无帮助信息"
emptyText:"当前暂无帮助信息",
// 暂无帮助
noHelp: '暂无帮助',
}

View File

@@ -1,3 +1,8 @@
export const lang = {
title: ''
title: '',
// index/diy.vue 页面新增翻译项
diy: {
// 我知道了
iKnow: '我知道了',
},
};

View File

@@ -17,22 +17,27 @@ export const lang = {
registerTips1: '注册',
registerTips2: '吧',
newUserRegister: '新用户注册',
// login.vue页面新增翻译项
welcomeText: '您好,<br />欢迎使用',
getDynacode: '获取动态码',
mobileInputPlaceholder: '请输入您的手机号',
accountInputPlaceholder: '请输入账号',
passwordInputPlaceholder: '请输入密码',
forgetPasswordText: '忘记密码?',
dynacodeInputPlaceholder: '请输入动态码',
loginButtonText: '登录',
registerAgreementText: '若您未注册,则登录后将自动帮您注册。注册即视为同意',
privacyPolicyText: '《隐私条款》',
userServiceAgreementText: '《用户服务协议》',
agreeAgreementTip: '请先阅读并同意协议',
loginSuccessTip: '登录成功',
enterMobileTip: '请输入手机号',
enterCorrectMobileTip: '请输入正确的手机号',
enterCaptchaTip: '请输入验证码',
requestFailTip: 'request:fail'
// login.vue 页面新增翻译项
welcomeText: '您好,<br />欢迎使用',
getDynacode: '获取动态码',
mobileInputPlaceholder: '请输入您的手机号',
accountInputPlaceholder: '请输入账号',
passwordInputPlaceholder: '请输入密码',
forgetPasswordText: '忘记密码?',
dynacodeInputPlaceholder: '请输入动态码',
loginButtonText: '登录',
registerAgreementText: '若您未注册,则登录后将自动帮您注册。注册即视为同意',
privacyPolicyText: '《隐私条款》',
userServiceAgreementText: '《用户服务协议》',
agreeAgreementTip: '请先阅读并同意协议',
loginSuccessTip: '登录成功',
enterMobileTip: '请输入手机号',
enterCorrectMobileTip: '请输入正确的手机号',
enterCaptchaTip: '请输入验证码',
requestFailTip: 'request:fail',
// 登录校验与倒计时文案
mobileRequired: '请输入手机号',
mobileFormatError: '请输入正确的手机号',
resendAfterSeconds: '{seconds}s后可重新获取',
}

View File

@@ -1,3 +1,14 @@
export const lang = {
title: '账号注销',
// member/cancelrefuse.vue 页面新增翻译项
cancelrefuse: {
// 您的申请已拒绝
title: '您的申请已拒绝',
// 拒绝理由:
reasonPrefix: '拒绝理由:',
// 返回
back: '返回',
// 重新申请
reapply: '重新申请',
},
}

View File

@@ -1,3 +1,12 @@
export const lang = {
title: '账号注销',
// member/cancelsuccess.vue 页面新增翻译项
cancelsuccess: {
// 您已成功注销账号
title: '您已成功注销账号',
// 待下次与您更好的相遇,如需再次使用,请重新注册
desc: '待下次与您更好的相遇,如需再次使用,请重新注册',
// 完成
done: '完成',
},
}

View File

@@ -61,4 +61,10 @@ export const lang = {
// 协议
privacyPolicy: '隐私协议',
registrationAgreement: '注册协议',
// member/index.vue 页面新增翻译项
index: {
// 我知道了
iKnow: '我知道了',
},
}

View File

@@ -0,0 +1,11 @@
export const lang = {
// member/public 会员公共 mixin
member: {
public: {
// 风险提示
riskWarningTitle: '风险提示',
// 注销账号确认
cancelAccountConfirm: '确定要注销当前账号吗?',
},
},
}

View File

@@ -1,4 +1,6 @@
export const lang = {
//title为每个页面的标题
title: '公告详情'
title: '公告详情',
// 发布时间前缀
publishTimePrefix: '发布时间:',
}

View File

@@ -2,5 +2,9 @@ export const lang = {
//title为每个页面的标题
title: '公告列表',
emptyText:"当前暂无更多信息",
contentTitle:'升级公告'
contentTitle:'升级公告',
// 置顶标签
topTag: '置顶',
// 暂无公告
noNotice: '暂无公告',
}

View File

@@ -33,5 +33,14 @@ export const lang = {
// ====== 表单验证 ======
validate: {
pleaseSelectRefundReason: '请选择退款原因'
}
},
// ====== 退款方式弹窗 ======
// pages_order/public/js/refundMethod.js 新增翻译项
refund: {
// 撤销之后本次申请将会关闭,如后续仍有问题可再次发起申请。
cancelRefundContent: '撤销之后本次申请将会关闭,如后续仍有问题可再次发起申请。',
// 暂不撤销
cancelRefundCancelText: '暂不撤销',
},
}

View File

@@ -1,4 +1,11 @@
export const lang = {
//title为每个页面的标题
title: '充值记录',
// recharge/order_list.vue 页面新增翻译项
recharge: {
// 充值成功
rechargeSuccess: '充值成功',
// 暂无充值记录
noRecord: '暂无充值记录',
},
}

View File

@@ -1,4 +1,27 @@
export const lang = {
//title为每个页面的标题
title: '结构选型',
// seal/structure.vue 页面新增翻译项
structure: {
// 当前选择前缀
currentChoicePrefix: '当前选择:',
// 请选择
pleaseSelect: '请选择',
// 选型结果前缀
resultPrefix: '选型结果:',
// 结果文件
resultFile: '结果文件',
// 请选择材质
selectMaterial: '请选择材质',
// 请选择结构
selectStructure: '请选择结构',
// 上传图片
uploadImage: '上传图片',
// 请上传图片
pleaseUploadImage: '请上传图片',
// 提交需求
submitRequirement: '提交需求',
// 提交成功
submitSuccess: '提交成功',
},
}