如何从翻译的 .po 文件生成新的 .pot 模板

问题描述 投票:0回答:8

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

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

感谢您的帮助。

php gettext xgettext
8个回答
12
投票

你可以使用这样的东西:

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

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

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


6
投票

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

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

在 Windows 上这会失败,因为我们没有

true
命令。

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

PS:该在线工具是 FOSS:其源代码位于 在 GitHub 上


3
投票

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

找到:

msgstr ".*"

替换为:

msgstr ""


3
投票

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

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

您还可以通过在最后一个

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

对于 Windows 用户:为了使用这种方法,您需要一个类似于

true
的程序(也就是说,它除了成功运行之外什么都不做),就像我出于这个原因编写的 Windows
true
一样。


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


0
投票
你不知道。您可以从源代码生成 .pot 文件。

msgmerge

 然后获取新的 .pot 文件和现有的 .po 文件,并将旧条目合并到新文件中。


0
投票
就问题而言,这里是 vim 替换命令,用于从完整的 .po 文件的翻译中生成 .pot 文件。

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

"\_.\)\)/msgid msgstr "" /


0
投票
当前的 Windows 版 PoEdit 3.4.1 没有

msgfilter.exe

,但您可以使用 
xgettext.exe
(您可以在 ...\Poedit\GettextTools 中找到它)生成一个 
.pot 文件,从.po 文件:

xgettext.exe -i xx.po -o new.pot
    
© www.soinside.com 2019 - 2024. All rights reserved.