Carnet Wiki

Multilinguisme

Version 19 — Mars 2018 JLuc

FAQ Multilinguisme

AVERTISSEMENT : beaucoup de codes de cette page sont obsolètes. notamment les codes avec du php en ligne. .... ménage à faire :)

Où trouver la documentation officielle du multilinguisme ?

— http://www.spip.net/fr_article2124.html
— http://www.spip.net/fr_article2128.html
— http://programmer.spip.net/-Element...

Comment activer le multilinguisme sur mon site ?

Lire l’article http://www.spip-contrib.net/article...

Des témoignages détaillés ?

- Article http://romy.tetue.net/comment-je-traduis-mon-site
-  Article http://www.
blanche-de-peuterey.com/Spip-Site-multilingue
-  
Article http://www . guiderdoni.net/SPIP-et-le-multilinguisme.html
-  Article pour le squelette Escal : http://escal.
ac-lyon.fr/spip/spip.php?article151&lang=fr
-  Article pour le squelette Ahuntsic : https://edu.
ca - http://www .edu/la-gestion-de-sites-multilingues

Comment passer la langue dans l’URL ?

Tu peux utiliser les chaînes <:blabla :> qui sont traduites dans le contexte de la boucle actuelle.
Donc si tu as une boucle d’article avec une chaîne localisable dedans, pour chaque article de la boucle, la chaîne sera traduite dans la langue de l’article.

Tu peux passer le critère lang dans les urls à la main, mais si tu règles $forcer_lang à true dans mes_options.php3, alors SPIP le fera
pour toi. Il passera la langue choisie par l’utilisateur avec #MENU_LANG.

Si tu utilises la version 1.7.1, il faut aussi mettre  !lang_select en critère de chacune de tes boucles.
A partir de la 1.7.2, ce n’est plus necessaire.

Tu peux aussi faire des boucles qui listent les articles(ou rubriques) seulement dans une langue, en utilisant le critère lang dans les boucles. Elles seront alors filtrées avec la langue passée dans l’url.

Si tu veux que ton site soit encore plus dynamique tu peux utiliser le critère lang ?, alors les boucles seront filtrées s’il y a la
variable lang dans l’url, sinon elles afficheront tout le contenu.

Comment accéder à la langue en cours dans un filtre perso ?

On ne peut pas la passer en paramètres (ex : [(#BALISE|mon_filtre{lang}] )
Non, il faut simplement y accéder avec $GLOBALS['spip_lang'] dans le corps de la fonction.

Comment accéder à la chaine de langue dont le nom est contenu dans #POMME

Ce n’est pas possible avec <:#POMME:>, mais :
[(#VAL{prefixe:#POMME}|_T)]

Il peut aussi y avoir des arguments dans la chaine définie dans le fichier de langue :
Exemple :
#POMME vaut willams (nom de la chaine de langue)
et la chaine de langue williams vaut Pomme Williams @qualite@ @origine@

On utiliserait dans le squelette :
[(#VAL{prefixe:#POMME}|_T{#ARRAY{qualite,pourrie, origine,France})]
qui afficherait bien :
Pomme Williams pourrie France

On peut aussi ajouter une classe css particulière à appliquer
aux arguments passés :
[(#VAL{prefixe:#POMME}|_T{#ARRAY{qualite,pourrie, origine,France}, info_detail)]
qui afficherait (source html) :
Pomme Williams <span class="info_detail">pourrie</span> <span class="info_detail">France</span>

Comment accéder non pas la langue en cours mais à la « langue principale du site » ?

c’est <?php echo lire_meta('langue_site'); ?>

Contexte, boucle et changement de langue courante

Q : je me sers de la balise <multi> ... [lang] ... </multi> pour traduire les titres de mes articles et rubriques.
Quand je change de langue, la balise #TITRE n’est pas traduite.

R : Dans ton exemple la balise #TITRE appartient à un article et à une rubrique, qui sont des objets disposant d’une langue...
donc c’est la langue de l’objet qui s’applique, par défaut. (elle positionne la langue du nouveau contexte).
Pour que ce soit la langue du contexte englobant, il faut ajouter le critère {!lang_select} ({lang_select=non} SPIP 1.9.1) dans les boucles qui les sélectionnent.

A quoi sert $forcer_lang=true ?

$forcer_lang=true SPIP fixe la langue du contexte sur la langue principale du site, sauf si l’utilisateur a choisi une autre langue dans le #MENU_LANG (auquel cas il renvoie vers l’URL de la page agrémenté d’un ?lang=xx  ?lang=en pour la langue anglaise)
La « langue du navigateur » n’est pas prise en compte.

Fil : rien n’interdit d’utiliser un test de la langue du navigateur pour renvoyer de manière autoritaire vers la page ?lang=xx correspondant à celle-ci si l’utilisateur n’a pas de cookie de langue.
Mais ça n’est pas très utile en général pour un « site Internet » au sens « publication d’informations » ; ça peut se défendre, en revanche, pour un « service en ligne », genre application distante, comme par exemple l’espace privé de SPIP.

$forcer_lang=true et Inclusion de code (INCLURE)

Rappel : le code xxx inclus (<INCLURE(xxx)> ) fonctionne différemment selon le contexte, et donc selon les critères qui lui sont passés : <INCLURE(xxx){critères}> .
Ainsi, si le but est de conserver la langue (qui est passée dans l’URL) dans les <INCLURE>, il faut faire <INCLURE(xxx){lang}>

Utiliser $forcer_lang fera que le critère d’inclusion {lang} se rapportera à la langue de l’URL et pas à la langue de l’objet (article, rubrique, etc).
Fil : Je viens de vérifier que ça fonctionne avec la 1.7.2, aussi bien à l’intérieur qu’à l’extérieur de la boucle principale (ARTICLES){id_article}.

multilinguisme : $forcer_lang=true et #MENU_LANG

Pour ceux qui souhaiteraient que leur site fonctionne de la manière suivante : le visiteur choisit sa langue dans #MENU_LANG, et le site affiche alors tout ce qu’il est possible dans cette langue, indépendamment de la langue des objets déjà affichés... , Pierre ? ne saurait trop conseiller la lecture de :
-  Le Multilinguisme où la manip est très bien expliquée (pour les acharnés : http://thread.gmane.org/gmane.comp.... et http://thread.gmane.org/gmane.comp....)

Différence entre <BOUCLE ... {lang}> et <BOUCLE ...  {lang?}>  ?
Le point d’interrogation permet de rendre le critère « lang » optionnel (voir http://www.spip.net/fr_article2102.html) : ce critère n’est pas pris en compte s’il n’est pas passé dans le contexte. Par exemple s’il n’est pas passé dans l’URL (&lang=en) .

Pourquoi mettre du code dans un <INCLURE> peut-il changer l’exécution ?
Si certaines informations de contexte ne sont pas passées dans l’INCLURE, par exemple la langue courante, alors le fonctionnement sera différent, entre le code total (sans faire appel à un INCLURE) et le code faisant appel à INCLURE.

Mots-clés et multilinguisme
Voir par exemple MultiLinguismeExemple1, site test bilingue 1.7.2 (http://franck.saintgermain.free.fr) où les mots clés et les articles correspondants sont affichés dans la langue choisie par le visiteur.
Les squelettes utilisés sont disponibles dans le répertoire : http://franck.saintgermain.free.fr/...
Voir aussi la VariantePour3langues de cet exemple, avec mots-clés, qui utilisent les mêmes squelettes et le même ensemble d’articles (et de mots-clés) pour tester le fonctionnement

Comment faire bénéficier une traduction des mots-clé de l’article original ? (voir aussi la « Variante » un peu plus bas)

<BOUCLE_principale(ARTICLES){id_article}>
    <BOUCLE_artmots(ARTICLES){traduction}{origine_traduction}{lang_select=non}>
        <BOUCLE_mots(MOTS){id_article}>
            #TITRE
        </BOUCLE_mots>
    </BOUCLE_artmots>
</BOUCLE_principale>

Le critère {lang_select=non} sert à conserver le contexte de langue de l’article en cours d’affichage (et non celui de son article original), de manière à ce que les blocs <multi> dans le #TITRE du mot-clé s’affichent bien selon la langue désirée.

La combinaison des critères {traduction}{origine_traduction} {lang_select=non} permet donc de sélectionner les articles originaux, et de ne pas utiliser leur langue.

La boucle(MOTS) suivante permet donc de trouver les mots clés de chaque article, et de les afficher dans la langue de l’article en cours d’affichage (et non dans la langue originale). (on suppose bien sûr que les mots clés ont été décrits en plusieurs langues grâce aux blocs multi).

Cette imbrication de boucles permet donc d’afficher la liste de tous les mots clés utilisés dans les articles originaux, traduits dans la langue de l’article affiché.
En principe, puisque cela ne fonctionne pas sur la 1.7.2. Mais cela fonctionne sur la version Spip CVS, selon Fil.
J’en confirme le bon fonctionnement sur la CVS du 13/12/04


variante
Comment faire bénéficier une traduction des mots-clé de l’article original ?
mais avec lien sur le mot dans la langue de l’article courant
Votre site est multilingue, vous utilisez pour vos articles traduits les mot-clefs de l’article « de référence »

Article.html utilise donc le code :

<BOUCLE_principale(ARTICLES){id_article}>
<BOUCLE_artmots(ARTICLES){traduction}{origine_traduction}{lang_select=non}>
       <BOUCLE_mots(MOTS){id_article}>
           #TITRE
       </BOUCLE_mots>
   </BOUCLE_artmots>
</BOUCLE_principale>


merci Fil : http://www.spip-contrib.net/spikini...

Vous affichez ainsi dans les articles traduits les mots-clefs utilisés par l’article d’origine, ça vous évite de les saisir à nouveau.

Et pour que cette boucle renvoie vers le mot-clef mais dans la langue de l’article (en anglais si votre article est anglais) :

en début de votre page html, juste au-dessous de la ligne <html lang="#LANG">
ajouter :
<?php $lalangue = '[(#LANG)]'; ?>

votre boucle est désormais :

<BOUCLE_principale(ARTICLES){id_article}>
<BOUCLE_artmots(ARTICLES){traduction}{origine_traduction}{lang_select=non}>
       <BOUCLE_mots(MOTS){id_article}>
			<a HREF="#URL_MOT&lang=<?php echo $lalangue; ?>">#TITRE</a>
       </BOUCLE_mots>
</BOUCLE_artmots>
</BOUCLE_principale>


en cliquant sur le mot-clef, le visiteur bénéficiera de la page du mot avec les menus etc dans la langue de l’article qui l’a conduit à ce mot-clef.

Arrivés là, on aura par exemple en cliquant sur un mot-clef n° 76 depuis un article en anglais une url de type : http://www.monsite.com/mot.php?id_mot=76&lang=en

Bon, sympa, mais on aurait peut-être envie de ne trouver sur cette page Mot n° 76 en anglais QUE les articles EN ANGLAIS dont l’article d’origine en français est lié à ce mot ...
on change donc, pour Mot.html, la boucle du squelette d’origine :

<BOUCLE_articles(ARTICLES) {id_mot} {par titre}>
	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
	<div class="detail">
	[(#DATE|nom_jour)] [(#DATE|affdate)]
	<B_auteurs><:par_auteur:> <BOUCLE_auteurs(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs>
	</div>
	<br>
</BOUCLE_articles>

par :

<BOUCLE_articles_selection_mot(ARTICLES) {lang_select=non} {id_mot}>
<BOUCLE_articles_langue(ARTICLES) {traduction} {lang?} {par titre}>
	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
	<div class="detail">
	[(#DATE|nom_jour)] [(#DATE|affdate)]
	<B_auteurs><:par_auteur:> <BOUCLE_auteurs(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs>
	</div>
	<br>
</BOUCLE_articles_langue>
</BOUCLE_articles_selection_mot>

la boucle articles_selection_mot appelle tous les articles « d’origine » liés à ce mot, et la boucle articles_langue demande d’en afficher les traductions qui correspondent à la langue passée dans l’url.

rappels :
-  Avec cette série de boucles, nous n’avons affecté des mot-clefs qu’aux articles d’origine, les articles traduits n’en ont « en réel » aucun.
-  Il est absolument indispensable pour que ces boucles fonctionnent, pour chaque article, de ne pas oublier de spécifier le n° de l’article d’origine dans le cadre « LANGUE ET TRADUCTIONS DE L’ARTICLE » de l’espace privé au moment de la validation de l’article.

par Soÿ le 7/06/04


Comment utiliser les critères {traduction} et {origine_traduction} ?

Voir le message d’Arno*, http://article.gmane.org/gmane.comp... (il est long mais essentiel).

En résumé : le critère {traduction} permet de sélectionner les articles qui ont OU sont une traduction.
Le critère {origine_traduction} permet de sélectionner les articles qui sont des originaux (à l’origine)
Combiner ces deux critères {traduction}{origine_traduction} sélectionne donc les articles originaux (« de référence » selon la terminologie utilisée dans Spip).
Et l’ajout de {exclus} exclut du résultat l’article déjà affiché.

Complément d’info qui peut aider à comprendre le fonctionnement : les articles qui ont ou sont une traduction sont repérés comme faisant partie d’un « groupe de traduction ». (analogie avec les mots-clés et les groupes de mots-clés)

Comment obtenir dans une combo-box toutes les traductions d’un article ? (voir contrib

Voici une petite combine qui permet d’y accéder en cliquant simplement sur la combo-box.
Si l’article n’a pas de traduction la combo-box n’apparait tout simplement pas.

Insérer dans votre boucle d’article le code suivant :

<B_traductions>
<select onchange="location.href='article.php3?id_article='+this.options[this.selectedIndex].value" class="formulaire">
<option>Language</option>
<BOUCLE_traductions(ARTICLES){traduction}{exclus}>
[<option value="#ID_ARTICLE" dir="#LANG_DIR">(#LANG|traduire_nom_langue)</option>]
</BOUCLE_traductions>
</select>
</B_traductions>

Comment faire une page d’accueil dynamique ?

De nombreux sites proposent une page d’accueil qui « parle » au visiteur dans « sa » langue. Voir par exemple http://laurent-laville.org/spip/art... ; cependant, les développeurs de SPIP ne fournissent pas de méthode pour faire cela, car on peut argumenter que cela relève d’une mauvaise méthode : les visiteurs ont rarement configuré la « langue préférée » de leur navigateur - on risque donc de mettre à côté. Par ailleurs, la notion « une URL = un contenu défini » permet des choses aussi simples que l’hypertexte (si je signale, par un lien, un article, et que celui qui suit le lien en voit un autre, ça pose un petit problème...).

Peut-on utiliser la langue des auteurs ?

Lorsqu’un auteur a choisi sa langue dans l’espace privé, on peut vouloir utiliser cette donnée pour afficher sa page auteur.php3?id_auteur=xx dans la langue en question. Par défaut, ce n’est pas le cas : la boucle AUTEURS ne modifie pas la langue du contexte. On peut inverser cela en ajoutant le critère {lang_select} ou {lang_select=oui} dans la boucle.

Comment fait le site www.spip.net pour avoir ces URLs contenant la langue ?

— On utilise un fichier inc-urls.php3 particulier, www.spip.net/inc-urls-spipnet.php3.

Des infos de synthèse (voir à la fin de cette page) : DocMulti

Comment enrichir les fichiers de langues par des chaines perso ?

On crée le fichier lang/perso.php3 dans lequel on associe à chaque clé ses différentes traductions.
Exemple, si la chaine clé « login_login2 » doit être traduite par « Give me your ID » en Anglais et par « C’est quoi ton blaze » en Français,
on trouvera dans ce fichier :

$GLOBALS[« i18n_spip_en »][’login_login2’] = « Give me your ID : » ;
$GLOBALS[« i18n_spip_fr »][’login_login2’] = « C’est quoi ton blaze : » ;

Et pour accéder à la valeur dans un champ d’objet spip, il suffira d’inclure :
... en bonne place.

Mise à jour : Il s’agit alors de créer des fichiers de langue personnels, sur le modèle des fichiers public.... Pour créer ses propres fichiers, on installera, dans votre répertoire de squelette ou dans le répertoire /ecrire/lang :

— local_fr.php3 pour définir les chaînes en français,
— local_en.php3 en anglais,
— ... (extrait de http://www.spip.net/fr_article2128.html)

Moteur de recherche et Multilinguisme

— La partie indexation des articles peut varier selon la langue de l’article considéré : voir par exemple http://www.spip.net/fr_article2102.html pour l’indexation de l’allemand et du vietnamien.

— Pour la recherche, on peut imaginer un pré-traitement de la chaîne demandée, si le site est susceptible d’avoir pas mal de requêtes en allemand ou en vietnamien, afin de bénéficier d’une meilleure pertinence des résultats.

Comment chercher les objets dont le titre (multi) contient le mot recherché mais seulement dans la langue passée dans l’environnement ?

Dans l’exemple qui suit, recherche dans les motclés :

 #SET{regmult, #VAL{\[#LANG\][^\[]*}|concat{#ENV{rec}}}
<BOUCLE_m(MOTS) {titre == #GET{regmult}} {"<br />"}>
#TITRE
</BOUCLE_m>
<blockquote class="spip">

Explications :

#SET
on définit préalablement la regexp qui sera utilisée dans
le critère. ce faisant, on se permet d’utiliser les [
qui exploseraient le critère sinon ;

#VAL
obligatoire pour pouvoir utiliser le |concat qui suit ;

\[#LANG\]
permet de récupérer la langue du contexte : deviendra donc
littéralement [fr] ou [en] ;

[^\[]*
suite du motif de la regexp : n’importe quel caractère autre que [
zéro ou plusieurs fois. Cela permet ainsi de se limiter à un seul
élément du bloc <multi> compris entre ] et [ ;

|concat
obligatoire pour que #ENV ne soit pas pris comme motif
de la regexp mais bien interprété par le compilateur de spip.
dans notre exemple deviendra donc littéralement equa .

à partir de l’exemple donné :
recherche de ’equa’ dans <multi>[en]Ecuador[fr]Equateur</multi>>

le sql résultant dans un contexte anglais :
mots.titre REGEXP '\\[en\\][^\\[]*equa'
donc rien (aucun retour)

le sql résultant dans un contexte français :
mots.titre REGEXP '\\[fr\\][^\\[]*equa'
donc ’Equateur’ (bon retour)

</blockquote>

Utiliser {lang?} pour lister les résultats d’une recherche

Paolo : Sur notre site (test), lorsque le visiteur utilise ce formulaire de recherche

<a name='formulaire_recherche'></a>
<form action='t_recherche.php3' method='get' name='form_rech'>
<input type='hidden' name='lang' value='#LANG'>
<input type='text' name='recherche' value=" <:search:>" size='20' onClick="this.value=''">
</form>

La ligne <input type='hidden' name='lang' value='#LANG'>
insère la valeur de la langue en cours dans l’URL quand le formulaire est déclenché.

Mais la page d’accueil du site (qui chez moi présente un choix de langues) n’a pas de langue précisée, et j’y voudrais aussi un formulaire de recherche - qui retournera des résultats non pas d’une langue seulement, mais de partout dans le site, de n’importe quelle langue.

Le formulaire est presque identique ; on enlève simplement la ligne qui ajoute lang=.. dans l’URL :

<a name='formulaire_recherche'></a>
<form action='t_recherche.php3' method='get' name='form_rech'>
<input type='text' name='recherche' value=" <:search:>" size='20' onClick="this.value=''">
</form>

Et sur la page recherche.html ?
Il n’y pas de « boucle principale » qui englobe toute la page. Cette boucle donne les résultats de la recherche :


Comment avoir des liens de traduction virtuels sur les rubriques
Une solution simple se trouve dans la La caverne aux boucles mais n’est pas toujours applicables. Il y a alors la solution des mots clefs :
16/05/2004 par Soÿ : « Les rubriques NE PEUVENT MALHEUREUSEMENT pas avoir de lien sur leur traduction »
Si si, comme pour la poste, c’est possible !
1/ Récupérer tous les numéros des rubriques dans la langue d’origine (noter tous les numéros de vos rubriques en français).
2/ Créer un nouveau groupe de mot-clefs « origine rubrique » par exemple, groupe n° 5, contenant les numéros des dites rubriques (1 mot-clef par rubrique, et titre du mot-clef=numéro de chaque rubrique).
3/ Assigner à chaque rubrique d’origine le mot-clef portant son propre numéro,
et aux rubriques « traduites » correspondantes le même numéro (que celui de la rubrique d’origine)
exemple : la rubrique dreamcast en français est la rubrique n° 4, le mot-clef à lui assigner sera donc le 4, ainsi que le mot clef à assigner à toutes les autres rubriques dreamcast traduites en langue étrangère.
Enfin, pour naviger d’une rubrique à l’autre, insérer dans votre code html, je vous conseille de le mettre juste après la ligne <div class="contenu" id="principal">

dans le squelette de vos rubriques :

<!-- liens vers rubriques traduites -->


<BOUCLE_mots2(MOTS) {id_rubrique} {id_groupe=5}>
	<B_rubriques_mots>
		<BOUCLE_rubriques_mots2(RUBRIQUES){id_rubrique}{id_mot} {id_groupe=5} {0,1}>
	<div style="text-align:right" class="petitbeigegras">
		  <span style="white-space: nowrap;"> <b><span dir="#LANG_DIR">[- (#LANG|traduire_nom_langue)]</span></b></span>  
	<BOUCLE_rubrique_tante2(RUBRIQUES){par titre}{id_mot} {id_groupe=5}{exclus} >
		  <span style="white-space: nowrap;"> <a href="#URL_RUBRIQUE"><span dir="#LANG_DIR">[- (#LANG|traduire_nom_langue)]</span></a></span>  
	</BOUCLE_rubrique_tante2>
	</div>
		</BOUCLE_rubriques_mots2>
	</B_rubriques_mots>
</BOUCLE_mots2>


<!-- fin liens vers rubriques traduites -->

P.S.
changer le id_groupe=5 par le numéro de votre groupe de mot-clefs « origine rubrique »
changer les class ... ça m’étonnerait que « petitbeigegras » soit dans vos CSS ! laissez si besoin seulement
<div style="text-align:right">

Comment avoir des liens de traduction virtuels entre rubriques et sans mots-clés
Même principe et référence qu’ énnoncé ci-dessus :
* La caverne aux boucles
* renforcé par [http://programmer.spip.net/Forcer-un-changement-de-langue-d]

[(#REM) sélectionne la rubrique en cours,  #ENV{id_rubrique} est peut-être facultatif]
  <BOUCLE_idrub(RUBRIQUES) {id_rubrique=#ENV{id_rubrique}}{doublons}>


[(#REM) Selectionne les articles de la boucle _idrub qui ont une traduction {id_trad > 0}]
    <BOUCLE_art_traduits(ARTICLES){id_rubrique}{id_trad > 0} {par lang} {doublons}>


[(#REM) Selectionne les articles traductions  des articles de boucle  -art_traduits]
      <BOUCLE_trad(ARTICLES){traduction}  {exclus}>
        
        [(#REM) pour chaque article traduit dans boucle  _trad,, sélectionne son #ID_RUBRIQUE]
        [(#REM) Dans ce cas, les articles traduits doivent etre classés par langue UNE SEULE rubrique par langue ]       
        [(#REM) Si il y a plusieurs langues , il y a plusieurs #ID_RUBRIQUE, la boucle _rubtrad les sélectionne tous et affiche plusieurs liens de traductions, ]
         <BOUCLE_rubtrad(RUBRIQUES) {id_rubrique=#ID_RUBRIQUE}{unique}>


[(#REM) voir http://programmer.spip.net/Forcer-un-changement-de-langue-d pour l'explication de l'action converser] 
<a href="[(#VAL{converser}|generer_url_action{[redirect=(#URL_RUBRIQUE|parametre_url{var_lang,#LANG})]})]" rel="alternate" hreflang="#LANG">[(#LANG|majuscules)]</a>
        </BOUCLE_rubtrad>  
      </BOUCLE_trad> 
   </BOUCLE_art_traduits>
  </BOUCLE_idrub>	 

marc mjhvc

Y a til un moyen de traduire le titre de ses differentes rubriques ?
La méthode que j’ai utilisée est la suivante (pour un site bilingue français / anglais)
Je n’ai pa crée de secteur par langue, j’ai juste creer mes rubriques, j’écris mes articles et je les traduis quasiment tous en anglais
Ce que je fais, je donne comme titre à mes rubriques une balise multi .
exemple :
<multi>[en]Some useful Links [fr]Liens Divers</multi>
et pour les afficher j’utilise la boucle :

<BOUCLE_rubrique_choisie(RUBRIQUES){id_rubrique}{!lang_select}>[(#TITRE)]</BOUCLE_rubrique_choisie>


Pour afficher les articles :

<BOUCLE_article_choisi(ARTICLES){id_article}{lang}>
                [(#TITRE)]<BR>
                [(#TEXTE)] 
                </BOUCLE_article_choisi>


le fait qu’il y ai {lang} suppose que l’on passe la variable lang par l’adresse, moi je l’ai mise à la main dans mes liens
et ainsi j’ai un site bilingue
Pour les éléments qui ne changent pas, comme les titres de mon interface , dans ce cas il faut utiliser les chaines <:bla bla :>
c’est à dire dans mon cas , si je veux afficher à l’internaute « bonjour » dans sa langue,
je rajoute dans public_en.php3 :
"bonjour","Good Morning to you",
et dans public_fr.php3
"bonjour","bonjour à toi !",
et pour l’afficher dans mon squelette , à l’endroit où je veux que cela apparaisse je met :
<:bonjour:>

[thierrybo] Je suis dans la même configuration (« pa crée de secteur par langue, j’ai juste creer mes rubriques, j’écris mes articles et je les traduis quasiment tous en anglais »), et c’est plus simple que çà. Une fois ajouté <multi>[en]Category 1 [fr]Rubrique 1</multi> dans le nom de ma rubrique, elle change sur le site dès qu’on change le menu langue, rien à faire de plus (spip1.8.2). On suppose évidemment que le site est déjà configuré pour le multilangue ($forcer_lang=true ; , dans l’interface d’admin, et #MENU_LANG dans les quelettes) [/thierrybo]

Une méthode pour la traduction dynamique des noms de rubriques en utilisant les fichiers local_xx.php3.

La méthode <multi> ci-dessus va pour un site à deux langues, et encore, mais elle est quand même bien contraignante. Il faut une solution pour taper dans les fichiers local_xx.php3. En voici une que j’ai postée dans ce thread, qui utilise les fonctions avant_typo() et apres_typo() à mettre dans mes_fonctions.php3, et qui permet de ne mettre qu’une balise dans le titre de la rubrique (ou tout autre champ, d’ailleurs). Je ne suis pas développeur, et il serait bon que quelqu’un de compétent complète ce code de façon à pouvoir peut-être aussi isoler les balises en question dans le corps du texte.

Dans l’aide en ligne pour les rédacteurs , il n’y a aucune explication de la traduction

voici un brouillon, MultilinguismeExplicationRedacteur

Créer en ligne une nouvelle traduction d’un article puis afficher la prévisualisation après la validation

[(#ENV{nelle_trad}|non)#FORMULAIRE_EDITER_ARTICLE{new,#ID_RUBRIQUE,#URL_PAGE{article}|parametre_url{var_mode,preview}|parametre_url{nelle_trad,1},#ID_ARTICLE}]

lire aussi

— -

Variante - Construire un index de mots clés multilingue

Pour construire un lexique à partir d’un groupe de mots clés dont les titres sont multilingues
(Titre),
je souhaite sélectionner les mots par la première lettre du titre.

En définissant une variable pour les lettres en recherche

[(#SET{rech,[(#TITRE|supprimer_numero|couper{1})][(#TITRE|supprimer_numero|strtolower|couper{1})]})]

On peut utiliser ainsi pour construire un index :

#SET{regmult, #VAL{\[#ENV{lang}\][#GET{rech}]}}

Ce qui permet de construire cette boucle simple qui ressort tous les mots commençant par la même lettre que le mot en cours, dans un contexte multilingue (blocs multi dans le titre).
Ca peut s’adapter pour les autres tables.

<BOUCLE_mot(MOTS){id_mot}>
<a href="?page=groupe&id_groupe=#ID_GROUPE&lang=#LANG">[(#TITRE_GROUPE|supprimer_numero)]</a>
[(#REM) Recuperer les autres mots qui commencent par la meme lettre http://www.spip-contrib.net/FAQ-Multilinguisme]
[(#SET{rech,[(#TITRE|supprimer_numero|couper{1})][(#TITRE|supprimer_numero|strtolower|couper{1})]})]
#SET{regmult, #VAL{\[#ENV{lang}\][#GET{rech}]}}
<BOUCLE_mots_liste(MOTS){id_groupe}{titre == #GET{regmult}}{par titre}>
<li><a href="?mot#ID_MOT&lang=#LANG">[(#TITRE|supprimer_numero)]</a></li>
</BOUCLE_mots_liste>
</BOUCLE_mot>

Ca marche nickel et c’est super rapide.
Seule faiblesse, il faut que la première lettre soit une lettre. Il faudrait améliorer pour que ça fonctionne aussi avec des chiffres (avec LIKE ?)

Merci à Jean-Luc pour son aide.

Pierrick

ps. Le squelette groupe n’est pas dans la DIST. Il faut le créer.


Comment afficher l’ID et un LOGO_MOT de l’article d’origine s’il existe, et sinon : celui de l’article en cours ?

==> Merci à Jean-Christophe pour son aide à la construction de cette boucle

Contexte :
-  spip 2.1
-  Menu langue + $forcer_lang=true

<BOUCLE_article_en_cours(ARTICLES){id_article}>


<BOUCLE_trad(ARTICLES){traduction}{origine_traduction}>


<:chaine_langue_eventuelle_1:>
		<BOUCLE_mot1(MOTS){id_article}>
		#LOGO_MOT
		</BOUCLE_mot1>


<:chaine_langue_eventuelle_2:>  #ID_ARTICLE


</BOUCLE_trad>


<:chaine_langue_eventuelle_1:>
		<BOUCLE_mot2(MOTS){id_article}>
		#LOGO_MOT
		</BOUCLE_mot2>


<:chaine_langue_eventuelle_2:>  #ID_ARTICLE


<//B_trad>


</BOUCLE_article_en_cours>

Par Carine, 08/07/2011


Lire une balise multi dans une autre langue que celle du contexte

Le plus simple est d’utliser le filtre extraire_multi

Sinon il existe aussi change_typo
ex. http://core.spip.org/projects/spip/...