CHAPITRE 21 — Gérer le multilingue (pages sœurs)

Dolibarr Website propose deux modèles multilingues différents. Identifier le modèle que vous utilisez est une étape préalable à toute écriture de code. Ce chapitre vous présente les deux options et la manière dont le module s'y intègre.

Les deux modèles multilingues

Modèle

Caractéristique

A. Slot par langue

(recommandé)

Un seul fichier tpl.php sert toutes les langues. Les slots disposent de surcharges par langue.

B. Pages sœurs

(legacy)

Un fichier tpl.php par langue (

about.php

,

about-en.php

,

about-de.php

). Modèle hérité des sites Dolibarr Website classiques.

Recommandé — Adoptez le modèle A pour tout nouveau site. Le modèle B reste pris en charge pour la migration progressive de sites existants. Le module fournit un outil de consolidation B vers A.

Modèle A — Slot par langue (le standard moderne)

Fonctionnement

Une seule page Dolibarr Website existe par concept (par exemple about). Le fichier tpl.php est unique. Les slots possèdent leur valeur canonique (FR par défaut) et des surcharges par langue stocké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 langue du visiteur dans le gabarit

Le module résout les slots automatiquement selon la langue détectée. Pour vos propres traitements PHP (afficher la date dans la bonne langue, choisir une image différente par langue), récupérez la langue via :

<?php
// helpers fournis par le module
$iso2 = infrasstudio_current_lang();         // 'fr', 'en', 'de', ...
$locale = infrasstudio_current_locale();     // 'fr_FR', 'en_US', 'de_DE', ...
?>
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 sur le slug (about-en.php donne en).
  4. Cookie de persistance (INFRASSTUDIO_LANG_COOKIE).
  5. Valeur de $langs->defaultlang.
  6. En-tête HTTP Accept-Language du visiteur.

Modèle B — Pages sœurs (legacy)

Il s'agit du modèle Dolibarr Website classique : pour chaque page, vous créez un fichier tpl.php par langue.

about.php           # FR (canonique)
about-en.php        # EN
about-de.php        # DE
about-es.php        # ES
...

Si vous reprenez un site existant qui suit ce modèle, deux options s'offrent à vous :

  1. Conserver le modèle avec des stubs du module.
  2. Migrer vers le modèle A grâce à l'outil de consolidation en ligne de commande.

Conserver le modèle B avec des stubs

Le module fournit un helper sister_stub.tpl.php qui réduit chaque page sœur à trois lignes et permet de partager le HTML avec la canonique.

Procédure

La 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 page 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 à la canonique. Les surcharges EN sont automatiquement utilisées pour résoudre les slots.

Migrer du modèle B vers A en ligne de commande

Un script consolide une famille de pages sœurs en une page canonique et plusieurs 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 de pages sœurs parmi les codes ISO2 pris en charge (en, de, es, it, pt, nl, pl).
  2. Pour chaque groupe :
    • Conserve la page tpl FR comme canonique.
    • Extrait les valeurs traduites depuis chaque page sœur (par expression régulière ou via un extracteur personnalisé).
    • Insère les surcharges dans llx_infrasstudio_slot.
    • Réécrit la canonique avec des slots {{slot:...}}.
    • Remplace chaque page sœur par un stub de trois lignes.
  3. Sauvegarde de chaque tpl original avec l'extension .bak.

Conseil — Lancez d'abord avec --dry-run pour visualiser ce que 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 l'en-tête HTML.

Le module fournit un helper qui les génère automatiquement :

<head>
    ...
    <?php echo infrasstudio_hreflang_tags($website, $WEBSITE_PAGE); ?>
    ...
</head>

Sortie type :

Compatibilité avec les deux modèles — Pour le modèle A, le helper émet une seule URL canonique avec les langues différenciées par ?lang=. Pour le modèle B, il émet une URL par page sœur.

Sélecteur de langue côté 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 de langue du site

Si votre site utilise des fichiers .lang Dolibarr (par exemple pour les 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 désormais :


Revision #2
Created 2026-05-07 11:35:06 UTC by Lucky Ranasolonirina
Updated 2026-05-08 07:43:06 UTC by Lucky Ranasolonirina