語言

ResourceBundle 類別

定義

資源包包含特定區域的物件。

[Android.Runtime.Register("java/util/ResourceBundle", DoNotGenerateAcw=true)]
public abstract class ResourceBundle : Java.Lang.Object
[<Android.Runtime.Register("java/util/ResourceBundle", DoNotGenerateAcw=true)>]
type ResourceBundle = class
    inherit Object
繼承
ResourceBundle
衍生
屬性

備註

資源包包含特定區域的物件。 當你的程式需要特定區域資源時, String 例如,程式可以從適合當前使用者所在位置的資源包載入該資源。 透過這種方式,你可以撰寫大致獨立於使用者所在位置的程式程式碼,隔離大部分甚至全部資源包中特定區域的資訊。

這讓你能寫出以下<程式:UL><LI> 可以輕鬆本地化或翻譯成不同語言,<>LI 同時處理多個區域<>,LI 也能輕鬆修改以支援更多區域 </UL>

資源組合屬於成員擁有共同基底名稱,但名稱中也包含額外組件以識別其位置的族群。 例如,一個資源組合的基底名稱可能是「MyResources」。 家族應該有一個預設的資源組合包,名稱與其家族相同——「MyResources」——若特定地點不支援,該組合將作為最後的資源組合使用。 這個家族可以根據需要提供多位地區特定的成員,例如一位名為「MyResources_de」的德國成員。

每個資源組合包包含相同的物品,但這些物品已根據該資源包所代表的地點進行翻譯。 例如,「MyResources」和「MyResources_de」都可能在取消操作的按鈕上使用 String 這個符號。 在「MyResources」中可能 String 包含「Cancel」,而在「MyResources_de」中可能包含「Abbrechen」。

如果不同國家有不同的資源,你可以做專門化:例如「MyResources_de_CH」包含瑞士(CH)德語(de)的物件。 如果你只想修改專精中的部分資源,也可以這麼做。

當你的程式需要一個特定於區域的物件時,它會用 ResourceBundle#getBundle(java.lang.String, java.util.Locale) getBundleblockquote 的方法載入該<類別>

ResourceBundle myResources =
                 ResourceBundle.getBundle("MyResources", currentLocale);

</區塊引用>

資源組合包含鍵值對。 這些鍵鍵唯一地標示套件中特定於當地的物件。 這裡有一個包含兩個鍵值對的 a ListResourceBundle 範例: <blockquote>

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
                   };
                }
            }

</blockquote> 鍵總是 Strings。 在這個例子中,鍵是「OkKey」和「CancelKey」。 在上述範例中,值也是 Strings——「OK」和「Cancel」——但不一定非得是。 這些值可以是任何類型的物件。

你是用適當的 getter 方法從資源包中取得物件。 因為「OkKey」和「CancelKey」都是字串,你會用 getString 來取得它們: <blockquote>

button1 = new Button(myResources.getString("OkKey"));
            button2 = new Button(myResources.getString("CancelKey"));

</blockquote> 所有 getter 方法都要求將金鑰作為參數,並在找到時回傳物件。 若找不到該物件,getter 方法會拋出一個 MissingResourceException

此外 getStringResourceBundle 也提供了取得字串陣列的方法, getStringArray以及一種用於其他類型物件的通用 getObject 方法。 使用 getObject時,你必須將結果鑄造成適當的類型。 例如: <blockquote>

int[] myIntegers = (int[]) myResources.getObject("intList");

</區塊引用>

Java 平台提供了兩個子ResourceBundle類別 和 ListResourceBundlePropertyResourceBundle,提供一種相當簡單的資源創建方式。 如你在前面範例中簡短看到的,它 ListResourceBundle 以鍵值對清單來管理資源。 PropertyResourceBundle 使用屬性檔案來管理其資源。

如果ListResourceBundlePropertyResourceBundle不適合你的需求,你可以自己寫ResourceBundle子職業。 你的子類別必須覆蓋兩個方法: handleGetObjectgetKeys()

若子 ResourceBundle 類別同時被多個執行緒使用,該子類別的實作必須是執行緒安全的。 此類別中非抽象方法的預設實作,以及直接已知具體子類別 ListResourceBundlePropertyResourceBundle 的方法,皆為執行緒安全。

<h3>ResourceBundle.Control</h3>

ResourceBundle.Control類別提供執行工廠方法(取一個getBundle實例)所需的資訊,以執行組合載入過程ResourceBundle.Control。 你可以實作自己的子類別,以啟用非標準的資源包格式、改變搜尋策略,或定義快取參數。 詳情請參閱類別描述及 #getBundle(String, Locale, ClassLoader, Control) getBundle 工廠方法。

<h3>快取管理</h3>

getBundle 工廠方法建立的資源包實例預設為快取,且工廠方法若已快取,會多次回傳相同的資源包實例。 getBundle 用戶端可以清除快取、使用存活時間值管理快取資源組合實例的存續時間,或指定不快取資源組合實例。 詳情請參閱 #getBundle(String, Locale, ClassLoader, Control) <程式碼 getBundle>/code< factory 方法的>描述, , #clearCache(ClassLoader) clearCacheControl#getTimeToLive(String, Locale) ResourceBundle.Control.getTimeToLiveControl#needsReload(String, Locale, String, ClassLoader, ResourceBundle, long) ResourceBundle.Control.needsReload

<h3>範例</h3>

以下是一個非常簡單的子類別範例,該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&lt;String&gt; getKeys() {
                    return Collections.enumeration(keySet());
                }

                // Overrides handleKeySet() so that the getKeys() implementation
                // can rely on the keySet() value.
                protected Set&lt;String&gt; handleKeySet() {
                    return new HashSet&lt;String&gt;(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&lt;String&gt; handleKeySet() {
                    return new HashSet&lt;String&gt;(Arrays.asList("cancelKey"));
                }
            }

</blockquote> 你不必侷限於只使用單一族 ResourceBundle的 s。 例如,你可以有一組用於例外訊息的套件( ExceptionResourcesExceptionResources_frExceptionResources_de , ...),以及一組用於小工具的套件(WidgetResourceWidgetResources_frWidgetResources_de...);可以隨你喜歡地拆分資源。

在 1.1 版本中加入。

java.util.ResourceBundleJava 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

建構函式

名稱 Description
ResourceBundle()

唯一的製造者。

ResourceBundle(IntPtr, JniHandleOwnership)

用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。

屬性

名稱 Description
BaseBundleName

若已知 null ,則回傳此組合的基底名稱;若未知則回傳。

Class

回傳此 Object的執行時類別。

(繼承來源 Object)
Handle

底層 Android 實例的帳號。

(繼承來源 Object)
JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

資源包包含特定區域的物件。

(繼承來源 JavaObject)
JniPeerMembers

資源包包含特定區域的物件。

Keys

回傳此 ResourceBundle中所包含資源的名稱。

Locale

回傳此資源包的位置。

Parent

這個叢集的父叢。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
ThresholdClass

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

ThresholdType

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

方法

名稱 Description
ClearCache()

移除所有已透過呼叫者類別載入器載入的快取資源包。

ClearCache(ClassLoader)

移除所有由該類別載入器載入的資源包。

Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

資源包包含特定區域的物件。

(繼承來源 JavaObject)
ContainsKey(String)

判斷給定 key 的是否包含於此 ResourceBundle 叢或其父叢中。

Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

資源包包含特定區域的物件。

(繼承來源 JavaObject)
Equals(Object)

資源包包含特定區域的物件。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
GetBundle(String, Locale, ClassLoader, ResourceBundle+Control)

取得資源包,使用指定的基底名稱、預設位置和呼叫者的類別載入器。

GetBundle(String, Locale, ClassLoader)

使用指定的基底名稱、位置和類別載入器取得資源包。

GetBundle(String, Locale, ResourceBundle+Control)

取得資源包,使用指定的基底名稱、預設位置和呼叫者的類別載入器。

GetBundle(String, Locale)

取得一個資源包,使用指定的基底名稱和區域,以及呼叫者的類別載入器。

GetBundle(String, ResourceBundle+Control)

取得資源包,使用指定的基底名稱、預設位置和呼叫者的類別載入器。

GetBundle(String)

取得資源包,使用指定的基底名稱、預設位置和呼叫者的類別載入器。

GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
GetObject(String)

從這個資源包或其父節點取得該金鑰的物件。

GetString(String)

從這個資源包或其父節點取得給定金鑰的字串。

GetStringArray(String)

從這個資源包或其父節點取得該鍵的字串陣列。

HandleGetObject(String)

從這個資源包中取得該金鑰的物件。

HandleKeySet()

回傳 a Set 只包含 <em></em>ResourceBundle的鍵。

JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
KeySet()

回傳此Set包及其父包中所有金鑰的 aResourceBundle

Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetParent(ResourceBundle)

設定該叢的父叢。

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

資源包包含特定區域的物件。

(繼承來源 JavaObject)
ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToString()

回傳物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

(繼承來源 Object)
Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)
Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

(繼承來源 Object)

明確介面實作

名稱 Description
IJavaPeerable.Disposed()

資源包包含特定區域的物件。

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

資源包包含特定區域的物件。

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

資源包包含特定區域的物件。

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

資源包包含特定區域的物件。

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

資源包包含特定區域的物件。

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

資源包包含特定區域的物件。

(繼承來源 JavaObject)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時間檢查的類型轉換。

JavaCast<TResult>(IJavaObject)

資源包包含特定區域的物件。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於