// myapp.c
#include <stdio.h>
#include <locale.h>
#include <libintl.h>
#define _(str) gettext(str)
#define TEXT_DOMAIN "myapp"
int main() {
setlocale(LC_ALL, "");
bindtextdomain(TEXT_DOMAIN, "locale");
textdomain(TEXT_DOMAIN);
puts(_("hello"));
return 0;
}
编译
$ gcc myapp.c -o myapp
生成pot文件(po模板文件)
$ xgettext -a myapp.c -o myapp.pot
根据模板文件生成对应语言的po文件
$ msginit -l zh_CN -i myapp.pot -o zh_CN.po
翻译po文件中的msg
...
"Content-Type: text/plain; charset=UTF-8\n"
...
msgid "hello"
msgstr "你好"
生成mo(Machine Object)文件
$ msgfmt zh_CN.po -o zh_CN.mo
部署
mkdir -p locale/zh_CN/LC_MESSAGES
cp zh_CN.mo locale/zh_CN/LC_MESSAGES/myapp.mo
运行
$ export LANGUAGE=zh_CN
$ ./myapp
$ 你好