[JAVA]java.util.ResourceBundle使用

[JAVA]java.util.ResourceBundle使用

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)

 

 

 

 

 

 


                                                                                                                                                                                                                                                                                                                                                                                                                 

你可能感兴趣的:([JAVA]java.util.ResourceBundle使用)