【问题标题】:Is it possible to combine two .po translation files together?是否可以将两个 .po 翻译文件组合在一起?
【发布时间】:2010-12-06 10:08:03
【问题描述】:

我们有两个 .po 文件,每个文件来自一个软件的不同分支。

我们需要将它们组合成一个 .po 文件。

两个文件之间存在重复,理想的处理方式是(一致地)偏爱一个文件的字符串。

我们有一个 SUSE 系统,所以根据我从网络搜索中找到的手册页,--output-file 似乎没有忽略/合并 Sun 版本所具有的重复项的行为。 (我们手边没有 Sun 机器!)

【问题讨论】:

标签: translation gettext msgfmt


【解决方案1】:

我用msgmerge:

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

它对我有用,但请注意,它会进行愚蠢的合并,它会丢弃 old_file 中的条目(新文件项会覆盖旧的一项)。

【讨论】:

  • msgmerge 文件用于将新模板应用于现有翻译。它将根据设计丢弃第二个文件中的任何本地化!使用msgcat 合并本地化数据。可悲的是,它只会进行愚蠢的连接,而不是您希望通过版本控制进行的真正的 3 路合并。
  • 如果您在两个文件中都有一些消息,这也很糟糕。然后你会得到“some.po:16008: ...这是第一个定义的位置”样式消息,它不会连接文件。如何使用任何文件中的第一个可用翻译?
  • 您可以尝试msgcat --use-first first.po second.po -o output.po 或查看stackoverflow.com/q/16214067/334451 – 详情请参阅man msgcat
【解决方案2】:

您正在寻找的是msgcat util,它连接和合并指定的 PO 字典。

这是gettext utils的一部分,更多信息请咨询gettext manual page on msgcat

【讨论】:

  • 用法与普通cat 一样简单,但检查所有输出是否“模糊”(您需要在那里选择一个版本)。
  • 注意:在答案中插入了 HTML 链接,因此@rve 的评论不再有意义。 ;)
  • 附带说明,虽然msgcat 处理相同字符串出现在多个 po 文件中的冲突,但--use-first 选项允许优先翻译其中一个文件而不是其他文件。
【解决方案3】:

你可以使用 poedit。 要合并您当前的 po-file,您必须打开它并单击:

  • 目录 > 从 POT 文件更新。
  • 将过滤器设置为所有文件并选择您的 second.po 文件

Poedit 将向您展示新的和过时的字符串

【讨论】:

  • 如果你想要 GUI,我建议使用 virtaal,如果它适用于你的操作系统。
  • 我认为 poEdit 非常适合这种任务!谢谢你的回答,对我有帮助!
  • Poedit 不会以这种方式传输实际的翻译,只是 msgids。
  • @DanMan 是什么意思?我需要更新目录,因为来源包括“译者注释”,并且它还通过以这种方式更新目录来保留实际的翻译。 msgstr 与(新)# 一起存在。笔记。
猜你喜欢
  • 2021-08-17
  • 2010-11-29
  • 2011-06-21
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多