如何合并 POT 和 PO 文件,以便排除不在 POT 文件中的条目?

How do I merge POT and PO files so that I exclude entries that are not in the POT file?

简而言之,我正在尝试找到一种从新 POT 和现有 PO 文件创建新 PO 文件的方法 - 但我想排除不在 POT 文件中的任何字符串(及其翻译) .

每次我们更改 cakePHP 网站上的措辞时,我们都会生成一个新的 POT 文件,其中包含网站中所有可翻译的字符串。但是当我们将它与现有的 PO 文件合并(使用 POEdit)时,合并过程只会将 POT 条目添加到 PO 文件中。它不会删除我们不再需要的翻译。我们的采购订单文件中有超过 12,000 个不需要的翻译。这让我们的翻译很不高兴。她已经开始只看网站,然后把翻译发给我手动添加,这让我很不高兴。

我四处寻找可以进行这种破坏性合并的工具,但一直没有成功找到。在我开始写一个之前...有什么我遗漏的吗?

(抱歉,如果这属于不同的交易所,我会把这个 post 移到更好的交易所,如果有人告诉我哪个)。

你所说的 "destructive" merge 是 gettext 中标准的、正常的合并操作,也是每个人都想要的——你必须不遗余力地完成非破坏性版本,我是甚至不知道如何。

由此可以安全地得出以下结论:(1) 您必须执行一些上面未描述的奇怪步骤,或者 (2) 您的 POT 文件包含的内容比您想象的要多(例如,因为您追加而不是替换它),或者 (3) 您或您使用的工具误解了生成的 PO 文件。

使用 GNU gettext 命令行工具进行合并:

msgmerge -U your_old_translation.po latest_strings.pot

使用 Poedit 合并(注意拼写):

  1. 打开带有(现已过时)翻译的 PO 文件。
  2. 使用目录 → 从 POT 文件更新…
  3. 选择新生成的POT文件。

请注意,默认情况下,过时的翻译保留在 PO 文件中作为备份。在 Poedit 中,您可以清除它们(参见 目录 → 清除已删除的翻译)。然而,这些过时的条目以不同的方式存储在 PO 文件中,作为特殊格式 comments,并且 not 在 Poedit 或任何符合要求的 PO 编辑工具。

如果我敢打赌,我会说 (3) 是最有可能的原因(在这种情况下,使用更好的编辑器,例如 Poedit),或者也许 (2)(应该很容易审查通过在 POT 中搜索现在未使用的字符串)。

但是合并确实做了您期望它做的正确事情。