fix(remote lang tree): 修复命名空间被基本类型值覆盖的bug

修复remote-only模式下语言包归一化的历史bug:当页面leaf顶层存在与命名空间同名的字符串键时,会覆盖整个namespace导致子key失效。通过对齐normalizePageLangPack的两层合并逻辑来修复:
1. 先将页面语言包按路径段转为命名空间结构再合并
2. 额外平铺leaf的基本类型键到根节点以兼容短key调用
This commit is contained in:
2026-07-04 09:25:01 +08:00
parent 783c10fc62
commit 2d7d7f731c
7 changed files with 12220 additions and 16 deletions

View File

@@ -0,0 +1,987 @@
{
"summary": {
"total_missing": 117,
"truly_missing_count": 105,
"defined_locally_only_count": 1,
"syntax_error_count": 11
},
"defined_locally_only": [
{
"key": "title",
"usage_count": 2,
"files": [
"common\\js\\lang.js",
"common\\js\\lang.js"
],
"local_match": [
[
"zh-cn",
"agreement\\contenr",
"nested:title",
"协议"
],
[
"en-us",
"agreement\\contenr",
"nested:title",
"Agreement"
]
]
}
],
"syntax_error": [
{
"key": "components-diy.xxx",
"usage_count": 1,
"files": [
"common\\js\\lang.js"
],
"local_match": []
},
{
"key": "components.foo.default",
"usage_count": 1,
"files": [
"common\\mixin\\i18n-lazy.js"
],
"local_match": []
},
{
"key": "components.foo.title",
"usage_count": 1,
"files": [
"common\\mixin\\i18n-lazy.js"
],
"local_match": []
},
{
"key": "components.payment.",
"usage_count": 1,
"files": [
"components\\payment\\payment.vue"
],
"local_match": []
},
{
"key": "components.privacyPopup.xxx",
"usage_count": 1,
"files": [
"common\\js\\lang.js"
],
"local_match": []
},
{
"key": "components.xxx",
"usage_count": 1,
"files": [
"common\\js\\lang.js"
],
"local_match": []
},
{
"key": "key",
"usage_count": 2,
"files": [
"common\\js\\lang.js",
"common\\js\\lang.js"
],
"local_match": []
},
{
"key": "pay.cashier.",
"usage_count": 1,
"files": [
"pages_tool\\pay\\cashier.vue"
],
"local_match": []
},
{
"key": "point.order_list.",
"usage_count": 1,
"files": [
"pages_promotion\\point\\order_list.vue"
],
"local_match": []
},
{
"key": "status.",
"usage_count": 1,
"files": [
"pages_order\\list.vue"
],
"local_match": []
},
{
"key": "xxx",
"usage_count": 3,
"files": [
"main.js",
"common\\js\\lang.js",
"common\\js\\lang.js"
],
"local_match": []
}
],
"truly_missing": [
{
"key": "agreement.contenr.noContent",
"usage_count": 1,
"files": [
"pages_tool\\agreement\\contenr.vue"
],
"local_match": []
},
{
"key": "agreement.contenr.noContentDesc",
"usage_count": 1,
"files": [
"pages_tool\\agreement\\contenr.vue"
],
"local_match": []
},
{
"key": "agreement.contenr.reload",
"usage_count": 1,
"files": [
"pages_tool\\agreement\\contenr.vue"
],
"local_match": []
},
{
"key": "fenxiao.bill.addonClosed",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\bill.vue"
],
"local_match": []
},
{
"key": "fenxiao.bill.billNoPrefix",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\bill.vue"
],
"local_match": []
},
{
"key": "fenxiao.bill.noBill",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\bill.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.applyTime",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.auditTime",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.bankName",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.currentStatus",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.receivingAccount",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.refuseReason",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.serviceFee",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.transactionNo",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.transferTime",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "fenxiao.withdrawal_detail.transferTypeName",
"usage_count": 1,
"files": [
"pages_promotion\\fenxiao\\withdrawal_detail.vue"
],
"local_match": []
},
{
"key": "file-preview.file-preview.fileUrlNotExist",
"usage_count": 2,
"files": [
"pages_tool\\file-preview\\file-preview.vue",
"pages_tool\\file-preview\\file-preview.vue"
],
"local_match": []
},
{
"key": "file-preview.file-preview.unsupportedFileType",
"usage_count": 1,
"files": [
"pages_tool\\file-preview\\file-preview.vue"
],
"local_match": []
},
{
"key": "file-preview.file-preview.videoUrlNotExist",
"usage_count": 1,
"files": [
"pages_tool\\file-preview\\file-preview.vue"
],
"local_match": []
},
{
"key": "form.form.noFormInfo",
"usage_count": 1,
"files": [
"pages_tool\\form\\form.vue"
],
"local_match": []
},
{
"key": "form.form.submitSuccess",
"usage_count": 2,
"files": [
"pages_tool\\form\\form.vue",
"pages_tool\\form\\form.vue"
],
"local_match": []
},
{
"key": "form.form.title",
"usage_count": 1,
"files": [
"pages_tool\\form\\form.vue"
],
"local_match": []
},
{
"key": "form.formdata.formTipPlaceholder",
"usage_count": 1,
"files": [
"pages_tool\\form\\formdata.vue"
],
"local_match": []
},
{
"key": "form.formdata.noFormInfo",
"usage_count": 1,
"files": [
"pages_tool\\form\\formdata.vue"
],
"local_match": []
},
{
"key": "form.formdata.paramError",
"usage_count": 1,
"files": [
"pages_tool\\form\\formdata.vue"
],
"local_match": []
},
{
"key": "form.formdata.submitSuccess",
"usage_count": 2,
"files": [
"pages_tool\\form\\formdata.vue",
"pages_tool\\form\\formdata.vue"
],
"local_match": []
},
{
"key": "form.formdata.tip",
"usage_count": 2,
"files": [
"pages_tool\\form\\formdata.vue",
"pages_tool\\form\\formdata.vue"
],
"local_match": []
},
{
"key": "goods.brand.noMoreBrand",
"usage_count": 1,
"files": [
"pages_tool\\goods\\brand.vue"
],
"local_match": []
},
{
"key": "login.find.complexityLowercase",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.complexityNumber",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.complexitySymbol",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.complexityUppercase",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.mobileInvalid",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.mobileNotRegistered",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.passwordComplexityPrefix",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.passwordMismatch",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.passwordRequired",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.passwordTooShort",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.resendCode",
"usage_count": 2,
"files": [
"pages_tool\\login\\find.vue",
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.resendCountdown",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.step0Tip",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.step0Title",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.step1Tip",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.step1Title",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.step2Tip",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "login.find.step2Title",
"usage_count": 1,
"files": [
"pages_tool\\login\\find.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.alikePhone",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.animateCodeInput",
"usage_count": 2,
"files": [
"pages_tool\\member\\bind_mobile.vue",
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.bindBenefitTip",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.bindSuccess",
"usage_count": 2,
"files": [
"pages_tool\\member\\bind_mobile.vue",
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.codeSent",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.confirmCode",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.confirmCodeInput",
"usage_count": 3,
"files": [
"pages_tool\\member\\bind_mobile.vue",
"pages_tool\\member\\bind_mobile.vue",
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.doNotRepeatedlyClick",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.findanimateCode",
"usage_count": 3,
"files": [
"pages_tool\\member\\bind_mobile.vue",
"pages_tool\\member\\bind_mobile.vue",
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.manualBind",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.oneClickAuthBind",
"usage_count": 2,
"files": [
"pages_tool\\member\\bind_mobile.vue",
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.phoneNumber",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.pleInputMobile",
"usage_count": 2,
"files": [
"pages_tool\\member\\bind_mobile.vue",
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.save",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.smsCode",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.surePhoneNumber",
"usage_count": 2,
"files": [
"pages_tool\\member\\bind_mobile.vue",
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.bind_mobile.tipTitle",
"usage_count": 1,
"files": [
"pages_tool\\member\\bind_mobile.vue"
],
"local_match": []
},
{
"key": "member.index.iKnow",
"usage_count": 1,
"files": [
"pages_tool\\member\\index.vue"
],
"local_match": []
},
{
"key": "member.info.avatar",
"usage_count": 1,
"files": [
"pages_tool\\member\\info.vue"
],
"local_match": []
},
{
"key": "member.info.gender",
"usage_count": 1,
"files": [
"pages_tool\\member\\info.vue"
],
"local_match": []
},
{
"key": "member.public.cancelAccountConfirm",
"usage_count": 1,
"files": [
"pages_tool\\member\\public\\js\\member-public.js"
],
"local_match": []
},
{
"key": "member.public.riskWarningTitle",
"usage_count": 1,
"files": [
"pages_tool\\member\\public\\js\\member-public.js"
],
"local_match": []
},
{
"key": "pay.cashier.confirmPay",
"usage_count": 1,
"files": [
"pages_tool\\pay\\cashier.vue"
],
"local_match": []
},
{
"key": "pay.cashier.noPayInfo",
"usage_count": 1,
"files": [
"pages_tool\\pay\\cashier.vue"
],
"local_match": []
},
{
"key": "pay.cashier.noPayMethodConfigured",
"usage_count": 1,
"files": [
"pages_tool\\pay\\cashier.vue"
],
"local_match": []
},
{
"key": "pay.cashier.orderAlreadyPaid",
"usage_count": 1,
"files": [
"pages_tool\\pay\\cashier.vue"
],
"local_match": []
},
{
"key": "pay.cashier.paying",
"usage_count": 1,
"files": [
"pages_tool\\pay\\cashier.vue"
],
"local_match": []
},
{
"key": "pay.cashier.paymentCancelled",
"usage_count": 1,
"files": [
"pages_tool\\pay\\cashier.vue"
],
"local_match": []
},
{
"key": "pay.cashier.paymentFailed",
"usage_count": 1,
"files": [
"pages_tool\\pay\\cashier.vue"
],
"local_match": []
},
{
"key": "pay.cashier.pleaseSelectPayMethod",
"usage_count": 1,
"files": [
"pages_tool\\pay\\cashier.vue"
],
"local_match": []
},
{
"key": "pay.result.congratulations",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.couponsCount",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.goHome",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.growthValue",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.memberCard",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.noPayInfo",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.paymentFail",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.paymentSuccess",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.points",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.rechargeRecords",
"usage_count": 1,
"files": [
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "pay.result.viewOrder",
"usage_count": 4,
"files": [
"pages_tool\\pay\\result.vue",
"pages_tool\\pay\\result.vue",
"pages_tool\\pay\\result.vue",
"pages_tool\\pay\\result.vue"
],
"local_match": []
},
{
"key": "seal.medium.detail.downloadFailed",
"usage_count": 2,
"files": [
"pages_tool\\seal\\medium\\detail.vue",
"pages_tool\\seal\\medium\\detail.vue"
],
"local_match": []
},
{
"key": "seal.medium.detail.exportImage",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\detail.vue"
],
"local_match": []
},
{
"key": "seal.medium.detail.exportPdf",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\detail.vue"
],
"local_match": []
},
{
"key": "seal.medium.detail.fileNotExist",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\detail.vue"
],
"local_match": []
},
{
"key": "seal.medium.detail.loading",
"usage_count": 2,
"files": [
"pages_tool\\seal\\medium\\detail.vue",
"pages_tool\\seal\\medium\\detail.vue"
],
"local_match": []
},
{
"key": "seal.medium.detail.saveFailed",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\detail.vue"
],
"local_match": []
},
{
"key": "seal.medium.detail.saveSuccess",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\detail.vue"
],
"local_match": []
},
{
"key": "seal.medium.detail.title",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\detail.vue"
],
"local_match": []
},
{
"key": "seal.medium.search.confirmDeleteAllHistory",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\search.vue"
],
"local_match": []
},
{
"key": "seal.medium.search.confirmDeleteHistory",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\search.vue"
],
"local_match": []
},
{
"key": "seal.medium.search.noData",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\search.vue"
],
"local_match": []
},
{
"key": "seal.medium.search.placeholder",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\search.vue"
],
"local_match": []
},
{
"key": "seal.medium.search.searchResult",
"usage_count": 1,
"files": [
"pages_tool\\seal\\medium\\search.vue"
],
"local_match": []
},
{
"key": "seal.medium.search.tip",
"usage_count": 2,
"files": [
"pages_tool\\seal\\medium\\search.vue",
"pages_tool\\seal\\medium\\search.vue"
],
"local_match": []
},
{
"key": "seal.structure.currentChoicePrefix",
"usage_count": 1,
"files": [
"pages_tool\\seal\\structure.vue"
],
"local_match": []
},
{
"key": "seal.structure.pleaseSelect",
"usage_count": 1,
"files": [
"pages_tool\\seal\\structure.vue"
],
"local_match": []
},
{
"key": "seal.structure.resultFile",
"usage_count": 1,
"files": [
"pages_tool\\seal\\structure.vue"
],
"local_match": []
},
{
"key": "seal.structure.resultPrefix",
"usage_count": 1,
"files": [
"pages_tool\\seal\\structure.vue"
],
"local_match": []
}
]
}