K.I.S.S. – 简单哲学 Linux, Freedom, Arch, Python, Gtk+, C … Keep It Simple, Stupid!

7一/090

Linux下国际化编程(Gettext、i18n)

参考:http://blog.chinaunix.net/u1/59571/showart_1670949.html
一、编写程序
对于国际化程序的编写,终端程序和图形界面程序是不同的,但是后期的翻译步骤是一致的。
终端程序只有函数,可以通过预编译(#define)来简化,而glib中的gi18n.h提供了_()宏,比较方便。把所有文本放在_()中间即可。
下面编写两个示例来说明。
终端程序:

#include 
#include

#include 
#define _(STRING) (STRING)
int main () {
         setlocale (LC_ALL, "");
         bindtextdomain ("test", "./locale/");
         textdomain ("test");
         printf (_("This is English.\n"));
         return 0;
}

GTK+程序:

#include 
#include 
#include 

#define GETTEXT_PACKAGE "gi18n"
#define LOCALEDIR "./locale"

int main(int argc,char **argv)
{
         GtkWidget *window;
         gtk_init (&argc, &argv);
         bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
         bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
         textdomain (GETTEXT_PACKAGE);
         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
         gtk_window_set_title (GTK_WINDOW(window), _("help"));
         g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (gtk_main_quit), NULL);
         gtk_widget_show (window);
         gtk_main ();
         return 0;
}

二、生成po文件

xgettext -k_ -o lang.po ./*.

三、编辑po文件
将头部的CHARSET改为"UTF-8",在msgstr后加入翻译。
四、生成mo文件

msgfmt -o test.mo lang.po

注意test是你程序中的GETTEXT_PACKAGE名字。
五、移动mo文件
先建立locale/zh_CN/LC_MASSAGES/这个文件夹,然后把mo文件移动过去,注意locale是你程序中的LOCALEDIR。
六、运行程序
呵呵,看看效果吧,在不同的locale下(可修改$LANG),运行的程序效果不同哦~

源码见这里:http://cid-162cb1a1d5fea75d.skydrive.live.com/self.aspx/.Public/.7z
(第一次用skydrive,不知道会不会很麻烦……)

转载请注明:转自K.I.S.S. - 简单哲学 - Linux下国际化编程(Gettext、i18n)

分享家:Addthis中国

你可能对这些感兴趣:

  1. GtkApplication – GTK+ 3 中的 Application 支持
  2. 使用 PyGTK 和 Cairo 编写一个简单的时钟
  3. 在自己的 GTK+ 程序中加入 RGBA 透明支持
  4. 数字图像处理(一)——椒盐噪声
  5. Python 版 Linux 下的迅雷

喜欢这个文章吗?

考虑订阅我们的RSS Feed吧!

评论 (0) 引用 (0)

还没有评论.


发表评论


还没有引用.