Jsf 通过单击按钮更改语言

Jsf 通过单击按钮更改语言,jsf,internationalization,richfaces,Jsf,Internationalization,Richfaces,我有一个JSF/RichFaces设置,我发现了这个。我一步一步地跟着它,但我没能设法得到它 另外:教程中提到了language.jsp,有人能告诉我它是什么吗 或者,如果您认为这不是一个合适的教程,并且有一个更好的教程,请告诉我。教程中的所有步骤都不是真正需要的。 我所做的是: 1.在loging.xhtml中,例如: <f:view locale="#{languageDetails.locale}" > <head> ..... &l

我有一个JSF/RichFaces设置,我发现了这个。我一步一步地跟着它,但我没能设法得到它

另外:教程中提到了language.jsp,有人能告诉我它是什么吗


或者,如果您认为这不是一个合适的教程,并且有一个更好的教程,请告诉我。

教程中的所有步骤都不是真正需要的。
我所做的是:
1.在loging.xhtml中,例如:

    <f:view locale="#{languageDetails.locale}" >
    <head>
    .....
    <f:loadBundle basename="messages.Messages" var="msg1"/>
    .....
<f:view>
     <h:form>
          <h:panelGrid columns="2">
                <h:outputText value="Select Language"></h:outputText>
                <h:selectOneMenu id="dropdown" value="#{languageDetails.locale}">
                      <f:selectItem itemValue="en" itemLabel="English" />
                      <f:selectItem itemValue="es" itemLabel="Spanish" />
                      <f:selectItem itemValue="de" itemLabel="German" />
                </h:selectOneMenu>
          </h:panelGrid>
          <p><h:commandButton id="change" value="Change Language"
           action="#{languageDetails.changeLanguage}" /></p>


      </h:form>
</f:view>


    </body>
    </f:view>
就这些。
希望这能对

语言有所帮助。jsp是一个允许用户选择自己选择的语言环境的网页。在本例中,language.jsp页面没有国际化。从下拉列表中选择语言并单击“更改语言”按钮时,将以所选语言显示下一页(已国际化)。正如在教程中明确提到的,因为f:view标记中的'locale'属性支持EL,所以我们可以包括
在接下来的页面中(UserDetailsForm.jsp和userDetailsSubmitted.jsp)

我需要将其实现为一个按钮,当我单击该按钮时,语言会发生变化。我有两个区域设置(en、cs)。以下是我的解决方案:

1.命令按钮:

<h:form>
    <h:commandButton id="change" value="#{locale.locale}" action="#{locale.changeLanguage}" />
</h:form>

也许这对某人有帮助。

您可以通过bean、controller等中的代码来更改它

FacesContext.getCurrentInstance().getViewRoot().setLocale(Locale.ENGLISH);

如果您使用的是Spring,另一种方法是声明这些bean,并使用参数“locale=xx”调用URL来更改locale:

<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="es" />
</bean>

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

如果您使用的是JSF,您可以使用

FacesContext.getCurrentInstance().getViewRoot().setLocale(Locale.ENGLISH);
但是,有时您需要使用特定用户的注册语言发送一些消息,然后您需要使用该用户

messages.getLocale().setDefault(
            new Locale(comm.getAccount().getLocale()));

康国语。。。应该是语言…我不认为我有更好的,但在某种程度上它是不合适的。应用程序应该自动检测浏览器语言并进行调整。识别URL中的lang属性也是一个不错的特性。也许你应该用谷歌搜索一下具体的问题?基于浏览器的区域设置区分的可能重复是次优的,因为:1)它不是傻瓜式的,并且由于许多原因不一致(不同的浏览器以不同的方式在“Accept Language”标题中提供信息)2)用户可能在同一区域内的不同语言之间切换(例如en_US和es_US)3)所有这一切意味着,用户可以使用特定于浏览器的方式更改区域设置……你应该使用特定于应用程序的方式更改区域设置为什么要使用synchronized?仍在等待回答抱歉@alexander,我已经监督了你的问题。我真的不记得为什么我有同步的方法,我不再在那个应用程序上工作了。显然,这取决于每个开发人员正在使用的当前应用程序,可能需要也可能不需要。但这并不妨碍问题的解决。
FacesContext.getCurrentInstance().getViewRoot().setLocale(Locale.ENGLISH);
messages.getLocale().setDefault(
            new Locale(comm.getAccount().getLocale()));