单击按钮更改语言

时间:2010-10-27 09:58:55

标签: jsf internationalization richfaces

我有一个JSF / RichFaces设置,我找到了这个tutorial。我一步一步地跟着它,但我无法得到它。

另外:教程中提到了language.jsp,有人可以告诉我它有什么特别之处吗?

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

6 个答案:

答案 0 :(得分:6)

本教程中的所有步骤都不是真正需要的 我所做的(它的工作原理)是:
1.在 loging.xhtm 中,例如:

    <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>

2.在java源代码中我也做了一些改动:

public class LanguageDetails {

    private static String locale = Locale.getDefault().getDisplayLanguage();

      public void setLocale(String locale1) {
        this.locale = locale1;
      }

      public synchronized String getLocale() {
        return locale;
      }

      public synchronized String changeLanguage() {
        return "changed";
      }
}

就是这样 希望这可以帮助

答案 1 :(得分:2)

我需要将其实现为按钮,当我点击时,语言会发生变化。我有2个语言环境(en,cs)。这是我的解决方案:

1.命令按钮:

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

2.locale bean:

@ManagedBean(name = "locale")
@SessionScoped
public class LocaleBean {

private static String locale = "en";

  public void setLocale(String locale1) {
    LocaleBean.locale = locale1;
  }

  public synchronized String getLocale() {
    return locale;
  }

  public synchronized String changeLanguage() {
    if (!locale.contains("cs")) {
        setLocale("cs");
    } else {
        setLocale("en");
    }
      return "changed";
  }
}

这可能对某人有帮助。

答案 2 :(得分:1)

JSF tutorial中,lan​​guage.jsp是一个网页,允许用户选择自己选择的语言环境。在示例中,lan​​guage.jsp页面未国际化。当您从下拉列表中选择语言并单击更改语言按钮时,下一页(国际化的)将以所选语言显示。正如本教程中明确提到的那样,&#39; locale&#39; f:view中的属性支持我们可以包含的EL &lt; f:view locale =&#34;#{languageDetails.locale}&#34;&gt;在下一页(UserDetailsForm.jsp和userDetailsS​​ubmitted.jsp)中。

答案 3 :(得分:1)

你可以通过bean,controller等中的代码来改变它......

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

答案 4 :(得分:0)

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

<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>

答案 5 :(得分:0)

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

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

但是,有时您需要使用注册语言向特定用户发送一些消息,然后您需要使用此

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