【问题标题】:How to generate a new .pot template from a translated .po file如何从翻译的 .po 文件生成新的 .pot 模板
【发布时间】:2011-05-09 15:12:27
【问题描述】:

从不完整的 gettext .pot 文件开始,生成的 .po 翻译文件现在包含大量最初不在 中的翻译字符串>.pot 文件。

如何从已翻译的 .po 文件向后生成其他语言的 .pot 文件(带有空白翻译条目的字符串)?

感谢您的帮助。

【问题讨论】:

  • 如果你有最后一个,你为什么要得到一个过时的pot文件?您不应该只合并对您的翻译 .po 文件的更改吗?

标签: php gettext xgettext


【解决方案1】:

你可以这样使用:

msgfilter -i xx.po -o new.pot true

msgfilter 将一个程序应用于文件中的所有翻译,而true 只是一些不会为任何输入输出任何内容的程序。

在此之后您可能需要稍微修改一下标题注释,使其看起来像一个新的 POT 文件。

【讨论】:

  • 如果您想在翻译中保持标题原样,请使用选项--keep-header(这样您就可以修改它而不是创建一个新标题)。
  • 如果您的密钥不是纯 ascii,则可能需要按照 PhoneixS 的建议保留标题。
【解决方案2】:

虽然@richhallstoke 报告的命令适用于 Linux 和 Mac

msgfilter -i xx.po -o new.pot true

在 Windows 上这会失败,因为我们没有 true 命令。

我刚刚发布了一个执行此操作的online tool(以及其他):只需将您的 .po 文件拖放到浏览器中,点击“工具”图标并单击“转换为 .pot”。

PS:那个在线工具是FOSS:它的源代码是on GitHub

【讨论】:

    【解决方案3】:

    这需要很长时间才能找到一种方法,但最后我找到了使用 Notepad++ 的解决方案。从 Search|Replace... 菜单中,我能够Replace All 使用正则表达式。

    查找:msgstr ".*"

    替换为:msgstr ""

    【讨论】:

    • 请注意,如果某些文本在文本本身中有双引号,则使用此答案可能会遇到问题。
    【解决方案4】:

    我认为最干净的方法是使用 Peter Eisentraut 建议的解决方案:

    msgfilter -i xx.po -o new.pot true

    您还可以通过在最后的 true 参数之前添加 --keep-header 来保留 gettext 标头。在这种情况下,您需要检查生成的标头,因为它可能包含特定于语言的指令(例如复数规则的数量)。

    对于 Windows 用户:为了使用这种方法,您需要一个行为类似于 true 的程序(也就是说,它除了成功运行之外什么都不做),就像我写的 true for Windows 正是出于这个原因。

    【讨论】:

    • 我想你肯定想要--keep-header,因为没有它,它会丢失字符编码信息,导致如下错误:警告:以下msgid包含非ASCII字符。 “这会给使用与您不同的字符编码的翻译人员带来问题。请考虑改用纯 ASCII msgid。”
    【解决方案5】:

    你没有。您从源代码生成 .pot 文件。 msgmerge 然后获取新的 .pot 文件和现有的 .po 文件,并将旧条目合并到新文件中。

    【讨论】:

    • @ignacio-vazquez-abrams:不幸的是,这不是一个好的选择,因为从源代码生成 .pot 文件还会引入数千个不应翻译的字符串并将它们混合在一起。 clean 最初生成的 .pot 文件花费了大量的工作,并且源代码没有改变。我意识到这不是使用 gettext 的正常方式,但这仍然是我想要实现的目标,也许使用 sed 命令或类似的东西。
    【解决方案6】:

    如果您想更新翻译字符串,则不需要 .pot 文件。从 poedit :目录,从 .pot 文件更新,然后在浏览器窗口中将 .pot 文件更改为“所有文件”,选择您的 .po 文件,它将处理

    【讨论】:

    • 需要*.pot文件,我认为poster没有pot文件或者pot文件不完整。
    【解决方案7】:

    刚刚回答了这个问题,这里是 vim 替换命令,用于从完整的 .po 文件的翻译中生成 .pot 文件。

    :%s/msgid\_.\{-\}msgstr \(\("."\_.\)\)/msgid \1msgstr ""\r/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 2013-04-14
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 2012-05-21
      • 2016-05-14
      • 2017-11-02
      相关资源
      最近更新 更多