重新翻译
lingo push 只会翻译有变更的内容:它会将每条源文与锁定文件进行哈希比对,匹配的内容就会直接跳过。这是默认且合理的行为,但有时你也会希望重新翻译那些源文本完全相同的内容——比如切换了引擎模型、更新了规则或术语表,或修复了质量问题之后。
有三种方式可以做到这一点,区别主要在于成本:单个字符串可用 --key,整个文件可用带作用域的 --force 推送,整个语言环境则可先执行 purge,再进行一次常规推送。优先选择刚好覆盖你想重做内容的最小范围方案。
重新翻译指定键#
--key 只会重新翻译你点名的键,并将结果合并到现有译文中,其他所有键都会保持字节级完全一致。它会忽略源文差异,因此即使某条英文完全没变,也依然会被重新翻译。
lingo push --key auth.login如果要处理多个键,重复使用这个标志即可:
lingo push --key auth.login --key billing.plan模式可以精确命中某个键,也可以作为前缀匹配——以前缀在 .、/、- 或 [ 边界结束为准——还可以用 glob 方式匹配。因此,auth.login 也会命中 auth.login.title,但绝不会命中 auth.login_url;而普通的 auth 会命中整个 auth 子树,但绝不会命中 authority。记得给 glob 加引号,不然在 CLI 看到它之前,shell 就会先把它展开:
lingo push --key "auth.*"这是目前最划算的选择,价格优势非常明显——你只需为指定的键付费,除此之外无需支付任何费用。它需要合并到现有译文中,因此如果某个语言区域你还从未翻译过,系统会跳过,并显示一条指向 --backfill-missing 的提示信息。有些格式完全不支持键范围——格式 中列出了哪些格式不支持,以及原因。
完整行为请参见 lingo push,其中也包括未点名键会如何处理。
强制执行限定范围 push#
--force 会重新翻译所有匹配到的目标,忽略现有译文和服务器端缓存。除非你真的就是要覆盖整个项目,否则一定要限定范围——裸用 lingo push --force 会覆盖所有已配置的模式,而唯一拦在前面的只有确认提示。
单个文件#
lingo push content/en/landing.mdx --force某个子树#
lingo push 'content/en/**/*.md' --force全部内容#
lingo push --backfill-missing --force --yes--force 在覆盖前会先提示确认;传入 --yes 可跳过提示(CI)。完整参数说明请参见 lingo push。
只重新翻译单个语言区域#
push 没有按语言区域操作的参数。若只想重做某一种语言,请删除该语言的文件,然后执行回填:
lingo purge --locale fr
lingo push --backfill-missingpurge 会移除 fr 对应的目标内容;随后 --backfill-missing 只会补回缺失的部分——其他语言区域完全不受影响。相比 --force,这种方式也更省钱,因为除了 fr 之外,其余内容仍然都会命中缓存。参见 Purge。
花钱前先估算#
所有 push 都支持 --estimate:它会先估算本次运行的费用,然后直接退出,不执行翻译:
lingo push 'content/en/**/*.md' --force --estimate它也能和 --key 搭配使用,这样你就可以先给某个键作用域估价,再决定是否运行:
lingo push --key auth.login --estimate估算结果仅供参考,并非正式报价——最终费用可能会有所不同。
何时需要重新翻译#
| 场景 | 执行命令 |
|---|---|
| 源文本发生变化 | 无需额外操作——直接执行 lingo push 即可 |
| 少数几条你不满意的字符串 | lingo push --key auth.login --key billing.plan |
| 切换了引擎模型 | lingo push <scope> --force |
| 更新后的规则 / 术语表 | lingo push --key <affected keys>,或 lingo push <scope> --force |
| 某个语言区域的翻译质量不佳 | 先执行 lingo purge --locale <code>,再执行 lingo push --backfill-missing |
| 想彻底从零开始 | lingo push --backfill-missing --force --yes |