【问题标题】:Changing language by clicking a button通过单击按钮更改语言
【发布时间】:2010-10-27 09:58:54
【问题描述】:

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

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

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

【问题讨论】:

  • Kanguage...应该是语言...
  • 我不认为我有更好的,但在某种程度上它是不合适的。您的应用程序应自动检测浏览器语言并进行调整。在 URL 中识别 lang 属性(即example.com/index.html?lang=de)也是一个不错的功能。也许你应该只用谷歌搜索特定的问题?
  • 基于浏览器的区域设置区别不是最理想的,因为:1) 它不是万无一失的,并且由于许多原因不一致(不同的浏览器以不同的方式在“Accept-Language”标题中提供信息)2)用户可能在同一区域内的不同语言之间切换(例如 en_US 和 es_US)3)这一切意味着您可以任由用户使用浏览器特定的方式来更改区域设置....您应该使用特定于应用程序的方式语言环境切换

标签: jsf internationalization richfaces


【解决方案1】:

本教程中的所有步骤并不是真正需要的。
我所做的(并且有效)是:
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";
      }
}

仅此而已。
希望这可以帮助

【讨论】:

  • 你为什么使用同步?
  • 还在等待答复
  • 对不起@alexander,我监督了你的问题。我真的不记得为什么我有同步方法并且我不再使用该应用程序了。显然,取决于每个开发人员正在开发的当前应用程序,这可能需要或不需要。但它不会干扰问题。
【解决方案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";
  }
}

也许这对某人有帮助。

【讨论】:

    【解决方案3】:

    JSF tutorial 中,lan​​guage.jsp 是一个网页,允许用户选择他们选择的语言环境。在示例中,lan​​guage.jsp 页面未国际化。当您从下拉列表中选择一种语言并单击更改语言按钮时,下一页(已国际化)将以所选语言显示。正如教程中明确提到的,因为 f:view 标记中的 'locale' 属性支持 EL,我们可以包括 在下一页(UserDetailsForm.jsp 和 userDetailsS​​ubmitted.jsp)。

    【讨论】:

      【解决方案4】:

      你可以通过这个代码在bean、控制器等中改变它...

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

      【讨论】:

        【解决方案5】:

        另一种方法如果您使用的是 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>
        

        【讨论】:

          【解决方案6】:

          如果你使用 JSF,你可以使用

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

          但是,有时您需要使用他们的注册语言在特定用户中发送一些消息,然后您需要使用这个

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-07-04
            • 2014-04-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-31
            • 2013-07-12
            相关资源
            最近更新 更多