【问题标题】:How do I merge POT and PO files so that I exclude entries that are not in the POT file?如何合并 POT 和 PO 文件,以便排除不在 POT 文件中的条目?
【发布时间】:2020-01-18 15:42:07
【问题描述】:

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

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

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

(对不起,如果这属于不同的交易所,如果有人告诉我是哪一个,我会将这篇文章转移到更好的交易所)。

【问题讨论】:

    标签: translation poedit pot


    【解决方案1】:

    您所说的“破坏性”合并是 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 文件中,作为特殊格式的 cmets,并且在 Poedit 或任何符合要求的 PO 编辑工具中可见或可编辑。

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

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

    【讨论】:

    • CLI 工具万岁!我以前只使用 POEdit。 “清除已删除的翻译”选项可以解决问题!它们实际上已从文件中删除(我希望这会在合并中发生)。非常感谢!
    猜你喜欢
    • 2012-04-22
    • 2011-06-08
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2011-12-03
    • 2011-05-02
    • 1970-01-01
    • 2015-11-25
    相关资源
    最近更新 更多