Gtk国际化步骤

最近在写一个简单的小应用,需要将界面的语言做成支持中文和英文的,所以用到了国际化,这里我使用gettext
做起来其实很简单,下面我一步一步讲

首先我们需要在源文件中加入下面三个函数

gchar *gtk_set_locale(void);
或者
char *setlocale(int category, const char *locale);
如setlocale(LC_ALL,””);

char * bindtextdomain (const char * domainname, const char * dirname);

bindtextdomain(“hello”,”./locale”);
第一个参数为包名称(去掉mo后缀),第二个参数为我们要使用的翻译文件的路径目录

char * textdomain (const char * domainname);

textdomain(“hello”);
参数与上面bindtextdomain第一个参数相同

还需要二个宏

#define _(string) gettext(string)
#define N_(string) string
包含的头文件为
#include #include //setlocale函数

然后我们在源文件中将需要翻译的内容使用_()括起来

完成后我们使用
xgettext -k_ -o hello.po hello.c
来生成po文件
-k参数后面跟的_表示将_()中的字符提取出来,如果我的#define中使用的是其它字符这里就改成其它的字符

我们再修改这个文件,这个文件类似下面

第一个msgid为源文件中的文字下面那个需要你手动输入
这里前面的内容#和”中的内容可以自己手动改
但这里注意一下这里
Content-Type: text/plain; charset=UTF-8\n
charset后面的内容为字符编码,这个要自己手动修改,或者无法使用

接下面我们使用命令
msgfmt -o hello.mo hello.po
生成mo文件,这里的名称hello你可以自己写,但要与源文件中bindtextdomain函数第一个参数相同

然后我们将mo文件放在bindtextdomain函数第二个参数指定的目录下的LANG/LC_MESSAGES目录下
mkdir -o locale/zh_CN/LC_MESSAGES
mv hello.mo locale/zh_CN/LC_MESSAGES/
这里的zh_CN与环境变量LANG关联,比如我们翻译后的语言为英文则这个名称应该类似en_US

这样我们
LANGUAGE=zh_CN.UTF-8 ./hello

–阅读次数(29)

发表评论

电子邮件地址不会被公开。

*