在我的应用程序中,用户应该能够切换区域设置(用于在页面上呈现文本的语言)。大量教程使用 FacesContext.getCurrentInstance().getViewRoot().setLocale()。例如:http ://www.mkyong.com/jsf2/jsf-2-internationalization-example/ 。但是,这在 JSF 2.0 中根本不起作用(它在 1.2 中确实起作用)。语言从不切换。没有错误或任何东西。相同的代码在 JSF 1.2 中运行良好。
什么是正确和确定的方法?我拼凑了一个解决方案,但不确定这是否正确。这工作正常。用户点击英语或法语后,语言切换。这是给你一些想法的代码片段。
@ManagedBean(name = "switcher")
@SessionScoped
public class LanguageSwitcher {
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
public String switchLocale(String lang) {
locale = new Locale(lang);
return FacesContext.getCurrentInstance().getViewRoot().getViewId() +
"?faces-redirect=true";
}
//getLocale() etc. omitted for brevity
}
XHTML:
<f:view locale="#{switcher.locale}">
<h:outputText value="#{msg.greeting}" />
<h:commandLink value="English" action="#{switcher.switchLocale('en')}" />
<h:commandLink value="French" action="#{switcher.switchLocale('fr')}" />
</f:view>
只是为了给你更多信息,这里是配置文件。
<application>
<locale-config>
<supported-locale>en</supported-locale>
<supported-locale>fr</supported-locale>
</locale-config>
<resource-bundle>
<base-name>com.resources.Messages</base-name>
<var>msg</var>
</resource-bundle>
</application>
再一次,这行得通。但是,我没有通过以任何方式调用任何 API 来更改 JSF 本身的语言环境。这让我有些毛骨悚然的感觉。这是更改用户语言环境的正确方法吗?