# Panne de String Translation après une mise à jour de thème : notre diagnostic

> Une mise à jour de thème a effacé des chaînes traduites depuis des mois. Symptôme, diagnostic et correctif, dans l'ordre où nous les avons trouvés.

- Auteur : Clément Hadrot
- Publié le : 2024-10-27
- Mis à jour le : 2024-10-27
- Catégorie : Multilingue
- URL : https://wpmoderne.dev.wordpress-developpement.fr/multilingue/panne-string-translation-maj-theme/

## L’essentiel

- Une chaîne de texte modifiée dans le code source change son identifiant interne
- WPML relie la traduction à un identifiant, pas au texte lui-même
- Un correctif existe sans devoir tout retraduire depuis zéro

Symptôme signalé par le client, un lundi matin : une partie du site, correctement traduite en français depuis des mois via le module String Translation de WPML, affichait de nouveau du texte en anglais brut, celui codé en dur dans le thème d'origine. Rien n'avait été touché côté contenu ; la seule opération récente sur le site était une mise à jour du thème, appliquée le vendredi précédent pour corriger un problème de compatibilité avec une version récente de WordPress.

Ce type de panne déroute particulièrement les équipes de support, parce que la traduction existe toujours quelque part en base de données — elle n'a pas été supprimée — mais elle n'est simplement plus reliée au texte affiché. Comprendre pourquoi demande de revenir sur la mécanique interne du module String Translation.

## Comment String Translation relie une traduction à un texte

Le module String Translation de WPML fonctionne différemment de la traduction de contenu classique : il capture des chaînes de texte présentes dans le code du thème ou des extensions (via les fonctions de traduction standards de WordPress comme `__()` ou `_e()`), puis les propose à la traduction dans une interface dédiée, sous *WPML → Traduction de thèmes et plugins*.

Chaque chaîne capturée est identifiée par la combinaison de sa valeur d'origine exacte et de son domaine de traduction (*text domain*). C'est ce couple précis qui sert de clé pour retrouver la traduction associée au moment de l'affichage, pas un identifiant numérique stable indépendant du texte lui-même.

> L'essentiel à retenir : Une chaîne de texte modifiée dans le code source change son identifiant interne ; WPML relie la traduction à un identifiant, pas au texte lui-même ; Un correctif existe sans devoir tout retraduire depuis zéro

## Le diagnostic : que contenait exactement la mise à jour de thème

La comparaison entre l'ancienne et la nouvelle version du thème, via un simple `diff` des fichiers modifiés, a révélé la cause exacte : plusieurs chaînes de texte avaient été légèrement reformulées dans le code source par l'auteur du thème, à l'occasion de cette mise à jour, sans changement de sens perceptible pour un visiteur mais avec un texte source différent au caractère près.

```
// Avant la mise à jour
__('Ajouter au panier', 'nom-du-theme');

// Après la mise à jour
__('Ajouter au panier maintenant', 'nom-du-theme');
```

Un changement aussi mineur qu'un mot ajouté suffit à casser la correspondance : WPML cherchait la traduction associée à « Ajouter au panier », introuvable désormais puisque le code source affiche « Ajouter au panier maintenant », une chaîne jamais traduite puisqu'elle n'existait pas avant cette mise à jour. Le résultat visible : la chaîne, non trouvée dans les traductions existantes, s'affiche dans sa valeur d'origine en anglais, faute de traduction correspondante.

## Pourquoi la traduction existante n'est pas perdue pour autant

Un point rassurant du diagnostic : la traduction française de l'ancienne chaîne « Ajouter au panier » restait bel et bien présente en base de données, simplement devenue orpheline puisque plus aucune chaîne du code source ne correspondait exactement à son texte d'origine. Rien n'avait donc été supprimé, seule la correspondance texte à texte s'était rompue.

## La correction, étape par étape

1. Relancer un scan des chaînes de thème depuis *WPML → Traduction de thèmes et plugins*, pour que WPML détecte les nouvelles chaînes introduites par la mise à jour.
2. Identifier, parmi les nouvelles chaînes non traduites listées, celles qui correspondent à une reformulation mineure d'une chaîne déjà traduite auparavant (souvent reconnaissable par similarité de texte).
3. Traduire chaque nouvelle chaîne, en réutilisant le texte de l'ancienne traduction quand le sens reste identique, plutôt que de retraduire depuis zéro.
4. Vérifier en façade, chaîne par chaîne, que l'affichage correspond de nouveau à la traduction attendue.

Sur ce projet, 47 chaînes ont été concernées par ce type de reformulation mineure, un volume suffisamment important pour représenter plusieurs heures de retraduction manuelle, entièrement liées à un changement de texte source qui n'avait pourtant rien d'une refonte du thème.

## Comment prévenir cette panne à l'avenir

- Avant toute mise à jour de thème sur un site multilingue en production, consulter le journal de modifications (*changelog*) fourni par l'auteur du thème, à la recherche de mentions de reformulation de texte.
- Tester systématiquement la mise à jour sur un environnement de staging avant de l'appliquer en production, en vérifiant spécifiquement l'affichage des chaînes traduites les plus visibles du site (boutons d'appel à l'action, messages de formulaire).
- Sur un thème personnalisé développé en interne, éviter de reformuler une chaîne de texte existante sans nécessité : ajouter une nouvelle chaîne distincte plutôt que modifier une chaîne déjà traduite ailleurs, quand c'est possible.

> Un changement de texte source, même mineur et bien intentionné, a toujours un coût de traduction caché sur un site multilingue. Ce coût n'apparaît jamais dans le changelog d'une mise à jour de thème, il faut le chercher soi-même.

## Un outil pour repérer ces écarts plus vite

Sur les projets suivants, un contrôle automatisé a été mis en place : un script comparant, avant et après chaque mise à jour de thème, la liste des chaînes détectées par WMPL via son export CSV disponible dans l'interface de traduction de chaînes, pour repérer immédiatement les chaînes disparues et les nouvelles chaînes proches d'une ancienne, avant même que le client ne remarque le problème en façade.

## En résumé

Cette panne n'a rien d'un bug de WPML : le module fonctionne exactement comme conçu, en reliant une traduction à un texte source précis. Le vrai enseignement est ailleurs, du côté de la gestion des mises à jour : sur un site multilingue, une mise à jour de thème n'est jamais purement technique, elle peut avoir un impact direct et invisible sur des mois de travail de traduction déjà effectué.
