新手:帮助用JSF切换语言环境
嗨,我希望有人可以提供帮助,我在浏览器之间切换时特别是en_GB到en_US和en_US到en_GB,但是所有其他两个字符区域设置都正常切换。
faces_config.xml片段
<default-locale>en_gb</default-locale>
<supported-locale>en_us</supported-locale>
<supported-locale>en_gb</supported-locale>
<supported-locale>cy</supported-locale>
<supported-locale>es</supported-locale>
<supported-locale>fr</supported-locale>
网页代码段
<f:view locale="#{localeBean.locale}">
<h:body>
<h:form>
<h:selectOneMenu value="#{localeBean.language}" onchange="submit()">
<f:selectItem itemValue="en_GB" itemLabel="English (British)" />
<f:selectItem itemValue="en_US" itemLabel="English (American)" />
<f:selectItem itemValue="cy" itemLabel="Cymraeg (British)" />
<f:selectItem itemValue="es" itemLabel="Español (España)" />
<f:selectItem itemValue="fr" itemLabel="Français (France)" />
</h:selectOneMenu>
</h:form>
</h:body
</f:view>
Java bean
公共类LocaleBean {
private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
public Locale getLocale() {
return locale;
}
public String getLanguage() {
return locale.getLanguage();
}
public void setLanguage(String language) {
if ( language.equals("en_GB") ) {
locale = new Locale("en","GB");
}
else if ( language.equals("en_US") ) {
locale = new Locale("en","US");
}
else {
locale = new Locale(language);
}
FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}
}
我的问题是当我将语言环境更改为en_US或en_GB时,selectItem默认为en_GB itemLablel,所以除非我先选择fr,es或cy,否则我无法选择en_US或en_GB语言环境。
任何帮助表示赞赏
答案 0 :(得分:0)
它发生的原因应该是显而易见的:
public String getLanguage() {
return locale.getLanguage();
}
这将始终仅返回语言代码。但您的英文标识符分别为“en_GB”和“en_US”,因此它始终选择第一个项。
我相信现在,修复很明显,不是吗?我推荐的修改是:
public String getLanguage() {
return locale.toString();
}
即使你只在其他地方使用语言代码......