Carnet Wiki

Urls multiples pour langues multiples et articles multilingues

Jeu d’url dans différentes langues utilisées

Comment générer un jeu d’url dans différentes versions de langue à partir d’une extraction d’un bloc multi dans le champ indiqué par table_titre ?
L’idée est de pouvoir utiliser la version de langue d’une url en fonction de l’alias du domaine d’appel (correspondant à une version de langue du site).

-  b_b : regarde ce qu’on fait sur spip.net (squelette galactic_spip) qui utilises des urls différentes en fonction du secteur de langue des articles et rubriques cf galactic_spip_net/trad.php

-  Arno* : Sur OrientPalms, où je propose les mêmes « contenus » mais en différentes langues, en fonction du sous-nom de domaine, je gère ça assez simplement directement dans config/$mes_options.php :

$host = str_replace(":8080", "", $_SERVER["HTTP_HOST"]); // car varnish

 if ($host == "orientpalms.com") $_GET["lang"] = "en";
	else if ($host == "www.orientpalms.com") $_GET["lang"] = "en";
	else if ($host == "fr.orientpalms.com") $_GET["lang"] = "fr";
	else if ($host == "ru.orientpalms.com") $_GET["lang"] = "ru";
	else if ($host == "ar.orientpalms.com") $_GET["lang"] = "ar";
	else if ($host == "it.orientpalms.com") $_GET["lang"] = "it";
	else if ($host == "de.orientpalms.com") $_GET["lang"] = "de";
// etc

Ainsi tu as une version en anglais, en arabe, etc., des mêmes articles, rubriques, etc., selon le sous-nom de domaine utilisé.

Comment avoir une url par langue pour des articles multilingues ?

En fait, mon site percussionafricaine.com a cinq alias pour afficher les contenus dans différentes langues : afrikanische-percussion.com, african-percussion.net, percusion-africana.com et pêrcussioni-africane.com

La langue est donc déterminée par l’alias utilisé (merci Arno*) et l’arborescence est organisée par secteur de langues. L’arborescence du catalogue évolue peu, ce n’est donc pas gênant pour l’intégrateur de créer une rubrique et ses traductions dans les différents secteurs lorsque c’est nécessaire. Et donc, pas de problème côté url (et surtout référencement) puisqu’on a bien une url différente par version de langue.

Mais pour les articles (hors articles statiques), il y a quotidiennement des articles de type fiche produit à créer, et ce ne serait pas pratique ni efficace pour l’intégrateur de se lancer dans la création d’autant d’articles que de version de langue. D’où le choix de créer un seul article, placé dans le secteur de la langue de référence (le français) et d’utiliser des blocs pour afficher le contenu dans la bonne langue en fonction du nom de domaine. Mais dans ce cas, l’url propre n’est générée que dans une seule langue, malgré l’utilisation d’un bloc dans le titre. L’idéal aurait été que l’url soit générée dans toutes les langues du bloc , et que l’appel à l’une ou l’autre de ces url renvoient au même article.

Est il possible dans ce cas d’attribuer plusieurs url à un article ? Comment générer automatiquement ces urls « multilingues » à partir des extrait du bloc ?

mm : de mémoire indiquer « fr:monurl » dans le formulaire d’édition d’url d’un article pour le multilangue (pour un SPIP récent au moins), « mais il faut que le module d’URL la prenne en charge ».

/**
 * Verifier la saisie de l'URL
 * on peut prefixer par une langue au format
 * fr:Mon-URL-fr
 * en:My-english-url
 * pour specifier la langue de l'URL (mais il faut que le module d'URL la prenne en charge)
 * @param $type
 * @param $id
 * @return array
 */
function formulaires_editer_url_objet_verifier_dist($type, $id) { ... }

Rastapopoulos : C’est pris en charge au moins par les URL arbo, en activant avec le define :

define('_url_arbo_multilang', true);

Avec ça pour les nouveaux contenus, si t’as des balises multi dans le titre, ça générera des URL différentes par langues (par exemple pour des rubriques communes traduites en multi).

Attention : ça ne le va pas le faire magiquement pour les contenus déjà existants. Pour ces derniers, il faut ailler dans la gestion des url et ajouter des URL en explicitant la langue en premier comme a dit @marcimat, avec le format : « code:mon-url ». Donc par exemple : « en:my-great-url »

Ou bien autre méthode pour les contenus déjà existants et dans le cas où tu veux que toutes les URL soient fabriquées à partir des mots du titre : toutes les supprimer dans le tableau des URL, et SPIP va les re-génèrer toutes, cette fois-ci dans toutes les langues du multi.

JLuc - Mise à jour :3 février 2023 à 00h08min