Из-за требований моего проекта я реализовал собственный класс java ResouceBundle для получения данных ресурсов из каталога, настроенного в web.xml. Я намерен иметь в проекте только один класс ResourceBundle, и любой ресурс и язык, добавленные в будущем, можно будет сделать без повторного развертывания всего проекта. Например: MainBundle.java
public MainBundle() {
super();
this.locale = ADFContext.getCurrent().getLocale();
readBundle();
}
public MainBundle(Locale locale) {
super();
this.locale = locale;
readBundle();
}
private void readBundle() {
bundleFileName = baseBundleName + "_" + locale.toString();
// do some file reading here
}
Я реализовал класс ResourceBundle для загрузки правильного языка в соответствии с текущей локалью. Однако, если у меня есть только один класс ResourceBundle, когда пользователь входит в систему, локали всех других одновременных пользователей меняются на локали этого пользователя, таким образом меняя их языки. Например: английский пользователь использует мой веб-сайт. Французский пользователь входит в систему, и английский пользователь внезапно вынужден использовать веб-сайт на французском языке.
Чтобы решить эту проблему, мне пришлось создать класс для каждой локали, который расширяет класс MainBundle, например MainBundle_en_US, MainBundle_fr и т. д. Эти классы просто содержат вызовы super() в своих конструкторах, не более того. Однако это противоречит цели не изменять проект при добавлении нового языка.
Мой вопрос:
Как я могу обойти это и иметь только ОДИН класс пакета ресурсов?
Есть ли способ добиться того, чего я хочу, без необходимости изменять проект при добавлении нового языка?