Нет единственного правильного места для размещения файлов ресурсов;Обычно это решение для разработчика приложения.Размещение всех файлов в одном стандартном месте может не иметь смысла во всех архитектурах, поэтому в спецификации не добавляются ненужные ограничения.
На то, как вы должны загружать и ссылаться на пакеты ресурсов, может влиять то, какие платформы вы используете.Например, в приложении JSTL вы можете использовать тег bundle ;в приложении JSF вы можете использовать тег loadBundle .Другие технологии представления будут определять свои собственные механизмы.
В общем ...
ResourceBundle.getBundle
загружает ресурсы из пути к классам, поэтому, если вы хотите использовать каталог,он или один из его родителей должны быть на пути к классу приложения.В WAR пакеты должны находиться в файле JAR в каталоге WEB-INF/lib
или в каталоге WEB-INF/classes
.
Итак, для набора пакетов ...
/WEB-INF/classes/locale/messages.properties
/WEB-INF/classes/locale/messages_fr.properties
/WEB-INF/classes/locale/messages_de.properties
... вы бы загрузили пакет, получив запрос Locale
и вызвав:
ResourceBundle.getBundle("locale.messages", locale);
Неправильно назначить пакет одной статической переменной:
//BUG! this loads the properties file for the server default locale only!
private static ResourceBundle myResources = ResourceBundle.getBundle("messages");
Вы должны получить языковой стандарт пользователя из запроса .Статическое назначение будет уместным только в клиентском приложении (например, в среде IDE).
Обратите внимание, что обычно рекомендуется предоставить корневой messages.properties
базовый файл в качестве запасного варианта для неподдерживаемых локалей.
В качестве общей локализации, подход к использованию исходной строки в качестве ключа был бы приемлемым только в том случае, если ключ был уникальным для пакета.В противном случае это может привести к конфликту в тех случаях, когда существуют идентичные исходные строки, которые были переведены по-разному из-за контекста.