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

java 资源包(ResourceBundle) 详解【2】

 
阅读更多
java.util


类 ResourceBundle.Control


java.lang.Object
java.util.ResourceBundle.Control
正在封闭类:
ResourceBundle



public static class ResourceBundle.Control extends ObjectResourceBundle.Control 定义一个回调方法集,它在包加载进程中由 ResourceBundle.getBundle 工厂方法调用。
换句话说,ResourceBundle.Control 与工厂方法协作可用于加载资源包。回调方法的默认实现为工厂方法提供执行默认行为的必要信息。


除了回调方法外,还定义了 toBundleName 和 toResourceName 方法,其主要目的是为实现回调方法提供方便。
但是,若要在本地化资源的组织和打包中提供不同的约定,也可以重写 toBundleName 方法。toResourceName 方法是 final 方法,以避免使用错误的资源和类名称分隔符。


两个工厂方法 getControl(List) 和 getNoFallbackControl(List) 都提供 ResourceBundle.Control 实例,这些实例实现默认包加载进程的常见变量。


在相同基本包的所有 ResourceBundle.getBundle 调用中,getFormats 方法返回的格式和 getCandidateLocales 方法返回的候选语言环境必须一致。


否则,ResourceBundle.getBundle 方法返回意料之外的包。
例如,如果 getFormats 方法在
第一次调用 ResourceBundle.getBundle 时只返回 "java.class",
第二次调用时只返回 "java.properties",
那么第二次调用返回的基于类的包将是在第一次调用过程中缓存的那个包。



如果 ResourceBundle.Control 实例被多个线程同时使用,则它必须是线程安全的。
ResourceBundle.getBundle 不会同时调用 ResourceBundle.Control 方法。方法的默认实现是线程安全的。


应用程序可以指定 getControl 工厂方法返回的 ResourceBundle.Control 实例,
也可以指定从 ResourceBundle.Control 子类创建的 ResourceBundle.Control 实例,
以自定义包加载进程。下面是对默认包加载进程进行更改的示例。


示例 1


以下代码让 ResourceBundle.getBundle 只查找基于属性的资源。


import java.util.*;
import static java.util.ResourceBundle.Control.*;
...
ResourceBundle bundle =
ResourceBundle.getBundle("MyResources", new Locale("fr", "CH"),
ResourceBundle.Control.getControl(FORMAT_PROPERTIES));


给定 ResourceBundle.getBundle 描述的示例中的资源包,
此 ResourceBundle.getBundle 调用加载 MyResources_fr_CH.properties,
它的父属性是 MyResources_fr.properties,
而后者的父属性是 MyResources.properties。(没有隐藏 MyResources_fr_CH.properties,但隐藏了 MyResources_fr_CH.class。)



示例 2 :


以下转帖:http://blog.csdn.net/shanliangliuxing/article/details/6827972

一、认识国际化资源文件

这个类提供软件国际化的捷径。通过此类,可以使您所编写的程序可以:
轻松地本地化或翻译成不同的语言
一次处理多个语言环境
以后可以轻松地进行修改,支持更多的语言环境

说的简单点,这个类的作用就是读取资源属性文件(properties),然后根据 .properties文件 的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。

使用这个类,要注意的一点是,这个properties文件的名字是有规范的:

一般的命名规范是: 自定义名_语言代码_国别代码.properties,
如果是默认的,直接写为:自定义名.properties
比如:
myres_en_US.properties
myres_zh_CN.properties
myres.properties

当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在,则优先会使用myres_zh_CN.properties,
当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。

没有提供语言和地区的资源文件是系统默认的资源文件。
资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.

二、实例

定义三个资源文件,放到src的根目录下面(必须这样,或者你放到自己配置的calsspath下面。

myres.properties
aaa=good
bbb=thanks


myres_en_US.properties
aaa=good
bbb=thanks


myres_zh_CN.properties

aaa=\u597d
bbb=\u591a\u8c22


打印:



good

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics