ResourceBundle читает из 2 файлов свойств одновременно - PullRequest
0 голосов
/ 03 ноября 2011

в моем проекте у меня есть 2 properties files, которые используются для интернационализации.Я использую ResourceBundle с параметром 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(), но мне нужны ТОЛЬКО значения из одного из них.Пожалуйста, помогите.

PS Пожалуйста, дайте мне знать, если что-то не понятно с моими объяснениями и с кодом.

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Вы неправильно используете систему ResourceBundle.

Каждый файл свойств должен содержать одинаковые ключи (или, точнее, подмножество ключей, объявленных в файле базовых свойств).Когда вы запрашиваете значение ключа (или когда вы перечисляете ключ / значения, как вы делаете), ResourceBundle пытается найти ключ в наиболее точном файле свойств, по умолчанию это файл свойств по умолчанию.

Если ключи в файлах свойств отличаются, то эти ключи считаются различными.

0 голосов
/ 03 ноября 2011

Чтобы расширить ответ до того, вам нужна одна группа файлов ресурсов для локализованных строк, а затем один отдельный файл для числовых значений:

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.

EDIT : или, если вы пытаетесь использовать числовое значение, чтобы определить, какую строку отображать, затем переключитесьключи и значения в ваших файлах, и забудьте о любом time_intervals.numbers файле:

time_intervals.properties:
    1=1 hour

time_intervals_bg.properties:
    1=1 час
...