主题大部分是中文,结账组件少数字段却显示英文,而且每次发布后出现的位置不一样。通常是静态部署的locale、主题继承和翻译JS字典没有一起生成。

问题不在表面

先用一个真实失败样本复现,不要一上来全量重建。把请求、实体ID和时间记下来,后面的SQL与日志才能对得上。

几条命令足够定位

  • 查看页面加载的是哪个js-translation.json,状态码和内容是否对应当前主题。
  • 确认部署命令是否只写了语言参数却漏了主题或area。
bin/magento config:show general/locale/code
find pub/static -path "*zh_CN*js-translation.json" -ls
bin/magento setup:static-content:deploy -f zh_CN en_US --area frontend --theme Vendor/theme
bin/magento cache:clean translate full_page

这里的重点不是把报错暂时消掉,而是让同一操作再执行一次仍保持幂等;因此修复后一定要做第二次重复执行测试。

改动落在哪里

生产模式先维护窗口删除目标主题对应的pub/static/frontend/Vendor/theme目录(保留.htaccess),再带正确area、theme与locale部署。自定义翻译放i18n/zh_CN.csv并检查引号转义;RequireJS组件中的文案必须通过$.t()进入字典。多节点要共享或同步同一构建产物。

实施时的顺序

  • 先做数据与配置备份,记录当前值。
  • 只改一个变量并重跑失败样本。
  • 确认新数据正确后,再处理历史受影响记录。
  • 最后恢复定时任务或缓存。

验收清单

  • js-translation.json含目标词条
  • 硬刷新与无痕访问都为中文
  • 结账懒加载组件也正确
  • 下次发布结果可重复

验收不只看后台提示“成功”。我还会从前台/API再走一次真实链路,并在下一轮cron、索引或缓存命中后重复检查,确认不是短暂正常。

不要这样处理

不要直接在线修改pub/static生成文件,下次deploy一定会覆盖。

如果线上数据已经不一致,先停掉会继续扩大差异的入口,再修历史数据;否则一边补一边写,最后很难判断哪些记录已经处理。