`
javafenger
  • 浏览: 246796 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

类 ResourceBundle阅读

 
阅读更多
public abstract class ResourceBundle
extends Object
 

资源包包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时(如 String),程序可以从适合当前用户语言环境的资源包中装入它。以这种方式可以编写很大程度上独立于用户语言环境的程序代码,它将资源包中大部分(如果不是全部)特定于语言环境的信息隔离开来。

这就使您所编写的程序可以:

  • 轻松地本地化或翻译成不同的语言
  • 一次处理多个语言环境
  • 以后可以轻松地进行修改,支持更多的语言环境

资源包属于这样的系列,其成员共享一个公共的基本名称,但是名称中还有标识其语言环境的其他组件。例如,某个资源包系列的基本名称可能是 "MyResources"。该系列应该有一个默认资源包,其名称与其系列名相同( "MyResources"),并且如果不支持指定的语言环境,则此资源包应该用作最后的手段。然后,此系列可根据需要提供特定于语言环境的成员,例如一个名为 "MyResources_de" 的德语资源包。

某个系列中的每个资源包都包含相同的项,但是已经针对该资源包所代表的语言环境翻译了各项。例如,"MyResources" 和 "MyResources_de" 可能有用在取消操作按钮上的 String。在 "MyResources" 中,String 可能含有 "Cancel",而在 "MyResources_de" 中则可能含有 "Abbrechen"。

如果不同的国家有不同的资源,则可以进行限定:例如,"MyResources_de_CH" 是瑞士 (CH) 中包含德语 (de) 的对象。如果只想修改限定中的某些资源,就可以这样做。

当程序需要特定于语言环境的对象时,它使用 getBundle 方法加载 ResourceBundle 类:

 ResourceBundle myResources =      ResourceBundle.getBundle("MyResources", currentLocale); 

资源包包含键/值对。键惟一地标识了包中的特定于语言环境的对象。下面是一个 ListResourceBundle 示例,它包含了两个键/值对:

public class MyResources extends ListResourceBundle {      public Object[][] getContents() {              return contents;      }      static final Object[][] contents = {      // LOCALIZE THIS              {"OkKey", "OK"},              {"CancelKey", "Cancel"},      // END OF MATERIAL TO LOCALIZE      }; } 
键始终为 String 类型。在此示例中,两个键是 "OkKey" 和 "CancelKey"。在上面的示例中,值也是 String 类型,即 "OK" 和 "Cancel",但并非必须如此。值可以是任意对象类型。

可以使用适当的 getter 方法从资源包中检索某个对象。因为 "OkKey" 和 "CancelKey" 都是字符串,所以应该使用 getString 来检索它们:

 button1 = new Button(myResources.getString("OkKey")); button2 = new Button(myResources.getString("CancelKey"));  
所有 getter 方法都需要的是将键作为参数并返回对象(如果找到的话)。如果未找到对象,则 getter 方法会抛出 MissingResourceException

除了 getString,ResourceBundle 还提供了获取字符串数组的方法 getStringArray,以及用于其他任意对象类型的 getObject 方法。使用 getObject 时,必须将结果强制转换为适当的类型。例如:

 int[] myIntegers = (int[]) myResources.getObject("intList"); 

Java 2 平台提供了两个 ResourceBundle 的子类,即 ListResourceBundlePropertyResourceBundle,这为创建资源提供了一种相当简单的方式。正如在前面示例中所看到的,ListResourceBundle 以键/值对的列表方式管理其资源。PropertyResourceBundle 则使用一个属性文件来管理其资源。

如果 ListResourceBundlePropertyResourceBundle 无法满足您的需求,那么可以编写自己的 ResourceBundle 子类。子类必须重写这两个方法:handleGetObjectgetKeys()

下面是一个极其简单的 ResourceBundle 子类示例——MyResources,它管理两个资源(对于大量的资源,可能应该使用 Hashtable)。注意,如果某个“父级”ResourceBundle 处理具有相同值的相同键(如下面的 okKey),则无需提供值。

示例:

 // default (English language, United States) public class MyResources extends ResourceBundle {     public Object handleGetObject(String key) {         if (key.equals("okKey")) return "Ok";         if (key.equals("cancelKey")) return "Cancel";         return null;     } } // German language public class MyResources_de extends MyResources {     public Object handleGetObject(String key) {         // don't need okKey, since parent level handles it.         if (key.equals("cancelKey")) return "Abbrechen";         return null;     } } 
不必限制只使用 ResourceBundle 的单个系列。例如,可以有异常消息 ExceptionResources 的包集合(ExceptionResources_frExceptionResources_de 等)和窗口小部件 WidgetResource 的包集合(WidgetResources_frWidgetResources_de 等);可以按自己喜欢的方式分解资源。  

分享到:
评论

相关推荐

    java国际化中文乱码问题解决包

    `ResourceBundle` 是 Java 中用于管理国际化资源的关键类,它允许开发者存储特定语言环境下的文本、消息和其他内容。然而,由于编码设置不正确或处理不当,可能会导致中文字符显示为乱码。`BundleEditor` 工具的出现...

    JAVA中文API文档

    8. **国际化**:Java的Locale类和ResourceBundle类支持多语言环境,API文档会解释如何实现全球化和本地化。 9. **数学运算**:Math类提供了各种数学函数,如平方根、指数、对数等,API文档会列出所有可用的数学操作...

    Flex实现国际化样例

    2. **ResourceBundle类**:Flex提供ResourceBundle类来管理这些资源文件。开发者可以通过这个类加载特定语言的资源文件,然后在程序中通过键获取对应的翻译文本。 3. **使用i18n标签**:在MXML组件中,我们可以使用...

    java 1.6 中文 帮助文档

    9. **国际化与本地化**:Java 1.6支持多语言环境,通过Locale类和ResourceBundle类可以实现应用程序的国际化和本地化。 10. **Swing组件库**:虽然JavaFX在后续版本中逐渐成为新的UI开发工具,但在1.6中,Swing仍然...

    JAVA常用API文档 中文完整版.zip

    9. **国际化与本地化**:java.util.Locale和ResourceBundle类用于处理不同地区的语言和文化习惯,支持多语言环境的应用开发。 10. **XML处理**:DOM(Document Object Model)和SAX(Simple API for XML)是两种...

    java jdk api中文开发文档(免币)

    14. **国际化**:Java提供了Locale和ResourceBundle类,支持多语言环境下的应用程序开发。 15. **XML处理**:Java提供了DOM、SAX和JAXB等方式处理XML文档。 以上仅是Java JDK API中文开发文档中部分关键知识点的...

    中文版最全的JDK API手册

    9. **国际化和本地化**:Java提供Locale类和ResourceBundle类支持多语言环境下的应用程序开发。 10. **XML处理**:JAXP(Java API for XML Processing)和DOM、SAX解析器提供了处理XML文档的工具。 这份中文版的...

    JAVA API1.6中文文档.zip_java api中文_java 文档

    Java API 1.6中文文档是对Java 2 Platform Standard Edition 6.0(J2SE 6.0)的API规范的...通过深入阅读和理解这些文档,开发者可以更好地掌握Java编程,并能有效地利用Java的强大功能来构建高效、可靠的软件系统。

    java_JDK_ API_函数大全(中文电子书)(35.1M)

    11. **国际化**:Locale类、ResourceBundle,支持多语言环境。 12. **XML处理**:DOM、SAX、StAX解析器,用于解析和生成XML文档。 13. **并发工具类**:如ConcurrentHashMap、ExecutorService、CountDownLatch等,...

    j2se中文api.rar

    8. **国际化支持**:Java 的 Locale 类和 ResourceBundle 类支持多语言环境,使程序能够适应不同地区的用户需求。 9. **数学运算**:java.lang.Math 类提供了各种数学函数,如平方根、对数、指数、随机数生成等。 ...

    java rt包源代码

    9. **国际化与本地化**:`java.util.Locale`类用于表示语言、国家和区域的组合,`ResourceBundle`类用于加载不同地区的资源文件,支持应用程序的国际化和本地化。 10. **内存管理**:虽然Java RT包不直接提供内存...

    javase-6-doc-api-zh_CN.zip

    12. **国际化和本地化**:Java提供ResourceBundle类来支持不同地区的文本和资源,实现软件的国际化和本地化。 13. **日期和时间API**:Java SE 6中的日期和时间处理主要依赖Calendar和Date类,虽然现在有更现代的...

    Java API 1.6中文版

    8. **国际化与本地化**:java.util.Locale和ResourceBundle类支持应用程序根据用户的地域和语言偏好显示适当的文本和格式。 9. **XML处理**:Java API 1.6包含DOM(Document Object Model)和SAX(Simple API for ...

    国际化文件的维护

    2. **使用ResourceBundle**:Java的`ResourceBundle`类是处理多语言资源的标准方式,它可以方便地加载不同语言的属性文件。 3. **文件结构**:资源文件通常按照`basename_language.properties`的格式命名,如`...

    JAVA_JDK_API_1_6_zh_CN文档.zip

    8. **国际化与本地化**:`java.util.Locale`和`ResourceBundle`类支持应用程序的国际化和本地化,使程序能够适应不同地区的语言和文化习惯。 9. **XML处理**:Java 6中包含了处理XML的API,如`javax.xml.parsers....

    JDK_API_1_6_zh_CN参考文档

    8. **国际化与本地化**:`java.util.Locale`类用于处理语言环境,`ResourceBundle`则用于根据不同的地域提供相应的资源。 9. **日期和时间**:`java.util.Date`和`Calendar`类处理日期和时间,`java.text....

    rt.zip_java库函数源码

    8. **国际化和本地化**:Java提供了Locale和ResourceBundle类支持不同地区的文本和格式,源码中可以看到如何实现这些功能。 9. **类加载器**:Java的动态类加载机制对理解类的生命周期至关重要,源码中包含了类加载...

    Java2核心技术卷二 配套源码

    7. **国际化**:Java的ResourceBundle类支持多语言环境,源码会展示如何实现不同地区的本地化。 8. **安全**:Java的安全模型包括类加载器、安全管理器和权限类。源码可能包含如何控制代码执行权限、防止恶意代码...

    JAVA2核心技术第2卷:高级特性(源码)

    9. **国际化与本地化**:Java的Locale类和ResourceBundle类支持应用程序的国际化和本地化。源码中可能包含不同语言和文化的资源文件处理。 10. **设计模式**:作为高级特性,源码可能展示了Java中的一些经典设计...

    struts2_i18n

    ResourceBundle是Java标准库中的类,用于管理应用的本地化资源。开发者需要为每种支持的语言创建一个对应的ResourceBundle文件,这些文件通常命名为`messages.properties`(默认语言,通常是英文),`messages_en....

Global site tag (gtag.js) - Google Analytics