LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: ayiiq180

GTK+如何显示中文?

[复制链接]
发表于 2003-8-26 15:39:40 | 显示全部楼层
还有这两句:[PHP]    bindtextdomain(PACKAGE,LOCALEDIR);
    textdomain(PACKAGE);[/PHP]
发表于 2003-8-26 15:41:42 | 显示全部楼层
下边的是.po文件的内容,你应该可以自己编译出来的了:[PHP]# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"roject-Id-Version: PACKAGE VERSION\n"
"OT-Creation-Date: 2003-08-26 14:56+0800\n"
"O-Revision-Date: YEAR-MO-DA HO:MI+ZONE\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=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: main.cpp:11
msgid "This text will put in the entry."
msgstr "姝ゆ枃鏈皢琚斁鍏ュ?曡褰曞叆鎺т欢涔嬩腑鍘"

#: main.cpp:20
msgid "TEST window"
msgstr "娴嬭瘯绐楀?"

#: main.cpp:25
msgid "This is a international application."
msgstr "杩欐槸涓涓浗闄呭寲鐨勫簲鐢ㄧ▼搴?

#: main.cpp:27
msgid "New button"
msgstr "鏂板缓鎸夐挳"
[/PHP]
发表于 2003-8-26 15:44:22 | 显示全部楼层
IE->查看->编码->Unicode (UTF8)可以看到乱码的内容,不过别的地方又会乱了的,呵呵:cool:
 楼主| 发表于 2003-8-26 15:47:39 | 显示全部楼层
我的意思是没有set_locale这一句,它是怎么按照你系统的locale选择中文还是英文的呢?
发表于 2003-8-26 16:00:08 | 显示全部楼层
程序会根据你的系统环境变量来选择使用locale,要记得,windows也是由环境变量的
 楼主| 发表于 2003-8-26 20:11:53 | 显示全部楼层
没有set_locale怎么会根据环境变量来设置中文和英文?应该会有这句话才对
发表于 2007-8-14 22:02:25 | 显示全部楼层
我这个例子是utf8编码,lin和win显示中文都没有问题。pango支持freetype2以及cairo两个后端,linux是安装了fontconfig的,把simsun.ttc拷贝到了/usr/share/truetype,然后再运行的fc-cache更新了一下字体缓存。
gtk内部用的就是UTF8编码,问题是如果我把其中的中文换用GBK编码,则不论locale如何设置,出来的总是乱码。
难道gtk只支持UTF8编码的字符,似乎跟glibc的表现行为有很大不同嘛。
  1. #include <gtk/gtk.h>
  2. #include <glib/gi18n.h>
  3. #define GETTEXT_PACKAGE "gtktests"
  4. #define PACKAGE_LOCALE_DIR "./locale"
  5. int main(int argc, char**argv)
  6. {
  7.         bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
  8.         bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF8");
  9.         textdomain (GETTEXT_PACKAGE);
  10.        
  11.         GtkWidget *window;
  12.         GtkWidget *label;
  13.         GtkWidget *hbox;
  14.         GtkWidget *vbox;
  15.         GtkWidget *button;
  16.         GtkWidget *text;
  17.        
  18.         gtk_init( &argc, &argv);
  19.         window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  20.         hbox = gtk_hbox_new( FALSE, 4);
  21.         vbox = gtk_vbox_new( FALSE, 0);
  22.         label = gtk_label_new(_("地址:"));
  23.         button = gtk_button_new_with_label("确定");
  24.         text = gtk_entry_new_with_max_length( 256);
  25.        
  26.         gtk_box_pack_start( GTK_BOX( hbox),label, FALSE, FALSE, 5);
  27.         gtk_box_pack_start( GTK_BOX( hbox),text, TRUE, TRUE, 5);
  28.         gtk_box_pack_start( GTK_BOX( hbox),button, FALSE, FALSE, 5);
  29.        
  30.        
  31.         g_signal_connect(G_OBJECT(window), "delete_event", gtk_main_quit, NULL);
  32.        
  33.         gtk_container_add(GTK_CONTAINER(window), hbox);
  34.         gtk_widget_show_all(window);
  35.         gtk_main();
  36.         return 0;
  37. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-8-14 22:18:10 | 显示全部楼层
Pango and Gtk+ 2 always uses unicode/UTF-8 internally. To convert to/from
the current locale it uses the libc iconv() function. If you add support
to the glibc iconv for the encodings it should work.
看到以前苏哲在gnome邮件列表上的帖子才明白原来是这样的道理。
所以如果要支持除utf8之外本地编码,那么应该在gtk_set_locale函数之后用g_locale_to_utf8 函数转一下编码到utf8然后再使用。

另外GTK 1.2.x曾经是支持本地locale编码的,md,自由软件想变就变,就是牛!!

另外:
如果想让gtk菜单显示的是中文,那么需要将环境变量LANG,LANGUAGE,LC_ALL设置为zh_CN.UTF-8.
回复 支持 反对

使用道具 举报

发表于 2007-8-15 14:04:32 | 显示全部楼层
Post by realtang
Pango and Gtk+ 2 always uses unicode/UTF-8 internally. To convert to/from
the current locale it uses the libc iconv() function. If you add support
to the glibc iconv for the encodings it should work.
看到以前苏哲在gnome邮件列表上的帖子才明白原来是这样的道理。
所以如果要支持除utf8之外本地编码,那么应该在gtk_set_locale函数之后用g_locale_to_utf8 函数转一下编码到utf8然后再使用。

另外GTK 1.2.x曾经是支持本地locale编码的,md,自由软件想变就变,就是牛!!

呵呵,1.2.x->2.x的主版本号都升级了,有些不兼容这很正常吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表