我有一個基於一堆.properties
文件的「普通」Java PropertyResourceBundle
。在一些地方,根據正確翻譯的.properties
文件而不是ResourceBundle
,在Properties
對象上操作會更方便。有沒有一種簡單的方法將ResourceBundle
「投」到Properties
?從ResourceBundle生成一個Properties對象?
我想什麼了是這樣的:
Locale currentLocale = MagicLocaleFactory.getLocale();
ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale);
Properties myProperties = myResources.magicallyProduceAPropertiesObject();
所以後記中,myProperties
對象的行爲就好像它已經從同一.properties
文件實例化ResourceBundle.getBundle()
去發現。
有幾種方法可以「手工」做到這一點;例如,通過遍歷ResourceBundle
的一組鍵值對並將它們安裝到新的Properties
對象中,但我希望有更好的或者更短的方法來實現它。
編輯:
回答顯而易見的「但是,爲什麼?問題是這樣的:我們正在改造一個長期存在的用於i18n的桌面Java程序。該程序已經從一個.properties
文件支持的Properties
對象中提取字符串。我們用多個文件替換單個文件並將Properties
對象「提升」爲資源包。問題就是,在Properties
上獲得密鑰的方法是getProperty
,而對於ResourceBundle
則是getString
或getObject
。在程序傳遞並取出字符串之前,更改Properties
對象的來源非常簡單。改變實際的方法調用並不容易。當然,你幾乎可以搜索並替換它,但是不必僅僅改變一個加載屬性的類,我們必須觸及每一個源文件。 (是的,這個東西有很多文字。)我們希望我們錯過了一個方法來使用ResourceBundle
的多重.properties
與回退機制,而不必重新連線整個應用程序。 (Gandalous Gandalf引用:「從來沒有太多的希望,只是一個傻瓜的希望。」)