Доступ к правильному пакету ресурсов в Spring Framework - PullRequest
0 голосов
/ 24 февраля 2011

Я пытаюсь получить доступ к комплекту ресурсов с помощью Spring Framework (WebFlow). Файл messages.properties и, соответственно, файл messages_ar_AE.properties хранятся в пути к классам, откуда Spring Framework обращается к пакету ресурсов.

Код, вызываемый из файла xhtml с использованием атрибута JSTL resourceBundle.

<myCustom:includedInSetValidator set="5.0, 5.0.1, 5.1" 
                            validationMessage="#{resourceBundle['jboss.version.error']}" />

Но независимо от локали, "#{resourceBundle['jboss.version.error']}" всегда выбирает текст по умолчанию, т.е. с английского;

Как я узнал на некоторых форумах, я получил подсказку, что мне нужно справиться с этим, используя LocaleChangeInterceptor или другие предопределенные классы. После установки Spring Locale по умолчанию будет загружен соответствующий пакет ресурсов, и, следовательно, я решу свою проблему.

Мне нужен способ программного изменения языкового стандарта Spring Framework для установки языкового стандарта. Как мне достичь этого программно?

Спасибо.

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Достигнуто решение проблемы.

В продолжение моего вопроса, когда Spring Framework встречает выражение JSTL, такое как "#{resourceBundle['jboss.version.error']}", по умолчанию он ищет файл message.properties в пути к классам, если пакет ресурсов не определен явно.

При попытке получить правильный пакет ресурсов платформа смотрит на локаль, для которой она установлена. Поскольку язык Spring Framework не был задан в моем случае, он не доставлял мне ожидаемый пакет ресурсов. Из доступных опций я выбрал Spring LocaleResolver

Я изменил существующий JSF Custom ViewHandler в своем приложении, где я добавил код для установки языкового стандарта Spring Framework.

public Locale calculateLocale(FacesContext arg0) {

HttpServletRequest request  = (HttpServletRequest)arg0.getExternalContext().getRequest();
        HttpServletResponse response  = (HttpServletResponse)arg0.getExternalContext().getResponse();

LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);

localeResolver.setLocale(request, response, **setYourLocaleHere**);

}

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

Cannot change HTTP accept header – use a different locale resolution strategy

См. Невозможно изменить ошибку HTTP заголовка подтверждения

Чтобы преодолеть это, нужно включить

<bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="en" />
    </bean>

в конфигурационном файле Spring.

И теперь задан желаемый язык Spring Framework.

Возможно, может быть лучшее решение, чем то, что я сделал. Можно также предложить их решения, если таковые имеются.

Спасибо.

0 голосов
/ 24 февраля 2011

Вы можете сделать это несколькими способами, как указано здесь в документе.

...