10

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

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

谢谢你的帮助。

4

7 回答 7

11

你可以使用这样的东西:

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

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

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

于 2011-07-04T13:10:04.733 回答
4

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

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

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

我刚刚发布了一个执行此操作的在线工具(除其他外):只需在浏览器中拖放您的 .po 文件,点击“工具”图标,然后单击“转换为 .pot”。

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

于 2017-06-22T16:42:47.703 回答
2

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

寻找:msgstr ".*"

用。。。来代替:msgstr ""

于 2011-05-10T16:55:24.383 回答
2

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

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

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

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

于 2017-05-01T14:54:56.887 回答
1

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

于 2011-05-09T15:15:20.410 回答
0

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

于 2014-08-15T14:40:20.780 回答
0

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

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

于 2016-03-02T16:15:19.780 回答