星期五, 十月 27, 2006

gettext 资料

基本使用:
首先,在代码中引入 gettext 模块,在 python 中一般可以这样作:
import gettext
_ = gettext
...
print _("string to be stranslated")

然后创建翻译文件(/usr/local/share/locale),MO 文件则应该位于:
/usr/local/share/locale/zh_CN/LC_MESSAGES/crablfs.mo
例:
# mkdir -p locale/zh_CN/LC_MESSAGES
# xgettext --default-domain="crablfs" --keyword=_ crablfs.py
注意:这是根据下面参考资料来的,xgettext 可能只能用于 C 语言,对 python 可能要使用 pygettext script 替代。

# mv crablfs.po crablfs.pot
// 拷贝成模板
# cp crablfs.pot zh_CN.po

然后编辑 zh_CN.po,对所有的 msgid "original string" 完成 msgstr "翻译后字符串"。

接着创建 MO 文件:
# msgfmt --output-file=zh_CN.gmo zh_CN.po
# mv zh_CN.gmo locale/zh_CN/LC_MESSAGES/crablfs.mo

调用程序:
# LANG=zh_CN crablfs.py

升级翻译文件:
如果更改了源文件中的文本,特别是比较大的改动,不进行合并则不是很麻烦就是要重来。GNU gettext 提供了 msgmerge 工具:
# xgettext --default-domain="crablfs" --keyword=_ crablfs.py
# mv crablfs.po crablfs.pot
# mv zh_CN.po zh_CN.old.po
# msgmerge zh_CN.old.po crablfs.pot --output-file zh_CN.po
..done
# diff -u zh_CN.old.po zh_CN.po >zh_CN.po.diff
# rm -f zh_CN.old.po
注意,msgmerge 用一个新的 msgid 字符串对旧的进行替换,把原来在 msgstr 中的翻译保留下来。检查新的 PO 文件并确定翻译正确即可。最后运行 msgfmt 创建升级的 MO 文件。

参考:《GNOME 应用程序开发指南》.(美) John R Sheets.机械工业出版社

没有评论: