- 信息的国际化
信息(Message)国际化是软件国际化中比较重要的一环, 如果使软件可以 支持多种语言,在设计时就应当考虑到信息的国际化问题.现在的绝大多数 软件使用GNU的gettext作为基本工具.信息国际化的基本步骤是:
- 在软件初始化时设置使用setlocale()设置Locale
- 使用gettext宏定义, 使程序看上去比较方便:
- 指定信息的位置:
- 指定翻译信息: _("Some Strings");
- 在软件完成后,使用 xgettext 提取信息并翻译
- 使用msgfmt把信息文件转换为.mo文件, 安装到locale目录下
/* file this_app.c */ #include <locale.h> #include <libintl.h> #define _(String) gettext(String) #define N_(String) gettext(String) #define __(String) (String) int main(){ //由环境变量决定locale setlocale(LC_ALL, ""); //设置message的位置和文件名 bindtextdomain("this_app", "/usr/share/locale"); textdomain("this_app"); printf(_("Some String")); } 至此, 本程序的国际化过程已完成.编译并联接成可执行文件this_app.
- gcc -o this_app this_app.c
下面是本地化的过程.
- 提取要翻译的信息: xgettext -a -o this_app.po this_app.c
- 翻译信息
在文件this_app.po 中含有"Some String":
- msgid "Some String"
- msgstr ""
翻译成:
- msgid "Some String"
- msgstr "一些字符串"
- 格式化信息文件: msgfmt -o this_app.mo this_app.po
- 拷贝信息文件到locale的目录下, 比如对于中文zh_CN, cp this_app.mo /usr/share/locale/zh_CN/LC_MESSAGES
- 执行文件: LC_ALL=zh_CN ./this_app