LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 859|回复: 3

又是gettext问题!

[复制链接]
发表于 2006-4-13 09:09:47 | 显示全部楼层 |阅读模式
在GTK程序中,点击两个按钮,使得输出语言在中文英文间变换,发现,当设为中文时(setlocale(LC_ALL,"zh_CN.UTF-8"))可以很好终端输出为中文,可再设回英文时(setlocale(LC_ALL,"C")),终端输出为"???",晕了,怎么就显示不出来呢,试了一下,好象还是中文字,并没有变回英文,因此在LC_ALL为C时输出也只能为“???”。将输出改为_(String)也没用,究竟怎么办呢??

另:GTK中什么机制可以让窗口重画,使得字体语言可以切换?而不需要重新启动程序阿??
发表于 2006-4-13 12:51:12 | 显示全部楼层
要求是不是太复杂了? 显示时的字符串是由赋值时刻的的gettext提供的吧。所以点击按钮的处理不应该只是修改local。还应该再次给这些label在新local下重新赋值。

试试看?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-14 09:32:06 | 显示全部楼层
^_^,老大,才发现你也是南航的啊??我也是南航刚毕业的,现在也在南京:)

我现在要做的就是使得整个GTK界面能够在Local变化时可以动态地刷新界面,使得其在中英文之间切换。如果在local变化时给每一个控件的text重新赋值,那样的话工作量太大,而且程序结构也不好,都得将这些控键定义为全局变量,还得区别是什么控件才可以重新赋值。我现在想找一种机制能够使得界面自动刷新,呵呵,也许根本没这样的机制。你有什么好的建议啊?兄弟
回复 支持 反对

使用道具 举报

发表于 2006-4-14 17:31:28 | 显示全部楼层
我不知道有没有你说的那种机制。但我觉得将界面的构造与其中构件的设置分开也许是个办法。
如,我用wxWidgets这个GUI库来实现这个要求的话,我会这样想:
ABC::ABC()  : wxDialog(...)
{
  ...
  set_property();
}

void ABC::ChangeLocal()
{
   setlocal...

   set_property();
}

void ABC::set_property()
{
   button->setLable(_("Hello"));
  ...
}
回复 支持 反对

使用道具 举报

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

本版积分规则

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