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

  • Je ne sais pas si on peut véritablement parler de bug mais, ce plugin provoque des effets de bords gênants :
    La situation :
    -  un site multilingue une langue par secteur + français langue principale du site
    -  une page unique à qui on attribue langue « de »
    -  si on attribue des évènements à cette page et qu’on souhaite les afficher, les balises [(#DATE|affdate)] ou [(#DATE|nom_mois)] etc... ne sont pas traduites : elles restent en français. La faute à forcer_lang mis à true dans le fichier d’options du plugin. (La parade est de rajouter &lang=qqchose dans l’url ou.... de désactiver le plugin)

    => Bug ou feature ?

    Répondre à ce message

  • 2

    Bonjour

    J’utilise souvent ce menu mais je m’aperçois aujourd’hui sous spip 3.2.4 que l’action « converser » ajoute systématiquement «  ?lang=malangue » à l’url quand je l’utilise avec url arbo, «  », et 1 url par langue pour un même article ou rubrique. Ce n’est pas le cas avec le menu langue natif de SPIP. Est ce que quelqu’un sait comment avoir le même comportement d’url (sans parametre) que le menu langue natif ?
    Merci d’avance

    Répondre à ce message

  • 2

    J’ai le plugin dernière version sur un SPIP 3.2.4 et mon menu langue n’apparaît plus.
    Je n’ai que des <multi> dans mes articles et donc aucun secteur ou article avec une autre langue définie (français par défaut).
    l’inclure est
    [(#INCLURE{fond=formulaires/menu_lang,env})]

    Merci

    • Autre précision : dans body.html
      j’ai
      <INCLURE{fond=navigation/#ENV{type},env}{lang?}>
      (mon menu lang est dans navigation/dist.html)

    • OK donc d’après mes tests dans le cas d’un site qui utilise uniquement les <multi> et pas les secteurs, rubriques, ou articles avec des langues déclarées autre que la langue par défaut du site le menu langue ne s’affiche pas sur les pages publiques ; il suffit de déclarer n’importe quelle rubrique dans une autre langue pour que le menu de langue s’affiche sur toutes les pages du site public et cela n’engendre pas de perturbation puisque l’affichage du contenu est géré par les <multi> des champs texte.

    Répondre à ce message

  • 2
    François HAMONNO

    Je relance mon appel au secours !!!

    La balise « #MENU_LANG » placée au début du texte d’un article n’est pas interprétée par spip et s’affiche donc telle quelle !
    Que manque-t-il pour qu’elle affiche le menu des langues utilisées ? Dois-je les mettre en paramètres ? Comment ?

    Merci pour une réponse.

    • Ah mais #MENU_LANG est prévu pour être intégré dans un squelette (ce qui gère l’apparence du site), pas dans un article (ce qui gère le contenu.

      A mon avis, le mieux serait que tu l’intègre dans ton squelettes, pour que cela soit visible sur tous les articles. Je peux t’aider pour cela, mais j’ai besoin d’information sur tes compétences en informatique et sur le squelettes que tu utilise.

      Pour l’avenir, je te suggère de demander de l’aide sur les listes d’utilisateur de SPIP.

    • Fhamonno

      Merci pour votre réponse. J’avais raté la localisation de la balise !

    Répondre à ce message

  • François HAMONNO

    Bonjour
    je travaille sur un site multilingue (fr et oc) utilisant la balise « multi » dans le texte des rubriques et articles.
    Pour choisir la langue affichée, j’utilise la balise #MENU_LANG ... mais celle-ci s’affiche « #MENU_LANG » !!!
    Le texte affiché est dans la langue du site : fr ou oc suivant le cas.
    Une piste pour que le menu s’affiche ?
    Merci pour votre aide
    Cordialement
    fgh

    Répondre à ce message

  • 3

    Bonjour,

    SPIP 3.2, plugins à jour, dont MLL.
    Sur une arborescence :
    -  Rubrique01[fr]
    — Articles [fr]
    -  Rubrique02[fr]
    — Articles [fr]
    -  Rubrique03[en]
    — Articles [en]
    -  Rubrique04[de]
    — Articles [de]

    donc, plusieurs secteurs qui possèdent la même langue, aucun article ou rubrique n’utilise le mécanisme de liaison / traduction.

    La balise #MENU_LANG génère bien le menu avec les 3 langues fr|en|de, mais le choix d’une langue via le menu redirige vers un des secteurs (toujours le même pour chaque langue).

    Même quand on est sur la page sommaire, on est redirigé vers un des secteurs.

    Vis-à-vis de mon besoin, sachant que je n’utilise par de liaison / traduction, je pensais revenir systématique sur la page sommaire, par défaut.

    Soit je loupe quelque chose, soit il faut que je shunte le mécanisme qui essaie de trouver la bonne redirection ?!

    Merci pour vos lumières,
    françois

    • Avec cette structure de données, tu ne rentre dans aucune des pratiques courantes du multilinguisme de SPIP qui sont :

      • un secteur par langue, avec héritage de la langue du secteur pour les articles
      • l’usage des multi avec les articles ayant leur langue définie

      Toi, tu as plusieurs secteurs par langue.
      Il va donc falloir que tu fork le squelette du plugin pour avoir le comportement que tu souhaites.

    • OK merci, c’est bien ce qu’il me semblait.

      Mais cela me pose question :
      -  un visiteur accède à la page sommaire (dans le sens SPIP), il voit la page sommaire de la langue par défaut.
      -  s’il clique sur une autre langue, il est redirigé vers le secteur correspondant à cette langue et ne voit donc pas la page sommaire multilingue :-(
      -  s’il arrive sur le site par une autre page que la page sommaire, il ne verra jamais cette page sommaire qui est, couramment, une page important ;-)

      Quid de cette page sommaire avec MLL ?

    • Très honnêtement, je n’ai testé ce plugin qu’en multilinguisme avec la méthode des liens de traduction.

      D’autre part la doc indique 2 méthodes d’insertion, dont une seule permet de rester sur la même page à condition qu’il y ait un env « correct ». Laquelle utilises-tu ?

      Et que dit var_mode=debug sur la page sommaire

    Répondre à ce message

  • Margery

    Bonjour, votre article m’interesse beaucoup. Merci pour la publication.

    Répondre à ce message

  • Bonjour,

    J’ai un site en anglais avec des articles qui peuvent être traduits. Je voudrais supprimer le « changer la langue de navigation (cookie de langue) » pour que ce soit toujours le menu en anglais qui s’affiche même quand on change la langue de l’article.
    Dans le formulaire menu_lang.html je pense qu’il faut modifier l’URL

     [<a href="[(#SELF|parametre_url{action,converser}|parametre_url{var_lang,#VALEUR}
    |parametre_url{redirect,#GET{ListeTraductions}|table_valeur{#VALEUR}
    |ancre_url{content}|sinon{#SELF}|url_absolue})]" rel="alternate" lang="#VALEUR"[(#GET{format}|=={'abrege'}|oui) title="[(#VALEUR|traduire_nom_langue|ucfirst|attribut_html)]"] class="langue_#VALEUR">(#GET{nom_langue}|ucfirst)</a>]  

    mais je trouve pas..

    Merci
    dd

    Répondre à ce message

  • Comme suite à mon message...
    N’arrivant pas à supprimer le non-affichage [fr]-[en] dans la config, j’ai créé une rubrique en espagnol avec article en es, annoncé le tout dans le multilinguisme...

    J’avais donc trois langues dispo à faire éventuellement à ne pas faire apparaitre dans la partie publique...

    Quand on déclare une rubrique en espagnol et qu’on désactive son affichage dans la config de mll, l’affichage du sélecteur de langue [fr] / [en] apparait dans la partie publique...

     ???

    Répondre à ce message

  • Bonjour,
    Je ne sais pas ce que j’ai fait mais sur un site ou le sélecteur de langue et le menu de langue fonctionnaient, lors d’une mise à jour des plugins le menu de langue a disparu...
    De plus dans sa configuration, il n’est pas possible de supprimer l’affichage d’une langue (ce n’est pas le but recherché).

    Je me demande si ça ne viendrait pas du fait qu’avant le plugin s’installait dans /auto/Menu_lague_lien et que maintenant c’est dans /auto/mll et que ceci ne serait pas pris en compte quelque part.
    Mon site : http://www.larca.univ-paris-diderot.fr
    Une idée ?
    Bonne journée,
    Yves

    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