大猫OPC

改稿不覆盖译文:pending + v1:hash

阅读 0 更新于 2026-10-27

先说结论

多语言系统最隐蔽的 bug 是"旧译文覆盖新稿"。它不会报错,只会让你的站悄悄传播错误信息。

问题场景

  1. 周一 10:00 发布产品页(版本 A)
  2. 周一 14:00 运营发现参数写错,改成版本 B
  3. 周一 10:05 发出的翻译任务在周二回来,译的是版本 A
  4. 系统直接写回 → 33 个语种全部是错误参数

解法:版本号 + 状态机

每次保存原文时:

translation_version = 'v1:' + sha1(可译字段拼接)
translation_status  = 'pending'

翻译任务携带版本号;回写时比对:

情况 处理
版本一致 写入,状态改 done
版本不一致 丢弃,状态保持 pending,重新排队
任务失败 状态 failed,记录原因,可手动重试

人工修改的保护

运营精修过的字段要能"免疫"机翻覆盖。两种做法:

  1. 字段级标记:manual_locked = true
  2. 独立覆盖表:人工译文优先于机翻译文

我用第一种,简单直接。

状态机的完整状态

pending → translating → done
   ↑           ↓
   └──── failed ←(重试)
  • pending:等待取件
  • translating:已被服务中心领取(有超时保护)
  • done:已回写
  • failed:多次失败,进人工队列

边界情况

  • 内容删除:翻译任务一并作废
  • 语种关闭:该语种的 pending 任务跳过
  • 回滚版本:版本号变化,自动重译

最常见的失败是服务中心超时:任务标记为 translating 后进程挂掉,状态卡死。修法是给 translating 加 30 分钟超时回收,自动回到 pending。另一个坑是重复回写——同一版本被写两次,靠版本号校验挡掉。

本页内容对你有帮助吗? 感谢反馈(演示按钮,暂未接入后端)