SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 191 visiteurs en ce moment

Accueil > Multilinguisme > Navigation multilingue > Création d’un menu langue plat pour SPIP 2.0

Création d’un menu langue plat pour SPIP 2.0

24 juin 2009 – par filnug, kent1 – 29 commentaires

11 votes

Cet article propose un code permettant d’afficher un menu langue. Le menu récupère automatiquement toutes les langues disponibles et les affiche en drapeau sur l’ensemble du site.

Introduction

Cet article propose une solution pour afficher un menu de langues plat pour SPIP 2.0. Cela permet d’afficher sur l’ensemble de son site (page sommaire.html, page rubrique.html, page article.html) un menu affichant toutes les langues disponibles sur le site, sauf celle utilisée sur le moment.
Par exemple, un site a comme langue d’origine « français » et comme langue supplémentaire « English ». Lorsque le visiteur se trouve sur le site en version française, il aura la possibilité de cliquer sur un lien « English » lui permettant de visualiser le site en anglais.
Le code proposé a été réalisé par Kent1 sur le canal IRC de SPIP. Un grand merci pour sa contribution !

Contexte

Cette proposition est valable pour un site web basé sur les traductions d’articles (par le biais du menu « langue et traduction de l’article » ) et non pas par secteurs (les rubriques utiliseront la balise <multi>).

Configuration

  • Dans l’espace privé de SPIP, il faut d’abord penser à configurer correctement la gestion des langues (configuration > gestion des langues) :
    • Dans l’onglet « Langue principale du site », choisir la langue principale (dans mon cas le français),
    • Dans l’onglet « Multilinguisme », choisir les langues nécessaires (il peut y en avoir bien plus de 2 !),
    • Toujours dans l’onglet « Multilinguisme », configurer les options comme suit :
      • Activer le menu de langue sur les articles ? Oui
      • Activer le menu de langue sur les rubriques ? Non
      • Gérer les liens de traduction ? Oui
        Comme indiqué dans le « Contexte » (lire ci-dessus), cela permettra de gérer les rubriques avec une balise <multi> et les articles par le menu « langue et traduction de l’article ».
  • L’autre étape consiste à télécharger et installer le plugin SPIP-Bonux !
  • Autre plugin nécessaire, Le Couteau Suisse. Lorsque le plugin est installé et activé, veillez à activer l’option « forcer langue » !

Page sommaire.html

Voici le code à ajouter, à l’endroit que vous souhaitez voir apparaître le menu langue, pour votre page sommaire.html.

  1. [(#REM) on boucle sur les langues disponibles dans le public grâce à spip-bonux]
  2. [(#SET{langues,[(#CONFIG{langues_multilingue}|explode{','}|serialize)]})]
  3.  
  4. <BOUCLE_langue_possibles(POUR){tableau #GET{langues}}>
  5. [(#ENV{lang}|=={#VALEUR}|non)<a href=" [(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#SELF|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
  6. </BOUCLE_langue_possibles>

Télécharger

D’abord, on récupère la liste des langues disponibles (sauf la langue en cours), et ensuite, on fait un lien vers l’action converser qui pose le cookie de langue et donc change la langue de l’utilisateur. Puis, on créée un lien qui redirige sur la page sommaire en cours.

Pour plus d’informations sur la balise URL_ACTION_AUTEUR

Page rubrique.html

Pour la page rubrique.html, le code est sensiblement différent. En effet, il faut englober le code précédent dans une boucle RUBRIQUES.

  1. <BOUCLE_rub(RUBRIQUES){id_rubrique}>
  2. [(#REM) on boucle sur les langues disponibles dans le public grâce à spip-bonux]
  3. [(#SET{langues,[(#CONFIG{langues_multilingue}|explode{','}|serialize)]})]
  4.  
  5. <BOUCLE_langue_possibles(POUR){tableau #GET{langues}}>
  6. [(#ENV{lang}|=={#VALEUR}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#SELF|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
  7. </BOUCLE_langue_possibles>
  8. </BOUCLE_rub>

Télécharger

Le principe est le même que sur la page sommaire. Sauf que la redirection se fait directement sur la page rubrique en cours.

Page article.html

C’est dans la page article que le code est le plus évolué. Le début est le même, puis on redirige soit vers l’article traduit s’il existe, soit vers l’article en cours.

  1. <BOUCLE_menulangue(ARTICLES){id_article}>
  2. [(#REM) un menu langue plat qui redirige vers la traduction de l'article si elle existe ... sinon sur l'article en cours mais en ayant changé de langue pour l'interface]
  3.  
  4. [(#REM) on boucle sur les langues disponibles dans le public grâce à spip-bonux]
  5. [(#SET{langues,[(#CONFIG{langues_multilingue}|explode{','}|serialize)]})]
  6. <BOUCLE_langue_possibles(POUR){tableau #GET{langues}}>
  7. [(#REM) on récupère la traduction "potentielle" de l'article en cours]
  8. <BOUCLE_article_traduit(ARTICLES){traduction}{lang=#VALEUR}>
  9. [(#ENV{lang}|=={#VALEUR}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#URL_ARTICLE|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
  10. </BOUCLE_article_traduit>
  11. [(#REM) Si pas de traduction, on change bien la langue mais le lien reste sur la même page]
  12. [(#ENV{lang}|=={#VALEUR}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#URL_ARTICLE|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
  13. <//B_article_traduit>
  14. </BOUCLE_langue_possibles>
  15. </BOUCLE_menulangue>

Télécharger

Tout cela est bien entendu englobé dans une boucle ARTICLES.

P.-S.

Encore un grand merci à Kent1 pour ces merveilleux bouts de code.
Pour plus d’informations sur le multilinguisme dans SPIP

Dernière modification de cette page le 10 mars 2010

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 30 août 2011 à 11:24, par Fafa En réponse à : Création d’un menu langue plat pour SPIP 2.0

    Bonjour,

    Grand merci pour cette contribution simple à mettre en oeuvre.

    J’ai un problème sur le lien, quand il n’y a pas d’article traduit, on ne reste pas dans l’article de la langue en cours mais on est dirigé vers la page 404.
    Y a t-il une astuce particulière ?

    Merci d’avance

    • Le 17 juin 2013 à 00:21, par matt En réponse à : Création d’un menu langue plat pour SPIP 2.0

      J’ai eu le même souci. Bon, la question date un peu mais ça peut peut-être aider quelqu’un qui passe par là !

      ligne 12, remplacer #URL_ARTICLE par #SELF

      1. <BOUCLE_menulangue(ARTICLES){id_article}>
      2. [(#REM) un menu langue plat qui redirige vers la traduction de l'article si elle existe ... sinon sur l'article en cours mais en ayant changé de langue pour l'interface]
      3.  
      4. [(#REM) on boucle sur les langues disponibles dans le public grâce à spip-bonux]
      5. [(#SET{langues,[(#CONFIG{langues_multilingue}|explode{','}|serialize)]})]
      6. <BOUCLE_langue_possibles(POUR){tableau #GET{langues}}>
      7. [(#REM) on récupère la traduction "potentielle" de l'article en cours]
      8. <BOUCLE_article_traduit(ARTICLES){traduction}{lang=#VALEUR}>
      9. [(#ENV{lang}|=={#VALEUR}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#URL_ARTICLE|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
      10. </BOUCLE_article_traduit>
      11. [(#REM) Si pas de traduction, on change bien la langue mais le lien reste sur la même page]
      12. [(#ENV{lang}|=={#VALEUR}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#SELF|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
      13.  
      14. <//B_article_traduit>
      15. </BOUCLE_langue_possibles>
      16. </BOUCLE_menulangue>

      Télécharger

    Répondre à ce message

  • Le 5 février 2012 à 01:06, par M Coul En réponse à : Création d’un menu langue plat pour SPIP 2.0

    Salut

    Quelque peut m’aider à déselectionner une langue dans la partie Langues invisibles du menu dans la configuration du plugin

    Merci

    Répondre à ce message

  • Le 1er janvier 2011 à 13:13, par Artlogic En réponse à : Création d’un menu langue plat pour SPIP 2.0

    Hello

    J’obtiens un vilain « converser : Accès interdit » lors du clic sur le bouton de langue.
    Quelqu’un a déjà eu ça ? Merci de vos réponses. +

    • Le 3 janvier 2011 à 09:19, par filnug En réponse à : Création d’un menu langue plat pour SPIP 2.0

      Aïe. Je ne peux malheureusement pas t’aider là-dessus. Je n’ai jamais eu ce type de problème.

      Néanmoins, je tenterais une autre solution. Regarde ces 2 contribs qui pourraient t’aider :
      http://www.spip-contrib.net/Menu-de-langues-sous-forme-de-liens
      http://www.spip-contrib.net/Multilang

      J’espère que ça t’aidera...

    • Le 3 janvier 2011 à 10:57, par Artlogic En réponse à : Création d’un menu langue plat pour SPIP 2.0

      C’est un code identique : Le fichier menu_lang.html du plugin fait aussi appel au fichier converser. J’ai tenté de paser en chmod 777 et aussi de passer le safe mode à off comme c’est indiqué dans d’autres discutions. Je ne sais pas en quoi cela pouvait jouer. Rien n’y a changé. On tombe toujours sur la même problématique en local. Je vais essayé en distant des fois que...

    • Le 5 janvier 2011 à 14:26, par Artlogic En réponse à : Création d’un menu langue plat pour SPIP 2.0

      En distant c’est pareil. J’ai essayé sur d’autres serveurs et ça plante de la même façon. Dans une version antérieur de SPIP, avec le même code, je n’ai pas de problème pour accéder à « converser ». Serait-ce lié à la version de SPIP ?

    • Le 19 octobre 2011 à 12:26, par Casp En réponse à : Création d’un menu langue plat pour SPIP 2.0

      Même bug chez moi ;
      j’ai trouvé la solution sur une mailing list ;
      je partage :

      J’ai eu exactement le même changement de comportement + bug associé, mais en 2.1.2, alors que tout allait bien en 2.1.1.
      Après avoir constaté que personne ne semblait avoir le même problème, et passé des plombes à chercher en vain d’où ça pouvait venir, j’ai fini par contourner le problème en ajoutant un « &arg= » dans les URLs générées.
      En termes de codes, il suffit de rajouter :

      1. |parametre_url{arg,''} juste après l'accolade fermante de #URL_AUTEUR{...}. --

      merci. davux

    • Le 8 novembre 2011 à 10:13, par Rainer Müller En réponse à : Création d’un menu langue plat pour SPIP 2.0

      Merci,

      j’avais constaté ce problème quand j’utilisai bandeau et j’avais simplement désinstallé bandeau, mais maintenant sous spip3 j’étais bien forcer d’attaquer le problème.

      donc le lien complet qui marche également sous spip3 est :

      1. [(#URL
      2. _ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#SELF|parametre_url{lang,'','&'})]}|parametre_url{arg,''})]

      Télécharger

    Répondre à ce message

  • Le 8 avril 2010 à 23:53, par ? En réponse à : Création d’un menu langue plat pour SPIP 2.0

    bonjour, j’aimerais savoir s’il y a quelque chose à faire pour que cela marche sous 1and1 ?

    en local, aucun problème. sur le distant, j’ai testé la boucle, et elle fonctionne. (donc spip-bonux, ok)

    quelqu’un a une idée ? merci d’avance :)

    Répondre à ce message

  • Le 14 octobre 2009 à 18:13, par Cyril Marion En réponse à : Création d’un menu langue plat pour SPIP 2.0

    Bonjour à tou(te)s,

    Je propose une très légère variante, utilisant #ENVurl et qui change seulement le style de la langue en cours, sans la supprimer :

    Et voici le résultat :

    عربي | français | Deutsch | English | Español

    Bonne utilsation,
    Cyril

    Répondre à ce message

  • Le 12 novembre 2009 à 05:00, par soon7 En réponse à : Création d’un menu langue plat pour SPIP 2.0

    Oui c’est vrai Kent1 que mon cas est un peu particulier.

    Il s’agit en fait d’un site complètement traduit dans toutes les langues, et donc chaque article a forcément sa traduction dans les autres langues, et le titre de chaque rubriques est un multi.

    Je n’avais pas fait gaffe à cette nuance de cas effectivement, mais en tout cas ça m’a bien sauvé la vie et je me suis dit que ça pouviat servir ^^

    Répondre à ce message

  • Le 12 novembre 2009 à 04:31, par soon7 En réponse à : Création d’un menu langue plat pour SPIP 2.0

    Bonjour,

    en cherchant je suis finalement tombé sur une méthode qui fonctionne sans plugin, la solution ayant été donné par Fil :

    ça fonctionne quel que soit le nombre de langues :

    <BOUCLE_langues(ARTICLES){fusion lang}{par lang}>
    [<span lang="#LANG" xml:lang="#LANG" dir="#LANG_DIR"[(#LANG|=={#ENV{lang}}|?{class="on",''})]>
           <a href="[(#URL_ACTION{'converser'}|parametre_url{var_lang,#LANG}|parametre_url{redirect,#SELF})]"
                   rel="alternate" hreflang="(#LANG|unique{langues})" title="[(#LANG|traduire_nom_langue)]"><img src="images/flag_#LANG.gif" height="13" width="21" alt="#LANG" /></a>
    </span>]
    </BOUCLE_langues>

    Pour en savoir plus, rendez vous sur le Wiki : http://www.spip-contrib.net/MenuLangSurClic

    • Le 12 novembre 2009 à 04:50, par kent1 En réponse à : Création d’un menu langue plat pour SPIP 2.0

      Cela marchera dans un cas optimal ou tu as au moins un article dans la chaque langue ce qui n’est pas obligatoire (cas complexes ou site pas encore traduits dans toutes les langues mais l’interface si ... site utilisant des multi dans les articles uniquement)...

      Donc pas valable dans tous les cas ...

      Dans le cas présent en plus on est sensé tomber sur la traduction de l’article et non pas l’article en cours il me semble par exemple

    Répondre à ce message

  • Le 1er octobre 2009 à 09:57, par serge En réponse à : Création d’un menu langue plat pour SPIP 2.0

    MERCI Kent 1 et Romain ; )

    Serge

    Répondre à ce message

  • Le 10 septembre 2009 à 12:24, par serge En réponse à : Création d’un menu langue plat pour SPIP 2.0

    Bonjour

    Merci pour la contrib !

    Est-il possible d’insérer un logo pour les langues affichées ? (ce serait pour mettre un drapeau)

    Je ne trouve pas comment insérer un #LOGO_RUBRIQUE ...

    Merci pour une piste,

    Serge

    • Le 23 septembre 2009 à 11:19, par Romain En réponse à : Création d’un menu langue plat pour SPIP 2.0

      Bonjour,

      J’ai intégré mes drapeaux de la manière suivante :

      J’ai remplacé [(#VALEUR|traduire_nom_langue)]

      par :
      <img src="squelettes/images/[(#VALEUR)].gif" alt="[(#VALEUR|traduire_nom_langue)]" border="0" width="20" height="19"/>

      VALEUR correspond aux deux lettres de la langue. Je nomme donc mon image en.gif pour l’anglais par exemple et je la place dans le dossier images du dossier squelettes...

    • Le 23 septembre 2009 à 15:21, par kent1 En réponse à : Création d’un menu langue plat pour SPIP 2.0

      Hello

      Tu as fait :

      1. <img src="squelettes/images/[(#VALEUR)].gif" alt="[(#VALEUR|traduire_nom_langue)]" border="0" width="20" height="19"/>

      qui marche sans aucun doute ...

      mais quelque chose comme ceci est peut être plus propre...

      1. <img src="#CHEMIN{images/#VALEUR.gif}" alt="[(#VALEUR|traduire_nom_langue)]" border="0" width="20" height="19"/>

      Si un jour ton squelette devient un plugin squelette ou que tu changes le nom de ton répertoire squelette cela devrait continuer à fonctionner ... avec ta solution non ...

      C’était juste pour info sinon la solution de départ est bonne.

    • Le 23 septembre 2009 à 15:23, par kent1 En réponse à : Création d’un menu langue plat pour SPIP 2.0

      Une solution a été donnée par un autre utilisateur ... Tu ne peux utiliser un logo de rubrique à moins de reboucler sur les rubrique racines qui ont un logo de drapeau et qui ont la langue qui correspond à la balise #VALEUR mais c’est assez contraignant ...

    • Le 23 septembre 2009 à 16:07, par Romain En réponse à : Création d’un menu langue plat pour SPIP 2.0

      Merci pour la suggestion.

      Effectivement c’est plus propre. Je n’avais pas réussi à le faire fonctionner donc je n’avais pas insisté vu que j’étais un peu pressé !

      Alors maintenant que ça fonctionne, j’en profite pour transmettre le code complet... avec parenthèses et crochets et le rollover en plus...

      <img src="[(#CHEMIN{images/[(#VALEUR)].gif})]" onMouseOver="this.src='[(#CHEMIN{images/[(#VALEUR)]_f2.gif})]'" onMouseOut="this.src='[(#CHEMIN{images/[(#VALEUR)].gif})]'" alt="[(#VALEUR|traduire_nom_langue)]" border="0" width="20" height="19"/>

    Répondre à ce message

  • Le 6 août 2009 à 18:03, par ? En réponse à : Création d’un menu langue plat pour SPIP 2.0

    erreur code pour le sommaire

    a href="

    au lieu de

    a href=

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Champs Extras 3

    16 janvier 2012 – 523 commentaires

    Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP. Il permet donc de prendre en compte et d’afficher de nouveaux éléments dans n’importe quel objet éditorial de SPIP. Screencast Vous n’aimez pas (...)

  • Réservation d’événements

    16 mars 2015 – 188 commentaires

    Ce plugin permet d’offrir aux visiteurs de s’inscrire pour un évènement du plugin Agenda et de gérer les réservations enregistrées. Installation Le plugin s’installe comme n’importe quel plugin. il nécessite : Agenda API de vérification (...)

  • Les crayons

    23 avril 2008 – 815 commentaires

    Ce plugin permet d’éditer les contenus sur les pages publiques du site, sans passer par l’espace privé de SPIP.

  • LESS pour SPIP : Less-CSS (anciennement LESSpip)

    5 novembre 2010 – 43 commentaires

    Less-CSS (Anciennement LESSpip) est un plugin intégrant facilement le logiciel LESS dans SPIP. LESS est une extension de CSS ajoutant les variables, les classes, les opérations, les imbrications au langage. Facilitant ainsi l’écriture de (...)

  • Recommander

    3 avril 2011 – 16 commentaires

    Ce plugin propose une manière simple de suggérer de recommander par email un article à un ami. Fonction « recommander un article à un ami ». On l’ajoute dans n’importe quel squelette sous la forme : #RECOMMANDERtitre de la page,url de la page,intro (...)

Ça spipe par là