有没有可能将两个.po翻译文件合并在一起?

33
我们有两个 .po 文件,来自同一软件不同分支。
我们需要将它们合并成一个 .po 文件。
这两个文件中存在重复项,最好的处理方法是选择一个文件的字符串(始终如一)。
我们使用 SUSE 系统,因此 --output-file 命令似乎没有忽略/合并重复项的行为,而根据我从网络搜索中找到的 man 页面,Sun 版本有这种功能。(我们手头没有 Sun 机器!)

可能是合并2个GetText文件的重复问题。 - DanMan
3个回答

41
您要查找的是msgcat工具,它可以连接和合并指定的PO词典。
这是gettext utils的一部分,欲了解更多信息,请参考msgcat的gettext手册页

使用方法与普通的 cat 命令一样简单,但需要检查所有输出以获取“模糊”版本(您需要在其中选择一个版本)。 - Ctrl-C
注意:将HTML链接插入答案中,因此@rve的评论不再有意义。 ;) - lxg
2
顺便提一下,虽然 msgcat 可以处理同一个字符串出现在多个 po 文件中的冲突,但 --use-first 选项允许优先选择一个文件中的翻译而不是其他文件。 - liberforce

15

你可以使用Poedit。

要合并你当前的po文件,你必须打开它并点击:

  • 目录 > 从POT文件更新
  • 将过滤器设置为所有文件并选择你的第二个.po文件

Poedit会显示新的和废弃的字符串。


1
如果你想要GUI界面,我建议你使用virtaal,如果它在你的操作系统上可用的话。 - Mikko Rantalainen
1
我认为poEdit对这种任务非常适用!感谢您的回答,它帮助了我! - markus
3
然而,Poedit 并不会以那种方式传输实际的翻译内容,只会传输 msgid - DanMan
@DanMan,你是什么意思?我需要更新目录,因为源文件包括“翻译者注释”,并且通过这种方式更新目录也保留了实际的翻译。msgstr与(新的)#.注释一起存在。 - Firsh - justifiedgrid.com

3

我使用 msgmerge:

msgmerge [old_file.po] [new_file.po] > output.po

对我来说它有效,但请注意它执行的是一个愚蠢的合并操作,即抛弃旧文件中的条目(新文件中的条目覆盖旧文件中的条目)。


6
msgmerge 文件用于将新的模板应用于现有翻译。根据设计,它会丢弃第二个文件中的所有本地化内容!使用 msgcat 来合并本地化数据。不幸的是,它只进行愚蠢的串联,而不是你想要在版本控制中拥有的真正的三向合并。 - Mikko Rantalainen
如果您在两个文件中都有一些消息,那么这也是不好的。然后,您将获得“some.po:16008: ...这是第一个定义的位置”的样式消息,并且它不会连接文件。我该如何使用任何文件中可用的第一个翻译? - nagylzs
1
你可以尝试使用 msgcat --use-first first.po second.po -o output.po 命令,或者查看 https://dev59.com/42Qo5IYBdhLWcg3wOtQC – 详情请参考 man msgcat - Mikko Rantalainen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接