У меня есть "нормальная" Java PropertyResourceBundle
, которая основана на стеке .properties
файлов.В некоторых местах было бы гораздо удобнее работать с объектом Properties
на основе правильного переведенного файла .properties
вместо ResourceBundle
.Есть ли удобный способ "привести" ResourceBundle
к Properties
?
Что бы я хотел, это примерно так:
Locale currentLocale = MagicLocaleFactory.getLocale();
ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale);
Properties myProperties = myResources.magicallyProduceAPropertiesObject();
Итак, после слов,myProperties
объект ведет себя так, как если бы он был создан из того же файла .properties
, который был найден ResourceBundle.getBundle()
.
Есть несколько способов сделать это "вручную";например, перебирая набор пар ключ-значение ResourceBundle
и устанавливая их в новый объект Properties
, но я надеялся, что есть лучший или, по крайней мере, более короткий способ сделать это.
Редактировать:
Чтобы ответить на очевидное "но, ПОЧЕМУ?"вопрос, дело в том, что мы модернизируем давно существующую настольную Java-программу для i18n.Программа уже извлекает строки из объекта Properties
, поддерживаемого одним файлом .properties
.Мы заменяем один файл несколькими файлами и «продвигаем» объект Properties
в пакет ресурсов.Проблема, такая как есть, состоит в том, что метод получения ключа для Properties
- это getProperty
, тогда как для ResourceBundle
это getString
или getObject
.Изменить источник Properties
до того, как он обойдёт программу и вытащить строки, очень легко.Изменение фактического вызова метода ... менее просто.Конечно, вы можете в значительной степени искать и заменять это, но затем вместо того, чтобы просто изменить один класс, который загружает свойства, мы должны коснуться, по сути, каждого исходного файла.(Да, в этой статье много текста.) Мы надеялись, что упустили способ использования кратного .properties
ResourceBundle
с резервным механизмом без необходимости перемонтировать все приложение.(Благодарная цитата Гэндальфа: «Надежды никогда не было. Просто надежда дурака».)