在我的项目中,我有2 properties files
用于国际化。
我将ResourceBundle
与Locale
参数一起使用,并将属性文件中的键存储在集合中。不幸的是,在集合中存储了来自两个文件的组合键。我只想根据语言环境从单个文件中获取密钥。就我而言,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()
之后从两个属性文件中获得了组合键,但我想从其中一个中获取值。请帮忙。
P.S。如果我的解释和代码有任何不清楚的地方,请告诉我。
答案 0 :(得分:1)
您没有正确使用ResourceBundle系统。
每个Property文件应包含相同的键(或更确切地说是基本属性文件中声明的键的子集)。当您要求键的值时(或者像您一样列出键/值),ResourceBundle会尝试在最精确的属性文件中找到键,默认为默认属性文件。
如果属性文件中的键不同,则认为这些键是不同的。
答案 1 :(得分:0)
要扩展前面的答案,您应该为本地化字符串提供一组资源文件,然后为数值设置一个单独的文件:
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
的相应数值。
编辑:或者,如果您尝试使用数值来确定要显示的字符串,请切换文件中的键和值,并忘记任何{{1}文件:
time_intervals.numbers