ResourceBundle (Abstract):handleGetObject(String),getKeys()
+ ListResourceBundle (Abstract) : getContent()
+ PropertyResourceBundle
======================================
用法:
1. 取得PropertyResourceBundle的实例,我们使用以下静态方法:
ResourceBundle.getBundle(String base)
ResourceBundle.getBundle(String base,Locale)
ResourceBundle.getBundle(String base,Locale,ClassLoader)
return ResourceBundle instance
NOTE: 其中的base可以使类名,也可以是资源文件的名称。
1) the Property File should be located as full qualified name,
seperated by "/" or "." from class path, respect to the ClassLoader
MyResource.properties //default
MyResource_zh.properties
MyResource_de.properties
2) the ResourceBundle Class should be located as full qualified name,
seperated by "/" or "." from class path, respect to the ClassLoader
MyResource.class //default parent by name
MyResource_zh.class
MyResource_de.class
-------------------------------------------------------------
public class MyResource extends ResourceBundle {
@Override
public Enumeration<String> getKeys() {
ResourceBundle parent = this.parent;
HashSet<String> s=new HashSet<String>();
return new Enumeration<String>(){
int count=0;
public boolean hasMoreElements() {
return count<2;
}
public String nextElement() {
synchronized (MyResource.this) {
if(count++==0) return "okKey";
if(count++==1) return "cancelKey";
else return null;
}
}
};
}
@Override
protected Object handleGetObject(String key) {
if (key.equals("okKey")) return "Ok";
if (key.equals("cancelKey")) return "Cancel";
return null;
}
}
//if some key not find, go to the parent
public class MyResource_de extends MyResource {
@Override
protected Object handleGetObject(String key) {
//if (key.equals("okKey")) return "Ok_de";
if (key.equals("cancelKey")) return "Cancel_de";
return null;
}
}
3) the name convention:
baseclass + "_" + language1 + "_" + country1 + "_" + variant1
baseclass + "_" + language1 + "_" + country1
baseclass + "_" + language1
baseclass
baseclass + "_" + language2 + "_" + country2 + "_" + variant2
baseclass + "_" + language2 + "_" + country2
baseclass + "_" + language2
4) throws:
java.lang.NullPointerException if baseName or locale is null
MissingResourceException if no resource bundle for the specified base name can be found
2. 使用ListResourceBundle
public class MyResources extends ListResourceBundle {
protected Object[][] getContents() {
return new Object[][] = {
// LOCALIZE THIS
{"OkKey", "OK"},
{"CancelKey", "Cancel"},
// END OF MATERIAL TO LOCALIZE
};
}
}
3. 使用Parent
// default (English language, United States)
abstract 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
abstract 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;
}
}
4. 取得bundle中的对象
getString(String key)
getStringArray(String key)
getObject(String key)