Linux mobile development & HTML5 Games/App

主要致力于基于linux的嵌入式系统的学习和研究,包括内核、驱动、GUI、MMI、软件设计方法和软件优化等方面....

让语言选择即时生效

让语言选择即时生效

转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>


在用户选择不同语言之后,如何让系统中的应用程序使用新选择的语言显示界面呢?在feature phone中这只是小菜一碟,几乎所有feature phone都支持这个功能。主要原因可能是其以单进程单窗口的方式工作吧。而在linux智能手机里,这个问题我想了很久,至今没有较好的答案。主要困难如下:

通知其它应用程序当前语言变化了。语言选择是一个独立的应用程序,它修改之后不但要改变自己的语言,而且还要通知其它应用程序做相应的改变。这其实都算不上问题,通过GUI的广播消息或者GConf更新通知机制,很容易做到这一点。

让语言选择生效。这个问题看似简单,设置LANG环境变量,新进程以LANG中指定的语言显示。直接调用setlocale让当前进程用指定的语言显示。但这些方法都不适用于当前已经打开的窗口。

有人说让当前打开的窗口重新刷新一下就行了啊。刷新也没有用,按照gettext机制,窗口和控制存放的是本地化之后的字符,即使再刷新还是用以前的语言显示的。唯有重新设置窗口和控件中的字符串,才能以新语言显示。

重新设置窗口和控件中的字符串!这要求每个窗口都要写这样一个重设函数,工作量会比较大。我想的是通过修改glade的代码产生器,在产生代码时自动产生这样的函数。试了一下,确实可以做到,正准备推广时,又发现新的问题:动态显示的文本会有问题。它显示的内容与当前应用的状态有关,而代码器对此一无所知。这种动态显示的情况在我们的平台中有很多,这让人有点头疼。

要做到即时生效,应用程序一定要做相应修改才行(配合代码产生器可以减少工作量)。考虑到语言选择并不是一个常用的功能,我们怀疑是否值得花这些代价去实现它。最后决定让用户在下次login时才生效,如果用户要求即时生效,就注销当前会话并重新自动login。

欢迎到http://www.broncho.cn/forum 进一步交流。

~~end~~
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/absurd/article/details/2336027
个人分类: 50.GTK+/DirectFB
想对作者说点什么? 我来说一句

cookie及时生效

2012年09月05日 517B 下载

ie代理设置

2012年10月18日 6KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭