Files
trail-mate/docs/ui_localization_plan.md

103 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# UI 本地化计划
历史说明:
本文件记录的是一份较早期的实现计划,已经不再是当前的规范性设计来源。
当前本地化契约见 [`docs/LOCALIZATION_SPEC.md`](./LOCALIZATION_SPEC.md)
pack/runtime 机制说明见 [`docs/LOCALE_PACKS.md`](./LOCALE_PACKS.md)。
尤其需要注意的是,本计划中仍保留了 `display_language` 这类历史概念,
它们已经被当前的 locale-pack 架构取代。
## 目标
为基于 LVGL 的 Trail Mate 界面增加可在运行时切换的 UI 本地化能力,支持英文与中文。
- 默认语言:英文
- 支持语言:英文 / 中文
- 语言切换入口:`Settings > System > Display Language`
- 切换行为:立即生效,无需重启
## 范围
本任务覆盖设备固件自身产生的、面向用户的 UI 文本,包括:
- 主菜单应用名称
- `modules/ui_shared` 下的共享 LVGL 页面
- `platform/esp/arduino_common/src/ui` 下的 ESP 特定 LVGL 页面
- 共享通知、提示框、模态框标签
- 设置页的分类名、项目名、枚举标签、动作标签和校验消息
- 菜单仪表盘组件
- 屏保提示与设备侧状态通知
本任务不翻译以下内容:
- 收到的用户消息
- 联系人名、节点名、呼号、频道名等用户生成内容
- `Meshtastic``MeshCore``LXMF``RNode` 这类协议品牌名
- README / 文档 / 发布说明
## 设计
### 1. 翻译字典
`modules/ui_shared` 中使用共享本地化模块,包含:
- `ui::i18n::Language`
- 持久化的当前语言状态
-`ui::i18n::tr(const char* english)` 作为规范的字典查找入口
字典以现有英文源文本作为规范查找 key,并返回:
- 当语言为英文时,返回原始英文字符串
- 当语言为中文且存在翻译时,返回对应中文翻译
- 当没有找到翻译条目时,回退到原始英文字符串
这种方式在面对大量已有硬编码文本的 UI 代码库时,能够以较低风险完成本地化接入。
### 2. 持久化
将当前 UI 语言持久化到 `settings` namespace
- key`display_language`
- value`0 = English``1 = Chinese`
### 3. 运行时刷新
切换语言时应当:
- 持久化新的语言值
- 刷新主菜单标签
- 以异步方式重建当前激活的应用页面
这样可以避免要求每一个控件都分别订阅语言变更事件。
### 4. 字体处理
当翻译后的文本包含非 ASCII 字符时,本地化标签应自动切换到 CJK 字体。
应使用共享字体辅助工具,以保证:
- ASCII 标签继续使用原有 UI 字体
- 中文标签在可用时切换到 Noto CJK 字体
- 未编译 CJK glyph 支持的板卡仍能安全回退到现有字体配置
## 实施步骤
1. 增加共享本地化模块与持久化辅助函数。
2. 增加菜单/应用刷新支持,使语言切换后立即生效。
3.`Settings > System` 中加入 `Display Language`
4. 将共享设置项标签、选项、提示和校验消息接入本地化。
5. 本地化菜单标题、仪表盘标签、共享组件、模态按钮和通知。
6. 本地化 Contacts / Chat / GPS / Tracker / PC Link / USB / SSTV / GNSS / Walkie Talkie / placeholder 页面中的固定文本。
7. 本地化屏保文本、电池通知、事件通知等 ESP 特定提示。
8. 运行格式化与 CI 等价构建,并修复回归问题。
## 验收标准
- 全新启动时英文是默认 UI 语言。
- 语言可以在 `Settings > System > Display Language` 中切换。
- 切换语言后当前页面立即更新。
- 返回主菜单后可看到已本地化的应用名称。
- `Back``Save``Cancel``Loading...`、系统 toast、页面标题等共享提示已完成本地化。
- 在支持目标上,中文文本能以 CJK glyph 覆盖正常显示。
- 现有 PlatformIO CI 构建仍能通过。