feat(web): 多语言界面(中/英/日)与用户语言偏好字段 #15

Merged
kevin merged 1 commits from dsh/mailgo:fix/legacy-ban-index into main 2026-08-20 12:27:02 +08:00
Contributor

变更内容

为 Web 前端加入完整多语言支持,并新增用户语言偏好字段。

1. 新增 internal/i18n 包

  • 以原始中文字符串为 key 的翻译目录:中文(恒等)、英文(兜底)、日文(缺译回退英文),约 300 条
  • FromAcceptLanguage 按 q 值解析浏览器语言头;Resolve 实现 auto → 浏览器语言、显式偏好优先、最终兜底英语
  • T/TF 翻译与格式化函数,模板函数 t/tf/htmlLang
  • 单测覆盖解析、回退与译文

2. 用户语言偏好

  • users 表新增 language 字段(auto|en|zh|ja,默认 auto),AutoMigrate 自动加列
  • UserStore 新增 UpdateLanguage
  • 设置页新增「界面语言」选择(自动/English/中文/日本語);管理后台用户表单可预设语言

3. Web 层接线

  • 登录用户按偏好解析语言(auto 时取浏览器 Accept-Language);登录/封禁页按浏览器语言
  • 所有页面模板(用户页 + 管理后台 12 页)接入翻译:导航、文件夹、邮件列表/阅读/写信、设置、登录、封禁页、表单、表格、JS 确认框;<html lang> 随语言切换
  • 日期函数(shortDate/time12/time12m)与 folderLabel 改为语言感知(上午/下午 vs AM/PM vs 午前/午後)
  • 封禁原因等入库中文文案在展示时经翻译(未知 key 原样回退)

4. 测试

  • 全部 go test ./... 通过

验证

  • 已部署到生产环境:浏览器 Accept-Language 分别为 ja-JP / en-US / zh-CN / fr-FR 时,登录页分别渲染日文 / 英文 / 中文 / 英文(兜底)
## 变更内容 为 Web 前端加入完整多语言支持,并新增用户语言偏好字段。 ### 1. 新增 internal/i18n 包 - 以原始中文字符串为 key 的翻译目录:中文(恒等)、英文(兜底)、日文(缺译回退英文),约 300 条 - `FromAcceptLanguage` 按 q 值解析浏览器语言头;`Resolve` 实现 auto → 浏览器语言、显式偏好优先、最终兜底英语 - `T`/`TF` 翻译与格式化函数,模板函数 `t`/`tf`/`htmlLang` - 单测覆盖解析、回退与译文 ### 2. 用户语言偏好 - `users` 表新增 `language` 字段(auto|en|zh|ja,默认 auto),AutoMigrate 自动加列 - UserStore 新增 `UpdateLanguage` - 设置页新增「界面语言」选择(自动/English/中文/日本語);管理后台用户表单可预设语言 ### 3. Web 层接线 - 登录用户按偏好解析语言(auto 时取浏览器 Accept-Language);登录/封禁页按浏览器语言 - 所有页面模板(用户页 + 管理后台 12 页)接入翻译:导航、文件夹、邮件列表/阅读/写信、设置、登录、封禁页、表单、表格、JS 确认框;`<html lang>` 随语言切换 - 日期函数(shortDate/time12/time12m)与 folderLabel 改为语言感知(上午/下午 vs AM/PM vs 午前/午後) - 封禁原因等入库中文文案在展示时经翻译(未知 key 原样回退) ### 4. 测试 - 全部 `go test ./...` 通过 ## 验证 - 已部署到生产环境:浏览器 Accept-Language 分别为 ja-JP / en-US / zh-CN / fr-FR 时,登录页分别渲染日文 / 英文 / 中文 / 英文(兜底)
dsh added 1 commit 2026-08-20 12:26:39 +08:00
- 新增 internal/i18n 包:以原始中文字符串为 key 的翻译目录(zh 恒等,
  en 兜底,ja 缺译回退 en),t/tf 模板函数与 Accept-Language 解析
  (按 q 值排序,兜底英语)
- User 模型新增 language 字段(auto|en|zh|ja,默认 auto),
  AutoMigrate 自动加列;UserStore 新增 UpdateLanguage
- 语言解析:登录用户按偏好(auto 时取浏览器 Accept-Language),
  登录/封禁页按浏览器语言;所有 c.HTML 渲染注入 Lang 模板数据
- 全部页面模板(用户页 + 管理后台 12 页)接入翻译:导航、文件夹、
  邮件列表/阅读/写信、设置、登录、封禁页、表单、表格、JS 确认框等;
  html lang 属性随语言切换;日期函数(shortDate/time12/time12m)
  与 folderLabel 改为语言感知(上午/下午 vs AM/PM vs 午前/午後)
- 设置页新增「界面语言」选择(自动/English/中文/日本語),
  /settings 表单支持单独提交语言偏好;管理后台用户表单可预设语言
- 封禁原因等入库中文文案在展示时经 t 翻译(未知 key 原样回退)
- 测试:i18n 单测(解析/回退/译文)、render 测试补 Lang 数据、
  时间格式化测试适配新签名;全量 go test 通过
kevin merged commit cca7e4f092 into main 2026-08-20 12:27:02 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kevin/mailgo#15