2007-02-14
在Eclipse RCP中实现I18N的思考与疑问
关键字: RCP I18N
在RCP产品中实现国际化,一般是两种方式。
方式一:
方式二:
Eclipse平台和LumaQQ用的都是方式二,其实现机制用到了OSGI,与一相比的优点是什么?
此外,这两种方式所支持的I18N并不是动态的,也就是说,当用户从控制面板中更改了语言以后,需要重启应用才能发现改变,但是要做到像Skype那样,提供菜单选项来更改语言,应该如何处理呢?
对于商业化的产品而言,为了改变产品的语言而重启肯定是不可取的,也许有个办法可以做到,就是在一个地方集中处理所有的UI组件中的文字,当用户通过应用程序改变locale,就去刷新所有的UI组件,但还是没想好应该怎么做到这一点...
不知道谁有过这方面的经验,盼指教!
方式一:
- public class Messages {
- private static final String BUNDLE_NAME = "test.messages";
- private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
- .getBundle(BUNDLE_NAME);
- private Messages() {
- }
- ......
- ......
- public static String getString(String key) {
- try {
- return RESOURCE_BUNDLE.getString(key);
- } catch (MissingResourceException e) {
- return '!' + key + '!';
- }
- }
- }
方式二:
- public class Message extends NLS {
- // bundle name, refer to message properties
- private static final String BUNDLE_NAME = "test.messages";
- ......
- ......
- static {
- NLS.initializeMessages(BUNDLE_NAME, MessageTest.class);
- }
- }
Eclipse平台和LumaQQ用的都是方式二,其实现机制用到了OSGI,与一相比的优点是什么?
此外,这两种方式所支持的I18N并不是动态的,也就是说,当用户从控制面板中更改了语言以后,需要重启应用才能发现改变,但是要做到像Skype那样,提供菜单选项来更改语言,应该如何处理呢?
对于商业化的产品而言,为了改变产品的语言而重启肯定是不可取的,也许有个办法可以做到,就是在一个地方集中处理所有的UI组件中的文字,当用户通过应用程序改变locale,就去刷新所有的UI组件,但还是没想好应该怎么做到这一点...
不知道谁有过这方面的经验,盼指教!
- 17:11
- 浏览 (2612)
- 论坛浏览 (3123)
- 评论 (6)
- 分类: RCP系列
- 相关推荐
评论
多谢楼上的兄台,我苦恼的就是根据新的Locale加载字符资源,重绘所有界面这一点,还好目前项目出于下阶段开发的调研阶段,而且动态改变I18N也不是下个版本所需要考虑的。不过,
有没有RCP的大牛出来指点一下啊~~
如果要实现改变语言,而无需重启,可以考虑借鉴LookAndFeel的机制。
1. 所有的字符资源不能使用静态方式加载。
2. 当Locale改变时,根据新的Locale加载字符资源,要求所有界面重绘(重绘时重新根据key获取字符)
不知Swt是否有类似机制
1. 所有的字符资源不能使用静态方式加载。
2. 当Locale改变时,根据新的Locale加载字符资源,要求所有界面重绘(重绘时重新根据key获取字符)
不知Swt是否有类似机制
发表评论
该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子
我的相册
sina
共 3 张
共 3 张
最近加入圈子
链接
最新评论
-
羡慕,那你也加入啊
和我的拒信一模一样。哎
-- by niwtsew -
web环境下开发quartz简易 ...
你写的很好。我的是在rcp下面是用quartz还得自己摸索..........
-- by futionbai -
Starting Struts2中文版已 ...
呵呵,希望大家可以喜欢
-- by dearwolf -
Starting Struts2中文版已 ...
正在看这本书!! 哈哈
-- by kanokano -
CSDN英雄大会上,跟苏某翻 ...
我只想到。。。这么年轻就有仔了,好可怜阿。。。。
-- by akane







评论排行榜