use*_*812 9 localization jsf-2
我想将我的jsf web项目的默认位置设置为英语,所以我做了以下内容:
faces-config.xml中
<application>
<locale-config>
<default-locale>en_EN</default-locale>
<supported-locale>de_DE</supported-locale>
</locale-config>
<resource-bundle>
<base-name>de.hof.tschuwwa.resources.messages</base-name>
<var>msg</var>
</resource-bundle>
</application>
Run Code Online (Sandbox Code Playgroud)
我在我的src文件夹中有一个包,在de.hof.tschuwwa.resources该包内有两个属性文件:
messages_de_DE.properties
messages_en_EN.properties
Run Code Online (Sandbox Code Playgroud)
我在一个小的xhtml文件中测试它:
<h:body>
<ui:composition template="/templates/master.xhtml">
<ui:define name="header">
<h:form>
<h:commandButton action="#{navigationService.toLogin}" value="#{msg['login']}" />
<h:commandButton action="#{navigationService.toRegister}" value="#{msg['register']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
Run Code Online (Sandbox Code Playgroud)
当我开始我的应用程序时,它显示德国值而不是英语值.我希望默认语言是英语.
如何设置我的默认语言?faces-config.xml默认语言环境似乎不起作用.
此外,我需要知道如何改变我的本地化.我写了这个小服务:
@Named
@SessionScoped
public class LanguageService implements Serializable {
private static final long serialVersionUID = 1L;
public void changeLanguage(String language) {
FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(language));
}
}
Run Code Online (Sandbox Code Playgroud)
并尝试使用表单中的以下按钮:
<p:commandButton id="english" value="English" action="#{languageService.changeLanguage('en')}" immediate="true" />
<p:commandButton id="german" value="Deutsch" action="#{languageService.changeLanguage('de')}" immediate="true" />
Run Code Online (Sandbox Code Playgroud)
但是当我使用它们时没有任何反应.
Bal*_*usC 29
<default-locale>en_EN</default-locale>
Run Code Online (Sandbox Code Playgroud)
首先,您在区域设置标识符中存在错误en_EN.前两个小写字符代表ISO 693-1语言代码.它是可选的,仅在国家/地区代码存在时才需要.最后两个大写字符代表ISO 3166-1 Alpha-2国家/地区代码.它是可选的,通常仅用于区分国家特定的语言方言,如美式英语(en_US)和英式英语(en_GB).没有像"英格兰"这样的国家,所以en_EN绝对无效.你很可能想要使用en或者也许en_US在这里.
因此,如此
<default-locale>en</default-locale>
Run Code Online (Sandbox Code Playgroud)
用适当的messages_en.properties文件.
如何设置我的默认语言?faces-config.xml默认语言环境似乎不起作用.
在<default-locale>仅用于当客户端没有在风味本身提供的区域设置Accept-Language的HTTP请求报头,或提供的一个如在definied未由应用程序所支持<supported-locale>.很多(理智的)客户端实际上设置了Accept-Language标题.使用HTTP流量监视器,您可以看到它们.

(屏幕显示:en-US是第一个偏好(默认"权重"为1),en第二个偏好的"权重"为0.8,nl第三个偏好的"权重"为0.6;在Chrome中你可以chrome://settings/languages通过添加/删除/重新排序语言来改变这一点).
如果您想要阻止这种情况并希望强制使用"默认"语言环境以获得某些不明原因,那么您需要显式设置<f:view locale>为所需的"默认"语言环境(注意:您实际上是按照配置覆盖了客户端的首选语言环境)在它的程序 - webbrowser).
例如:
<f:view locale="#{languageService.language}">
Run Code Online (Sandbox Code Playgroud)
(只需放入主模板,包装<h:head>和<h:body>)
在您的支持bean中使用此新属性:
@Named
@SessionScoped
public class LanguageService implements Serializable {
private Locale locale;
@PostConstruct
public void init() {
locale = FacesContext.getCurrentInstance().getApplication().getDefaultLocale();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
此外,我需要知道如何改变我的本地化.
您在此特定示例中的错误是您在调用操作后未更新视图.您需要添加update="@all"到命令按钮.但是还有另一个错误:你不记得后续请求的语言环境.它会再次回到"默认"区域设置.您需要<f:view locale>使用此属性进行设置.这在以前已经详细解答过:JSF中的本地化,如何记住每个会话的选定区域设置而不是每个请求/视图.
| 归档时间: |
|
| 查看次数: |
16890 次 |
| 最近记录: |