Skip to main content

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

PatternModèle

Caractéristique

A. Slot par localelangue

(recommandé)

UneUn seuleseul pagefichier tpl.php sert toutes les langues. Les slots ontdisposent desde overridessurcharges par locale.langue.

B. Pages sœurs

(legacy)

UneUn pagefichier tpl.php par localelangue (

about.php

,

about-en.php

,

about-de.php

). PatternModèle hérité dedes sites Dolibarr Website classique.classiques.

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.


🅰️ Pattern

Modè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étection

Cascade cascade
de détection

La fonction infrasstudio_current_lang() détecte la langue dans cet ordre :

  1. Constante INFRASSTUDIO_LANG_ISO définie par le site (souvent dans lang.inc.php).
  2. Paramètre URL ?lang=xx.
  3. Suffixe sister sur le slug (about-en.php donne en).
  4. Cookie de persistance (INFRASSTUDIO_LANG_COOKIE).
  5. Valeur de $langs->defaultlang.
  6. HeaderEn-tête HTTP Accept-Language du visiteur.

🅱️ Pattern

Modè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 :

  1. Conserver le patternmodèle avec des stubs InfraSStudio.du module.
  2. Migrer vers le patternmodèle A avecgrâce leà CLIl'outil de consolidation.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
  1. Détecte les groupes sisterde pages sœurs parmi les codes ISO2 supportéspris en charge (en, de, es, it, pt, nl, pl).
  2. Pour chaque groupe :
    • GardeConserve lela page tpl FR comme canonique.
    • Extrait les valeurs localestraduites depuis chaque sisterpage tplsœur (viapar regexexpression régulière ou extractorvia custom)un extracteur personnalisé).
    • Insère les overridessurcharges dans llx_infrasstudio_slot.
    • Réécrit la canonique avec des slots {{slot:...}}.
    • Remplace chaque sisterpage sœur par un stub de 3trois lignes.
  3. BackupSauvegarde de chaque tpl original enavec 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 :

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.


🔁 Switcher

Sé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 le patternmodèle A (slot par locale,langue, recommandé) du patternmodèle B (pages sœurs, legacy).
  • Récupérer la localelangue du visiteur via infrasstudio_current_lang().
  • Convertir un site existant enutilisant patternle modèle B en utilisant le helper sister_stub.tpl.php.
  • Migrer en bloc B vers A avecgrâce leà CLIl'outil consolidate_sister_pages.php.
  • Émettre les balises hreflang automatiquement avec infrasstudio_hreflang_tags.
  • Construire un switchersélecteur de langue avec infrasstudio_translated_url.

Au prochain chapitre, on aborde les gabarits de page qui permettent au client de créer ses propres pages.