如何重新生成PostgreSQL国际化文件(多语言支持文件)

背景知识

  • 国际化:程序里出现的英文字符需要翻译成其他语言,比如中文,就需要有个对照表。国际化就是生成对照表和使用对照表的过程。
  • gettext:帮助程序开发人员、翻译人员实现程序国际化的一套集成化的工具,PostgreSQL的国际化就是借助了该工具。
  • PO:Portable Object,可移植对象,面向翻译人员的、提取于源代码的一种资源文件
  • MO:Machine Object,机器对象,面向计算机的、由 PO 文件通过 gettext 软件包编译而成的二进制文件。程序通过读取 MO 文件使自身的界面转换成用户使用的语言
  • POT:Portable Object Template,PO文件模板

国际化的思路

  1.  使用 gettext 里面的_() 和 N_()等对代码里面的字符加以标注,将这些代码文件登记到POTFILES(.in 或 .pot文件)里面,比如 postgres.pot
  2. 对 POT 文件里记录的代码文件进行扫描,生成 PO 文件,比如 zh_CN.po
  3. 对 PO 文件做翻译工作,编译生成 MO 文件,比如 zh_CN.mo
  4. 程序运行时自动读取相关的 MO 文件,输出对应的语言翻译

重新生成中文支持文件流程

  1. 编译前指定需要支持简体中文,具体命令 ./configure –enable-nls=”zh_CN”,执行之后可以在 Makefile.global 中看到
    pg_mf_1pg_mf_2
  2. 假设在 backend 目录下的某个源文件中加入了一行新的 ereport LOG 英文输出信息,切换到 backend 目录下,执行 make update-po 命令,po 目录下就会生成 postgres.pot 和 zh_CN.po.new 两个文件
  3. 打开 zh_CN.po.new 文件,找到刚刚添加的 ereport LOG 英文输出信息,在其下一行的 msgstr 的引号内加入对应的中文翻译(不要遗漏 %s %d格式化信息),保存文件
    pg_zh_cn_po
  4. 删除旧的 zh_CN.po 文件,将 zh_CN.po.new 重命名为 zh_CN.po 5. 在 backend 目录下执行 make all-po 命令,po 目录下就会出现 zh_CN.mo 文件。或者使用make命令,也可以生成 mo 文件。

额外说明

  1. PO 文件内注释符号 #
    ○ # 代表注释
    ○ #. 自动添加的注释
    ○ #: 文件名和行号
    ○ #, fuzzy 这种是模糊匹配出来的翻译,需要手工修改翻译并置为 c-format

参考链接

[Chapter 54. Native Language Support](https://www.postgresql.org/docs/current/static/nls-translator.html)

[gettext](http://www.gnu.org/software/gettext/)

[Linux–mo和po文件](http://blog.csdn.net/here_c_my/article/details/44565479)

[GNU 国际化 po文件制作以及原理](http://liangchenye.blog.163.com/blog/static/29746773201211701522939/)

[如何重新生成PostgreSQL的国际化文件](https://my.oschina.net/quanzl/blog/531728)

如无特殊说明,文章均为本站原创,转载请注明出处
源自: 王明军的博客
本文链接地址: 如何重新生成PostgreSQL国际化文件(多语言支持文件)
广告

Categories: 默认目录, PostgreSQL

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.