Ce billet rassemble quelques notes sur les manipulations que j’ai mis en oeuvre pour permettre l’utilisation de plusieurs domaines sur le site du webzine Le Taurillon, construit en SPIP. N’hésitez pas à faire part en commentaire de vos observations sur la méthode retenue.
SPIP propose tout ce qu’il faut pour construire un site web éditorial de type magazine. C’est même ce qu’il fait le mieux. De même il dispose de nombreuses possibilités pour la construction d’un site multilingue.
Le Taurillon, conçu initialement en français, rapidement pendant l’été 2005, est un site désormais publié en quatre langues. Chaque langue correspond en réalité à une publication différente car, même si de nombreux articles sont traduits, les équipes éditoriales sont distinctes.
- Le Taurillon est publié par JEF-France, en français, utilise taurillon.org ;
- The New Federalist est édité par JEF-Europe en anglais, a pour domaine thenewfederalist.eu ;
- Eurobull est publié par JEF-Italie, en italien, avec eurobull.it ;
- Treffpunkt Europa, enfin, est publié par JEF-Allemagne, en allemand, donc, avec treffpunkteuropa.de.
Le site est organisé à l’aide d’un secteur par langue. Chaque secteur (rubrique de premier niveau) ne contiens donc que des articles dans la même langue.
Les articles et rubriques ayant une langue, il est possible au sein de la boucle ARTICLE, ou RUBRIQUE, d’utiliser la balise #LANG pour récupérer la langue du contexte. Pour le reste du site il faut utiliser un paramètre de langue dans l’URL : &lang=fr que l’on récupère à l’aide de #ENVlang. Le critère lang permet ensuite dans les boucles l’acceptant de filtrer le contenu par langue. Pour en savoir plus lire la rubrique "Multilinguisme" sur site "Programmer avec SPIP 2.0".
C’est ainsi le cas de la page d’accueil. Ainsi, http://www.taurillon.org/?lang=fr affiche la page d’accueil du Taurillon, mais http://www.taurillon.org/?lang=de affichera la page d’accueil... de Treffpunkt Europa.
Un domaine par langue
La première étape a été de demande aux propriétaires des domaines de les configurer avec les NS de OVH, l’hébergeur du site. Chez ce dernier, j’ai pu faire pointer tous les domaines vers le même répertoire, celui où est installé le site, à l’aide d’enregistrements DNS de type A.
Par défaut, c’est la page francophone (langue par défaut du site) qui s’affiche. Pour que chaque domaine retrouve la page d’accueil correspondante c’est le fichier .htaccess qui est appelé à l’aide :
RewriteCond %HTTP_HOST ^www.thenewfederalist\.eu$RewriteRule (.*) spip.php ?lang=en [QSA,L]
Jusqu’à la page d’accueil, tout vas bien, donc. Le problème est qu’un clic vers un article dans une autre langue conserve le nom de domaine actif. On se retrouve donc avec des articles en français ou en allemand sous le domaine anglophone.
Et c’est mal.
Pour parer à cette situation j’ai mis en place deux systèmes :
1) Indiquer l’URL canonique de la page : afin de ne pas troubler les robots (c’est fragile ces engins), j’ai ajouté dans le head une ligne indiquant l’URL canonique de la page, c’est à dire l’URL que je leur demande de prendre en compte pour chaque page. Un article en allemand aura donc dans le code de la page une ligne du type :
2) Pour les humains, et les robots malcomprenants, je modifie les #URL_ARTICLE et #URL_RUBRIQUE, qui génèrent un lien relatif, pour proposer un lien absolu avec le domaine.
Pour ce faire j’avais envisagé d’utiliser le plugin "Multidomaines". Celui-ci permet, à l’aide d’un champ Extra (oui il faut installer aussi ce plugin), d’associer un domaine à une rubrique. Je ne l’ai pas utilisé pour trois raisons : je n’ai pas besoin de toutes ses fonctions, je n’aime pas (plus) installer trop de plugins (impact sur lesperformances, complique la maintenance et l’évolutivité du site), enfin, quand je l’ai activé j’ai eu un message d’erreur et je n’ai pas insisté.
J’ai utilisé les chaines de langue de SPIP : j’ai créé une chaine <:domaine :> et indiqué dans chaque fichier de langue le domaine correspondant. Je peux donc utiliser cette chaine partout où j’ai besoin du domaine, car je dispose de la langue dans le contexte partout, soit dans la boucle, soit dans l’URL (paramètre lang). Par exemple dans une boucle ARTICLES, j’indique comme lien href="<:domaine :>/#URL_ARTICLE".
Les limites de l’approche retenue
Naturellement, cette méthode a des limites.
- elle implique de modifier tous les squelettes. C’est également le cas avec le plugin qui propose ses propres balises. Pour l’instant je n’ai traité que les squelettes essentiels. J’adopterai l’approche systématiquement lors d’une refonte, et au fur et à mesure d’ici là.
- elle ne peut avoir d’effet pour une boucle affichant des contenus en plusieurs langues (une boucle FORUM par exemple, celle-ci n’acceptant pas le critère lang) : les URL utilisent alors le domaine en cours.
- les statistiques de fréquentation sont en partie faussées, chaque URL étant comptabilisée comme un site référent tiers. Il faut que j’étudie les configurations possibles dans Google analytics
Méthodes alternatives
Plusieurs autres méthodes sont à étudier.
- le mutualisé : plusieurs sites SPIP (dans des répertoires différents) qui pourraient partager une même base de données (pour permettre la gestion des liens de traduction ou des auteurs communs). À vérifier : cette solution permet-elle de partager un même jeu de squelettes ?).
- Utilisation du htaccess pour réécrire l’URL en fonction du paramètre lang pour y placer le bon domaine : je ne suis pas sur que ce soit possible, il faut que j’étudie plus la syntaxe pour RewriteCond
Un billet à mettre à jour donc, si je découvre une meilleure méthode. Mais pour l’instant l’essentiel semble fonctionner.
Mise à jour
31/03/2010 : Le carnet-SPIP propose différentes méthode, notamment à base de php. Cf. http://www.spip-contrib.net/MultilinguismeExemple6