Identifiants personnels


Moi ... Moi ... et re Moi
« [UBUNTU] Compiler Flvtool2   Informatique  [SPIP] Spip.ici.ous »

[SPIP 1.9.*] Un peu de multilinguisme

dimanche 7 janvier 2007, modifié le 21 janvier 2007, par Quentin Drouet

Aucun tag n'est associé

Contexte

- Un site mutilingue jouant sur les traductions d’articles et non pas un secteur = une langue
- Une langue principale (le français chez moi) dans laquelle existent tous les articles...
- Un processus de traduction anarchique : tous les articles ne sont pas traduits, certains sont dans toutes les langues, d’autres ne sont traduits que dans quelques langues...
- Une navigation basée sur des rubriques/sous rubriques qui peuvent ne contenir qu’un seul article (et ses traductions potentielles) ou plusieurs articles fondamentatlement différents.

Objectifs

Lister les articles d’une rubrique :
- si la rubrique ne contient qu’un seul article traduit ou non, on affiche un lien dirigeant vers l’article, sinon vers la rubrique.
- en utilisant si possible l’article dans la langue du visiteur (possibilité que tous les articles ne soit pas traduits)
- en affichant sinon l’article original
- en gardant l’ordre d’affichage choisit (par num titre, titre ou date)...

Elements SPIP à connaitre

2Quelques Balises2

3Générales3

- #URL_ARTICLE
- #URL_RUBRIQUE
- #TITRE
- #ANCRE_PAGINATION
- #PAGINATION

3Spécifiques au multilinguisme3

- #LANG
- #ENVlang

2Critères de boucle2

3Généraux3

- {id_article}
- {id_rubrique}
- {par XXX}
- {unique}
- {id_parent}
- {0,1}
- {1,1}

3Spécifiques au multilinguisme3

- {traduction}
- {lang=XXX}

Réalisation

2Etape 1 : Boucle ultra de base qui liste tous les articles de la rubrique2

<BOUCLE_articles(ARTICLES){id_rubrique} {par num titre, titre}>
        <li><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></li>
</BOUCLE_articles>

2Etape 2 : Jouer un peu avec les langues2

Page du manuel :
http://www.spip.net/fr_article2124.html

<BOUCLE_articles(ARTICLES){id_rubrique}{par num titre, titre}>
        <B_traductions>
        [(#REM) On affiche toutes les versions de l'article en question]
        <BOUCLE_traductions(ARTICLES){traduction}>
                [(#REM) On affiche toutes les versions de l'article en question]
                <BOUCLE_artdansnotrelangue(ARTICLES){id_article}{lang=#ENV{lang}}{unique}>
                <li><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></li>
                </BOUCLE_artdansnotrelangue>
        </BOUCLE_traductions>
        </B_traductions>
        [(#REM) Si l'article en question n'a aucune traduction on affiche la version originale]
        <li><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></li>
        <//B_traductions>
</BOUCLE_articles>

2Etape 3 : Rajouter pour info si l’article n’est pas dans notre langue, sa langue d’origine2

<B_articles>
<ul>
<BOUCLE_articles(ARTICLES){id_rubrique} {par num titre, titre}>
        [(#REM) On affiche la version de l'article qui existe dans notre langue et uniquement dans notre langue]
        <BOUCLE_traductions(ARTICLES){traduction}{lang}{0,1}>
                [(#REM) On ne le veut qu'une seule fois et non 1 fois par traduction]
                <BOUCLE_artunique(ARTICLES){id_article}{unique}>
                        <li><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></li>
                </BOUCLE_artunique>
        </BOUCLE_traductions>
        </B_traductions>
        [(#REM) Si l'article n'a aucune traduction, il n'a qu'une seule version, que l'on affiche]
        <BOUCLE_articlefinal(ARTICLES){id_article}{id_trad=0}>
                [(#REM) Si la langue de l'article n'est pas la notre on affiche le titre sivi de la langue qui fait guise de lien]
                [(#LANG|=={#ENV{lang}}|?{'',' '})<li>[(#TITRE|supprimer_numero)] | <a href="#URL_ARTICLE"[ hreflang="(#LANG|=={#ENV{lang}}|?{'', #LANG})" title="[(#LANG|traduire_nom_langue)]"]>[(#LANG)]</a></li>]
                [(#REM) Si la langue de l'article est la notre on affiche directement le lien]
                [(#LANG|=={#ENV{lang}}|?{' ',''})<li><a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></li>]
        </BOUCLE_articlefinal>
        </B_articlefinal>
        [(#REM) Si l'article n'a aucune version dans notre langue mais est traduit quand même, on affiche le titre original et les liens vers les différentes versions]
        <BOUCLE_danslanguedorigine(ARTICLES){id_article}{origine_traduction}>
                <li>[(#TITRE|supprimer_numero)]
                <BOUCLE_traductions_sansnotrelangue(ARTICLES){traduction}{' | '}>
                        <a href="#URL_ARTICLE"[ hreflang="(#LANG|=={#ENV{lang}}|?{'', #LANG})" title="[(#LANG|traduire_nom_langue)]"]>[(#LANG|=={#ENV{lang}}|?{'', #LANG})]</a>
                </BOUCLE_traductions_sansnotrelangue>
                </li>
        </BOUCLE_danslanguedorigine>
        <//B_articlefinal>
        <//B_traductions>
</BOUCLE_articles>
</ul>
</B_articles>

2Etape 4 :2

Pour une boucle ARTICLES c’est ok... Maintenant on veut afficher une boucle des sous rubriques et, s’il n’existe qu’un seul et unique article dans la sous rubrique, on affiche l’article dans notre langue. S’il n’existe pas on affiche l’article d’origine.

<B_rubriques_enfants>
<div class="liste_elements">
        #ANCRE_PAGINATION
        <h2 class="invisible"><:rubriques_rubrique:></h2>
        <ul class="liste_rub">
                <BOUCLE_rubriques_enfants(RUBRIQUES){id_parent}{par num titre, titre}{pagination}>
                        [(#REM) Plus d'un article traduit]
                        <BOUCLE_rubriques_plusdun_enfant_traduit(ARTICLES){id_rubrique}{origine_traduction}{1,1}>
                        <li><a href="[(#URL_RUBRIQUE)]">[(#_rubriques_enfants:TITRE|supprimer_numero)]</a></li>
                        </BOUCLE_rubriques_plusdun_enfant_traduit>
                        [(#REM) Un seul article traduit]
                        <BOUCLE_rubriques_unseul_enfant_traduit(ARTICLES){id_rubrique}{origine_traduction}{0,1}>
                               
                                [(#REM) On affiche seulement celui de notre langue]
                                <BOUCLE_rubriques_unseul_enfants_orig_lang(ARTICLES){traduction}{lang=#ENV{lang}}>
                                <li><a href="[(#URL_ARTICLE)]">[(#_rubriques_enfants2:TITRE|supprimer_numero)]</a></li>
                                </BOUCLE_rubriques_unseul_enfants_orig_lang>
                        </BOUCLE_rubriques_unseul_enfant_traduit>
                                [(#REM) Si cet article a été traduit mais n'existe pas dans notre langue, on affiche l'original]
                                <li><a href="[(#URL_ARTICLE)]">[(#_rubriques_enfants2:TITRE|supprimer_numero)]</a>[ | (#LANG|=={#ENV{lang}}|?{'', #LANG})]</li>
                        <//B_rubriques_unseul_enfant_traduit>
                       
                        [(#REM) Des articles non traduits]
                        <BOUCLE_rubriques_plusdun_enfant(ARTICLES){id_rubrique}{1,1}>
                        <li><a href="[(#URL_RUBRIQUE)]">[(#_rubriques_enfants:TITRE|supprimer_numero)]</a></li>
                        </BOUCLE_rubriques_plusdun_enfant>
                       
                        [(#REM) Un seul et unique article dans la rubrique, donc non traduit]
                        <BOUCLE_rubriques_unseul_enfant(ARTICLES){id_rubrique}{0,1}>
                        <li><a href="[(#URL_ARTICLE)]">[(#_rubriques_enfants:TITRE|supprimer_numero)]</a>[ | (#LANG|=={#ENV{lang}}|?{'', #LANG})]</li>
                        </BOUCLE_rubriques_unseul_enfant>
                        [(#REM) Dernière possibilité : aucun article directement dans la rubrique)]
                        <li><a href="[(#URL_RUBRIQUE)]">[(#_rubriques_enfants:TITRE|supprimer_numero)]</a></li>
                        [(#REM) On ferme les boucles]
                        <//B_rubriques_unseul_enfant>
                        <//B_rubriques_plusdun_enfant>
                        <//B_rubriques_unseul_enfant_traduit>
                        <//B_rubriques_plusdun_enfant_traduit>
                </BOUCLE_rubriques_enfants>
        </ul>
        [<p class="pagination">(#PAGINATION)</p>]
</div>
</B_rubriques_enfants>

Exemple d’utilisation de cette dernière boucle : http://lx5.sklunk.net/spip.php?rubrique21

Répondre à cet article


commentaires fermes
Propulsé par : SPIP 2.1.26 SVN [21335]