Изменение языка нажатием кнопки - PullRequest
2 голосов
/ 27 октября 2010

У меня есть настройка JSF / RichFaces, и я нашел этот учебник .Я следовал за этим шаг за шагом, но я не могу получить это.

Также: language.jsp упоминается в учебном пособии, кто-нибудь может сказать мне, что это за точность?дайте мне знать.

Ответы [ 6 ]

6 голосов
/ 28 октября 2010

Все шаги в учебнике на самом деле не нужны.
Что я сделал (и это работает):
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";
      }
}

И это все.
Надеюсь, что это может помочь

2 голосов
/ 21 декабря 2011

Мне нужно было реализовать это как кнопку, которая, когда я нажимаю, изменяет язык. У меня есть 2 локали (en, cs). Вот мое решение:

1.командная кнопка:

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

2. локальный боб:

@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";
  }
}

Может быть, это кому-нибудь пригодится.

1 голос
/ 29 декабря 2012

Вы можете изменить его с помощью этого кода в бине, контроллере и т. Д. *

FacesContext.getCurrentInstance().getViewRoot().setLocale(Locale.ENGLISH);
1 голос
/ 09 января 2011

В руководстве JSF language.jsp - это веб-страница, на которой пользователь может выбрать нужный язык.В этом примере страница language.jsp не интернационализирована.Когда вы выбираете язык из выпадающего списка и нажимаете кнопку «изменить язык», на выбранном языке будут показаны следующие страницы (которые интернационализированы)Как ясно указано в руководстве, поскольку атрибут «locale» в теге f: view поддерживает EL, мы можем включитьна следующих страницах (UserDetailsForm.jsp и userDetailsSubmitted.jsp).

0 голосов
/ 25 октября 2016

если вы используете JSF, вы можете использовать

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

но иногда вам нужно отправлять сообщения конкретным пользователям, используя их языки регистрации, тогда вам нужно это

messages.getLocale().setDefault(
            new Locale(comm.getAccount().getLocale()));
0 голосов
/ 03 декабря 2013

Другой подход Если вы используете Spring , это объявить эти bean-компоненты и вызвать URL с параметром "locale = xx", чтобы изменить локаль:

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