如何基于初始浏览器请求检测应用程序的语言环境,并在整个浏览会话期间使用它,直到用户明确更改语言环境,以及如何在其余会话中强制执行新的语言环境?
如何基于初始浏览器请求检测应用程序的语言环境,并在整个浏览会话期间使用它,直到用户明确更改语言环境,以及如何在其余会话中强制执行新的语言环境?
创建一个会话作用域的托管bean,如下所示:
@ManagedBean
@SessionScoped
public class LocaleManager {
private Locale locale;
@PostConstruct
public void init() {
locale = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
}
public Locale getLocale() {
return locale;
}
public String getLanguage() {
return locale.getLanguage();
}
public void setLanguage(String language) {
locale = new Locale(language);
FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
}
}
为了设置视图的当前区域设置,请将其绑定到主模板的<f:view>
中。
<f:view locale="#{localeManager.locale}">
为了更改它,将其绑定到具有语言选项的<h:selectOneMenu>
上。
<h:form>
<h:selectOneMenu value="#{localeManager.language}" onchange="submit()">
<f:selectItem itemValue="en" itemLabel="English" />
<f:selectItem itemValue="nl" itemLabel="Nederlands" />
<f:selectItem itemValue="es" itemLabel="Español" />
</h:selectOneMenu>
</h:form>
为了提高国际化页面的SEO(否则会被标记为重复内容),还需要将语言与<html>
绑定。<html lang="#{localeManager.language}">