Files
wyndham-ARR/.project-docs/50-evidence/topics/2026-07-31-web-i18n-implementation.md
2026-08-02 12:56:22 +08:00

27 lines
2.9 KiB
Markdown
Raw 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.

# ARR Web 中英泰国际化实现
## 结论
2026-07-31 用户确认执行后ARR Web 展示层完成 `zh-CN``en``th` 三语切换基础实现。桌面 `/`、H5 `/h5` 和登录 `/login` 共用一个前端词典/runtime默认中文语言选择保存到 localStorage 与同源 cookie并同步 `html.lang`。顶部品牌 `ARR Report`、XML/Excel/Booking/Finance/BI/C/O、字段名、公司/渠道/房型和报告文件/worksheet 等专有名词保持原样或仅翻译其周边说明。
## 实施范围
- 新增 `arr_web/static/i18n.js`:语义词典、稳定 API 错误码映射、动态 DOM/属性翻译、分页/任务文本模式、日期/整数/CNY/耗时格式化;泰文格式强制 Gregorian calendar 与 Latin digits业务时区仍为 `Asia/Bangkok`
- `arr_web/static/index.html``h5.html``login.html` 增加语言选择器和 runtime`app.js``h5.js``login.js` 接入状态、Toast、确认/空态、错误、任务日志、无障碍属性及 locale-change 重绘。
- `styles.css``h5.css``login.css` 增加泰文字体回退和选择器样式;`arr_web/app.py` 将 i18n runtime 加入静态路由及匿名登录资源白名单。
## 边界与不变量
- 未触发上传、月报/公司报表生成、Booking 草稿删除/激活、下载或数据库写入未修改认证、CSRF、轮询和业务状态判断。
- 业务状态值、API 结构和报表 Excel 文件名、sheet、表头、公式契约保持不变语言只作用于用户展示层。API 错误继续通过 code 识别,前端按 locale 显示人类可见文案。
- 语言切换不把已翻译文本当作源文本runtime 保存原始文案,因此可以从英文/泰文切回中文。
## 验证
- `node --check arr_web/static/i18n.js arr_web/static/app.js arr_web/static/h5.js arr_web/static/login.js`:通过。
- Node DOM/runtime smoke中文 → English → ไทย → 中文恢复正常;`2026-07` 月份文案和 Thai/English locale 格式化通过;未知 API 错误在英文/泰文下回退到对应语言通用提示。
- `python3 -m unittest discover -s tests -p 'test_arr_web*.py'`61/61 通过。
- 当前源码临时预览的 390px 登录页验证中文、English、ไทย切换`ARR Report` 保持不变,泰文长文案无横向溢出。预览进程已关闭,未触碰共享 8766 服务或业务数据。
- 19:27:42 +08 按现有 Screen/Keychain launcher 重启共享 8766旧进程因未重启仍重定向 `/assets/i18n.js`,重启后 loopback 与当前 LAN `192.168.3.103``/login``/healthz``/assets/i18n.js` 分别返回 200匿名根路径返回登录重定向。原 `192.168.3.48` 已不在本机网卡上,未执行业务写操作。
- 完整 `python3 -m unittest discover -s tests`298 个测试中 8 个环境错误,均为既有测试环境缺少 `httpx` 或 OSS client 映射为 unavailable未出现与本次 Web 国际化改动相关的失败。