- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个“普通”Java PropertyResourceBundle
,它基于一堆 .properties
文件。在某些地方,基于正确翻译的 .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
和后备机制的方法,而无需使用重新连接整个应用程序。 (无缘无故的甘道夫引用:“从来没有太大的希望。只是一个傻瓜的希望。”)
最佳答案
没有内置的方法可以做你想做的事,但正如你所说,自己做并不难:基本上具有相同的界面,并将键和值从 bundle 复制到属性很容易。
不过,有一个警告。尽管接口(interface)相似,但实现却不同:资源包具有继承模型,允许返回 foo.properties
中的值。如果 foo_fr_FR.properties
中未定义和foo_fr.properties
。因此,复制所有条目不会获得与从属性文件加载的属性相同的属性。它将获取属性文件的条目及其所有父级的属性。但我想您知道这一点,因为您正在谈论一堆属性文件。
您没有说明为什么您更喜欢 Properties 而不是 ResourceBundle,因此很难给您更好的答案。
另一种解决方案是简单地自己加载属性:
Properties props = new Properties();
properties.load(MyClass.class.getResourceAsStream("MyResources_" + locale + ".properties")
这样,您将仅获取特定属性文件中的条目。
关于java - 从 ResourceBundle 生成 Properties 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6602566/
当我尝试加载属性文件时,我看到以下异常: Caused by: java.util.MissingResourceException: Can't find bundle for base name
jasper Reports是否可以在运行时加载ResourceBundle(对于i18n)? 我想从jrxml文件创建报告(例如c:\reports\report.jrxml) 我的标签位于(c:\
我目前正在使用 resourceBundle 变量来获取 JSF 代码中的文本值,例如像这样: 有什么方法可以将消息键放在一个变量中,并将其作为动态参数提供给资源包?我希望能够做这样的事情: 最
我需要一个正则表达式来匹配 ResourceBundle 的文件名,遵循格式 name_lo_CA_le.properties .它应该只匹配文件名中包含区域设置部分的包,并且名称部分不应有下划线。
我正在设置 ResourceBundle,但得到了与 Oracle 文档不符的奇怪结果。 https://docs.oracle.com/cd/E23095_01/Platform.93/ATGPro
我创建了 jar 文件,该文件作为小程序从 ASP.Net Web 表单应用程序中嵌入并调用。 我使用 ResourceBundle 从属性加载本地化字符串。 我创建了 3 个属性文件: locali
我正在尝试关于 RersourceBundles 的“学习 Java”示例。 我正在使用 Windows 7 和 NetBeans 示例代码为: import java.util.*; public
我的 Android 应用程序依赖于第 3 方代码。此代码使用资源包并将它们放在其 src 目录下名为 resourcebundles 的目录中。然后在他们的代码中,他们这样做: ResourceBu
我有一个文件夹,其中包含一些我想要加载到 ResourceBundle 中的 .properties 文件。在我的代码中,我尝试传递资源文件夹的路径。但是,这不起作用,因为资源位于另一个构建路径中。为
假设我有一些 ResourceBundle 实例: ResourceBundle bundle = getBundle(); ... some more code that does stuf
我创建了以下ResourceBundle在 Java 中,它从正确的 MessegesBundle_en_GB.properties 文件中读取: ResourceBundle labels =
是否可以写回到ResourceBundle?目前我正在使用 ResourceBundle 来存储信息,在运行时使用以下内容读取信息 while(ResourceBundle.getBundle("bu
我正试图掌握 Java 应用程序的内部化,如图所示 here .我不能。我创建了一个扩展 ListResourceBundle 的类,并尝试检索 key 。不过,我一直有异常(exception)。如
背景 我正在使用 Maven 开发 Java Web 应用程序。我已经按照以下路径和格式创建了 ResourceBundle:src/main/resources/i18n/LanguageBundl
这个问题在这里已经有了答案: List all available ResourceBundle Files (1 个回答) 关闭 4 个月前。 我的 Java 应用程序已本地化为多个语言环境。对于
我对属性文件中的德语“变音符号”有疑问。现在我完全明白我必须转义超出 ISO-8859-1 范围的字符,并且我过去为此使用了 native 到 ascii 的转换。 但为什么像“ü”这样的元音变音也搞
我们需要开始将国际化添加到我们的程序中。值得庆幸的是,这还不是全部,只是一小部分,但我希望我们这样做的方式能够扩大到可能涵盖整个项目。问题是,我们的程序是基于插件的,所以并不是所有的字符串都属于同一个
设置 假设我有 2 个字符串文件: Strings_en.properties Strings_fr.properties 假设英语是默认语言,并且所有字符串都存在,而法语滞后并且缺少一些字符串。 期
显然 ResourceBundle 在它找到的文件中需要一个类似于语法的属性文件。 我们有一种情况想要使用整个文件(在我们的例子中是 HTML 文件)作为“值”。这意味着我们没有这样的 key 。好吧
我正在使用 ResourceBundle 和 Locale 来查找属性值。很简单,代码如下所示: public static String getPropertyValue(Locale loca
我是一名优秀的程序员,十分优秀!