IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Changer de langue sur la page de login


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut Changer de langue sur la page de login
    Bonjour à tous,

    J'utilise spring-security dans mon application. Quand je demande la home, ça me fait passer par la page de login. Or je voudrais ajouter trois bouton sur la page de login, pour spécifier la langue d'affichage en français, anglais ou espagnol. Mais du coup, je ne sais pas comment faire ça.

    Plus concrètement, dans firefox, je tape "monappli.com/home", ça m'envoie sur la page de login en français. Là je voudrais cliquer sur le bouton EN qui traduirait la page en anglais, sachant que tous mes textes sont en ressources. Puis je tape mon login/passwrd et ça m’emmène sur la home, si possible dans la langue choisie. Et là je bloque... Je précise que ma question porte exclusivement sur la page de login. Dans le reste de l'appli, je sais faire.

    Merci d'avance.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Bonjour, ton problème n'a rien à voir avec la Spring Security, c'est plutot de l'internationalisation (i18n). ce que tu peux faire c'est que tu crée une méthode retournant un string qui soit ta page home. et tu lui ajoute un PathVariable qui sera varié en FR,EN,ES par exemple. A chaque fois que tu récupères la valeur de ton PathVariable tu l'ajoute au ServletContext ou au model Map comme tu veux, qui est retourné dans ta jsp. Moi ce que je fais d'habitude, je crée une fonction JavaScript, qui va ajouter le PathVariable à l'URI par défaut. Si pour toi c'est bouton, tu peux ajouter cette fonction aux évenments onClick ou onChange peu import ce que tu veux. En plus de cela, je recherche toujours le Locale par défaut du Navigateur(donc si le language de ton Navigateur par défaut est EN, il t'enverra sur ta ressource EN, en premier lieu avant que tu le change et ça peut te permettre de faire pleins de trucs). Avec un petit tour de logique Java Spring MVC, c'est gagné. Ca prend pas beaucoup de ligne en réalité...
    Moi je l'ai fait en Bouton radio, en Checkbox, en Select, avec l'ajout des drapeaux, ça prend la tête mais c'est très simple.
    Bonne chance.

  3. #3
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut
    Heu merci... En fait je n'ai rien compris :-(

    Ce dont j'ai peur, c'est de cliquer sur un drapeau, sur la page de login, et que ça perdre l'adresse de la page initialement demandée.

    Sinon, une fois connecté, j'ai aussi des drapeaux qui m'envoient sur la home avec la bonne langue. En fait, la langue est un des param d'appel dans l'url de ma page, mais certains utilisateurs préfèrent changer, surtout que je ne sais pas utiliser le param de l'url sur le login.. Et ça marche déjà.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ui:repeat value="#{localeBackManager.acceptedLanguages}" var="acceptedLanguage">
    	<pretty:link mappingId="home" id="toHome#{acceptedLanguage}" styleClass="box-choix-langue">
    	<f:param value="#{acceptedLanguage}" />
    	<f:param value="#{siteBackManager.site.visualId}" />#{acceptedLanguage}</pretty:link>
    </ui:repeat>
    Comme tu l'as compris, j'utilise pretty faces, ce qui ne simplifie rien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	<url-mapping id="home">
    		<pattern value="/home/#{lang : prettyUrlManager.urlLangId}/#{siteId : prettyUrlManager.urlSiteId}" />
    		<view-id value="/home.jsf" />
    		<action>#{prettyUrlManager.process}</action>
    	</url-mapping>
    Et dans mes pages, je passe toujours par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	protected void setCurrentLang(String lang) {
     
    		logger.debug("setCurrentLang : {} ", lang);
    		final Locale locale = new Locale(lang);
    		LocaleContextHolder.setLocale(locale);
    		FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    	}
    Mais je n'ai évidement pas accès à ça sur ma page de login... Du coup, ton histoire m'intéresse carrément.

    Et je reconnais que j'ai pas l'habitude de gérer ce point particulier alors je rame.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Je te cache pas ça fait un moment que j'ai pas utilisé pas face, mais l'idée reste la même. Regarde comment je le fait avec Spring MVC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @RequestMapping(value="/home")
    	public String welcome(@RequestParam(value="lang",defaultValue="fr") String lang,HttpServletRequest  request,ModelMap bean){
    		Locale locale=RequestContextUtils.getLocale(request);
    		key.addFirst(locale.getLanguage());
    		bean.addAttribute("countries", key.entryList());
    		bean.addAttribute("value", lang);
    		return "home";
    	}
    Le seul bémole c'est mon key est une implémentation d'un Map perso, permettant d'ajouter un élément au début ou à la fin du Map suivant sa clé. ET dans mon Map j'ai mis la liste de toutes les Locales que j'en ai besoin, avec comme clé le language. Et dans ma page jsp j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	<select name="countries"  onchange="javascript:onSelect(this)">
    		<c:forEach items="${countries}" var="country">
    			<option value="${country.key}">
    				<spring:message code="${country.value}"/>
    			</option>
    		</c:forEach>
    	</select>
    	<img src="./images/${value}.png" width="20" height="14" name="country"/>
    Et ma méthode JavaScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script type="text/javascript">
    	function onSelect(countries){
    		var lang=countries.options[countries.selectedIndex].value;
    		window.location.href="?lang="+lang;
    	}
    </script>
    donc lorsque l'utilisateur selectionne une option du select, ma page d'accueil ne va pas change même si elle appel le paramètre lang en plus. C'est ce paramètre qui va changer le language et change la resource. Si t'as déjà fait du Spring MVC tu peux le transformer facillement en Face.
    Cela ne touche pas ta page de sécurité.

  5. #5
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Par défaut
    Oh la la, ça marche. C'est juste que je ne sais pas pourquoi LOL

    Je demande, par exemple, la home de mon appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    localhost:8080/monapp/home/
    ou même vers l'url suivante, quand on vient directement avec des params :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    localhost:8080/monapp/home/blue/fr/day
    Et Spring-secutiry me redirige vers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://localhost:8080/monapp/login
    Puis, lorsque la connexion est ok, vers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    localhost:8080/monapp/home/
    Du coup, dans mon login.xhtml, j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Choix des langues :
    <a href="#" onclick='window.location.href="?lang=fr"'>fr</a>
    <a href="#" onclick='window.location.href="?lang=en"'>en</a>
    <a href="#" onclick='window.location.href="?lang=sp"'>sp</a>
    A voir si je peux simplifier déjà.

    Mais le fait est que ça marche. Merci donc. Ca va bien vers "login?lang=en", puis vers "home/blue/fr/day" quand on entre.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Ca marche parce que t'as fait une bonne configuration des bean qui te permettent de reloader les resources, ce que j'ai oublié de te signaler c'est juste que dans ma configuration, je rentre dans ma méthode afin de chercher la locale permettant de l'afficher mais cela n'est pas obligatoire, mais ça me permet de faire des forEach et ne pas me prendre la tête pour lister les langage. Donc si tu veux simplifier tu peux passer par la.

Discussions similaires

  1. Changer de langue sur une interface en mode direct
    Par machipot dans le forum NetBeans
    Réponses: 2
    Dernier message: 14/09/2012, 20h01
  2. Réponses: 1
    Dernier message: 14/09/2012, 09h20
  3. Probleme de css sur la page de login
    Par LyonM dans le forum ASP.NET
    Réponses: 3
    Dernier message: 23/11/2011, 16h32
  4. frontpage - changer nom image sur plusieurs pages
    Par webtender dans le forum Autres
    Réponses: 0
    Dernier message: 26/09/2009, 11h26
  5. Utlisation d'autres langues sur des pages ASP.NET 2005
    Par nkonito dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/07/2007, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo