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

8.5 KiB
Raw Blame History

小程序英文静态文案交付记录

实现范围

  • 固定英文,使用现有 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 可只读输出保留中文候选。候选包含日志、语音及判断字符串,不能作为全文替换清单。