`
streamfly
  • 浏览: 89261 次
社区版块
存档分类
最新评论

rcp 中 实现 i18n

阅读更多
最近在用rcp 做公司产品的控制端,正好要用到i18n,虽然java有resouceBundle,但资源文件只能放到classes目录或lib目录下,很不方便,所以就写了一个新的,记在这里!!

这里主要有4个类,关键的有3个。

FilePath 类,获得相对文件路径
Lang 类 和 Resource类 真正实现 i18n.
IFiles 类,单纯方便的记录文件的相对路径。

IFiles  代码:

java 代码
 
  1. public interface IFiles {  
  2.     public static final String SYS_PATH = "sys/";  
  3.     public static final String LOGIN_FILE = SYS_PATH+"global_login.xml";  
  4.     public static final String SYS_PROP_FILE = SYS_PATH+"global.properties";  
  5. }  

FilePath 类 代码:

java 代码
 
  1. import java.net.URL;  
  2. import org.eclipse.core.runtime.Platform;  
  3. import org.eclipse.osgi.service.datalocation.Location;  
  4. import org.eclipse.ui.internal.util.BundleUtility;  
  5. import org.osgi.framework.Bundle;  
  6.   
  7. public class FilePath {  
  8.       
  9.     private static URL getAbsUrlFromPlugIn(String plugin, String name) {  
  10.         try {  
  11.             try {  
  12.                 Bundle bundle = Platform.getBundle(plugin);  
  13.                 if (!BundleUtility.isReady(bundle)) {  
  14.                     return null;  
  15.                 }  
  16.                 URL url = BundleUtility.find(bundle, name);  
  17.                 return url;  
  18.             } catch (Throwable e) {  
  19.                   
  20.             }  
  21.         } catch (Throwable e) {  
  22.               
  23.         }  
  24.         return null;  
  25.     }  
  26.       
  27.     public static URL getAbsUrl(String name) {//获得文件绝对路径  
  28.         try {  
  29.             try {  
  30.                 URL url = getAbsUrlFromPlugIn(IAppContents.APPLICATION_ID,name);  
  31.                 return url;  
  32.             } catch (Throwable e) {  
  33.                 e.printStackTrace();  
  34.             }  
  35.         } catch (Throwable e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.         return null;  
  39.     }  
  40.   
  41.     public static URL getLocalUrl() {//发布前获得eclipse所在安装路径,发布后是发布的绝对路径  
  42.         Location location = Platform.getInstallLocation();  
  43.         return location.getURL();  
  44.     }  
  45.       
  46. }  

Lang 类 代码:

java 代码
 
  1. import java.util.Properties;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.net.URL;  
  5. import (包名).IFiles;  
  6.   
  7. public class Lang {  
  8.       
  9.     private static Resources res = null;  
  10.     private static String fPath = "";  
  11.     private static String fCode = "";  
  12.       
  13.     public static Resources getinstance() {  
  14.         if(res==null) {  
  15.             getLangProps();  
  16.             res = new Resources(fPath,fCode);  
  17.         }  
  18.         return res;  
  19.     }  
  20.       
  21.     public static void delRes() {  
  22.         Lang.res = null;  
  23.     }  
  24.       
  25.     private static void getLangProps() {  
  26.         Properties props = new Properties();  
  27.         try {  
  28.             URL url = FilePath.getLocalUrl();//这里用的是获得绝对路径,而不是相对于工程的路径  
  29.             String path = url.getFile()+IFiles.SYS_PROP_FILE;  
  30.              File file = new File(path);  
  31.              FileInputStream input = new FileInputStream(file);  
  32.             props.load(input);  
  33.             fPath = props.getProperty("LANG_FILE");  
  34.             fCode = props.getProperty("LANG_CODE");           
  35.         }catch(Exception e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.     }  
  39.       
  40. }  


Resource 类 代码:

java 代码
 
  1. import java.util.Properties;  
  2. import java.net.URL;  
  3.   
  4. public class Resources {  
  5.       
  6.     private Properties prop;  
  7.     private String code;  
  8.     private String fPath;  
  9.       
  10.     public Resources(String fPath,String code) {  
  11.         this.prop = new Properties();  
  12.         this.fPath = fPath;  
  13.         this.code = code;  
  14.         init();  
  15.     }  
  16.       
  17.     public void init() {  
  18.         try {  
  19.             fPath = fPath+"i18n_"+code+".properties";  
  20.             URL url = FilePath.getAbsUrl(fPath);//这里就获得是相对于工程的绝对路径。因为文件放在工程下了  
  21.             prop.load(url.openConnection().getInputStream());  
  22.         }catch(Exception e) {  
  23.             e.printStackTrace();  
  24.         }         
  25.     }  
  26.       
  27.     public String get(String key) {  
  28.         String value = "";  
  29.         try {  
  30.             if(prop.containsKey(key)) {  
  31.                 value = prop.getProperty(key);  
  32.                   
  33.                 return new String(value.getBytes("iso-8859-1"),code);  
  34.             }  
  35.         }catch(Exception e) {  
  36.             return "!wrong!";  
  37.         }  
  38.         return value;  
  39.     }  
  40.       
  41.     public Properties getProperties() {  
  42.         return prop;  
  43.     }  
  44.       
  45.     public void clear() {  
  46.         prop.clear();  
  47.     }  
  48.       
  49. }  


使用格式要简单的多,Lang.getInstance().get("key value");
当然,每次更换语言还是要刷新界面的,而且刷新前要调用  Lang.delRes();方法,但我做的时候是在登录界面直接选择语言环境,所以可以只需要刷新登录界面就可以了,而不需要重新启动程序。

另外使用方法上也有 规则。
1。有一个总的properties 文件 来记录当前使用的语言。格式如下:
java 代码
  1. LANG_CODE=GBK  
  2. LANG_FILE=/res/i18n/  

LANG_CODE 必须 是正确的字符编码,因为这个数值 是和

java 代码
 
  1. return new String(value.getBytes("iso-8859-1"),code);  

code 的数值一致,实际上就是同一个数值。

除次之外,资源文件名有格式,程序里是拼接起来的。
i18n_[LANG_CODE].properties 这样使用时可以只需要更换字符编码就可以,方便使用。
分享到:
评论

相关推荐

    Eclipse rcp深入浅出中英文版及配套代码

    9. **国际化和本地化(i18n)**:Eclipse RCP支持多语言环境,书中会讲解如何实现应用的国际化和本地化。 10. **调试和测试**:书中还会介绍如何在Eclipse RCP环境中进行调试和编写单元测试。 11. **扩展点...

    RCP部分课程

    RCP的国际化(i18n)和本地化(l10n)也是重要的一环。如果你的应用需要面向全球用户,你将学习如何创建和管理资源文件,以支持多种语言。同时,为了使应用更易用,你还需要掌握RCP中的无障碍支持(Accessibility)...

    rcp 学习资料下载,一个简单的rcp例子

    5. **国际化(i18n)和本地化(l10n)**: 如何为应用添加多语言支持。 6. **插件依赖**: 理解插件间的依赖关系,以及如何在MANIFEST.MF中声明依赖。 7. **调试和测试**: 使用Eclipse内置的工具进行RCP应用的调试和...

    Rcp Language

    2. **i18n支持**:利用Java的`ResourceBundle`类来管理多语言资源,确保界面文本能正确显示。 3. **本地化日期和数字格式**:适应不同地区的日期、时间和数字格式。 4. **UI布局**:考虑不同语言的阅读方向,如从左...

    RCP程序设计

    9. **国际化(i18n)与本地化(l10n)**:RCP支持多语言环境,开发者可以通过资源包(Properties files)实现应用程序的国际化和本地化。 10. **调试与测试**:RCP提供了强大的调试工具,如Eclipse本身的调试器,...

    一个RCP的简单例子

    在本例子中,我们看到的是一个基于RCP实现的**客户关系管理(CRM)**系统。 CRM系统主要用于企业管理和优化与客户之间的交互,包括销售、市场营销和服务等环节。通过RCP构建的CRM,我们可以期待一个高度定制化、...

    EclipseRcp 例子程序

    9. **国际化(i18n)**:Eclipse RCP支持多语言环境,开发者可以为应用程序添加多语言支持。例子程序可能包含如何配置和使用资源包(.properties文件)进行国际化。 10. **部署与打包**:最后,学习如何将Eclipse ...

    RCP程序设计.pdf

    10. **国际化(i18n)**:为了使应用程序适应不同地区的用户,RCP支持多语言。开发者需要学会如何实现和管理资源包,以实现应用程序的国际化。 11. **调试和测试**:Eclipse本身提供了强大的调试工具,这对于RCP...

    Eclipse_RCP_自学教程.doc

    以上内容只是 Eclipse RCP 自学教程的基础部分,实际开发中还会涉及更多高级主题,如国际化(i18n)、工作流管理、模型驱动开发(MDD)、以及插件间的通信机制(如事件总线和服务定位器)等。深入学习和实践是掌握 ...

    rcp 开发自学教程

    9. **国际化(i18n)**:学习如何使你的RCP应用支持多语言。 10. **性能优化**:探讨如何提高RCP应用的性能,减少内存占用和启动时间。 通过这个自学教程,你将逐步掌握Eclipse RCP的精髓,能够独立开发出自己的...

    eclipse rcp 开发基础教程

    8. **Internationalization (i18n)**:Eclipse RCP提供了良好的国际化支持,方便开发多语言的应用程序。 9. **RCP应用生命周期**:理解从启动到关闭的整个应用程序生命周期,包括初始化、保存和恢复状态、事件处理...

    RCP实例

    10. **国际化和本地化(i18n)**: RCP支持多语言环境,开发者可以通过资源包(Resource Bundle)来实现应用程序的国际化和本地化。 通过以上知识点的学习,开发者可以充分利用Eclipse RCP的特性,构建出功能丰富...

    一个简单的RCP入门教程

    RCP应用还支持国际化(i18n),使你的应用能适应不同语言的用户。你可以通过提供资源包(.properties文件)来实现这一点。此外,RCP的可扩展性意味着你可以通过添加新的插件来增加新功能,或者通过更新现有插件来...

    Eclipse RCP应用系统开发方法与实战(第四章)

    最后,我们还会讨论一些高级主题,如国际化(i18n)支持,使得应用程序能够适应不同语言的用户,以及如何使用Eclipse插件开发环境(PDE)工具来简化开发流程。 总之,“Eclipse RCP应用系统开发方法与实战(第四章...

    Eclipse RCP自学教程

    7. **国际化和本地化(i18n)** Eclipse RCP支持多语言环境,开发者可以通过提供不同语言的资源文件来实现应用的本地化。 8. **事件模型(Event Model)** 事件模型使得插件之间可以通过发布和订阅事件来进行通信...

    RCP经典,rcp eclipse

    10. **国际化(i18n)**:Eclipse RCP支持多语言,开发者可以方便地为应用程序添加不同语言的支持。 Eclipse RCP经典版的应用开发涵盖了从界面设计、数据管理到功能扩展的全过程,对于希望构建强大且灵活的桌面应用...

    Eclipse_RCP应用系统开发方法与实战.

    除此之外,书中还会涉及Eclipse RCP中的事件机制、国际化(i18n)支持、持久化存储、调试和测试策略,以及如何发布和部署Eclipse RCP应用等内容。这些知识点对于构建完整、健壮的应用系统是必不可少的。 实战部分,...

    cn.edu.jfcs.zip_eclipse rcp

    10. **国际化与本地化(i18n)**:支持多语言,使应用程序更易于全球化。 通过学习和实践“cn.edu.jfcs.zip_eclipse rcp”中的内容,你可以逐步掌握Eclipse RCP的开发技巧,从而打造出自己的定制化桌面应用,满足...

    Eclipse RCP应用系统开发方法与实战(第五章)

    8. **国际化(Internationalization, i18n)与本地化(Localization, l10n)**:为了支持多语言环境,开发者需要了解如何在Eclipse RCP应用中实现国际化和本地化。 9. **调试与测试**:Eclipse作为IDE本身提供了...

    Eclipse RCP应用系统开发方法与实战(第三章)

    随着后续章节的展开,我们可以期待学习到更多高级主题,如国际化(i18n)、自动更新机制和团队协作工具集成等。对于任何想要涉足Java桌面应用开发的开发者来说,这一系列教程无疑是一份宝贵的资源。

Global site tag (gtag.js) - Google Analytics