У меня есть приложение, в котором я пытаюсь установить доступность интернационализации.
Это мои лица-config.xml:
<application>
<locale-config>
<default-locale>lt</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
</locale-config>
<resource-bundle>
<base-name>application</base-name>
<var>msg</var>
</resource-bundle>
</application>
У меня есть три файла свойств:
application_lt.properties
application_en.properties
application_de.properties
Класс бобов:
@ManagedBean(name = Beans.LOCALE_BEAN)
@SessionScoped
public class LocaleBean extends BaseBean implements Serializable {
private String lang;
public String getLang() {
return lang;
}
public void setLang(String lang) {
this.lang = lang;
}
}
Класс действий:
@ManagedBean(name = "localeAction")
@SessionScoped
public class LocaleAction extends BaseAction implements Serializable {
public void changeLocale() {
LocaleBean localeBean = getBean(Beans.LOCALE_BEAN);
String language = localeBean.getLang();
FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(language));
}
}
Чтобы изменить локаль, я использую commandLink:
<h:commandLink action="#{localeAction.changeLocale}">
<f:setPropertyActionListener target="#{localeBean.lang}" value="en"/>
English
</h:commandLink>
<h:commandLink action="#{localeAction.changeLocale}">
<f:setPropertyActionListener target="#{localeBean.lang}" value="lt"/>
Lithuanian
</h:commandLink>
Первая проблема:
Я определил, что моя локаль по умолчанию — «lt»: lt. Почему при запуске текстовые значения моего приложения загружаются из application_en.properties, а не из application_lt.properties?
Вторая проблема:
Когда я выполняю действие commandLink, языковой стандарт меняется в зависимости от выбранного языкового стандарта. Но выполнение действия было одним щелчком, второй щелчок по любой другой ссылке приложения также в порядке, и когда я нажимаю на любую ссылку приложения в третий раз, текстовые значения помещаются из application_en.properties. Кажется, что локаль как-то меняется...
Любые идеи?
<f:setPropertyActionListener...
не требуется в JSF 2.0, так как вы можете вызывать методы с аргументами. - person Thorbjørn Ravn Andersen   schedule 04.05.2012