Tekst naar spraak voor Polylang-sites: wat echt werkt

13 min lezen 18 min luisteren
Tekst naar spraak voor Polylang-sites: wat echt werkt

Echte Polylang tekst naar spraak betekent één audiobestand per vertaald bericht, in de juiste taal en stem. Omdat Polylang elke vertaling opslaat als een apart WordPress-bericht met een eigen ID, werkt audiogeneratie per bericht van nature goed. De valkuilen zitten in stemkeuze, cookie-omleidingen en paginacaching, niet in het audio zelf.

Dit is het vierde artikel in onze meertalige TTS-reeks. We behandelden al WPML, Weglot en de GTranslate 3.3.0-release. Polylang lijkt qua architectuur het meest op WPML, maar heeft zijn eigen eigenaardigheden. Dit is wat we hebben getest en wat daadwerkelijk werkt op productiesites met Tekst naar Spraak - TTSWP.

Waarom Polylang relevant is voor tekst naar spraak

Polylang wordt gebruikt op meer meertalige WordPress-sites dan welke andere gratis plugin ook. De plugin heeft meer dan 800.000 actieve installaties en de grootste gratis gebruikersbasis van alle algemene meertalige plugins. De eerste versie verscheen in 2011 en de plugin wordt nog altijd actief onderhouden. Er is geen limiet op het aantal talen dat je kunt toevoegen, en WordPress-taalpakketten worden automatisch gedownload. De meeste Polylang-sites zijn blogs, kleine uitgevers en kostenbewuste bureaus die voor deze plugin kozen vanwege de gratis kern en de overzichtelijke architectuur.

Die populariteit is precies het probleem voor TTS-plugins. Veel van die plugins beweren Polylang te ondersteunen, maar testen alleen de standaardtaal. Ze koppelen één audiobestand aan een bericht en serveren datzelfde bestand bij elke vertaling. De Spaanse versie speelt Engelse audio af. De Duitse versie geeft niets. Bezoekers haken af.

De oplossing is structureel. Polylang voegt geen extra databasetabellen of shortcodes toe. Het bouwt voort op WordPress-taxonomieën, dezelfde kernfunctie die categorieën en tags aandrijft. Elke vertaling bestaat als een echt bericht. Audiogeneratie per bericht, de manier waarop TTSWP werkt, sluit daardoor perfect aan op hoe Polylang content opslaat.

Hoe Polylang verschilt van Weglot en GTranslate

Polylang dupliceert berichten. Weglot en GTranslate vertalen op het moment van weergave. Dat ene verschil bepaalt alles over TTS-ondersteuning.

Op een Polylang-site is de Duitse vertaling van "Over ons" een apart WordPress-bericht met bericht-ID 412, taalslug "de" en eigen content in de database. WordPress ziet het, de REST API ziet het, en elke TTS-plugin die inhaakt op save_post of wp_insert_post ziet het. Audiogeneratie verloopt één keer per vertaling, in de taal van die vertaling, en het bestand wordt gecacht op dat bericht-ID.

Weglot en GTranslate werken anders. De vertaalde tekst bestaat pas wanneer een gebruiker de pagina opvraagt. Er is geen tweede bericht om audio aan te koppelen. We behandelden de oplossingen voor Weglot en GTranslate in eerdere artikelen. WPML gebruikt hetzelfde duplicatiemodel als Polylang, daarom is onze WPML-handleiding hier van toepassing met kleine aanpassingen.

Voor TTS is dit goed nieuws. Polylang geeft je precies wat je nodig hebt: een stabiel bericht-ID per taal, een bekende taalslug en een permalink die niet verandert bij weergave.

Diagram dat de berichtduplicatie van Polylang vergelijkt met de vertaling op rendermoment van Weglot
Polylang maakt een echt bericht per taal aan, wat precies is wat TTS-generatie per bericht nodig heeft.

De vier URL-structuren van Polylang en wat ze betekenen voor TTS

Polylang biedt vier URL-modi. Elke modus verandert hoe caches, CDN's en taaldetectiecode je pagina's zien. Kies je de verkeerde, dan belandt het juiste audiobestand achter de verkeerde URL.

1. Taal uit content (geen taalcode in de URL)

Dit is de lastigste situatie. De URL example.com/about serveert Engels aan de ene bezoeker en Duits aan de andere, op basis van cookie of browserdetectie. Paginacaches zien één URL en slaan één variant op. Welke taal de cache als eerste vastlegde, wint.

Voor TTS is het audiobestand zelf prima, omdat het gekoppeld is aan het bericht-ID, niet aan de URL. Het probleem is de pagina die de speler insluit. Als de gecachede Engelstalige pagina het Duitse audio-element laadt, speelt de speler nog steeds Duits, maar bezoekers verwachtten Engelse tekst. We raden deze URL-modus af op elke gecachede site.

2. Directory-URL's (/en/, /de/)

Dit is de standaard en de opzet die we aanraden. Elke taal heeft zijn eigen pad. Caches behandelen /en/about en /de/about als aparte sleutels. De juiste pagina laadt met de juiste speler en het juiste audiobestand. Geen cookietrucjes nodig.

Let op de optie "Verberg URL-taalinformatie voor de standaardtaal". Als die ingeschakeld is, vervalt het voorvoegsel voor de standaardtaal. /about wordt dan Engels en /de/about blijft Duits. URL-gebaseerde taaldetectie in code van derden werkt dan niet voor de paden van de standaardtaal, omdat er geen slug te zien is. Gebruik in dat geval pll_current_language() in plaats van URL-parsing.

3. Subdomein (en.example.com, de.example.com)

Subdomeinen geven elke taal een eigen host en een eigen cache-naamruimte. TTS-spelers laden netjes per taal. De kosten zijn DNS, SSL-certificaten per subdomein en iets complexere analytics. Werkt goed op grote schaal.

4. Aparte domeinen per taal

Volledige scheiding. example.com voor Engels, example.de voor Duits. TTS koppelt audio nog steeds aan het bericht-ID binnen elke WordPress-installatie en de speler werkt op dezelfde manier. Deze modus is gebruikelijk voor merken die al ccTLD's bezitten.

Het probleem met cookie-omleidingen

Polylang kan de browsertaal van een bezoeker detecteren bij het eerste bezoek aan je homepage. Vervolgens wordt het pll_language-cookie ingesteld en wordt de bezoeker omgeleid naar de bijpassende taalversie. In combinatie met paginacaching is dit precies waar audio in de verkeerde taal verschijnt.

Dit is de foutreeks die we hebben gereproduceerd. Een Franstalige bezoeker komt op de homepage. Polylang detecteert Frans, stelt het pll_language-cookie in en stuurt door naar /fr/. De cache slaat die omleidingsrespons op onder de homepage-URL. De volgende bezoeker, een Engelssprekende, vraagt de homepage op en krijgt de gecachede omleiding naar /fr/. Ze belanden op de Franstalige pagina, horen Frans audio en vertrekken.

Met directory-URL's blijft de schade beperkt tot de homepage, omdat elke andere pagina een eigen cachesleutel per taal heeft. Bij de modus "taal uit content" verspreidt hetzelfde probleem zich naar elke URL op de site.

Er zijn drie werkende oplossingen. De eenvoudigste is om browserdetectie uit te schakelen op elke gecachede site en bezoekers zelf te laten kiezen via de taalschakelaar. De tweede is om je cacheplugin in te stellen op variëren op of het omzeilen van het pll_language-cookie. De derde is om de homepage uit te sluiten van paginacaching, zodat de detectieomleiding altijd live wordt uitgevoerd.

Gebruik je WP Rocket, W3 Total Cache of LiteSpeed, bekijk dan onze documentatie over cache-integratie voor de cookieconfiguratie. Polylang werkt naast deze cacheplugins, maar naast elkaar werken is niet hetzelfde als taalbewust zijn. Je configureert de cache zelf.

AJAX-gedrag aan de voorkant

Polylang detecteert automatisch de huidige taal bij frontend AJAX-verzoeken en laadt strings voor die taal. Je kunt ook een expliciete lang-variabele meegeven in het verzoek om een specifieke taal af te dwingen. Voor TTS is dit relevant wanneer de audiospeler of de widget voor gerelateerde berichten een AJAX-aanroep doet om een ander bericht op te halen.

In onze tests verwerkt Polylang dit probleemloos. We zagen niet de AJAX-taalregressies die we documenteerden in het WPML-artikel. Als een aangepaste integratie een bericht in een niet-huidige taal moet ophalen, geef dan lang expliciet mee en controleer of function_exists('pll_current_language') waar is voordat je het resultaat uitleest.

Tekst naar Spraak - TTSWP instellen op een Polylang-site

Deze stappen gaan ervan uit dat Polylang al geïnstalleerd is en dat er minimaal één vertaling bestaat.

  1. Installeer Tekst naar Spraak - TTSWP via de WordPress.org-pluginpagina. Activeer de plugin. Raadpleeg de installatiedocumentatie als je een foutmelding over rechten krijgt.
  2. Verbind de plugin met TTSWP via de verbindingshandleiding. Het gratis abonnement bevat welkomstcredits zodat je kunt testen voordat je voor een betaald abonnement kiest.
  3. Open het bericht in de originele taal en genereer audio. Controleer of de speler zichtbaar is aan de voorkant.
  4. Schakel over naar de vertaalde versie via de taalschakelaar van Polylang in de berichteditor. Genereer opnieuw audio. Polylang heeft een ander bericht-ID geladen, dus TTSWP behandelt dit als een nieuwe generatie en slaat een apart bestand op.
  5. Kies de stem voor elke vertaling. Stemkeuze vindt plaats op berichtniveau. Zie de documentatie over stemkeuze voor de overschrijving per bericht.
  6. Controleer aan de voorkant. Open /en/bericht-slug en /de/bericht-slug in verschillende tabbladen. Speel beide af. De stemmen en talen moeten overeenkomen.

Op dit moment heeft TTSWP's standaard stemkoppeling per taal eerst ondersteuning voor WPML en Weglot. Op Polylang vindt stemkeuze plaats op berichtniveau en werkt de standaard per taal via de berichttaaldetectie die we hieronder beschrijven. Voor de meeste Polylang-sites is dit genoeg, omdat elke vertaling een echt bericht is en de stem eenmalig per bericht wordt ingesteld. Zie de Polylang-integratiedocumentatie voor het huidige gedrag.

WordPress-berichteditor met de Polylang-taalschakelaar en het TTSWP-audiopaneel naast elkaar
Elke Polylang-vertaling is een apart bericht, dus audiogeneratie en stemkeuze vinden per vertaling plaats.

Hoe stemkeuze de berichttaal moet uitlezen

De juiste API voor het uitlezen van de taal van een bericht in Polylang is pll_get_post_language(). Controleer altijd of de functie bestaat voordat je hem aanroept, zoals de eigen ontwikkelaarsdocumentatie van Polylang aanbeveelt. Het patroon ziet er zo uit:

if ( function_exists( 'pll_get_post_language' ) ) {
    $lang = pll_get_post_language( $post_id, 'slug' );
    // $lang is nu 'en', 'de', 'fr', etc.
}

Voor frontend-context geeft pll_current_language() de taal van het huidige verzoek terug. Beide functies zijn stabiel en maken al jaren deel uit van de publieke API van Polylang. Stemkoppelingslogica moet altijd de berichttaal uitlezen, nooit de standaard sitetaal, anders erven vertalingen de verkeerde stem.

Polylang gratis versus Polylang Pro voor TTS

Niets in Polylang Pro is vereist voor audio. De gratis versie van Polylang geeft je alles wat TTSWP nodig heeft: duplicatie per bericht, taalsluggen en de hierboven genoemde publieke API-functies.

Polylang Pro voegt DeepL-machinevertaling, REST API-ondersteuning, vertaalde URL-sluggen en XLIFF-export voor uitbestede vertaalwerkzaamheden toe. Geen van deze functies verandert iets aan TTS voor blogberichten en pagina's. Polylang voor WooCommerce is een aparte betaalde add-on die winkelpagina's, productcategorieën, attributen en transactionele e-mails beheert. Als je naratie op productbeschrijvingen wilt, bekijk dan onze WooCommerce TTS-handleiding.

SEO en AEO met audio per taal

Polylang verwerkt hreflang automatisch, wat het grootste deel van het SEO-werk voor meertalige sites is. Voeg AudioObject-schema toe per taalversie, wijs elke instantie naar het bestand van die specifieke vertaling, en je geeft zoekmachines een duidelijk signaal.

Uit onze eigen tests blijkt dat artikelen met audio en AudioObject-schema vaker worden geciteerd door AI-zoekmachines. We documenteerden de methode en de resultaten in ons artikel over AEO en audio. Kort samengevat: één audiobestand per vertaling, schema per vertaling, en het AEO-voordeel volgt vanzelf.

Veelvoorkomende problemen en oplossingen

SymptoomWaarschijnlijke oorzaakOplossing
Vertaling speelt in de verkeerde stemStem globaal ingesteld, niet per berichtOpen het vertaalde bericht, stel de stem in op dat bericht en genereer opnieuw
Één taal heeft geen audioAudio nooit gegenereerd op die vertalingOpen het vertaalde bericht in de editor en klik op genereren
Gecachede pagina toont speler in verkeerde taalCache slaat de detectieomleiding of één paginavariant opSchakel browserdetectie uit, of laat de cache variëren op het pll_language-cookie
Arabische of Hebreeuwse spelerindeling ziet er vreemd uitRTL-CSS niet toegepast op de spelerVoeg RTL-overschrijvingen toe via aangepaste CSS
UI-teksten van de speler blijven in de standaardtaalPlugin-strings niet geregistreerd voor vertalingRegistreer spelerstrings met pll_register_string zodat Polylang ze toont in het scherm voor stringvertaling
Audio wordt voor alle berichten in de standaardtaal gegenereerdStemkoppeling leest sitelocale in plaats van berichttaalBevestig de berichttaal via pll_get_post_language($post_id, 'slug')
Illustratie van drie taalpaden met elk een eigen cachesleutel en audiobestand, inclusief RTL-indeling voor Arabisch
Directory-URL's geven elke vertaling een eigen cachesleutel, waardoor verkeerde audio niet op de verkeerde pagina terechtkomt.

Toegankelijkheid

Naratie per taal toevoegen is ook een toegankelijkheidsverbetering. Bezoekers die beter lezen in hun moedertaal maar liever luisteren, krijgen nu beide mogelijkheden. Als je site valt onder WCAG 2.2 of de Europese Toegankelijkheidsrichtlijn, bekijk dan onze WCAG-audionalevingsgids voor de geldende criteria. Voor een uitgebreidere uitleg over het toevoegen van TTS aan WordPress in 2026 behandelt de hoofdtutorial de basisprincipes.

Veelgestelde vragen

Werkt Polylang samen met tekst naar spraak?

Ja. Polylang slaat elke vertaling op als een apart WordPress-bericht met een eigen ID, dezelfde architectuur die TTSWP gebruikt voor audio per bericht. Genereer audio op elke vertaling en je krijgt één bestand per taal met de stem die je hebt gekozen. De gratis versie van Polylang is voldoende. Er is geen speciale configuratie nodig buiten de standaard TTSWP-instelling.

Heb ik Polylang Pro nodig voor audio?

Nee. De gratis versie van Polylang biedt alles wat TTSWP nodig heeft: duplicatie van berichten per taal, taalsluggen en de publieke API-functies pll_get_post_language() en pll_current_language(). Polylang Pro voegt DeepL-machinevertaling, REST API-ondersteuning en vertaalde URL-sluggen toe. Geen van die functies verandert iets aan hoe audiogeneratie of afspelen werkt.

Kan elke taal zijn eigen stem hebben?

Ja. Omdat elke vertaling een apart bericht is, vindt stemkeuze plaats op berichtniveau. Kies een Duitse stem voor de Duitse vertaling, een Spaanse stem voor de Spaanse vertaling, enzovoort. TTSWP slaat de keuze op per bericht en gebruikt die elke keer dat je opnieuw genereert. Zie de documentatie over taal- en stemkoppeling voor het huidige gedrag.

Waarom speelt mijn audio in de verkeerde taal?

De meest voorkomende oorzaak is paginacaching in combinatie met de browsertaaldetectie van Polylang. De cache slaat de homepage-omleiding of één taalvariant op en serveert die aan iedereen. Het audiobestand zelf is correct voor het bericht-ID. De pagina die het laadt, is dat niet. Schakel browserdetectie uit op gecachede sites, of stel je cacheplugin in op variëren op het pll_language-cookie. Directory-URL's (/en/, /de/) beperken de schade tot de homepage, omdat elke andere pagina een eigen cachesleutel heeft.

Hoe verschilt Polylang van WPML voor TTS?

Beide dupliceren berichten per taal, dus audio per bericht werkt op beide op dezelfde manier. De verschillen zitten in de AJAX-afhandeling, het cookiegedrag en de namen van de ontwikkelaars-API. Polylang gebruikt functies met het voorvoegsel pll_ en is doorgaans lichter. WPML heeft meer ingebouwde WooCommerce-functies maar een grotere plugin-voetafdruk. Ons WPML-artikel behandelt die kant.

Kan ik de labels van de audiospeler vertalen?

Ja, met één extra stap. Polylang biedt een stringvertalingsscherm voor plugins die hun UI-strings registreren met pll_register_string(). Wil je dat de afspeelknop, de tijdindicator of andere spelerteksten meeveranderen met de taal, registreer die strings dan in je child-thema of een kleine sitespecifieke plugin. Ze verschijnen vervolgens onder Talen, Stringvertalingen.

Wat nu?

Open een van je vertaalde berichten in de WordPress-editor en bekijk het audiopaneel. Als de juiste taal standaard wordt weergegeven, is de instelling klaar. Zo niet, stel dan de stem in voor die vertaling, genereer opnieuw en controleer de voorkant. Zodra één vertaling werkt, volgen de overige hetzelfde patroon.

Heb je Tekst naar Spraak - TTSWP nog niet geïnstalleerd, haal het dan op via WordPress.org en koppel het aan je gratis TTSWP-account. Test op één vertaling, luister en beslis of je het wilt uitrollen voor de rest.