CHAPITRE 21 — Gérer le multilingue (pages sœurs)
🌍 Chapitre 21 — Gérer le multilingue (pages sœurs)
Dolibarr Website propose deux patternsmodèles multilingues différents. IlIdentifier fautle comprendremodèle lequelque vous utilisez avantest d'écrireune laétape moindrepréalable ligneà toute écriture de code. Ce chapitre vous guide entreprésente les deux options et vousla montremanière commentdont InfraSStudiole module s'y branche.intègre.
🔀 Les deux patternsmodèles multilingues
| Caractéristique |
|---|---|
A. Slot par (recommandé) |
|
B. Pages sœurs (legacy) |
,
,
). |
✅Recommandé Recommandation 2026— — UtilisezAdoptez le patternmodèle A pour tout nouveau site. Le patternmodèle B reste supportépris en charge pour la migration progressive de sites existants. Le module fournit un outil de consolidation B →vers A si besoin.A.
🅰️ PatternModèle A — Slot par localelangue (le défautstandard moderne)
Comment ça marche
Fonctionnement
Une seule page Dolibarr Website existe par concept (ex.par exemple about). Le fichier tpl.php est unique. Les slots ontpossèdent leur valeur canonique (FR par défaut) et des overridessurcharges par localelangue stockésstockées dans llx_infrasstudio_slot.
<!-- about.tpl.php — UN SEUL fichier pour FR/EN/DE/ES/IT/PT/NL/PL -->
<h1>{{slot:about_title|type=text|default=À propos de nous|label=Titre About}}</h1>
<p>{{slot:about_lead|type=textarea|default=Notre histoire en quelques mots.|label=Accroche}}</p>
Récupérer la localelangue du visiteur dans le template
gabarit
InfraSStudioLe module résout les slots automatiquement selon la localelangue détectée. Pour vos propres traitements PHP (afficher la date dans la bonne langue, choisir une image différente par langue, …)langue), récupérez la localelangue via :
<?php
// helperhelpers fournifournis par le module
$iso2 = infrasstudio_current_lang(); // 'fr', 'en', 'de', ...
$locale = infrasstudio_current_locale(); // 'fr_FR', 'en_US', 'de_DE', ...
?>
DétectionCascade cascade
de détection
La fonction infrasstudio_current_lang() détecte la langue dans cet ordre :
- Constante
INFRASSTUDIO_LANG_ISOdéfinie par le site (souvent danslang.inc.php). - Paramètre URL
?lang=xx. - Suffixe
sistersur le slug (about-en.php→donne en). - Cookie de persistance (
INFRASSTUDIO_LANG_COOKIE). - Valeur de
$langs->defaultlang. HeaderEn-tête HTTPAccept-Languagedu visiteur.
🅱️ PatternModèle B — Pages sœurs (legacy)
C'estIl les'agit patterndu modèle Dolibarr Website classique : pour chaque page, vous créez un fichier tpl.php par locale.langue.
about.php # FR (canonique)
about-en.php # EN
about-de.php # DE
about-es.php # ES
...
Si vous récupérezreprenez un site existant qui suit ce pattern,modèle, deux options s'offrent à vous :
- Conserver le
patternmodèle avec des stubsInfraSStudio.du module. - Migrer vers le
patternmodèle AavecgrâceleàCLIl'outil deconsolidation.consolidation en ligne de commande.
🔗 Conserver le patternmodèle B avec des stubs
Le module fournit un helper sister_stub.tpl.php qui permet de réduireréduit chaque sisterpage sœur à 3trois lignes et permet de partager le HTML avec la canonique.
Étapes
Procédure
LeLa page canonique reste un tpl.php classique :
// page5.tpl.php — canonique FR
<?php // bootstrap dolibarr ... ?>
<html>...<h1>{{slot:about_title|type=text|default=À propos|...}}</h1>...</html>
Chaque sisterpage sœur devient un stub :
<?php
// page42.tpl.php — sister EN
$_infrasstudio_sister_canonical = 'page5.tpl.php';
$_infrasstudio_sister_lang = 'en';
include dol_buildpath('/infrasstudio/core/tpl/sister_stub.tpl.php', 0);
Le stub force $_GET['lang'] = 'en' puis délègue le rendu auà la canonique. Les overridessurcharges EN sont automatiquement utilisésutilisées pour résoudre les slots.
🔄 Migrer patterndu modèle B →vers A avecen leligne CLI
de commande
Le module fournit unUn script qui consolide une famille de sisterpages pagessœurs en 1une page canonique +et Nplusieurs stubs :
php htdocs/custom/infrasstudio/scripts/consolidate_sister_pages.php <ref-site> \
[--entity=N] \
[--base-slug=about] \
[--dry-run] \
[--extractor=/path/to/extractor.php]
Ce que fait le script
- Détecte les groupes
sisterde pages sœurs parmi les codes ISO2supportéspris en charge (en, de, es, it, pt, nl, pl). - Pour chaque groupe :
GardeConservelela page tpl FR comme canonique.- Extrait les valeurs
localestraduites depuis chaquesisterpagetplsœur (viaparregexexpression régulière ouextractorviacustom)un extracteur personnalisé). - Insère les
overridessurcharges dansllx_infrasstudio_slot. - Réécrit la canonique avec des slots
{{slot:...}}. - Remplace chaque
sisterpage sœur par un stub de3trois lignes.
BackupSauvegarde de chaque tpl originalenavec l'extension.bak.
💡Conseil Toujours— testerLancez d'abord avec --dry-run d'abord—pour Le script vous montrevisualiser ce qu'ilque le script va faire sans rien écrire. Lancez en mode réel uniquement après vérification.
🌐 hreflang : déclarer les alternates au navigateur
Pour que Google sache que vos pages sont des traductions les unes des autres, vous devez émettre des balises <link rel="alternate" hreflang="..."> dans lel'en-tête HTML.<head>.
Le module fournit un helper qui les génère automatiquement :
<head>
...
<?php echo infrasstudio_hreflang_tags($website, $WEBSITE_PAGE); ?>
...
</head>
Sortie typiquetype :
<link rel="alternate" hreflang="fr" href="https://exemple.com/about.php" />
<link rel="alternate" hreflang="en" href="https://exemple.com/about-en.php" />
<link rel="alternate" hreflang="de" href="https://exemple.com/about-de.php" />
<link rel="alternate" hreflang="x-default" href="https://exemple.com/about.php" />
✅Compatibilité Fonctionne pouravec les deux patternsmodèles — —Pour Patternle Amodèle :A, le helper émet une seule URL canonique avec les langues différenciées par ?lang=. PatternPour Ble :modèle B, il émet une URL par sister.page sœur.
🔁 SwitcherSélecteur de langue côté template
gabarit
Pour permettre au visiteur de changer de langue, vous devez exposer un sélecteur. Le helper infrasstudio_translated_url($iso2) génère l'URL équivalente de la page courante dans une autre langue :
<nav class="lang-switcher">
<?php foreach (array('fr', 'en', 'de', 'es') as $iso): ?>
<a href="<?php echo infrasstudio_translated_url($iso); ?>">
<?php echo strtoupper($iso); ?>
</a>
<?php endforeach; ?>
</nav>
📂 Charger les fichiers .langde langue du site
Si votre site utilise des fichiers .lang Dolibarr (par exemple pour desles libellés de menu), chargez-les en début de tpl :
<?php
require_once __DIR__ . '/lang.inc.php';
$langs->loadLangs(array('website_main', 'website_blog'));
?>
Et utilisez les clés via $langs->trans('Key') ou via le slot avec default=@lang:Key.
📋 Récapitulatif
✅ Vous savez maintenantdésormais :
DifférencierDistinguer lepatternmodèle A (slot parlocale,langue, recommandé) dupatternmodèle B (pages sœurs, legacy).- Récupérer la
localelangue du visiteur viainfrasstudio_current_lang(). - Convertir un site existant
enutilisantpatternle modèle B en utilisant le helpersister_stub.tpl.php. - Migrer en bloc B
→vers AavecgrâceleàCLIl'outilconsolidate_sister_pages.php. - Émettre les balises hreflang automatiquement avec
infrasstudio_hreflang_tags. - Construire un
switchersélecteur de langue avecinfrasstudio_translated_url.
Au prochain chapitre, on aborde les gabarits de page qui permettent au client de créer ses propres pages.