# « 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.

- Auteur : WordPress Développement
- Publié le : 2020-08-12
- Mis à jour le : 2020-08-12
- Catégorie : Multilingue
- URL : https://www.wpmoderne.fr/multilingue/textdomain-mismatch-chaines-anglais/

## L’essentiel

- 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

« 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érification | Méthode | Résultat attendu |
| --- | --- | --- |
| Domaine unique | `grep` sur les appels de traduction | Une seule valeur trouvée |
| Domaine conforme | Comparaison avec l'en-tête `style.css` | Valeurs identiques |
| Fichiers de langue présents | Contenu du dossier `languages` | Un `.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.
