Sintesi vocale con TranslatePress: cosa funziona davvero
TranslatePress traduce l'HTML renderizzato di una pagina al momento della richiesta e salva ogni traduzione in tabelle del database locale. Ogni articolo ha un unico ID post, e il cambio di lingua avviene tramite trp_translate(), non attraverso post duplicati. Questo fatto cambia completamente il modo in cui la sintesi vocale deve funzionare su un sito TranslatePress.
Questo è il quinto e ultimo articolo della nostra serie sul TTS multilingua. Abbiamo già trattato WPML, Polylang, Weglot e GTranslate. TranslatePress si colloca tecnicamente a metà strada tra loro, e la configurazione audio lo riflette.
Come TranslatePress si distingue da WPML, Polylang e Weglot
WPML e Polylang creano un post separato per ogni lingua. Ogni traduzione ha il proprio ID post, il proprio post_content e il proprio permalink. La generazione audio è semplice perché ogni lingua è un oggetto WordPress distinto.
Weglot fa l'opposto. Le traduzioni risiedono sui server di Weglot e vengono iniettate nella pagina tramite un proxy o sottodominio. Il database WordPress originale non vede mai il testo tradotto, ed è per questo che il TTS lato server su Weglot è difficile senza hook JavaScript.
TranslatePress è la via di mezzo. C'è un solo post per articolo, quindi post_content contiene solo la lingua predefinita. Ma ogni traduzione risiede localmente nel tuo database WordPress, nelle tabelle wp_trp_. Puoi leggerle, interrogarle e passarle a un motore TTS. Questo cambia l'approccio audio rispetto a qualsiasi altro dei quattro plugin.
Dove vivono le traduzioni
TranslatePress salva le traduzioni in tabelle dedicate con prefisso wp_trp_. Ogni coppia di lingue ha la propria tabella dizionario, identificata come wp_trp_dictionary_<sorgente>_<destinazione>. Esiste anche wp_trp_original_strings per le stringhe originali e tabelle gettext per le traduzioni di temi e plugin.
L'archiviazione è direzionale. La traduzione tedesca di un sito in inglese risiede nel dizionario inglese-tedesco. Per leggerla è necessaria la stessa direzione. La funzione pubblica da usare è trp_translate(), che riceve una stringa di contenuto e un codice lingua e restituisce la versione tradotta.
if ( function_exists( 'trp_translate' ) ) {
$translated = trp_translate( $post->post_content, 'de_DE' );
// Passa $translated al motore TTS, non $post->post_content.
}
Per un'integrazione TTS, quella funzione è la fonte di verità. Leggere post_content direttamente restituisce sempre la lingua predefinita, indipendentemente dall'URL visitato. Consulta la documentazione sull'integrazione con TranslatePress per capire come TTSWP gestisce questo aspetto.

Il problema dei codici locale
TranslatePress usa codici locale completi, non slug. Il tedesco è de_DE, non de. Il francese è fr_FR. Il portoghese brasiliano è pt_BR. Qualsiasi integrazione che presuppone slug a due lettere in stile Polylang fallirà silenziosamente su TranslatePress.
La documentazione per sviluppatori di TranslatePress è esplicita su questo punto. Il codice lingua passato a trp_translate() è il locale dalle impostazioni di TranslatePress, e non corrisponde necessariamente allo slug della lingua nell'URL. Uno slug ridotto come de non corrisponde ad alcun dizionario, quindi la funzione torna alla stringa originale senza alcun avviso. Se scrivi codice personalizzato, normalizza i codici lingua prima di chiamare trp_translate() e salva lo stesso formato di locale insieme ai file audio per poterli abbinare in seguito.
Struttura degli URL e cache
TranslatePress usa una sottodirectory per ogni lingua come impostazione predefinita. La pagina in inglese si trova su site.com/blog/post e la versione tedesca su site.com/de/blog/post. È disponibile anche un'opzione per usare una sottodirectory per la lingua predefinita, rendendo tutte le lingue simmetriche.
Questo è il caso ideale per la cache. URL distinti significano chiavi di cache distinte per lingua. WP Rocket, LiteSpeed e le cache edge dei CDN trattano /de/blog/post come una risorsa separata da /blog/post, quindi il file audio tedesco viene servito con la pagina tedesca e quello inglese con la pagina inglese. La nostra documentazione sull'integrazione con la cache copre le regole di esclusione se ne hai bisogno.
Il rischio principale è il componente aggiuntivo a pagamento Rilevamento automatico della lingua utente. Reindirizza i visitatori in base alla lingua del browser, il che può entrare in conflitto con le cache di pagina e servire il reindirizzamento sbagliato all'utente sbagliato. Abbiamo trattato lo stesso schema nell'articolo su Polylang. Meno siti TranslatePress usano il rilevamento perché è un componente aggiuntivo a pagamento, ma se lo usi, escludi la logica di reindirizzamento dalla cache.
Il problema della traduzione dell'interfaccia del player
Questo problema è esclusivo di TranslatePress. Il plugin rileva e traduce le stringhe inserite da JavaScript, il che è insolito. La maggior parte degli strumenti di traduzione ignora i contenuti renderizzati via JS. TranslatePress li intercetta nel DOM dopo il rendering e offre di tradurli.
L'effetto collaterale è che le etichette del player audio come «Riproduci», «Pausa» e «Ascolta questo articolo» compaiono nell'editor di TranslatePress come stringhe traducibili. Se vengono tradotte automaticamente senza revisione, il player può ritrovarsi con testi sui pulsanti goffi o errati, e peggio ancora, etichette di accessibilità errate che creano problemi ai lettori di schermo.
Esistono due soluzioni all'interno di TranslatePress. Aggiungi l'attributo data-no-translation a qualsiasi elemento che vuoi escludere. Oppure usa i selettori di esclusione in Impostazioni avanzate per saltare interi contenitori tramite selettore CSS. Entrambe le opzioni sono documentate nelle impostazioni di TranslatePress. Per il player TTSWP in particolare, escludi il wrapper del player per classe, poi lascia che le etichette tradotte del player provengano dai file lingua del plugin.
Cosa escludere
- L'elemento contenitore del player audio
- Le etichette ARIA sui controlli di riproduzione, pausa e avanzamento
- I display di tempo e i contatori di durata
- Qualsiasi etichetta di nome voce o lingua resa da TTSWP
Se vuoi personalizzare l'aspetto del player dopo averlo escluso, la nostra documentazione CSS personalizzata copre i selettori.
Il problema di desincronizzazione dopo la modifica dei contenuti
TranslatePress lega ogni traduzione alla stringa sorgente esatta. Modifica l'originale, e TranslatePress crea una nuova stringa sorgente e separa la traduzione esistente. La memoria di traduzione suggerisce quella vecchia, ma finché un umano non la conferma, la lingua di destinazione torna alla sorgente.
Per la sintesi vocale, questo significa che l'audio può andare fuori sincronia con il testo tradotto dopo qualsiasi modifica. Una virgola aggiunta in italiano separa la traduzione di quella stringa in ogni lingua. Il tuo audio tedesco dice ancora la vecchia frase, ma il testo tedesco visibile ora mostra quella nuova.
Lista di controllo pratica dopo la modifica dei contenuti:
- Conferma la nuova stringa sorgente nell'editor di TranslatePress per ogni lingua attiva.
- Rigenera l'audio sul post nella lingua predefinita per primo.
- Rigenera l'audio per ogni lingua, poi riproduci l'audio su ogni URL localizzato per verificare che il nuovo file corrisponda al testo visibile.
- Svuota la cache di pagina per ogni URL localizzato, non solo quello predefinito.
Configurare TTSWP su un sito TranslatePress
Ecco il flusso attuale. La documentazione sull'integrazione descrive sempre il comportamento più recente.
- Installa TTSWP dalla directory dei plugin di WordPress.org. La guida all'installazione ti accompagna passo dopo passo.
- Collega il plugin al backend TTSWP. I piani gratuiti includono crediti iniziali per testare il flusso completo prima di pagare. Consulta connetti il tuo sito.
- Verifica che TranslatePress sia attivo e che almeno una lingua di destinazione sia configurata con un codice locale completo.
- Assegna una voce per ogni lingua usando il mapping lingua-voce. Assegna una voce tedesca a
de_DE, una francese afr_FR, e così via. Consulta la selezione delle voci per il catalogo completo. - Pubblica o aggiorna un post. L'audio viene generato prima per la lingua predefinita.
- Riproduci l'audio su ogni URL tradotto. La generazione avviene su richiesta. La prima volta che un visitatore riproduce l'audio in una lingua secondaria, TranslatePress comunica a TTSWP quale lingua è attiva, e TTSWP genera e mette in cache il file per quella lingua. Ogni riproduzione successiva usa il file in cache.
- Escludi il player da TranslatePress usando
data-no-translationo un selettore nelle Impostazioni avanzate, così le etichette del player restano gestite dai file lingua di TTSWP.
TTSWP salva un file audio per ogni post e lingua, e il player segue la lingua dell'URL su cui si trova il visitatore. Su /de/blog/post il player carica il file tedesco, sull'URL predefinito carica il file nella lingua predefinita. Con la traduzione automatica attiva, TTSWP legge il testo tradotto direttamente da TranslatePress prima di inviarlo a ElevenLabs, quindi l'audio corrisponde a ciò che il visitatore vede sulla pagina.
TranslatePress gratuito vs a pagamento per la sintesi vocale
TranslatePress gratuito supporta una lingua aggiuntiva, include 2.000 parole tradotte tramite TranslatePress AI e permette di usare Google Translate con la propria chiave API. È sufficiente per gestire un blog bilingue con audio corrispondente in due lingue.
TranslatePress a pagamento aggiunge lingue extra illimitate, il SEO Pack per slug tradotti, meta e controllo hreflang, il supporto DeepL, account per traduttori, il componente aggiuntivo Rilevamento automatico della lingua utente e un dominio diverso per ogni lingua. Per un sito che ha bisogno di più di due lingue, tag hreflang per i motori di ricerca o traduzioni di qualità DeepL prima della generazione TTS, la versione a pagamento è la scelta più pratica. La qualità audio non dipende dal piano scelto.
SEO e AEO con audio per ogni lingua
Il SEO Pack permette di configurare tag hreflang per ogni lingua, con opzioni per locale specifico per paese, lingua indipendente dalla regione o entrambi. Per i motori di ricerca e i motori di risposta AI, questo è ciò che segnala quale audio corrisponde a quale regione.
Aggiungi una voce schema AudioObject per ogni URL di lingua, con il valore inLanguage corretto che corrisponde all'hreflang. Google e Bing rilevano l'abbinamento linguistico, e nei nostri test, i motori AI come Perplexity e ChatGPT Search citano più spesso gli articoli arricchiti con audio quando lo schema è corretto e l'URL audio si risolve. Ne abbiamo scritto di più nell'articolo su AEO e audio.
Problemi comuni e soluzioni
| Problema | Causa | Soluzione |
|---|---|---|
| L'audio viene riprodotto nella lingua sbagliata | Testo letto da post_content invece di trp_translate() | Fai passare il testo attraverso trp_translate( $content, $locale ) con il codice locale completo |
| Pulsanti del player tradotti male | TranslatePress ha catturato le etichette del player inserite via JS | Aggiungi data-no-translation al wrapper del player o escludi per selettore nelle Impostazioni avanzate |
| Audio mancante dopo la modifica del contenuto | Modificare la sorgente separa le traduzioni e, di conseguenza, l'audio per lingua | Conferma le traduzioni nell'editor di TranslatePress, poi rigenera l'audio per ogni lingua |
| Codice locale errato | L'integrazione passa de invece di de_DE | Normalizza al locale completo prima di chiamare trp_translate() |
| Layout RTL rotto per arabo o ebraico | CSS del player non compatibile con RTL | Usa CSS personalizzato per specchiare i controlli del player per i locale RTL |
| Reindirizzamento in cache verso la lingua sbagliata | Il componente Rilevamento automatico della lingua utente interagisce con la cache di pagina | Escludi il reindirizzamento dalla cache o disattiva il rilevamento |
Accessibilità
La narrazione audio supporta diversi criteri di successo WCAG quando il player è accessibile da tastiera e correttamente etichettato. Se escludi il player da TranslatePress, mantieni intatte le etichette ARIA nelle traduzioni di TTSWP. La nostra guida WCAG per l'audio copre i criteri in dettaglio, e il tutorial di configurazione principale è un buon punto di partenza.
Domande frequenti
TranslatePress funziona con la sintesi vocale?
Sì. TranslatePress salva le traduzioni localmente nelle tabelle del database wp_trp_, e la funzione trp_translate() restituisce il contenuto tradotto lato server. Un'integrazione TTS può leggere il testo tradotto e generare audio per ogni lingua, a patto di indicizzare l'audio per ID post più locale e di usare codici locale completi come de_DE invece degli slug.
Serve la versione a pagamento di TranslatePress per l'audio?
No. TranslatePress gratuito supporta una lingua aggiuntiva e include la traduzione tramite TranslatePress AI, Google Translate con la propria chiave o modifica manuale. È sufficiente per un sito bilingue con audio corrispondente. La versione a pagamento aggiunge lingue illimitate, SEO Pack, DeepL e componenti di rilevamento, utili se hai bisogno di più di due lingue o del controllo hreflang.
Perché i pulsanti del mio player sono tradotti male?
TranslatePress rileva le stringhe inserite via JS, quindi le etichette del player audio compaiono nel suo editor e possono essere tradotte automaticamente. Per risolvere, aggiungi data-no-translation al wrapper del player, oppure escludi il contenitore del player nelle Impostazioni avanzate tramite un selettore CSS. Le etichette del player provengono poi dai file lingua di TTSWP.
Perché l'audio non corrisponde più alla traduzione?
Modificare la stringa originale in TranslatePress crea una nuova stringa sorgente e separa la traduzione esistente. La memoria di traduzione la suggerisce di nuovo, ma finché non la confermi, la lingua di destinazione torna alla sorgente. Rigenera l'audio sul post predefinito e su ogni lingua dopo qualsiasi modifica al contenuto, poi svuota la cache per ogni URL localizzato.
In cosa differisce TranslatePress da Weglot per la sintesi vocale?
Weglot salva le traduzioni sui propri server e le inietta nella pagina, quindi WordPress non vede mai il testo tradotto lato server. TranslatePress salva ogni traduzione nel database locale ed espone trp_translate() per l'accesso lato server. Questo rende la generazione audio per lingua più diretta su TranslatePress che su Weglot.
Cosa fare adesso
Installa Sintesi vocale - TTSWP dalla directory dei plugin di WordPress.org, collegalo al tuo account e assegna una voce per ogni lingua già configurata in TranslatePress. Pubblica un post, riproduci l'audio su ogni URL tradotto e verifica che l'audio corrisponda al testo visibile. Se qualcosa non torna, la documentazione sull'integrazione con TranslatePress è il primo posto dove guardare.
Articoli correlati
Sintesi vocale per siti Polylang: cosa funziona davvero
Come aggiungere la sintesi vocale a un sito Polylang generando un file audio per ogni traduzione, con la voce giusta per ogni lingua, senza problemi di cache.
Sintesi vocale per siti WPML: cosa funziona davvero
Come aggiungere la sintesi vocale WPML che sceglie la voce giusta per ogni lingua, genera file audio separati per ogni traduzione e gestisce correttamente il rilevamento della lingua nelle chiamate AJAX.
I migliori plugin WordPress Text-to-Speech (2026)
Una guida imparziale 2026 ai sette migliori plugin WordPress per la sintesi vocale, con punti di forza, debolezze e una tabella completa di confronto delle funzionalità.