SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Multilinguisme > Traductions de rubriques

Lien de navigation par langues entre articles et entre rubriques

jeudi 13 octobre 2005, par Bertil. Dernier ajout samedi 16 décembre 2006


pour un site public multilingue configuré "par secteur" (voir http://www.spip.net/fr_article2124.html), avec gestion de lien de traduction entre articles.


Il s’agit de faire apparaitre sur un article ou une rubrique un lien de traduction vers les autres langues du site, dans les conditions suivantes.

Configuration site

La configuration "multilinguisme" d’un tel site est :

- Activer le menu de langue sur les articles ? Non
- Activer le menu de langue sur les rubriques ? Oui
- ... seulement pour les rubriques situées à la racine ? Oui
- Gérer les liens de traduction ? Oui

De plus, il faut que les structures de chaque branche soient identiques, c’est à dire que l’arborescence du site soit la même dans toutes les langues, ce qui est un cas courant.

Il est facile d’avoir le lien vers les articles traductions d’un article :

C’est le code de la langue qui sert de lien (par exemple "en" pour aller vers la traduction en anglais). On peut sophistiquer cela en utilisant le filtre [(#LANG|traduire_nom_langue)] qui donne le nom de la langue, par exemple « English ».

Ce qui est moins immédiat, c’est d’avoir un lien sur les rubriques car le site n’est pas configuré pour, puisque ce sont les liens entre articles qui sont gérés (Spip ne permet pas de gérer directement des liens de traduction entre rubriques)

La précédente contribution de Mortimer Trouver les "traductions" des rubriques donne une méthode pour faire des liens de traduction entre rubriques ayant un article traduit.

Liens entre rubriques

La présente contribution permet d’afficher les liens de traduction entre les rubriques de deux branches (ou plus selon le nombre de langues du site), à condition que les branches par langue soit équivalentes (c’est à dire avec la même structure) et qu’il y ait au moins un article traduit dans les branches considérées, même si l’article traduit se situe plusieurs niveaux en dessous des rubriques.

La logique utilisée est de repérer le niveau hiérarchique (n) de la rubrique sur laquelle on se situe et sur laquelle on veut mettre un lien vers ses traductions [1]. Ensuite on plonge dans la branche de cette rubrique jusqu’à trouver un article traduit [2]. Une fois arrivé sur l’article traduit, on regarde quelle est la hiérarchie de sa traduction (il s’agit donc d’un article situé sur une autre branche-langue), et on déroule cette hiérarchie jusqu’au niveau (n) repéré initialement, qui correspond donc logiquement à la traduction de la rubrique initiale, puisque les branches ont la même structure. On fait la même chose pour toutes les langues.

Voici le contenu de mon squelette "traduction.html"

Il suffit d’appeler ce squelette à l’endroit où on veut voir apparaitre le lien de traduction dans le squelette principal article ou rubrique (ou autre), avec une simple balise INCLURE

Jusqu’à SPIP 1.8.3

A partir de SPIP 1.9

Explication

  • La première partie, entre BOUCLE_existe_article et /BOUCLE_existe_article, affiche le lien de traduction directement dans le cas d’un article traduit (premier cas expliqué au début de la contribution)
  • Ensuite, entre /BOUCLE_existe_article et //B_existe_article, nous sommes dans le cas d’une rubrique, où il faut donc déduire le lien de traduction, selon la logique indiquée précédemment.
  • BOUCLE_h_rub sert uniquement à faire tourner le compteur de boucle, afin de compter le niveau hiérarchique (n) de la rubrique courante ; on utilisera ensuite #_h_rub:TOTAL_BOUCLE qui désigne le compteur de cette boucle vu dans une autre boucle [3] ; on aura donc pour valeur le niveau hiérarchique (n).
  • A partir de la rubrique courante (celle dont on vient de compter le niveau hiérarchique), BOUCLE_article_dependant balaye toute la branche (c’est à dire la rubrique et toutes ses sous-rubriques) à la recherche des articles.
  • Pour chaque article rencontré, BOUCLE_traduc regarde s’il y a des traductions (exclus l’article lui-même, d’où le critère {exclus}) ; s’il y a au moins une traduction, BOUCLE_art_trad déroule la hiérarchie de cette traduction jusqu’au niveau hiérarchique (n) en utilisant le compteur de boucle précédemment calculé : c’est le critère {#_h_rub:TOTAL_BOUCLE,1}. Puisque nous sommes au même niveau hiérarchique et que les branches ont des structures similaires, la rubrique courante est donc la traduction de la rubrique de départ, il suffit de placer son url dans le lien.
  • Comme on peut avoir rencontré plusieurs articles dans la branche, on aura autant de lien de traduction que d’articles rencontrés : c’est trop, un seul suffit ! BOUCLE_secteur a pour but de conserver un seul de ces liens grâce au critère {doublons}. Notez que le critère {id_secteur} ne peut pas remplacer le critère {id_rubrique=#ID_SECTEUR}, car {id_secteur} renvoie toutes les rubriques du secteur.

Notes

[1] ça ne peut pas être fait directement, puisqu’il n’y a pas de gestion directe de lien de traduction entre rubriques dans Spip

[2] s’il n’y a pas d’article traduit, on ne pourra pas faire le lien

[3] voir http://www.spip.net/fr_article898.html pour le compteur de boucle, et voir http://www.spip.net/fr_article2991.html pour la syntaxe #_nom:TEXTE


Répondre à cet article



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et fonctionnement SPIP-Contrib | SPIP | L'autre.net