Jsf 2 <;默认区域设置>;似乎不起作用,而是<;支持的区域设置>;正在使用

Jsf 2 <;默认区域设置>;似乎不起作用,而是<;支持的区域设置>;正在使用,jsf-2,localization,Jsf 2,Localization,我想将JSFWeb项目的默认位置设置为英语,所以 我做了以下工作: faces-config.xml <application> <locale-config> <default-locale>en_EN</default-locale> <supported-locale>de_DE</supported-locale> </locale-config>

我想将JSFWeb项目的默认位置设置为英语,所以 我做了以下工作:

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>
我在一个小的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>
并在表单中尝试使用以下按钮:

<p:commandButton id="english" value="English" action="#{languageService.changeLanguage('en')}" immediate="true" />
<p:commandButton id="german" value="Deutsch" action="#{languageService.changeLanguage('de')}" immediate="true" />

但当我使用它们时,什么也没发生

<default-locale>en_EN</default-locale>
使用适当的
消息\u en.properties
文件


如何设置默认语言?faces-config.xml默认区域设置似乎不起作用

仅在客户端未以
接受语言
HTTP请求头的形式提供本地语言环境,或未提供应用程序不支持的本地语言环境时使用
。许多(正常的)客户端实际上设置了
Accept Language
头。使用HTTP流量监视器,您可以看到它们

(屏幕显示:
en-US
是第一个首选项(默认“权重”为1),
en
是第二个首选项,权重为0.8;
nl
是第三个首选项,权重为0.6;
chrome://settings/languages
通过添加/删除/重新排序语言)

如果您想防止这种情况发生,并且出于某些不明确的原因想要强制使用“默认”区域设置,那么您需要显式地将
设置为所需的“默认”区域设置(注意:您实际上覆盖了客户端程序中配置的首选区域设置-webbrowser)

例如:


我还需要知道如何更改我的本地化


在这个特定示例中,您的错误在于调用操作后没有更新视图。您需要向命令按钮添加
update=“@all”
。但还有一个错误:您没有记住后续请求的区域设置。它将再次回到“默认”语言环境。您需要使用此属性设置
。这一点以前已经得到了详细的回答:。

您的浏览器是否将默认区域设置为DE?即使我将浏览器的默认本地设置更改为英语,我的web应用程序也会加载所有德语消息您确定存在en_en区域设置吗?我90%确信使用en_US或en_GB时一切都会正常工作。当然还有重命名属性文件。如果用户在表单中输入一些信息,然后用“英语”或“德语”按钮更改语言,是否有办法保留用户已经输入的信息?
<p:commandButton id="english" value="English" action="#{languageService.changeLanguage('en')}" immediate="true" />
<p:commandButton id="german" value="Deutsch" action="#{languageService.changeLanguage('de')}" immediate="true" />
<default-locale>en_EN</default-locale>
<default-locale>en</default-locale>
<f:view locale="#{languageService.language}">
@Named
@SessionScoped
public class LanguageService implements Serializable {

    private Locale locale;

    @PostConstruct
    public void init() {
        locale = FacesContext.getCurrentInstance().getApplication().getDefaultLocale();
    }

    // ...
}