合并Gettext PO文件
对于有强迫症的人通常会对翻译错误无法忍耐,尤其是,老外翻译的中文。碰到这种情况时,Kaijia经常会联系软件商更正翻译错误。一般情况下个人开发者都会非常友好得接受Kaijia的翻译建议,然而总有几家中型软件商,通常没有大中华区市场,会拒绝Kaijia的建议,理由基本上是:我们外包的翻译虽然母语不是中文,但他们可是专业翻译。这种情况下,虽然无力吐槽但毕竟是开源软件,Kaijia会选择维护一个自有的译本更新部分错到离谱的翻译,然后重新编译软件。对于只需要修改几处的情况非常合适,每次软件发布更新,只需要重新替换几处译文便可重新编译,但对于大型软件涉及几十或者上百处更正的情况,每次更新时简单的人工替换显然不合适。通常情况下需要将Kaijia现有维护的译文与新版本自带的译文合并。此处合并需要满足两个需求:
- 新版本自带翻译中新增字段需要进入源翻译文件(PO文件);
- Kaijia自己修改的翻译需要被保留。
在Gettext环境下,可以通过msgcat或msgmerge(互有区别)两个命令实现这个操作。这两个命令均为Gettext自带的工具,Linux发行版中安装Gettext时会默认安装。语法分别为:
1 |
msgcat --use-first -o 合并后文件.po 自有翻译.po 新版本翻译.po |
1 |
msgmerge 自有翻译.po 新版本翻译.po > 合并后文件.po |
这两种方法均可以满足合并PO文件并保留修改过的翻译内容,然而他们之间略有区别。msgcat工具在合并时会将新版本中新增的字段直接合并入文件中,即合并完成后的文件可以直接用于编译,但除非使用msgcmp等工具并不能简单查看新增内容;而msgmerge则是将新增的内容标记为模糊翻译(“fuzzy”),这样使用Poedit软件时便可清晰看出新增的内容(以土黄色加粗标识为模糊翻译),方便复查新增的翻译,确保里面没有新的翻译错误,需要提醒的是,编译MO文件时,系统会跳过标记为模糊翻译的字段,因此,如果并没有复查需求,使用msgcat会方便一些。
评论