Le WordPress d'aujourd'hui, décodé pour les développeurs

Multilingue

« Textdomain mismatch » : des chaînes de thème restent en anglais

Un thème premium correctement configuré affiche pourtant certaines chaînes en anglais après traduction. Le coupable : un domaine de texte mal déclaré quelque part dans le code.

Par WordPress Développement • 12 août 2020 • 4 min de lecture • Aucun commentaire
« Textdomain mismatch » : des chaînes de thème restent en anglais

« Bouton toujours affiché en anglais » : c’est la ligne exacte notée dans le ticket de support envoyé par un client agacé, pour un thème premium acheté sur une place de marché et pourtant traduit en français via un fichier .mo bien présent dans le dossier languages. Aucune erreur fatale, aucun avertissement dans les journaux : juste quelques chaînes qui refusent obstinément de changer de langue.

Le symptôme reste partiel : le menu principal, les titres de section et les boutons d’appel à l’action passent bien en français, mais le texte du pied de page, généré par un fichier footer-widgets.php distinct, reste figé en anglais, comme si aucune traduction n’existait pour ces chaînes précises.

Diagnostic : un domaine de texte qui varie dans le même thème

La cause se trouve presque toujours dans une incohérence du domaine de texte utilisé par les appels à __() ou _e(). Un thème premium, souvent assemblé à partir de plusieurs modules développés séparément puis fusionnés, peut contenir plusieurs valeurs différentes selon les fichiers :

// Dans header.php
esc_html_e( 'Accueil', 'premium-theme' );

// Dans footer-widgets.php, ajouté plus tard par un autre développeur
esc_html_e( 'Tous droits réservés', 'premiumtheme' );

La différence entre premium-theme et premiumtheme suffit : le fichier .mo ne contient de traduction que pour l’un des deux domaines, et WordPress ne fait aucun rapprochement automatique entre des domaines qui se ressemblent. La chaîne cherchée sous le mauvais domaine reste simplement affichée dans sa version d’origine, sans avertissement visible côté public.

Repérer toutes les variantes présentes

Une recherche sur l’ensemble des fichiers du thème permet de lister rapidement les domaines réellement utilisés :

grep -rEo "'[a-z0-9_-]+'\)" wp-content/themes/premium-theme/*.php | sort -u

Sur un thème premium particulier, un diagnostic mené de cette façon a fait remonter quatre domaines de texte distincts dans les seuls fichiers PHP du thème, résultat visible d’un assemblage de modules jamais harmonisé par l’éditeur du thème.

Correctif

Le correctif consiste à harmoniser tous les appels sur un domaine unique, puis à régénérer le fichier .pot de référence avant de retraduire les chaînes concernées :

  1. choisir le domaine correct, généralement celui déclaré dans l’en-tête de style.css
  2. remplacer toutes les occurrences des domaines incorrects par cette valeur, fichier par fichier
  3. régénérer le fichier .pot avec wp i18n make-pot pour vérifier qu’un seul domaine apparaît désormais
  4. mettre à jour le fichier .po français avec les chaînes manquantes, puis recompiler en .mo

Ce correctif doit être appliqué dans un thème enfant ou conservé dans un correctif à réappliquer après chaque mise à jour du thème premium, faute de quoi la prochaine mise à jour réintroduira l’incohérence d’origine.

L'essentiel à retenir : Un domaine de texte incohérent rend une traduction invisible sans message d'erreur ; Le grep sur les appels de traduction révèle rapidement l'incohérence ; Prévenir le problème dès l'achat d'un thème premium évite des heures de diagnostic

Prévention avant l’achat d’un thème premium

Avant de retenir un thème premium pour un projet multilingue, un rapide grep sur les fichiers téléchargés en version d’essai permet de vérifier la cohérence des domaines de texte. Un thème correctement internationalisé n’affiche qu’une seule valeur de domaine, identique à celle de son en-tête style.css.

Un tableau de contrôle simple, tenu à jour pour chaque thème premium retenu, évite de refaire ce diagnostic à chaque mise à jour :

VérificationMéthodeRésultat attendu
Domaine uniquegrep sur les appels de traductionUne seule valeur trouvée
Domaine conformeComparaison avec l’en-tête style.cssValeurs identiques
Fichiers de langue présentsContenu du dossier languagesUn .mo par langue annoncée

Ce contrôle prend quelques minutes et évite des heures de diagnostic une fois le thème installé sur un site en production, alors que le client attend déjà une version traduite fonctionnelle.

Un domaine de texte qui varie d’un fichier à l’autre ne provoque jamais d’erreur fatale : c’est justement ce qui rend le problème long à diagnostiquer sans une vérification méthodique du code source.

En résumé

Le « textdomain mismatch » reste l’une des causes les plus fréquentes de chaînes non traduites dans les thèmes premium assemblés à partir de plusieurs sources. Le diagnostic ne demande qu’une recherche textuelle simple, mais la prévention, elle, passe par un contrôle systématique avant d’adopter un thème pour un projet destiné à plusieurs langues.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi