8.5 KiB
8.5 KiB
小程序英文静态文案交付记录
实现范围
- 固定英文,使用现有
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 可只读输出保留中文候选。候选包含日志、语音及判断字符串,不能作为全文替换清单。