从不完整的 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... 菜单中,我可以使用正则表达式 Replace All。
找到:
msgstr ".*"
替换为:
msgstr ""
我认为最干净的方法是使用 Peter Eisentraut 建议的解决方案:
msgfilter -i xx.po -o new.pot true
您还可以通过在最后一个
--keep-header
参数之前添加 true
来保留 gettext 标头。在这种情况下,您需要检查结果标头,因为它可能包含特定于语言的指令(例如复数规则的数量)。
对于 Windows 用户:为了使用这种方法,您需要一个类似于
true
的程序(也就是说,它除了成功运行之外什么都不做),就像我出于这个原因编写的 Windows true
一样。
msgmerge
然后获取新的 .pot 文件和现有的 .po 文件,并将旧条目合并到新文件中。
:%s/msgid\_.\{-\}msgstr \(\(".
"\_.\)\)/msgid msgstr "" /
msgfilter.exe
,但您可以使用
xgettext.exe
(您可以在 ...\Poedit\GettextTools 中找到它)生成一个.pot 文件,从.po 文件:
xgettext.exe -i xx.po -o new.pot