# 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 国际化改动相关的失败。