【发布时间】:2011-07-06 20:31:35
【问题描述】:
我有一个基于.properties 文件堆栈的“普通”Java PropertyResourceBundle。在某些地方,基于正确翻译的.properties 文件而不是ResourceBundle 对Properties 对象进行操作会更方便。有没有一种方便的方式将ResourceBundle“转换”为Properties?
我想要的是这样的:
Locale currentLocale = MagicLocaleFactory.getLocale();
ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale);
Properties myProperties = myResources.magicallyProduceAPropertiesObject();
因此,myProperties 对象的行为就好像它是从 ResourceBundle.getBundle() 找到的同一个 .properties 文件中实例化的一样。
有几种方法可以“手动”执行此操作;例如,迭代 ResourceBundle 的一组键值对并将它们安装在新的 Properties 对象中,但我希望有更好的,或者至少更短的方法来做到这一点。
编辑:
回答显而易见的“但是,为什么?”问题是这样的:我们正在为 i18n 改造一个长期存在的桌面 Java 程序。该程序已经从由单个.properties 文件支持的Properties 对象中提取字符串。我们用多个文件替换单个文件并将Properties 对象“提升”为资源包。问题在于,在Properties 上获取密钥的方法是getProperty,而对于ResourceBundle,它是getString 或getObject。在Properties 对象在程序中传递并拉出字符串之前更改它的来源非常容易。更改实际的方法调用...不太容易。当然,您几乎可以搜索和替换它,但是我们不能只更改加载属性的一个类,本质上我们必须触及每个源文件。 (是的,这个东西有很多文字。)我们希望我们错过了一种使用ResourceBundle 的多个.properties 和回退机制而无需重新连接整个应用程序的方法。 (无端的甘道夫引用:“从来没有太多希望。只是一个傻瓜的希望。”)
【问题讨论】:
标签: java internationalization resourcebundle