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)
?
?
?
?
?
?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????