基于Equinox构建支持多语言的Bundle.docxVIP

  • 1
  • 0
  • 约 3页
  • 2017-07-09 发布于河南
  • 举报
基于Equinox构建支持多语言的Bundle

基于Equinox构建支持多语言的Bundle对于一个OSGi的Bundle项目而言,多语言支持与JAVA的原理基本相似,就是将程序中用到的字符串配置在properties文件中。然后每种语言及地区提供一个单独的properties文件声明它的字符串资源。本文以Equinox的OSGi实现为例,描述如何让您的Bundle程序支持多语言:对插件描述文件,如 plugin.xml, MANIFEST.MF 文件,多语言支持的作法如下:在插件的根目录下创建plugin.properties文件,用于存放默认的字符串资源。如:Bundle-Name = \u56fd\u9645\u5316\u6f14\u793a\u63d2\u4ef6sampleContentTypeName = \u6f14\u793a\u5185\u5bb9\u7c7b\u578b在此properties文件中,名称代表字符串资源名,右边的值代表字符串内容。注意:若字符串的内容不是ASCII编码的,则需要将字符串转化为UNICODE编码。在MANIFEST.MF 文件中加入一行:Bundle-Localization: plugin表示国际化字符串资源都存放在以plugin开头的资源文件中。添加其它语言及地区的字符串资源文件,文件名的格式为:plugin_[语言代码]_[国家及地区代码].properties如:plugin_zh_CN.properties表示中国中文plugin_en_US.properties表示美国英文等。在plugin.xml文件或MANIFEST.MF文件中,若要使用在plugin*.properties文件中定义好的字符串,就使用%资源名来指代,如:Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: %Bundle-NameBundle-SymbolicName: org.sample.eclipse.i18n;singleton:=true……..对于插件中的程序用到的字符串资源,多语言支持的方法如下:在MANIFEST.MF中添加依赖插件org.eclipse.osgi。在某一包中创建文件messages.properties,如在 org.sample.eclipse.i18n 包中添加messages.properties文件:SAMPLE_START_I18N = \u5f00\u59cbi18nSAMPLE_STOP_I18N = \u7ed3\u675fi18nSAMPLE_HELLO_I18N = \u60a8\u597di18n用于定义字符串资源。继承添加其它语言及国家对应的字符串资源文件,文件名格式与上述的一样,即:messages_[语言代码]_[国家及地区代码].properties如:messages_zh_CN.properties表示中国中文messages_en_US.properties表示美国英文等。在同包下创建Messages.java类文件,该类必须继承自org.eclipse.osgi.util.NLS类,并且需要在该类中定义与messages.properties文件中定义的字符串资源相对应的字符串常量,还要在加载此类时调用NLS.initializeMessages方法,如下代码所示:package org.sample.eclipse.i18n;importorg.eclipse.osgi.util.NLS;publicclass Messages extends NLS {privatestaticfinal String BUNDLE_NAME = org.sample.eclipse.i18n.messages; //$NON-NLS-1$publicstatic String SAMPLE_START_I18N;publicstatic String SAMPLE_STOP_I18N;publicstatic String SAMPLE_HELLO_I18N;static {// initialize resource bundleNLS.initializeMessages(BUNDLE_NAME, Messages.class);}private Messages() {}}注意:在NLS.initializeMessages方法中,会根据程序当前系统参数中所设置的语言及国家代码,找到对应的字符串资源文件加载并将里面定义的值赋给对应的类常量中,此方法的第一个参数表示字符串资源文件的名称(含包名),第二个参数表示相对应的类的类对象。在程序中,若需要使用字符串内容,则直接调用此类的字符串常量即可,如下代码所示:…

文档评论(0)

1亿VIP精品文档

相关文档