From d9309756c762a41515c9f99380f95599b1e6abf8 Mon Sep 17 00:00:00 2001 From: Zikai Date: Fri, 24 Jul 2026 09:02:38 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AD=90=E6=A8=A1=E5=9D=97=20i18n=20?= =?UTF-8?q?=E6=A1=A5=E6=8E=A5=20--=20=E9=80=8F=E4=BC=A0=20:locale=20prop?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=B5=8C=E5=85=A5=E9=A1=B5=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=20i18n=20ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:子项目组件用 useI18n({useScope:'global'}) 注入,嵌入时解析到宿主 mainPage 的 i18n 实例(不含子项目文案)-> 文案回退成 key(显示 ID)。 修复: - z449 / timeTableFix 组件改用 useLocale composable 直读自身模块级 i18n 实例 - ttf 新增独立 i18n(中英 locale + useLocale),抽取所有硬编码中文 - mainPage 侧 Timetable/MobileGameWrapper 包装器透传 :locale prop - 两个子模块 gitlink 更新至各自修复 commit 验证:构建后两个子模块 chunk 含真实中文文案,无 useI18n 注入残留 --- docs/architecture.md | 6 ++++-- docs/submodule-z449.md | 13 +++++++------ src/modules/timetable/Timetable.vue | 11 +++++++++-- third_party/timeTableFix | 2 +- third_party/z449 | 2 +- 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 836bb92..33c710c 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -59,8 +59,10 @@ export default { 部分页签由独立仓库的子项目经 git submodule 集成,mainPage 侧用包装器 import 子项目 `App.vue` 作为路由组件(非 iframe),共享构建与 KeepAlive 缓存: -- **timeTableFix**(`third_party/timeTableFix`,日程整理页签):无 i18n,子项目硬编码中文。详见 [submodule-timeTableFix.md](./submodule-timeTableFix.md)。 -- **z449**(`third_party/z449`,移动游戏页签):子项目自带独立 `vue-i18n` 实例与 locale 文案。mainPage 包装器把当前语言经 `:locale` prop 透传,子项目 `App.vue` `watch` 该 prop 同步到自己的 i18n 实例,从而跟随父项目语言开关响应式切换(不共享 messages,仅同步 locale 值)。详见 [submodule-z449.md](./submodule-z449.md)。 +- **timeTableFix**(`third_party/timeTableFix`,日程整理页签):自带独立 `vue-i18n` 实例与中英 locale 文案。与 z449 同样经 `:locale` prop 桥接父项目语言。详见 [submodule-timeTableFix.md](./submodule-timeTableFix.md)。 +- **z449**(`third_party/z449`,移动游戏页签):自带独立 `vue-i18n` 实例与 locale 文案。mainPage 包装器把当前语言经 `:locale` prop 透传,子项目 `App.vue` `watch` 该 prop 同步到自己的 i18n 实例,从而跟随父项目语言开关响应式切换(不共享 messages,仅同步 locale 值)。详见 [submodule-z449.md](./submodule-z449.md)。 + +> **i18n 桥接关键点**:子项目组件用各自 `useLocale` composable **直接读自身模块级 i18n 实例**(`i18n.global`),而非 `useI18n({ useScope: 'global' })`。后者在嵌入时会解析到宿主已安装的 i18n 实例(不含子项目文案),导致文案回退成 i18n key(显示 ID 而非文字)。 ## 存活校验(requiresAlive) diff --git a/docs/submodule-z449.md b/docs/submodule-z449.md index 949f9d3..112ebe1 100644 --- a/docs/submodule-z449.md +++ b/docs/submodule-z449.md @@ -61,9 +61,10 @@ git commit -m "chore: 移除 z449 子模块集成" ## 与 timeTableFix 子模块的差异 -| 维度 | timeTableFix | z449 | -|------|--------------|------| -| i18n | 无(硬编码中文) | 自带独立 vue-i18n,中英双语 | -| 语言同步 | 无需 | 经 `:locale` prop 桥接父项目语言 | -| 文案来源 | 组件内硬编码 | z449 自有 locale 文件(单一来源) | -| mainPage 侧文案 | 无 | 仅 `tabs.mobileGame` 页签标题 | +| 维度 | 早期 timeTableFix | timeTableFix(现已 i18n) | z449 | +|------|-------------------|---------------------------|------| +| i18n | 无(硬编码中文) | 自带独立 vue-i18n,中英双语 | 自带独立 vue-i18n,中英双语 | +| 语言同步 | 无需 | 经 `:locale` prop 桥接 | 经 `:locale` prop 桥接 | +| 文案来源 | 组件内硬编码 | ttf 自有 locale 文件(单一来源) | z449 自有 locale 文件(单一来源) | + +两个子项目均采用相同的 i18n 桥接模式:各自维护独立 `vue-i18n` 实例与 locale 文案,组件内用 `useLocale` composable **直接读自身实例**(而非 `useI18n()` 注入,否则嵌入时会解析到宿主实例导致文案回退成 key),mainPage 侧包装器经 `:locale` prop 透传当前语言。 diff --git a/src/modules/timetable/Timetable.vue b/src/modules/timetable/Timetable.vue index 3944b41..742413a 100644 --- a/src/modules/timetable/Timetable.vue +++ b/src/modules/timetable/Timetable.vue @@ -1,19 +1,26 @@ diff --git a/third_party/timeTableFix b/third_party/timeTableFix index 2d7b8d0..960657a 160000 --- a/third_party/timeTableFix +++ b/third_party/timeTableFix @@ -1 +1 @@ -Subproject commit 2d7b8d0d077c0cf3b4fc4961bb67025abbbed079 +Subproject commit 960657a251b1f19fa81447b9140257eb9a8506be diff --git a/third_party/z449 b/third_party/z449 index a5d4c05..a91c379 160000 --- a/third_party/z449 +++ b/third_party/z449 @@ -1 +1 @@ -Subproject commit a5d4c05392482235496d0f45b80226e7b025df4f +Subproject commit a91c379096e1789870e7a8bb65cf30456c2a8992