Menu de langues sous forme de liens

Par défaut, le menu de langue de SPIP s’affiche :

  • Sous la forme d’une liste déroulante ;
  • En affichant toutes les langues du site, qu’elles soient utilisées ou non (c’est à même si elles ne sont pas affectées à au moins un article ou une rubrique) ;
  • Sans redirection vers la traduction de l’article ou de la rubrique en cours de consultation.

Le menu de notre plugin affiche les langues sous forme de liens cliquables, avec une redirection vers les éventuelles traductions de l’article ou de la rubrique et seulement pour les langues réellement utilisées (affectées à au moins un article ou une rubrique).

Présentation

Initialement créé par yohannp pour le squelette Squelette SoyezCréateurs Rebirth [1], ce menu peut être utilisé de 2 manières :

  • #MENU_LANG : affichage du menu en mode de fonctionnalité réduite : permet de changer le cookie de langue en restant sur la même page.
  • [(#INCLURE{fond=formulaires/menu_lang,env})] :
    • changer la langue de navigation (cookie de langue)
    • aller sur la traduction de l’article ou de la rubrique en cours si elle existe,
      sinon, rester sur la même page

Le plugin a été porté sur SPIP3 par Cerdic

Installation

« Menu de langue sous forme de liens » s’installe comme tous les plugins. Il faut ensuite rajouter dans les squelettes le menu souhaité :

  • #MENU_LANG : affichage du menu en mode de fonctionnalité réduite : permet de changer le cookie de langue en restant sur la même page.
  • [(#INCLURE{fond=formulaires/menu_lang,env})] : fonctionnalité ci-dessus + redirection vers l’article traduit si il existe.

Notez que menu_lang.html doit impérativement recevoir dans ses paramètres l’identifiant de l’article ou de la rubrique courante. C’est le cas si [(#INCLURE{fond=formulaires/menu_lang,env})] est inséré directement dans article.html ou rubrique.html, puisque le critère env permet de transmettre tout le contexte de compilation du squelette en cours à celui inclus (voir http://programmer.spip.org/Transmet...).

Par contre, si vous insérez [(#INCLURE{fond=formulaires/menu_lang,env})] dans un autre squelette inclus, assurez-vous que ce squelette inclus possède bien tout le contexte de compilation.

Par exemple, si sous SPIP 3, vous dupliquez dans le répertoire « squelettes » les squelettes par défaut de SPIP (extensions/dist) et vous choisissez d’insérer [(#INCLURE{fond=formulaires/menu_lang,env})] dans /inclure/header.html, vous devrez modifier toutes les occurrences de <INCLURE{fond=inclure/header} /> pour y rajouter le paramètre env : <INCLURE{fond=inclure/header, env} />.

Vous n’avez pas besoin de forcer la langue du site, le plugin le fait automatiquement.

Vous pouvez également installer le plugin CFG pour modifier les configurations avancées du plugin ainsi que le plugin Traduction entre rubriques (Tradrub) pour déclarer des traductions de rubriques.

Choix du format de langue

Par défaut, le plugin affiche le format complet de la langue (ex. Français, English).

Si vous avez installé le plugin CFG, vous pouvez choisir un format d’affichage abrégé (ex. Fr, En).

La liste des abréviations peut être consultée dans l’espace privé de votre site : « Configuration > Gestion des langues > Multilinguisme ».

Exclure des langues de l’affichage

Dès que vous commencez à déclarer des articles ou des rubriques dans une langue, celle-ci apparait dans le menu, même si les articles ne sont pas publiés.

Vous pouvez toutefois la faire disparaitre du menu en modifiant la configuration du plugin : « Configuration > CFG > Menu de langue sous forme de liens > Langues invisibles du menu ».

Quelles langues afficher ?

Par défaut, le menu affiche les langues réellement utilisées dans les articles (via le formulaire de choix de la langue).

Si la variable _MLL_LANGUES_MULTILINGUE (V1.3.0) vaut true, le menu est construit à partir de toutes les langues à disposition des rédacteurs (menu Configuration > Multilinguisme), qu’elles soient utilisées ou non.

Redirection vers la traduction des rubriques

Pour créer un site multilingue, vous pouvez soit laisser les traductions dans les mêmes rubriques que les articles de la langue principale et saisir les traductions des titres de rubriques avec des blocs multilingues :

Rubrique « Fleurs / Flowers » (Fr)
|_ Article « Marguerite » (Fr)
|_ Article « Daisy » (En)

Le titre de la rubrique « Fleurs » sera saisi de la façon suivante : <multi>[fr]Fleurs[en]Flowers</multi>.

Soit créer dupliquer les rubriques (une par langue) :

Rubrique « Fleurs » (Fr)
|_ Article « Marguerite » (Fr)

Rubrique « Flowers » (En)
|_ Article « Daisy » (En)

Par défaut, SPIP permet de définir la langue d’une rubrique, mais pas de lier les traductions de rubriques entre elles, comme c’est le cas pour les articles. Pour ajouter cette fonctionnalité vous pouvez installer le plugin Traduction entre rubriques (Tradrub).

Quoi qu’il en soit, ces deux modes de fonctionnement sont supportés par le plugin : Dans le premier cas, si un visiteur change la langue du site sur la page d’une rubrique, le titre de la rubrique s’affichera dans la langue choisie (si elle a été saisie) dans le second cas, le visiteur sera redirigé vers la rubrique qui fait office de traduction.

Fonctionnement du plugin

Le fonctionnement est tout simple. Le menu utilise l’action converser de SPIP pour changer la langue (et le cookie avec) et si on est sur une page article et que ce même article affiché est traduit dans la langue sélectionnée, on redirige sur l’article traduit dans la langue sélectionnée.

Ressources sur le multilinguisme dans SPIP

Notes

[1Et simplifié par votre serviteur

Perspective d’avenir : si quelqu’un voit comment faire pour que #MENU_LANG connaisse le id_article du contexte, cela permettrait de ne pas avoir à changer les squelettes avec l’INCLURE

L’icône a été dessiné par une Grosse Vache.

Discussion

65 discussions

  • 4

    Bonjour,

    Je viens d’installer votre plugin, je souhaiterais savoir comment je peux donner un id (css) à chacun des liens afin de pouvoir mettre une image plutot qu’un simple texte ?

    cordialement,

    • Genre mettre un drapeau national pour signifier une langue qui elle est internationale ?

      Genre pour choquer les suisses, les belges et les canadiens en leur disant que la langue française est le drapeau de la France ?

       ?

      Ceci dit, il y a peut-être un autre type d’image à mettre... Tu pensais à quoi en fait ?

    • Je pensais en effet à choquer Les suisse et les canadien :D

      Mais j’ai réussit. En bidouillant à fond mais j’ai réussit.

      Bastoune.fr/IdH

    • Et comment as tu fais ? Tu pourrais partager... car tu n’es pas le seul à vouloir choquer les suisses.. ils s’en remettront je suis moi même suisse ^^...
      Graphiquement le petit drapeaux attire plus vite l’oeil

    • Voici ce que j’ai modifier dans la page « menu_lang.html »

      	<BOUCLE_ListeLangues(ARTICLES){par lang}{fusion lang}>
      		[(#REM)
      		Si la langue n'est pas celle en cours, on fait un lien qui fait 2 actions :
      		- fixer le cookie de langue sur la langue demandée
      		- rediriger sur l'article dans la langue demandée si opportun
      		  sinon, revenir sur la page en cours
      		]
      		[(#LANG|=={#ENV{lang}}|non)
      			[<a href="[(#URL_ACTION_AUTEUR{'converser', '', #GET{ListeTraductions}|table_valeur{#LANG}|sinon{#SELF}}|parametre_url{var_lang,#LANG})]" rel="alternate" title="[(#LANG|traduire_nom_langue|ucfirst|attribut_html)]"><div id="#LANG"></div><div id="hidden">(#LANG{langues}|ucfirst)</div></a>]
      		]
      		[(#REM)
      		Si la langue est celle en cours, afficher celle-ci en gras, sans lien
      		]
      		[(#LANG|=={#ENV{lang}}|oui)
      			[<div id="#LANG"></div><div id="hidden">(#LANG{langues}|ucfirst)</div>]
      		]
      	</BOUCLE_ListeLangues>

      Pour faire fonctionner correctement la boucle on doit laisser (#LANGlangues), je l’ai donc foutu dans une div hidden pour qu’on ne voit pas En Fr, puis j’ai foutu à coté une div avec les drapeau en background et l’id de ces div, c’est soit fr soit en (dans mon cas). Voila le css qui va avec.

      #en{float:right;background:  url(img/en.png) no-repeat;width:34px;height:25px;}
      #fr{float:left;background:  url(img/fr.png) no-repeat;width:25px;height:24px;}
      #hidden{display:none;}

    Répondre à ce message

  • Renée Picard

    Avec SPIP 2.1.2 j’ai le même problème : lorsque je clique sur En j’arrive sur la page de connexion.

    Répondre à ce message

  • J’ai un site sur spip avec 2 langues. Avec le plugin, lorsque je change de langue je me retrouve automatiquement sur le formulaire de connexion admin.

    Répondre à ce message

  • 3

    Bonjour !

    J’aimerais installer le plugin de façon automatique (ds le répertoire auto), mais je ne trouve pas le plugin dans la liste !!!

    Quel est le nom de ce plugin ? Je ne trouve rien sous « menu_langue » !

    Merci

    • Le plugin n’était pas dans la liste des plugins installable de façon automatique. Je viens de corriger cela.

      Il faudra je pense attendre encore un peu (1-2h) histoire que le cache se recalcul

    • Merci Maïeul.

      Bonne journée.

    • Sans paraître impoli, le plugin n’est toujours pas disponible sur la liste pour l’installation automatique ;-)

    Répondre à ce message

  • J’ai fait un site sur spip en 2 langues tout marche super bien sauf une seule chose et cela fait quelques jours que je suis calé dessus et tous les sites spip que j’ai visité le font très bien.
    Quand je veux changer de langue je me retrouve automatiquement sur le formulaire de connexion admin.
    j’ai mis #MENU_LANG pour le changement de langue.
    je cherche désespèremment de l’aide !!!

    Répondre à ce message

  • 1

    Merci pour ce plugin.
    Il vient remplacer « menu_lang plat » qui est resté à la version de spip 1.9.X.

    Il vient également remplacer « menu langue plat pour SPIP 2.0 » qui n’a pas fonctionné pour MOI.

    Encore merci. C’est un grand apport.

    Répondre à ce message

  • Sinon est-ce qu’il y a un moyen pour modifier le code pour lorsque l’on clique sur une langue ça nous renvoie automatiquement à « l’accueil » du site traduit ?

    Mathieu

    Répondre à ce message

  • Toujours rien !

    Mathieu

    Répondre à ce message

  • 1

    Voilà le code de ma page article :

    <BOUCLE_principale(ARTICLES) {id_article}>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR">
    <head>
    <title>[(#NOM_SITE_SPIP|textebrut)][ - (#TITRE|textebrut|supprimer_numero)]</title>
    [<meta name="description" content="(#INTRODUCTION{150}|attribut_html)" />]
    <INCLURE{fond=inc-head}>
    </head>
    
    <body class="page_article">
    <div id="page">
    
    	[(#REM) Entete de la page + titre du site ]
    	<INCLURE{fond=inc-entete}>
    
    	[(#REM) Contenu principal : contenu de l'article ]
        <div class="hfeed" id="conteneur">
        <div class="hentry" id="contenu">
    
            <div class="cartouche">
    			[<div class="#EDIT{surtitre} surtitre">(#SURTITRE)</div>]
    			<h1 class="#EDIT{titre} titre">[(#TITRE|supprimer_numero)]</h1>
    			[<div class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</div>]
            	[<div class="#EDIT{texte} texte">(#TEXTE)</div>]
            </div>
            
    	</div><!--#contenu-->
    	</div><!--#conteneur-->
    
    
        [(#REM) Menu de navigation laterale ]
        <div id="navigation">
    
            [(#REM) Menu de navigation par rubriques ]
            <INCLURE{fond=inc-rubriques}{id_rubrique}>
    
        </div><!--#navigation-->
    
    	[(#REM) Pied de page ]
    	<INCLURE{fond=inc-pied}{skel=#SQUELETTE}>
    
    </div><!--#page-->
    </body>
    </html>
    </BOUCLE_principale>

    Le menu lange se trouvant dans le fichier inc-rubriques.html appelé avec <INCLURE{fond=inc-rubriques}{id_rubrique}>

    Mathieu

    • Le menu langue se trouvant dans le fichier inc-rubriques.html appelé avec <INCLURE{fond=inc-rubriques}{id_rubrique}>

      Et voilà, tu as tout dit !

      <INCLURE{fond=inc-rubriques}{id_rubrique}{id_article}>

      Ou mieux car plus lisible et plus pérenne :
      <INCLURE{fond=inc-rubriques,id_rubrique,id_article}>

      Et ça devrait marcher. Tu ne passais pas id_article dans le contexte...

    Répondre à ce message

  • 1

    En lisant ta réponse hier soir chez moi j’ai bien cru que ça allait le faire mais malheureusement non !
    Mais je m’interroge sur une constatation que je viens de faire qui est lorsque je tape une url de ce type « http://localhost:8888/spip.php?article1&lang=en » directement dans la barre de navigation, ça ne me traduit également pas l’article... est-ce normal ?

    Mathieu

    • Oui, c’est tout à fait normal que ça ne traduise pas l’article.

      Ce que fait ce menu de langue quand il marche, c’est :

      • changer le cookie de langue
      • et changer d’url si l’article en cours avait une traduction dans la nouvelle langue (sinon, ça reste sur la même page).

      D’autre part, il faut dans config/mes_options.php avoir mis :
      $forcer_lang = true;

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom