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/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: '提交成功',
},
}