java.util
类 ResourceBundle
java.lang.Object
java.util.ResourceBundle
直接已知子类:
ListResourceBundle, PropertyResourceBundle
--------------------------------------------------------------------------------
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 { protected Object[][] getContents() { return new Object[][] { // LOCALIZE THE SECOND STRING OF EACH ARRAY (e.g., "OK") {"OkKey", "OK"}, {"CancelKey", "Cancel"}, // END OF MATERIAL TO LOCALIZE }; } }
Java 平台提供了两个 ResourceBundle 的子类,即 ListResourceBundle 和 PropertyResourceBundle,这为创建资源提供了一种相当简单的方式。
正如在前面示例中所看到的,ListResourceBundle 以键/值对的列表方式管理其资源。PropertyResourceBundle 则使用一个属性文件来管理其资源。
如果 ListResourceBundle 或 PropertyResourceBundle 无法满足需求,那么可以编写自己的 ResourceBundle 子类。
子类必须重写两个方法:handleGetObject 和 getKeys()。
ResourceBundle.Control:
http://blog.csdn.net/itm_hadf/article/details/7515149
ResourceBundle.Control 类提供通过带 ResourceBundle.Control 实例的 getBundle 工厂方法执行包加载进程所需的信息。
为了启用非标准资源包格式、更改搜索策略或定义缓存参数,可以实现自己的子类。
有关细节请参考类和 getBundle 工厂方法的描述。
缓存管理
getBundle 工厂方法创建的资源包实例是默认缓存的,如果资源包实例已经缓存,那么这些工厂方法将多次返回相同的资源包实例。
getBundle 客户端可以清除缓存、使用生存时间值管理已缓存资源包实例的生命周期,或者指定不缓存资源包实例。
有关细节请参考getBundle 工厂方法、clearCache、ResourceBundle.Control.getTimeToLive 和 ResourceBundle.Control.needsReload 的描述。
示例
下面是一个极其简单的 ResourceBundle 子类示例 MyResources,它管理两个资源(对于大量的资源,应该使用 Map)。
注意,如果某个“父级”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; } public Enumeration<String> getKeys() { return Collections.enumeration(keySet()); } // Overrides handleKeySet() so that the getKeys() implementation // can rely on the keySet() value. protected Set<String> handleKeySet() { return new HashSet<String>(Arrays.asList("okKey", "cancelKey")); } } // 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; } protected Set<String> handleKeySet() { return new HashSet<String>(Arrays.asList("cancelKey")); } }
构造方法摘要 | |
---|---|
ResourceBundle() 唯一的构造方法(由子类构造方法调用,通常是隐式的)。 |
方法摘要 | |
---|---|
static void |
clearCache() 从已经使用调用者的类加载器加载的缓存中移除所有资源包。 |
static void |
clearCache(ClassLoader loader) 从已经使用给定类加载器加载的缓存中移除所有资源包。 |
boolean |
containsKey(String key) 确定给定 key 是否包含在此 ResourceBundle 及其父包中。 |
static ResourceBundle |
getBundle(String baseName) 使用指定的基本名称、默认的语言环境和调用者的类加载器获取资源包。 |
static ResourceBundle |
getBundle(String baseName,Locale locale) 使用指定的基本名称、语言环境和调用者的类加载器获取资源包。 |
static ResourceBundle |
getBundle(String baseName,Locale locale,ClassLoader loader) 使用指定的基本名称、语言环境和类加载器获取资源包。 |
static ResourceBundle |
getBundle(String baseName,Locale targetLocale,ClassLoader loader, ResourceBundle.Control control) 使用指定基本名称、目标语言环境、类加载器和控件返回资源包。 |
static ResourceBundle |
getBundle(String baseName,Locale targetLocale,ResourceBundle.Control control) 使用指定基本名称、目标语言环境和控件、调用者的类加载器返回一个资源包。 |
static ResourceBundle |
getBundle(String baseName,ResourceBundle.Control control) 使用指定基本名称、默认语言环境和指定控件返回一个资源包。 |
abstract Enumeration<String> |
getKeys() 返回键的枚举。 |
Locale |
getLocale() 返回此资源包的语言环境。 |
Object |
getObject(String key) 从此资源包或它的某个父包中获取给定键的对象。 |
String |
getString(String key) 从此资源包或它的某个父包中获取给定键的字符串。 |
String[] |
getStringArray(String key) 从此资源包或它的某个父包中获取给定键的字符串数组。 |
protected abstract Object |
handleGetObject(String key) 从此资源包中获取给定键的对象。 |
protected Set<String> |
handleKeySet() 返回只 包含在此 ResourceBundle 中的键的 Set 。 |
Set<String> |
keySet() 返回此 ResourceBundle 及其父包中包含的所有键的 Set 。 |
protected void |
setParent(ResourceBundle parent) 设置此包的父包。 |