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
一、编写程序
对于国际化程序的编写,终端程序和图形界面程序是不同的,但是后期的翻译步骤是一致的。
终端程序只有gettext函数,可以通过预编译(#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. 使用 gtkaml 编写 GTK+ 界面
  3. 人生苦短,我用 Genie
  4. 使用 PyGTK 和 Cairo 编写一个简单的时钟
  5. 在自己的 GTK+ 程序中加入 RGBA 透明支持

喜欢这个文章吗?

考虑订阅我们的RSS Feed吧!

评论 (0) 引用 (0)

还没有评论.


Leave a comment

(required)

还没有引用.