2012-07-02 75 views
1

如何獲取系統的當前語言並將其用於ResourceBundle?獲取系統語言並使用ResourceBundle

假設客戶端的機器正在以日語運行,那麼我希望我的應用程序切換到日語,如果該語言文件不可用,它應該有一個備用解決方案。

我知道我可以使用ResourceBundle,但我將如何完成上述設置?

ResourceBundle bundle = ResourceBundle.getBundle("lang", new Locale("jp", "JP")); 

回答

1

資源包會自動嘗試系統當前的語言,然後回落到默認值,如果不存在(ResourceBundle.getBundle("lang")將按照以下順序進行搜索,假設該系統語言爲jp_JPlang_jp_JP.properties - >land_jp.properties - >lang.properties)。你可以看看ResourceBundle用來解析名字的過程here

+0

我仍然不太清楚如何設置默認值。所以如果我有'ResourceBundle bundle = ResourceBundle.getBundle(「lang」);'並且找不到系統語言,那麼我該如何設置默認值? –

+0

默認沒有標識符,這只是正常的lang.properties。 – Charles

+0

不錯。謝謝。 –

0

http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/

爲您的產品的每一種語言翻譯,創建一個新的 版本的初始資源包。例如,如果您創建 MyResource來存儲所有英文文本,您將創建一個類似的 命名文件來存儲法文文本。資源包使用命名 約定,該約定區分基本上相同的捆綁包的可能的多個版本 。每個軟件包名稱由一個基本名稱 和一個可選的區域設置標識符組成。在一起,這兩個獨特的部分 標識包中的一個包。

使用上面的示例,法語版本的資源應該是名爲MyResource_fr_FR的 。加拿大法語版應爲 MyResource_fr_CA。

將語言環境名稱附加到該包的基本名稱 將該包的用法鏈接到特定語言環境。 當你問使用ResourceBundle.getBundle(「MyResource」)的 束,所述的getBundle 方法附加默認區域標識符添加到基本名稱和 加載適當的束。如果區域設置爲fr_CA,則調用 ResourceBundle.getBundle(「MyResource」)將加載MyResource_fr_CA 包。