从不完整的 gettext .pot文件开始,生成的.po翻译文件现在包含大量原本不在.pot文件中的翻译字符串。
如何从翻译的.po文件向后生成其他语言的.pot文件(带有空白翻译条目的字符串)?
谢谢你的帮助。
你可以使用这样的东西:
msgfilter -i xx.po -o new.pot true
msgfilter
将程序应用于文件中的所有翻译,并且true
只是一些不为任何输入输出任何内容的程序。
在此之后,您可能需要稍微修改一下标题注释,使其看起来像一个新的 POT 文件。
虽然@richhallstoke 报告的命令适用于 Linux 和 Mac
msgfilter -i xx.po -o new.pot true
在 Windows 上,这会失败,因为我们没有true
命令。
我刚刚发布了一个执行此操作的在线工具(除其他外):只需在浏览器中拖放您的 .po 文件,点击“工具”图标,然后单击“转换为 .pot”。
PS:那个在线工具是 FOSS:它的源代码在 GitHub 上。
这需要很长时间才能找到一种方法,但最后我找到了使用 Notepad++ 的解决方案。从Search|Replace...菜单中,我能够用正则表达式替换全部。
寻找:msgstr ".*"
用。。。来代替:msgstr ""
我认为最干净的方法是使用 Peter Eisentraut 建议的解决方案:
msgfilter -i xx.po -o new.pot true
您还可以通过--keep-header
在最后一个true
参数之前添加来保留 gettext 标头。在这种情况下,您需要检查生成的标头,因为它可能包含特定于语言的指令(例如复数规则的数量)。
对于 Windows 用户:为了使用这种方法,您需要一个行为类似于true
(也就是说,它除了成功运行之外什么都不做)的程序,就像我为此编写的true
for Windows一样。
你没有。您从源代码生成 .pot 文件。msgmerge
然后获取新的 .pot 文件和现有的 .po 文件,并将旧条目合并到新文件中。
如果要更新翻译字符串,则不需要 .pot 文件。从 poedit :目录,从 .pot 文件更新,然后在浏览器窗口中将 .pot 文件仅更改为“所有文件”,选择您的 .po 文件,它将处理
刚刚解决了这个问题,这里是 vim 替换命令,用于从完整的 .po 文件的翻译中生成 .pot 文件。
:%s/msgid\_.\{-\}msgstr \(\(". "\_.\) \)/msgid \1msgstr ""\r/