GTK国际化

    昨天项目要求对一个GTK程序国际化,花了一下午的时间看了相关资料,现在整理制作流程。

    一、源码中设置国际化的支持。在main函数添加如下代码,增加国际化的支持。代码中的PACKAGE为程序最后名称,用以查找翻译文件。LOCALE为翻译文件所在的文件夹。LOCALE的文件路径为locale/zh_CN/LC_MESSAGES,其中zh_CN为语言,LC_MESSAGES文件夹下保存具体的翻译文件(mo文件)。

    这里还需要注意一个问题,我们这里使用的国际化是利用GNU的gettext实现的。gettext在查找当前语言的顺序是LC_ALL ->LC_MESSAGES->LANG。而在windows上LC_*消息是没有的,即setlocale函数在windows系统上没有任何作用的。为了程序的可移植性,应该通过设置环境变量LANG,然后通过setlocale来集成环境变量。

#include <glib/gi18n.h>
#include <locale.h>
#include <stdlib.h>

#define PACKAGE "Dial-Assistant"
#define LOCALE "./locale"

int main()
{

        //set locale
        putenv("LANG=zh_CN.utf8");
        setlocale(LC_ALL,"");
        bindtextdomain(PACKAGE,LOCALE);
        #ifdef G_OS_WIN32
                bind_textdomain_codeset(PACKAGE,"UTF-8");
        #endif
        textdomain(PACKAGE);
        return 0;
}
2.在源码中使用_()替换翻译字符串。如:_("Hello")。下面给出一个示例函数。文件中的_("Dial-Assistant")在没有国际化之前为"Dial-Assistant"。
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
        window_main=window;
        gtk_widget_set_size_request(window,500,500);
        gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
            gtk_window_set_icon_from_file(GTK_WINDOW(window),"logo.png",NULL);
        gtk_window_set_title(GTK_WINDOW(window),_("Dial-Assistant"));
3.使用xgettext提取源码中需要翻译的字段。其中-k表示提取源码中什么样的字符串,如这里是-k_ 表示提取以下划线开始的字符串格式,即提取 _("")中的字符串。-o表示输出文件名。--from-code=utf8表示源文件的字符编码。
xgettext -k_ -o Dial-Assistant.po *.c --from-code=utf8
4.修改po文件。首先修改“Project-Id-Version”字段后面的值,表示版本信息。然后修改“Content-type”字段中的"charset"字段信息,将其修改为“UTF-8”表示输出的字符串信息。然后根据下面的msgid修改msgstr。下面给出一个示例文件(部分)。
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-04 18:23+0800\n"
"PO-Revision-Date: 2013-01-04 18:31+0800\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"

#: ami.c:175
msgid "socket error"
msgstr "socket错误"
5.使用msgfmt程序生成mo文件。
msgfmt -o Dial-Assistant.mo Dial-Assistant.po
6.创建翻译文件存放文件夹。这里需要注意的是,因为考虑到程序的移植问题,所以建议把翻译文件夹(locale文件夹)存放在本地(这也是在第一步中定位locale文件夹为“./locale”的原因)。
mkdir -pv locale/zh_CN/LC_MESSAGES
7.复制第五步中生成的mo文件到locale/zh_CN/LC_MESSAGES中。

8.测试。如果需要测试,在linux系统下可以通过临时设置环境变量来测试。临时修改环境变量的命令为:

export LANG=zh_CN.UTF-8

转载于:https://my.oschina.net/eatapple/blog/100015

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值