vendredi 25 septembre 2026

À propos

Contact

Multilingue

String Translation et mises à jour de thème : pourquoi des traductions disparaissent

Un client nous signale, presque à chaque mise à jour de thème, des textes traduits redevenus anglais. Nous avons fini par comprendre pourquoi String Translation perd le fil, et comment le limiter durablement.

Par Clément Hadrot • 27 avril 2022 • 5 min de lecture • Aucun commentaire
String Translation et mises à jour de thème : pourquoi des traductions disparaissent

Depuis un an et demi, nous suivons la maintenance du site vitrine d’un fabricant de luminaires, disponible en français, anglais et néerlandais via WPML. Le motif de contact revient à chaque montée de version du thème premium utilisé : deux ou trois textes de blocs, jusque-là traduits, réapparaissent en anglais sur les versions française et néerlandaise du site. Le client, agacé, pensait à un bug de WPML. Après quatre occurrences sur l’année 2021, nous avons pris le temps de comprendre le mécanisme exact.

La réponse tient en une phrase : WPML String Translation identifie une chaîne de caractères par sa valeur exacte, pas par un identifiant technique stable. Dès que l’éditeur du thème modifie, même légèrement, un texte source enregistré via register_string() ou détecté automatiquement dans le Customizer, WPML considère qu’il s’agit d’une chaîne différente et cherche une traduction… qui n’existe pas encore pour cette nouvelle valeur.

Le mécanisme précis derrière la perte

Techniquement, chaque chaîne gérée par String Translation est stockée dans la table wp_icl_strings, avec une colonne value contenant le texte source et un md5 de cette valeur servant de clé de recherche rapide. Quand le thème est mis à jour, s’il redéclare une chaîne dont la valeur source a changé, même d’un espace ou d’une majuscule, WPML :

  • ne retrouve pas de correspondance dans wp_icl_strings pour la nouvelle valeur exacte ;
  • crée une nouvelle entrée « non traduite » pour cette chaîne ;
  • laisse l’ancienne entrée, désormais orpheline, dans la base sans qu’elle soit nettoyée automatiquement.

Le site affiche alors le texte source anglais (ou celui codé en dur dans le thème) sur toutes les langues secondaires, jusqu’à ce qu’un traducteur retraduise la nouvelle chaîne depuis WPML → Traduction des chaînes.

Identifier précisément ce qui a changé après une mise à jour

L'essentiel à retenir : Les chaînes disparues sont souvent des chaînes au contenu légèrement modifié ; String Translation identifie une chaîne par sa valeur source, pas par un identifiant stable ; Un export réimporté après mise à jour évite la ressaisie manuelle

Plutôt que de parcourir le site page par page à la recherche de textes redevenus anglais, nous comparons le fichier de langue ou les templates du thème avant/après mise à jour. Pour un thème classique, un simple diff sur le dossier suffit :

diff -r themes-backup/mon-theme themes-nouveau/mon-theme \
  --include="*.php" | grep -E '^[><].*__\(|_e\('

Cette commande isole les lignes contenant des appels à __() ou _e() qui ont changé entre les deux versions. Sur le dossier wp-content/languages/themes, on peut aussi comparer les fichiers .pot générés par les deux versions du thème pour repérer les nouvelles chaînes sources.

Réduire la casse plutôt que la traiter au cas par cas

Trois ajustements ont réellement diminué la fréquence du problème sur ce projet :

1. Geler les mises à jour majeures de thème hors fenêtre de maintenance

Le client applique désormais les mises à jour du thème uniquement lors de créneaux planifiés, jamais en mise à jour automatique, avec une sauvegarde de la base préalable incluant wp_icl_strings.

2. Exporter les traductions avant chaque mise à jour

Le module WPML → Traduction des chaînes → Exporter/importer les traductions permet de générer un fichier XLIFF de toutes les chaînes traduites. Conserver cet export avant une mise à jour de thème donne une base de référence à réimporter rapidement si des chaînes doivent être ressaisies après coup, sans redemander une nouvelle traduction complète au prestataire.

3. Nettoyer les chaînes orphelines périodiquement

La table wp_icl_strings accumule les anciennes valeurs jamais supprimées. Un nettoyage régulier depuis l’interface (bouton de suppression des chaînes non utilisées) évite la confusion entre plusieurs versions d’une même chaîne lors des recherches de traduction.

Sur ce type de contrat de maintenance, nous recommandons désormais systématiquement un export XLIFF avant toute mise à jour de thème premium, même mineure. Le coût est de deux minutes ; le gain en tickets de support évités est net.

Ce que cette expérience ne couvre pas

Ce constat concerne spécifiquement les chaînes gérées par String Translation dont la valeur source change au fil des mises à jour de thème. Il ne traite pas de la prise en main initiale de String Translation, ni des chaînes issues du Customizer, qui suivent un cycle de vie légèrement différent et méritent un traitement à part.

Notre verdict

String Translation n’est pas défaillant : il applique une logique de correspondance stricte par valeur, cohérente avec son fonctionnement global. Le vrai enjeu de maintenance est de traiter chaque mise à jour de thème comme un événement potentiellement destructeur pour les traductions, au même titre qu’une migration de base de données, et de prévoir la sauvegarde correspondante avant de l’appliquer.

Partager :

À propos de l'auteur

Clément Hadrot

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

Voir tous ses articles

Dans la même veine

À lire aussi