zoukankan      html  css  js  c++  java
  • 让语言选择即时生效

    让语言选择即时生效

    转载时请注明出处和作者联系方式
    作者联系方式:李先静 <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~~
  • 相关阅读:
    5-29
    5-28
    5-27
    -5-26
    5-25
    5-24
    5-21
    RabbitMQ消息中间件极速入门与实战
    细说java多线程之内存可见性
    全面解析java注解
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167650.html
Copyright © 2011-2022 走看看