Files
shoot-miniprograms/ENGLISH_LOCALIZATION.md
T
2026-11-05 18:25:03 +08:00

63 lines
8.5 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.
# 小程序英文静态文案交付记录
## 实现范围
- 固定英文,使用现有 `vue-i18n`;没有新增或升级依赖,没有增加语言切换入口或在线翻译请求。
- `src/locales/en.json` 为英文词条,`zh-CN.json` 为中文校对基线,`source-keys.json` 为原文到文案键的索引。
- 已整理 1,108 条词条,覆盖主包、会员/设备/金币/团队对战/训练分包,以及保留在源码中的历史页面和公共组件。
- 页面文本、输入提示、弹窗默认文案、前端固定错误提示、静态说明、协议、状态显示、分享标题及 Canvas 绘制文字均纳入翻译;`manifest.json` 中的小程序定位权限用途说明使用对应英文常量。
- 公共按钮支持英文换行,弹窗和教练点评支持长文案滚动;会员提示和分享 Canvas 的文字做了局部排版调整。
## 业务隔离
- API 地址、请求结构、路由、状态码、缓存键、WebSocket/Protobuf 字段、计分、射距及靶纸判断保持原样。
- `audioManager.js` 完全未修改,中文音频键、语音结束事件与播放顺序继续使用原值。
- 比赛提示继续以原值参与状态与语音判断,由 `formatBattleTip` 在明确的渲染位置显示英文。
- 新手引导步骤标题保留原值;Header 只对四个已知的静态步骤值转换显示,不对任意动态标题做翻译。
- Wi-Fi 样式判断继续使用原始状态;段位图片的 `picNames` 和名称保持中文,仅在文本节点展示英文。
- 训练雷达的兜底数据增加仅用于显示的 `staticLabel`,原始 `name` 及其映射保持原样。服务端返回的维度名称直接显示原文。
- `translateStatic` 只用于明确来自前端配置或前端计算结果的展示,不应用于接口响应、用户输入或 store 的整体数据。
## 保留内容及后续交接
| 内容 | 当前处理 | 后续负责人/事项 |
| --- | --- | --- |
| 底部导航图片 `tab-vip.png`、`tab-point-book.png`、`tab-mall.png` | 地址与资源不变 | UI 提供英文图 |
| 首页、引导、设备介绍、VIP/SVIP、训练标题及比赛结果等图片 | 地址与资源不变,图片内中文保留 | UI 按原尺寸与资源位交付英文图 |
| 分享卡片底图、二维码、徽章等 | 保留;只翻译代码绘制的文字 | UI 后续提供需要替换的英文底图 |
| 音频、视频 | 保留 | 如需英语语音,另行准备资源与实施方案 |
| 商品、门店、套餐、公告、固件说明、服务端规则与协议、接口错误消息 | 保留接口原文 | 后端/运营提供英文内容 |
| 接口段位名称及介绍 | 所有后端 HTTP 请求统一携带 `Accept-Language: en-US`,直接展示后端响应 | 后端部署并维护英文段位配置;图标仍按接口原地址展示 |
| 昵称、组织名、设备别名、Wi-Fi 名称、记分备注等用户内容 | 原样展示及提交 | 不机翻 |
| WebView 外部页面、微信授权和支付系统界面 | 保持原有行为 | 对应内容方/系统管理 |
| 调试日志、音频测试页中的原始音频标识、中文正则与判断字符串 | 保留技术原值 | 无需作为页面文案替换 |
币种、金额、距离、时区与日期计算不作转换。品牌名暂译为 **Sheling Planet**;段位和射箭术语已统一机翻用词,正式品牌译名及协议可由业务方继续校对。
## 验证记录
- 比赛界面修复:独立及公共 `BattleFooter` 的空回合循环改用明确的变量名,避免编译后的文案字段与 `wx:for-item="i"` 同名,导致文本节点输出 `[object Object]`。不修改回合数据、得分求和或回合图片。
- 独立比赛顶部进度组件接入 `formatBattleTip`,仅在渲染时转换英文,保留原始中文提示和语音队列;英文顶部文字与调试按钮做局部排版调整,调试按钮保留非正式环境才显示的原条件。
- `npm run battle:display:check`:先在旧微信编译产物复现行对象输出,再在修复后的 JS + WXML 中验证 0–3 个正常回合、加赛回合、空成绩/零分、红蓝方英文提示和中文状态不变。调试按钮改为紧凑两列,最终真机视觉效果仍需预览验收。
- 全局英文请求头:统一请求封装的所有 HTTP 请求均携带 `Accept-Language: en-US`,移除段位接口白名单;独立的 `aimRenewAPI` 同样携带英文头,保留不等待响应和忽略响应结果的行为。认证、请求参数、接口地址及响应处理不变。首页继续使用现有 `/user/myHome`,未按文档示例替换成 `/index/myHome`。
- 固定英文版缓存兼容:恢复用户缓存时仅清空 `lvlName`、`rankName`、`nextRankName` 中的旧中文显示名,等待原有接口回填;保留英文缓存、昵称、身份、设备、段位编号、成绩与图标。配置和榜单维持现有不持久化方式,不新增语言切换或整体清缓存。
- `npm run rank:i18n:check`:验证所有已覆盖 HTTP 请求的英文头(包括 GET、POST、PUT、DELETE 和独立调瞄续期),有/无登录凭证、分页/赛季参数及原始错误消息保持原行为,并通过真实 Pinia 持久化插件验证旧中文缓存恢复和英文缓存再次恢复。
- 2026-11-05 只读联调 `/index/appConfig`:测试环境 `apitest.shelingxingqiu.com` 返回 74 条段位,中文请求为 `倔强青铜I / 倔强青铜`,英文请求为 `Bronze I / Bronze`;正式环境 `api.shelingxingqiu.com` 的英文请求仍返回中文,需要后端确认正式环境的多语言支持。两边的中英文请求中,段位编号、升级积分及图标地址均一致。未使用用户凭证调用首页或个人榜单,登录态接口仍需真机联调。
- 同日只读联调积分榜、十环榜、MVP 榜(各取 1 条、携带 `en-US`):测试环境三榜均返回英文 `Bronze I`;正式环境三榜仍返回中文段位。这是后端响应差异,前端未额外机翻或覆盖这些动态字段。
- 参数占位符修复:统一 `t` 入口直接读取固定英文词条并执行一次参数替换,兼容 uni-app 小程序运行库直接返回原文的情况。31 条参数文案对照完整版翻译库及当前 uni-app 消息编译器检查,包含数字 0、空字符串、布尔值及参数中含花括号的场景。页面调用和业务数据不作修改。
- 上传限制修复:定位权限用途说明缩短为 `Find Wi-Fi for device updates`(29 个字符),并在 `i18n:check` 中检查权限说明为 1–30 个字符。上传校验与本地编译是不同步骤,本地构建通过不代表微信上传校验通过。
- `npm run i18n:check`:通过。核查中英文键、占位符与插值、翻译函数遮蔽、163 个 Vue 文件的 SFC 编译,以及未翻译的模板直接文字与展示属性。
- 专项用例通过:中文方向音效键、测距/无效射箭语音键、英文测距/无效射箭提示、499/500 cm 边界、次数上限消息、设备/新手试炼进入条件。
- 使用本次修改前的 Git 基线完成附加对照:所有受影响源码中的资源 URL 一致,音频源码未改变;脚本语法树去除文案调用和明确的显示层调整后与基线一致。
- `npm run build`:微信小程序构建通过;构建前的协议检查通过(12 个消息、164 个字段)。
- 已清理四条不存在的旧主包路由:`pages/calibration`、`pages/my-device`、`pages/device-intro`、`pages/ota-wifi`。保留 `pages/device/` 下对应分包页面及现有跳转,剩余 58 条路由均有源文件。
- 未执行真机视觉验收、实物智能弓/OTA 联调或真实支付。代码与构建检查不能替代这些验收。
建议在微信开发者工具及真机重点检查首页、首次引导、设备三态、训练规则、比赛提示、结果页、会员协议、订单、记分本与分享图的英文排版;验证登录、绑定/解绑、OTA、训练/比赛、支付/取消与分享仍按原流程工作。
## 日常维护
新增固定文案时同步维护三份词条文件,模板和脚本通过 `t(key, params)` 取值;整句使用参数,避免重新引入中文语序拼接。业务枚举、接口数据与媒体标识不要作为翻译目标。
运行 `npm run i18n:check` 做本地检查;构建后运行 `npm run i18n:check -- --built`,对真实微信产物模块执行参数插值回归。`npm run battle:display:check` 检查比赛组件真实 JS + WXML 的渲染作用域及英文提示。`node scripts/localization-inventory.cjs` 可只读输出保留中文候选。候选包含日志、语音及判断字符串,不能作为全文替换清单。