什么是正确和最终方案?我拼凑了一个解决方案,但不确定是否正确。这个方案运行良好。用户点击英语或法语后,语言会切换。以下是一些代码片段,以便让您了解一些想法。
@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本身的区域设置。这让我感到有点毛骨悚然。这是更改用户区域设置的正确方法吗?