ResourceBundle同时从2个属性文件中读取

时间:2011-11-03 16:46:16

标签: java java-ee properties-file

在我的项目中,我有2 properties files用于国际化。 我将ResourceBundleLocale参数一起使用,并将属性文件中的键存储在集合中。不幸的是,在集合中存储了来自两个文件的组合键。我只想根据语言环境从单个文件中获取密钥。就我而言,Locale是“bg_BG”。 属性文件是:

time_intervals.properties

enter image description here

time_intervals_bg.properties

enter image description here

这就是我读它们的方式:

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。如果我的解释和代码有任何不清楚的地方,请告诉我。

2 个答案:

答案 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