2010-10-27 6 views
2

J'ai une configuration JSF/RichFaces, et j'ai trouvé ceci tutorial. Je l'ai suivi pas à pas, mais je n'arrive pas à l'obtenir.Changer la langue en cliquant sur un bouton

En outre: language.jsp est mentionné dans le tutoriel, quelqu'un peut-il me dire ce qu'est exactement?

Ou si vous pensez que ce n'est pas un didacticiel approprié et en avoir un meilleur, s'il vous plaît, faites le moi savoir.

+0

... Kanguage devrait être la langue ... –

+0

Je ne pense pas avoir mieux , mais dans une certaine mesure, ce n'est pas approprié. Votre application devrait automatiquement détecter la langue du navigateur et s'y adapter. La reconnaissance de l'attribut lang dans les URL (c'est-à-dire http://example.com/index.html?lang=de) serait également intéressante.Peut-être que vous devriez juste Google autour du problème spécifique? –

+2

duplication possible de [Changement de paramètres régionaux dynamiques dans une application JSF?] (Http://stackoverflow.com/questions/3858868/dynamic-locale-switching-in-a-jsf-app) – Bozho

Répondre

6

Toutes les étapes du tutoriel ne sont pas vraiment nécessaires.
Ce que je l'ai fait (et ça marche) est:
1. Dans loging.xhtm, par exemple:

<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.In code source java j'ai également fait quelques changements:

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

Et c'est tout.
Espérons que cela pourrait aider

+0

Pourquoi utilisez-vous synchronisé? – alexander

+0

Toujours en attente d'une réponse – alexander

+0

Désolé @alexander, j'avais supervisé votre question. Je ne me souviens pas vraiment pourquoi j'ai les méthodes synchronisées et je ne travaille plus sur cette application. Évidemment, selon l'application actuelle sur laquelle travaille chaque développeur, cela peut être nécessaire ou non. Mais cela n'interfère pas avec la question. –

1

Dans le JSF tutorial, language.jsp est une page Web qui permet à l'utilisateur de sélectionner les paramètres régionaux de son choix. Dans l'exemple, la page language.jsp n'est pas internationalisée. Lorsque vous sélectionnez une langue dans le menu déroulant et que vous cliquez sur le bouton Modifier la langue, les pages suivantes (qui sont internationalisées) s'affichent dans la langue sélectionnée. Comme mentionné clairement dans le tutoriel, puisque l'attribut 'locale' de la balise f: view supporte EL, nous pouvons inclure < f: view locale = "# {languageDetails.locale}" > dans les pages suivantes (UserDetailsForm.jsp et userDetailsSubmitted.jsp).

2

Je devais l'implémenter comme un bouton, et quand je clique dessus, la langue change. J'ai 2 locales (en, cs). Voici ma solution:

bouton 1.command:

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

haricot 2.locale:

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

Peut-être que cela pourrait être utile pour quelqu'un.

1

Vous pouvez le changer par ce code dans le haricot, le contrôleur, etc ...

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

Une autre approche Si vous utilisez Spring, est de déclarer ces haricots et appeler l'URL avec le paramètre « locale = xx » pour modifier les paramètres linguistiques:

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

si vous utilisez JSF, vous pouvez utiliser

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

mais, parfois, vous avez besoin d'envoyer des messages à des utilisateurs spécifiques en utilisant les langues d'enregistrement, alors vous devez à l'utilisateur ce

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