论坛首页 Java企业应用论坛

在Eclipse RCP中实现I18N的思考与疑问

浏览 5998 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-02-14  
在RCP产品中实现国际化,一般是两种方式。

方式一:

  1. public class Messages {  
  2.   private static final String BUNDLE_NAME = "test.messages";  
  3.   
  4.   private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle  
  5.         .getBundle(BUNDLE_NAME);  
  6.   
  7.   private Messages() {  
  8.   }    
  9.     ......  
  10.     ...... 
  11.   
  12.   public static String getString(String key) {  
  13.     try {  
  14.         return RESOURCE_BUNDLE.getString(key);  
  15.     } catch (MissingResourceException e) {  
  16.         return '!' + key + '!';  
  17.     }  
  18.   }  
  19. }  


方式二:

  1. public class Message extends NLS {  
  2.   // bundle name, refer to message properties  
  3.   private static final String BUNDLE_NAME = "test.messages";   
  4.     ......  
  5.     ......     
  6.   static {  
  7.     NLS.initializeMessages(BUNDLE_NAME, MessageTest.class);  
  8.   }  
  9. }  


Eclipse平台和LumaQQ用的都是方式二,其实现机制用到了OSGI,与一相比的优点是什么?

此外,这两种方式所支持的I18N并不是动态的,也就是说,当用户从控制面板中更改了语言以后,需要重启应用才能发现改变,但是要做到像Skype那样,提供菜单选项来更改语言,应该如何处理呢?

对于商业化的产品而言,为了改变产品的语言而重启肯定是不可取的,
也许有个办法可以做到,就是在一个地方集中处理所有的UI组件中的文字,当用户通过应用程序改变locale,就去刷新所有的UI组件,但还是没想好应该怎么做到这一点...

不知道谁有过这方面的经验,盼指教!
   发表时间:2007-02-15  
动态修改。肯定要对所有的界面控件都有一个刷新方法,在刷新方法中重设文本。
0 请登录后投票
   发表时间:2007-02-18  
谢谢

大概也只能这样子作了...
0 请登录后投票
   发表时间:2007-02-26  
我们在eclipse中[File]->[Switch Workspace]时,eclipse有一个save的restart的过程,LZ是不是可以参考一下。
0 请登录后投票
   发表时间:2007-02-27  
但是在产品中,哪个用户愿意看到因为改变语言而导致软件重启啊.....
0 请登录后投票
   发表时间:2007-02-28  
如果要实现改变语言,而无需重启,可以考虑借鉴LookAndFeel的机制。
1. 所有的字符资源不能使用静态方式加载。
2. 当Locale改变时,根据新的Locale加载字符资源,要求所有界面重绘(重绘时重新根据key获取字符)
不知Swt是否有类似机制
0 请登录后投票
   发表时间:2007-02-28  
多谢楼上的兄台,我苦恼的就是根据新的Locale加载字符资源,重绘所有界面这一点,还好目前项目出于下阶段开发的调研阶段,而且动态改变I18N也不是下个版本所需要考虑的。不过, 有没有RCP的大牛出来指点一下啊~~
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics