java ResourceBundle介紹,javaresourcebundle

來源:互聯網
上載者:User

java ResourceBundle介紹,javaresourcebundle

public abstract class ResourceBundle
extends Object
下列類的父類:
ListResourceBundle, PropertyResourceBundle
資源束包含特定於語言環境的對象。當程式需要一個特定於語言環境的資源時,如 String ,程式可以從適合目前使用者語言環境的資源束中裝入它。以這種方式,可以寫大部分獨立於使用者語言環境的程式碼,它與大部分資源束中的特定於語言環境的資訊相隔離。
這使得編程可以:
容易本地化或翻譯成不同的語言
一次處理多種語言環境
以後容易更改以支援更多的語言環境
一個資源束從概念上講是相關的類集合,這些類是從 ResourceBundle 繼承而來的。 ResourceBundle 的每個相關的子類有同一基名並加上標識它的語言環境的附加成分。例如,假設您的資源束命名為 MyResources。您寫的第一個類可能是預設的資源束,它與它的家族有同一個名字--MyResources 。也可按需要提供許多特定於語言環境的類:例如,可能為它提供一個德文的名字 MyResources_de。
ResourceBundle 的每個相關的子類包含同樣的項目,但是項目已經為那個 ResourceBundle 子類描述的語言環境所翻譯。例如,MyResources 和 MyResources_de 可能都有一個用在確認操作按鈕上的 String 。在 MyResources 中,String 可能包含 OK ,在 MyResources_de 中,它可能包含 Gut。
如果對不同的國家有不同的資源,可做出規定:例如, MyResources_de_CH 是 Switzerland 的資源。如果僅想更改規定中的一些資源,可以這樣做。
當您的程式需要特定於語言環境的對象時,它使用 getBundle 方法裝入 ResourceBundle 類:
ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale);
第一個參數指定包含有疑問對象的資源束的家族名。第二個參數指定了期望的語言環境。getBundle 使用這兩個參數來構造 ResourceBundle 子類的名字,它應按下面的方法裝入。
資源束用不同的尾碼尋找類,根據(1) 期望的語言環境和 (2) 預設的語言環境(基類), 以下面從更低層級(指定較多的)到父類層級(指定較少的)的順序來尋找:
baseclass + "_" + language1 + "_" + country1 + "_" + variant1
baseclass + "_" + language1 + "_" + country1
baseclass + "_" + language1
baseclass
baseclass + "_" + language2 + "_" + country2 + "_" + variant2
baseclass + "_" + language2 + "_" + country2
baseclass + "_" + language2
尋找的結果是一個類,但是那個類可能由磁碟上的特性檔案支援。如果尋找失敗,getBundle() 拋出 MissingResourceException 異常。
基類必須 完全合格(例如,myPackage.MyResources, 而不僅僅是 MyResources)。 它必須是您的代碼可執行檔;它不能是對調用 ResourceBundle.getBundle 的包私人的類。
注意:ResourceBundle 被內部用於訪問 NumberFormats、Collation 等。尋找策略是相同的。
資源束包含鍵/值對。鍵用於唯一地識別資源束中特定於語言環境的對象。下面是一個包含鍵/值對的 ListResourceBundle 的例子:
class MyResource extends ListResourceBundle { public Object[][] getContents() { return contents; } static final Object[][] contents = { // LOCALIZE THIS {"OkKey", "OK"}, {"CancelKey", "Cancel"}, // END OF MATERIAL TO LOCALIZE }; }
鍵總是 String。 在這個例子中,鍵是 OkKey 和 CancelKey。 在上面的例子中,值也是 String--OK 和 Cancel--但是它們不是一定如此。值可以是任何類型的對象。
使用適當的擷取方法從資源束中擷取一個對象。因為 OkKey 和 CancelKey 都是字串,可用 getString 方法檢索它們:
button1 = new Button(myResourceBundle.getString("OkKey")); button2 = new Button(myResourceBundle.getString("CancelKey"));
擷取方法都要求把鍵作為一個參數,並且如果找到的話就返回這個對象。如果對象未找到,擷取方法拋出 MissingResourceException 異常。
除了 getString,資源束支援擷取不同類型對象的其它方法,例如 getStringArray。如果沒有任何對象匹配這些方法,可以使用 getObject,並把結果映射成適當的類型。例如:
int[] myIntegers = (int[]) myResources.getObject("intList");
注意:應該一直提供沒有尾碼的基類。 如果要求的語言環境不存在,這將是類的 "最後選擇"。例如,下面一個類 MyResources。它碰巧包含 US 字串,所以我們不必用顯式的 MyResource_en 或 MyResource_en_US。
JDK 提供了 ResourceBundle 的兩個子類: ListResourceBundle 和 PropertyResourceBundle , 它們提供了非常簡單的建立資源的方法。 (一旦序列化完全被整合,將提供另一個方法。) 如在先前的例子中所見到的,ListResourceBundle 把它的資源作為鍵/值對管理。 PropertyResourceBundle 使用特性檔案管理它的資源。
如果 ListResourceBundle 或 PropertyResourceBundle 不符合您的需求,您可寫自己的 ResourceBundle 子類。您寫的子類必須覆蓋兩個方法:handleGetObject 和 getKeys()。
下面是 ResourceBundle 子類管理少數資源的例子(對於更大的資源,應使用 Hashtable)。注意,如果未找到鍵,handleGetObject 必須返回 null。注意,如果一個“父類層級的”ResourceBundle 處理有同一值( 見下面的 uk ) 的同一鍵,您不必提供任何值。
例子:
abstract class MyResources extends ResourceBundle { public Object handleGetObject(String key) { if (key.equals("okKey")) return "Ok"; if (key.equals("cancelKey")) return "Cancel"; return null; } } abstract class MyResources_de extends MyResources { public Object handleGetObject(String key) { if (key.equals("okKey")) return "Gut"; if (key.equals("cancelKey")) return "Vernichten"; return null; } } abstract class MyResources_uk extends MyResources { public Object handleGetObject(String key) { // don't need okKey, since parent level handles it. if (key.equals("cancelKey")) return "Dispose"; return null; } }
不必限制自己使用單個系列的 ResourceBundle。例如,可以有一個用於出錯資訊的束集合,ExceptionResources (ExceptionResources_fr, ExceptionResources_de, ...) , 以及一個用於小工具的束集合, WidgetResource (WidgetResources_fr, WidgetResources_de, ...); 按您的需要斷開資源。
 
參見:
ListResourceBundle, PropertyResourceBundle, MissingResourceException
變數索引
parent
當父類束不包含特定資源時,可通過 getObject 查閱它。
構造子索引
ResourceBundle()
方法索引
getBundle(String)
擷取恰當的資源束子類。
getBundle(String, Locale)
擷取恰當的資源束子類。
getKeys()
返回鍵的枚舉。
getObject(String)
從資源束擷取一個對象。
getString(String)
從資源束擷取一個對象。
getStringArray(String)
從資源束擷取一個對象。
handleGetObject(String)
從資源束擷取一個對象。
setParent(ResourceBundle)
設定該束的父類束。
變數
parent
protected ResourceBundle parent
當父類束不包含特定的資源時,可通過 getObject 查閱它。
 
構造子
ResourceBundle
public ResourceBundle()
方法
getString
public final String getString(String key) throws MissingResourceException
從資源束擷取一個對象。
儲存映射的便捷方法。
 
參數:
key - 參見類描述。
getStringArray
public final String[] getStringArray(String key) throws MissingResourceException
從資源束擷取一個對象。
儲存映射的便捷方法。
 
參數:
key - 參見類描述。
getObject
public final Object getObject(String key) throws MissingResourceException
從資源束擷取一個對象。
 
參數:
key - 參見類描述。
getBundle
public static final ResourceBundle getBundle(String baseName) throws MissingResourceException
擷取適當的資源束子類。
 
參數:
baseName - 參見類描述。
getBundle
public static final ResourceBundle getBundle(String baseName, Locale locale)
擷取適當的資源束子類。
 
參數:
baseName - 參見類描述。
locale - 參見類描述。
setParent
protected void setParent(ResourceBundle parent)
設定該束的父類束。當父類束不包含特定的資源時,可通過 getObject 搜尋它。
 
參數:
parent - 該束的父類束。
handleGetObject
protected abstract Object handleGetObject(String key) throws MissingResourceException
從資源束擷取一個對象。 注意:子類必須覆蓋。
 
參數:
key - 參見類描述。
getKeys
public abstract Enumeration getKeys()
返回鍵的枚舉。 注意:子類必須覆蓋。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.