最近工作中接触到一些Linux系统本地化相关的内容,也搜集了一些资料(有些是公司资料,后期整理下,把不涉及到公司内容的东西以CC协议发布出来给大家共享),在搜索的时候发现网上关于这方面的信息能够直接搜索到得相对较少,于是整理发布出来,方便大家的学习和生活。
一般系统中原始获取到的文件有po和pot两种后缀格式,pot为原始的未经翻译的英文文件,po则一般是翻译处理过(即使只翻译一句话)的文件。这两种后缀对翻译没有任何影响,所以后面都以.po为后缀的文件来举例。
Po 文件的一般格式如下:
#: ../shell/rb-shell.c:433#, fuzzy, c-formatmsgid “Import _File…”msgstr “导入文件(_F)…”
|
第一行以“#: ”开头的注释为该翻译所在语言包的路径,也可以没有该行。
第二行以“#, fuzzy”开头的是模糊翻译标记。需要重新检查翻译,也可以没有该行。
第三行以“msgid ”为需要翻译的文字。
第四行以“msgstr”开头的为翻译后的文字。
第二类格式是部分含有“msgctxt ”表示上下文,上下文可以消除因具有相同译文ID而产生的歧义。在同一个PO文件中,可能存在多个entry拥有同一个译文ID,前提是每个entry都有不同的上下文。注意,空的上下文字符串与没有 msgctxt
这行不是一个意思。
如下面所示: (在包:gnome-control-center-2.24.0.1中 line: 2739)
msgctxt “Sound event”msgid “Empty trash”msgstr “清空回收站“ |
第三类是含有“msgid_plura[l] ”的单复数相关的翻译,因为中、日、韩中没有复数,所以只翻译为“msgstr[0] ”(删除msgstr[1]即可)的即可。
#: src/msgcmp.c:338 src/po-lex.c:701
|
后面可能还有其他特殊格式,待整理更新后添加。
推荐阅读:
Linux下C语言的本地化/国际化实现
http://leedd.com/2010/03/linux-c-i18n-l10n-xgettext-msgfmt-rpmbuild/
看了文章:http://www.diybl.com/course/3_program/c++/cppjs/200875/130478.html
中提到po文件翻译的好处有:
1. 原文译文相互对照,适于翻译
2. 一篇文章里同一个msgid不管出现多少次,都只需要翻译一次
3. 旧有的已翻译过的po,可以重复利用,不必再次翻译,且利于统一风格
4. 有非常好的翻译工具,熟练使用后可大幅度提高工作效率
我觉得po文件单独以“模块”形式存在有利于本地化的发展,因为理论上你只需要增加一个po生成的mo文件即可实现国际化。