【发布时间】:2011-05-09 15:12:27
【问题描述】:
从不完整的 gettext .pot 文件开始,生成的 .po 翻译文件现在包含大量最初不在 中的翻译字符串>.pot 文件。
如何从已翻译的 .po 文件向后生成其他语言的 .pot 文件(带有空白翻译条目的字符串)?
感谢您的帮助。
【问题讨论】:
-
如果你有最后一个,你为什么要得到一个过时的pot文件?您不应该只合并对您的翻译 .po 文件的更改吗?
从不完整的 gettext .pot 文件开始,生成的 .po 翻译文件现在包含大量最初不在 中的翻译字符串>.pot 文件。
如何从已翻译的 .po 文件向后生成其他语言的 .pot 文件(带有空白翻译条目的字符串)?
感谢您的帮助。
【问题讨论】:
你可以这样使用:
msgfilter -i xx.po -o new.pot true
msgfilter 将一个程序应用于文件中的所有翻译,而true 只是一些不会为任何输入输出任何内容的程序。
在此之后您可能需要稍微修改一下标题注释,使其看起来像一个新的 POT 文件。
【讨论】:
--keep-header(这样您就可以修改它而不是创建一个新标题)。
虽然@richhallstoke 报告的命令适用于 Linux 和 Mac
msgfilter -i xx.po -o new.pot true
在 Windows 上这会失败,因为我们没有 true 命令。
我刚刚发布了一个执行此操作的online tool(以及其他):只需将您的 .po 文件拖放到浏览器中,点击“工具”图标并单击“转换为 .pot”。
PS:那个在线工具是FOSS:它的源代码是on GitHub。
【讨论】:
这需要很长时间才能找到一种方法,但最后我找到了使用 Notepad++ 的解决方案。从 Search|Replace... 菜单中,我能够Replace All 使用正则表达式。
查找:msgstr ".*"
替换为:msgstr ""
【讨论】:
我认为最干净的方法是使用 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。”
你没有。您从源代码生成 .pot 文件。 msgmerge 然后获取新的 .pot 文件和现有的 .po 文件,并将旧条目合并到新文件中。
【讨论】:
如果您想更新翻译字符串,则不需要 .pot 文件。从 poedit :目录,从 .pot 文件更新,然后在浏览器窗口中将 .pot 文件更改为“所有文件”,选择您的 .po 文件,它将处理
【讨论】:
刚刚回答了这个问题,这里是 vim 替换命令,用于从完整的 .po 文件的翻译中生成 .pot 文件。
:%s/msgid\_.\{-\}msgstr \(\("."\_.\)\)/msgid \1msgstr ""\r/
【讨论】: