Coucou,
et voici la dernière pierre qui manquait au chateau multilingue :
l'affichage du contenu en fonction des préférences de langue du visiteur.
Bizarrement, c'est ce qu'il fallait faire en dernier, car le cache de SPIP
implique pas mal de contraintes.
Comment ça marche :
- si un squelette (sommaire.html, par exemple) doit s'adapter à la langue du
visiteur, il faut le préciser en ajoutant, dans le fichier d'appel
(sommaire.php3), en ajoutant la ligne
$multilang = true;
- à ce moment-là, le squelette s'enregistrera dans un cache différent en
fonction de la langue du visiteur, et respectera cette langue comme s'il
s'agissait de la "langue du site" (pour les formulaires, par exemple), ou
de la "langue du contexte" (pour le critère {lang})
Exemple :
<BOUCLE_articles(ARTICLES){lang}>#TITRE</BOUCLE_articles>
donnera tous les titres des articles de la langue du visiteur.
- une balise #FORMULAIRE_LANG affiche un menu de sélection de langue.
Exemple :
<html lang="#LANG" dir="#LANG_DIR">
<div align="right">#FORMULAIRE_LANG</div>
<BOUCLE_articles(ARTICLES){lang}{par date}{inverse}{0,1}>
#TITRE - [(#DATE|affdate_court)]</BOUCLE_articles>
</html>
affichera l'article le plus récent dans la langue sélectionnée dans le
menu en haut à droite.
- On peut utiliser $multilang dans les INCLURE, par exemple si seul le
formulaire d'inscription au site doit être multilingue-visiteur (comme par
exemple sur http://www.spip.net/rubrique4.html ), il vaut mieux garder
le squelette normal en fonctionnement noraml, pour ne pas le recalculer
pour chaque langue (alors qu'il va donner le même résultat dans toutes les
langues-visiteur) ; et mettre le formulaire en question en
<INCLURE(formulaire-inscription.php3)>
en indiquant $multilang=true; dans formulaire-inscription.php3, et en
mettant juste #FORMULAIRE_INSCRIPTION dans le squelette correspondant,
formulaire-inscription.html
- La variable d'URL lang=xx, ou celle précisée avec
<INCLURE(...){lang=..}> s'impose sur celle du visiteur.
- $multilang est une variable globale, qui descend en cascade dans les
fichiers inclus ; donc, si on inclut un squelette indépendant de la
langue du visiteur, il vaut mieux mettre $multilang=false; dans le fichier
inclus, histoire de ne pas multiplier les fichiers cache (et leurs
problèmes de synchronisation).
- le cache multilingue-visiteur est géré comme suit : lorsque SPIP veut lire
ou écrire le fichier cache d'un squelette marqué "$multilang", il ajoute
simplement -$lang à son nom.
-- Fil