Synthèse vocale avec TranslatePress : ce qui fonctionne vraiment
TranslatePress traduit le HTML rendu d'une page au moment de la requête et stocke chaque traduction dans des tables de base de données locales. Chaque article possède un seul ID, et les changements de langue s'effectuent via trp_translate(), non par des articles dupliqués. Ce point unique change entièrement la façon dont la synthèse vocale doit fonctionner sur un site TranslatePress.
Ceci est le cinquième et dernier article de notre série sur la synthèse vocale multilingue. Nous avons déjà traité WPML, Polylang, Weglot et GTranslate. TranslatePress se situe techniquement entre ces solutions, et la configuration audio le reflète.
En quoi TranslatePress diffère de WPML, Polylang et Weglot
WPML et Polylang créent un article distinct pour chaque langue. Chaque traduction possède son propre ID, son propre post_content et son propre permalien. La génération audio est simple car chaque langue correspond à un objet WordPress distinct.
Weglot fait exactement l'inverse. Les traductions sont hébergées sur les serveurs de Weglot et injectées dans la page via un proxy ou un sous-domaine. La base de données WordPress ne voit jamais le texte traduit, ce qui complique la synthèse vocale côté serveur sans recourir à des hooks JavaScript.
TranslatePress occupe le terrain intermédiaire. Il n'y a qu'un article par contenu, donc post_content ne contient que la langue par défaut. Mais toutes les traductions sont stockées localement dans votre base de données WordPress, dans les tables wp_trp_. Vous pouvez les lire, les interroger et les transmettre à un moteur de synthèse vocale. Cela change l'approche audio par rapport aux quatre autres extensions.
Où vivent les traductions
TranslatePress stocke les traductions dans des tables dédiées préfixées wp_trp_. Chaque paire de langues dispose de sa propre table de dictionnaire, indexée comme wp_trp_dictionary_<source>_<cible>. Il existe aussi wp_trp_original_strings pour les chaînes sources et des tables gettext pour les traductions de thèmes et d'extensions.
Le stockage est directionnel. Une traduction allemande d'un site en anglais se trouve dans le dictionnaire anglais-allemand. La relire nécessite la même direction. La fonction publique qui vous intéresse est trp_translate(), qui prend une chaîne de contenu et un code de langue et retourne la version traduite.
if ( function_exists( 'trp_translate' ) ) {
$translated = trp_translate( $post->post_content, 'de_DE' );
// Passez $translated au moteur TTS, pas $post->post_content.
}
Pour une intégration de synthèse vocale, cette fonction est la source de vérité. Lire post_content directement vous donne toujours la langue par défaut, quelle que soit l'URL visitée. Consultez la documentation d'intégration TranslatePress pour voir comment TTSWP gère cela de notre côté.

Le piège des codes de paramètres régionaux
TranslatePress utilise des codes de paramètres régionaux complets, pas des slugs. L'allemand est de_DE, pas de. Le français est fr_FR. Le portugais brésilien est pt_BR. Toute intégration qui suppose des slugs à deux lettres comme Polylang échouera silencieusement sur TranslatePress.
La documentation développeur de TranslatePress est explicite à ce sujet. Le code de langue passé à trp_translate() est le paramètre régional défini dans Réglages, TranslatePress, Général, et il ne correspond pas forcément au slug de langue dans l'URL. Un slug simple comme de ne correspond à aucun dictionnaire, donc la fonction revient à la chaîne originale sans avertissement. Si vous écrivez du code personnalisé, normalisez vos codes de langue avant d'appeler trp_translate() et stockez le même format de paramètre régional avec vos fichiers audio pour les retrouver ensuite.
Structure des URLs et mise en cache
TranslatePress utilise par défaut un sous-répertoire par langue. Votre page en anglais se trouve à site.com/blog/article et la version allemande à site.com/de/blog/article. Il est aussi possible d'utiliser un sous-répertoire pour la langue par défaut, ce qui rend toutes les langues symétriques.
C'est le cas idéal pour la mise en cache. Des URLs distinctes signifient des clés de cache distinctes par langue. WP Rocket, LiteSpeed et les caches CDN traitent tous /de/blog/article comme une ressource distincte de /blog/article, donc votre fichier audio allemand est servi avec la page allemande et votre audio anglais avec la page anglaise. Notre documentation sur la mise en cache couvre les règles d'exclusion si vous en avez besoin.
Le seul risque vient de l'extension payante Détection automatique de la langue. Elle redirige les visiteurs selon la langue du navigateur, ce qui peut entrer en conflit avec les caches de page et servir la mauvaise redirection au mauvais utilisateur. Nous avons abordé ce cas dans l'article sur Polylang. Peu de sites TranslatePress utilisent cette détection car c'est une extension payante, mais si vous l'activez, excluez la logique de redirection du cache.
Le problème de traduction de l'interface du lecteur
Ce point est propre à TranslatePress. L'extension détecte et traduit les chaînes insérées par JavaScript, ce qui est inhabituel. La plupart des outils de traduction ignorent le contenu généré par JS. TranslatePress le capture dans le DOM après le rendu et propose de le traduire.
L'effet secondaire est que les étiquettes du lecteur audio comme «Lecture», «Pause» et «Écouter cet article» apparaissent dans l'éditeur TranslatePress comme des chaînes traduisibles. Si ces chaînes sont traduites automatiquement sans relecture, le lecteur peut afficher des textes de boutons maladroits ou incorrects, et pire, des étiquettes d'accessibilité mal traduites qui perturbent les lecteurs d'écran.
Deux solutions existent dans TranslatePress. Ajoutez l'attribut data-no-translation à tout élément que vous souhaitez exclure. Ou utilisez les sélecteurs d'exclusion dans les Paramètres avancés pour ignorer des conteneurs entiers par sélecteur CSS. Les deux options sont documentées dans les réglages de TranslatePress. Pour le lecteur TTSWP spécifiquement, excluez le conteneur du lecteur par classe, puis laissez nos étiquettes traduites provenir des propres fichiers de langue de l'extension.
Éléments à exclure
- L'élément conteneur du lecteur audio
- Les étiquettes ARIA sur les contrôles lecture, pause et progression
- Les affichages de durée et compteurs de temps
- Toute étiquette de nom de voix ou de langue affichée par TTSWP
Si vous souhaitez personnaliser l'apparence du lecteur après l'exclusion, notre documentation CSS personnalisée couvre les sélecteurs.
Le problème de désynchronisation après modification
TranslatePress lie chaque traduction à la chaîne source exacte. Modifiez l'original et TranslatePress crée une nouvelle chaîne source en détachant la traduction existante. La mémoire de traduction propose l'ancienne traduction, mais tant qu'un humain ne la valide pas, la langue cible revient à la source.
Pour la synthèse vocale, cela signifie que l'audio peut se décaler par rapport au texte traduit après toute modification. Ajouter une virgule en anglais détache la traduction de chaque langue pour cette chaîne. Votre audio allemand dit encore l'ancienne phrase, mais le texte allemand visible affiche la nouvelle.
Liste de vérification après toute modification de contenu :
- Confirmez la nouvelle chaîne source dans l'éditeur TranslatePress pour chaque langue active.
- Régénérez l'audio sur l'article dans la langue par défaut d'abord.
- Régénérez l'audio pour chaque langue, puis écoutez l'audio sur chaque URL localisée pour confirmer que le nouveau fichier correspond au texte visible.
- Videz le cache de page pour chaque URL localisée, pas seulement celle par défaut.
Configurer TTSWP sur un site TranslatePress
Voici le fonctionnement actuel. La documentation d'intégration décrit toujours le comportement le plus récent.
- Installez Synthèse vocale - TTSWP depuis le répertoire d'extensions WordPress.org. Le guide d'installation vous accompagne pas à pas.
- Connectez l'extension au backend TTSWP. Les plans gratuits incluent des crédits de bienvenue pour tester le flux complet avant de payer. Voir connecter votre site.
- Vérifiez que TranslatePress est actif et qu'au moins une langue cible est configurée avec un code de paramètre régional complet.
- Associez une voix par langue via le mapping langue-voix. Attribuez une voix allemande à
de_DE, une voix française àfr_FR, etc. Consultez la sélection de voix pour le catalogue disponible. - Publiez ou mettez à jour un article. L'audio se génère d'abord pour la langue par défaut.
- Écoutez l'audio sur chaque URL traduite. La génération se fait à la demande. La première fois qu'un visiteur lance l'audio dans une langue secondaire, TranslatePress indique à TTSWP quelle langue est active, et TTSWP génère et met en cache le fichier pour cette langue. Toutes les lectures suivantes utilisent le fichier mis en cache.
- Excluez le lecteur de TranslatePress en utilisant
data-no-translationou un sélecteur dans les Paramètres avancés pour que les étiquettes du lecteur restent contrôlées par les propres traductions de TTSWP.
TTSWP stocke un fichier audio par article et par langue, et le lecteur suit la langue de l'URL visitée. Sur /de/blog/article le lecteur charge le fichier allemand, sur l'URL par défaut il charge le fichier dans la langue par défaut. Avec la traduction automatique activée, TTSWP lit le texte traduit directement depuis TranslatePress avant de l'envoyer à ElevenLabs, donc l'audio correspond à ce que le visiteur voit sur la page.
TranslatePress gratuit ou payant pour la synthèse vocale
La version gratuite de TranslatePress prend en charge une langue supplémentaire, inclut 2 000 mots traduits automatiquement via TranslatePress AI et vous permet d'utiliser Google Translate avec votre propre clé API. C'est suffisant pour gérer un blog bilingue avec un audio correspondant dans deux langues.
La version payante ajoute les langues illimitées, le SEO Pack pour les slugs traduits, les méta et le contrôle hreflang, la prise en charge de DeepL, les comptes traducteurs, l'extension Détection automatique de la langue et les domaines distincts par langue. Pour un site qui a besoin de plus de deux langues, de balises hreflang pour les moteurs de recherche ou de traductions de qualité DeepL avant la génération audio, la version payante est le choix logique. La qualité audio ne dépend pas du forfait choisi.
SEO et AEO avec un audio par langue
Le SEO Pack vous permet de configurer des balises hreflang par langue, avec des options pour le paramètre régional spécifique au pays, la langue indépendante de la région, ou les deux. Pour les moteurs de recherche et les moteurs de réponse IA, c'est ce qui indique quel audio correspond à quelle région.
Ajoutez une entrée de schéma AudioObject par URL de langue, avec la valeur inLanguage correcte correspondant au hreflang. Google et Bing récupèrent l'association linguistique, et selon nos propres tests, les moteurs IA comme Perplexity et ChatGPT Search citent plus souvent les articles enrichis en audio quand le schéma est propre et que l'URL audio est accessible. Nous en avons parlé plus en détail dans l'article sur l'AEO et l'audio.
Problèmes courants et solutions
| Problème | Cause | Solution |
|---|---|---|
| L'audio se lance dans la mauvaise langue | Texte extrait de post_content au lieu de trp_translate() | Faites passer le texte par trp_translate( $content, $locale ) avec le code de paramètre régional complet |
| Boutons du lecteur mal traduits automatiquement | TranslatePress a capturé les étiquettes du lecteur insérées par JS | Ajoutez data-no-translation au conteneur du lecteur ou excluez-le par sélecteur dans les Paramètres avancés |
| Audio manquant après une modification | La modification de la source détache les traductions et, par extension, l'audio par langue | Confirmez les traductions dans l'éditeur TranslatePress, puis régénérez l'audio par langue |
| Mauvais code de paramètre régional | Intégration passant de au lieu de de_DE | Normalisez vers le code complet avant d'appeler trp_translate() |
| Mise en page RTL cassée pour l'arabe ou l'hébreu | Le CSS du lecteur n'est pas compatible RTL | Utilisez du CSS personnalisé pour adapter les contrôles du lecteur aux paramètres régionaux RTL |
| Redirection mise en cache vers la mauvaise langue | L'extension Détection automatique de la langue interagit avec le cache de page | Excluez la redirection du cache ou désactivez la détection |
Note sur l'accessibilité
La narration audio répond à plusieurs critères de succès WCAG lorsque le lecteur est utilisable au clavier et correctement étiqueté. Si vous excluez le lecteur de TranslatePress, conservez les étiquettes ARIA intactes dans les propres traductions de TTSWP. Notre guide WCAG sur l'audio couvre les critères en détail, et le tutoriel principal de configuration est un bon point de départ.
Questions fréquentes
TranslatePress est-il compatible avec la synthèse vocale ?
Oui. TranslatePress stocke les traductions localement dans des tables de base de données wp_trp_, et la fonction trp_translate() retourne le contenu traduit côté serveur. Une intégration de synthèse vocale peut lire le texte traduit et générer un audio par langue, à condition d'indexer l'audio par ID d'article et paramètre régional et d'utiliser des codes complets comme de_DE plutôt que des slugs.
Faut-il la version payante de TranslatePress pour l'audio ?
Non. La version gratuite de TranslatePress prend en charge une langue supplémentaire et inclut la traduction via TranslatePress AI, Google Translate avec votre propre clé, ou l'édition manuelle. C'est suffisant pour un site bilingue avec un audio correspondant. La version payante ajoute les langues illimitées, le SEO Pack, DeepL et les extensions de détection, utiles si vous avez besoin de plus de deux langues ou du contrôle hreflang.
Pourquoi mes boutons du lecteur sont-ils mal traduits ?
TranslatePress détecte les chaînes insérées par JS, donc les étiquettes du lecteur audio apparaissent dans son éditeur et peuvent être traduites automatiquement. Réglez le problème en ajoutant data-no-translation au conteneur du lecteur, ou en excluant le conteneur dans les Paramètres avancés via un sélecteur CSS. Les étiquettes du lecteur proviennent alors des propres fichiers de langue de TTSWP.
Pourquoi mon audio ne correspond plus à la traduction ?
Modifier la chaîne originale dans TranslatePress crée une nouvelle chaîne source et détache la traduction existante. La mémoire de traduction la propose à nouveau, mais tant que vous ne la confirmez pas, la langue cible revient à la source. Régénérez l'audio sur l'article par défaut et pour chaque langue après toute modification, puis videz le cache pour chaque URL localisée.
Quelle différence entre TranslatePress et Weglot pour la synthèse vocale ?
Weglot stocke les traductions sur ses propres serveurs et les injecte dans la page, donc WordPress ne voit jamais le texte traduit côté serveur. TranslatePress stocke toutes les traductions dans votre base de données locale et expose trp_translate() pour un accès côté serveur. La génération audio par langue est donc plus directe avec TranslatePress qu'avec Weglot.
Prochaines étapes
Installez Synthèse vocale - TTSWP depuis le répertoire d'extensions WordPress.org, connectez-le à votre compte et associez une voix à chaque langue déjà configurée dans TranslatePress. Publiez un article, écoutez l'audio sur chaque URL traduite et vérifiez que l'audio correspond au texte visible. En cas de décalage, la documentation d'intégration TranslatePress est le premier endroit où chercher.
Articles connexes
Synthèse vocale pour les sites Polylang : ce qui fonctionne vraiment
Comment ajouter la synthèse vocale sur un site Polylang pour générer un fichier audio par traduction, choisir la bonne voix par langue et résister à la mise en cache.
Synthèse vocale pour les sites WPML : ce qui fonctionne vraiment
Comment ajouter la synthèse vocale WPML qui choisit la bonne voix par langue, génère un fichier audio distinct par traduction et résiste aux bugs de détection de langue en AJAX.
Les meilleurs plugins de synthèse vocale pour WordPress (2026)
Un comparatif neutre des sept meilleurs plugins WordPress de synthèse vocale pour 2026, avec les points forts, les limites et un tableau complet de fonctionnalités.