首先Postgresql源码中的gettext目录工具就是国际化使用的工具,关于gettext的使用在博客中有其他文章介绍,下面文章转自pg前辈权叔:
-
首先,必须在编译前指定 --enable-nls="语言名",否则不会产生多语言支持,比如 --enable-nls="zh_CN"
-
当然禁用nls会带来一点微不足道的性能提升
-
启用之后我们在 Makefile.global 中会看到:
-
123456789
enable_nls =
yes
...
ifeq ($(enable_nls),
yes
)
ifneq (,$(wildcard $(srcdir)
/nls
.mk))
include $(top_srcdir)
/src/nls-global
.mk
endif
# nls.mk
endif
# enable_nls
-
-
可以看出,只有目录下有nls.mk这个文件才会有nls动作,用 find 很容易就知道哪些目录需要生成 .po 文件
-
-
假设我们修改了 initdb 的输出信息
-
cd src/bin/initdb
-
make update-po
-
从输出文字可以看到,initdb.pot(翻译模板)重新生成,并且只有我们需要的 zh_CN 被 merge,生成一个新文件 zh_CN.po.new
-
-
打开 zh_CN.po.new 编辑,修改完成后改为 zh_CN.po
-
make all-po 至此,新的 .mo 文件已经重新生成
-
图形化 .po 文件编辑工具推荐:http://poedit.net/,万一打不开请翻墙
-
gnome-terminal 显示中文输出:
-
export
-
菜单 Terminal -> Set Character Encoding 选择 GB18030
-
-
如需引入新的源代码文件,修改 nls.mk,将其相对路径加入 GETTEXT_FILES 即可