Пользовательский ResourceBundle в ADF только с одним классом

Из-за требований моего проекта я реализовал собственный класс 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() в своих конструкторах, не более того. Однако это противоречит цели не изменять проект при добавлении нового языка.

Мой вопрос:

Как я могу обойти это и иметь только ОДИН класс пакета ресурсов?

Есть ли способ добиться того, чего я хочу, без необходимости изменять проект при добавлении нового языка?


person hoangbv15    schedule 07.03.2013    source источник


Ответы (1)


Не расширяйте свой класс из класса ResouceBundle и не реализуйте свою собственную структуру локализации/интернационализации, тогда вы будете иметь полный контроль над своим подходом к проектированию.

person Peddi    schedule 09.03.2013
comment
Привет, добро пожаловать в Stack Overflow! Спасибо за ваш ответ, однако он немного незакончен. Можете ли вы привести примеры, может быть, код с пояснениями? Дополнительные сведения см. в разделе как ответить. - person Jesse; 09.03.2013