ResourceBundle 同时从 2 个 Properties 文件中读取
Posted
技术标签:
【中文标题】ResourceBundle 同时从 2 个 Properties 文件中读取【英文标题】:ResourceBundle reads from 2 Properties files at the same time 【发布时间】:2011-12-21 08:52:59 【问题描述】:在我的项目中,我有 2 个 properties files
用于国际化。
我将ResourceBundle
与Locale
参数一起使用,并将属性文件中的密钥存储在一个集合中。不幸的是,在集合中存储了来自两个文件的组合键。我只想要来自单个文件的密钥,具体取决于语言环境。在我的情况下,语言环境是“bg_BG”。
属性文件是:
time_intervals.properties
time_intervals_bg.properties
这就是我阅读它们的方式:
public List<SelectItem> getTimeSpentList()
timeSpentList = new ArrayList<SelectItem>();
FacesContext context = FacesContext.getCurrentInstance();
ResourceBundle bundle = ResourceBundle.getBundle("properties.time_intervals", context.getViewRoot().getLocale());
Enumeration<String> time_interval_keys = bundle.getKeys();
List<String> sortedKeys = new ArrayList<String>();
while(time_interval_keys.hasMoreElements())
String key = time_interval_keys.nextElement();
sortedKeys.add(key);
Collections.sort(sortedKeys, new Comparator<String>()
@Override
public int compare(String o1, String o2)
if (o1.charAt(1) != ' ')
return -1;
else if (o2.charAt(1) != ' ')
return 1;
return o1.compareTo(o2);
);
for (String key : sortedKeys)
timeSpentList.add(new SelectItem(key));
if (timeSpentList == null || timeSpentList.isEmpty())
timeSpentList.add(new SelectItem(""));
return timeSpentList;
return timeSpentList;
这里的问题是,在Enumeration<String> time_interval_keys
中,我在调用bundle.getKeys()
后从两个属性文件中获取组合键,但我只想要其中一个的值。请帮忙。
附:如果对我的解释和代码有任何不清楚的地方,请告诉我。
【问题讨论】:
第二个属性文件的文件名是什么?您将其列为 time_intervals_bg_properties,而不是 time_intervals_bg.properties 我的错,谢谢。 没问题。您的 face-config.xml 中是否有一个条目表明您具有受支持的语言环境要扩展之前的答案,您应该有一组本地化字符串的资源文件,然后是一个单独的数值文件:
time_intervals.properties:
one_hour=1 hour
time_intervals_bg.properties:
one_hour=1 час
time_intervals.numbers.properties:
one_hour=1
从time_intervals
加载要显示的字符串,从time_intervals.numbers
加载相应的数值。
编辑:或者,如果您尝试使用数值来确定要显示的字符串,则在文件中切换键和值,而忘记任何 time_intervals.numbers
文件:
time_intervals.properties:
1=1 hour
time_intervals_bg.properties:
1=1 час
【讨论】:
10x 的补充 :) 非常有帮助!【参考方案2】:您没有正确使用 ResourceBundle 系统。
每个属性文件都应该包含相同的键(或者更准确地说是基本属性文件中声明的键的子集)。当您询问键的值时(或者当您像这样做一样列出键/值时),ResourceBundle 会尝试在最精确的属性文件中找到键,默认为默认属性文件。
如果属性文件中的键不同,则认为这些键是不同的。
【讨论】:
以上是关于ResourceBundle 同时从 2 个 Properties 文件中读取的主要内容,如果未能解决你的问题,请参考以下文章
Java常用类库——国际化程序(Locale,ResourceBundle以及MessageFormat处理动态文本)