Text na mowę dla stron WPML: Co naprawdę działa

11 min czytania 15 min słuchania
Text na mowę dla stron WPML: Co naprawdę działa

Jeśli prowadzisz stronę opartą na WPML i chcesz, by każde tłumaczenie miało własną narrację we właściwym głosie, wybrana wtyczka musi robić trzy rzeczy poprawnie: odczytywać przetłumaczony wpis, generować osobny plik audio dla każdego języka oraz wykrywać aktualny język w wywołaniach AJAX. Większość wtyczek TTS zawodzi na którymś z tych punktów. Tekst na mowę - TTSWP powstał z myślą o obsłudze wszystkich trzech.

Ten artykuł to praktyczne uzupełnienie naszego przewodnika po Weglot. Podejście techniczne jest tu odwrotne, dlatego zaczniemy od wyjaśnienia różnicy.

WPML przechowuje tłumaczenia jako prawdziwe wpisy. Weglot nie.

WPML i Weglot rozwiązują wielojęzyczność WordPressa w zupełnie różny sposób, a ta różnica decyduje o tym, co wtyczka TTS musi robić.

WPML tworzy osobny rekord wpisu dla każdego tłumaczenia. Angielska wersja artykułu trafia do tabeli wp_posts z jednym ID. Wersja hiszpańska trafia do tej samej tabeli z innym ID. WPML łączy je przez tabelę icl_translations. Przetłumaczony tekst jest prawdziwym tekstem w bazie danych, edytowanym przez człowieka lub przez potok tłumaczenia maszynowego WPML.

Weglot działa odwrotnie. Baza danych przechowuje tylko oryginał. Tłumaczenia są generowane w czasie rzeczywistym i wstrzykiwane do wyjściowego HTML przed dotarciem strony do przeglądarki. Wtyczka odczytująca dane przez get_post() na stronie z Weglot zawsze widzi tylko język źródłowy.

Dla TTS zmienia to wszystko. W WPML odczytywanie treści wpisu z bazy danych jest prawidłowe. Przetłumaczony tekst jest już tam zapisany. Problemy dotyczą tego, który wpis wtyczka odczytuje, w jakim języku sądzi, że się znajduje, oraz tego, czy przechowuje jeden plik audio, czy wiele.

Diagram porównujący model przechowywania osobnych wpisów w WPML z tłumaczeniem w czasie rzeczywistym w Weglot, wraz z implikacjami dla plików audio TTS w każdym modelu
WPML przechowuje każde tłumaczenie jako osobny wpis w bazie danych. Weglot tłumaczy w czasie rzeczywistym. Oba modele wymagają odmiennego podejścia do TTS.

Cztery błędy, na które trafiają wtyczki TTS dla WPML

Przetestowaliśmy kilka konfiguracji na wielojęzycznym środowisku testowym WPML. Te same cztery problemy pojawiały się za każdym razem. Jeśli twoja aktualna wtyczka ma którykolwiek z nich, odwiedzający słyszą inne audio niż to, które opublikowałeś.

1. Audio w złym języku przez błędne wykrywanie języka w AJAX

To cichy zabójca. Większość odtwarzaczy TTS pobiera plik audio lub adres URL strumienia przez żądanie admin-ajax lub REST po załadowaniu strony. Wewnątrz tego żądania WordPress traci kontekst URL z frontendu. Wtyczka pyta WPML „w jakim jesteśmy języku?” i otrzymuje błędną odpowiedź.

Częstą przyczyną jest stara stała ICL_LANGUAGE_CODE. Jest ona definiowana raz, na początku żądania, i odzwierciedla język wykryty przez WPML podczas inicjalizacji. Podczas wywołania AJAX wywołanego ze strony po hiszpańsku ta stała często zwraca domyślny język, a nie hiszpański. Wtyczka TTS generuje wtedy angielskie audio dla hiszpańskiego artykułu albo pobiera zbuforowany angielski plik i odtwarza go pod hiszpańskim odtwarzaczem.

Właściwe podejście to użycie filtrów środowiska uruchomieniowego WPML. Filtr wpml_current_language zwraca aktywny język w momencie wywołania. Hook wpml_post_language_details zwraca język, do którego należy konkretny wpis, co jest jeszcze bezpieczniejsze, bo wiąże audio z ID wpisu, a nie ze stanem żądania.

Jak to sprawdzić jako czytelnik: otwórz przetłumaczony artykuł, naciśnij play i posłuchaj pierwszej sekundy audio. Jeśli na stronie innej niż angielska słyszysz angielski głos, wtyczka używa błędnej ścieżki wykrywania języka.

2. Jeden plik audio współdzielony przez wszystkie tłumaczenia

Niektóre wtyczki generują audio przy publikacji oryginalnego wpisu i przypisują ten sam plik do każdego tłumaczenia. To szybkie i tanie rozwiązanie. Jest też błędne. Hiszpański czytelnik słyszy angielską narrację albo syntetyczny akcent, który nie pasuje do strony, którą czyta.

Ponieważ tłumaczenia WPML to osobne wpisy z osobnymi ID, prawidłowym zachowaniem jest generowanie nowego pliku audio dla każdego przetłumaczonego wpisu. Każdy plik jest przechowywany z własnym ID wpisu i serwowany tylko dla tego tłumaczenia. TTSWP stosuje ten model i używa ID wpisu, a nie oryginalnego ID, jako klucza pamięci podręcznej.

3. Ten sam głos czytający w każdym języku

Francuski artykuł czytany głosem wytrenowanym na angielskim brzmi źle, nawet gdy słowa są poprawne. Głosy ElevenLabs przenoszą akcent i prozodię z danych treningowych. Głos wytrenowany na amerykańskim angielskim będzie czytał po francusku z amerykańskim akcentem, jeśli nie przypisany zostanie głos dopasowany do docelowego języka.

TTSWP pozwala przypisać jeden głos ElevenLabs do każdego języka WPML. Tłumaczenie hiszpańskie dostaje głos wytrenowany na hiszpańskim, tłumaczenie niemieckie dostaje głos niemiecki itd. Szczegółową konfigurację znajdziesz w dokumentacji mapowania języka na głos.

4. Dane strukturalne bez deklaracji języka audio

To szczegół AEO, który większość wtyczek ignoruje. Dane strukturalne AudioObject powinny zawierać właściwość inLanguage. Wartość powinna być tagiem IETF BCP 47 (es, de, nb-NO), zgodnym z hreflang strony.

Zgodna wartość inLanguage daje wyszukiwarkom i narzędziom AI czytelny maszynowo sygnał o tym, w jakim języku jest audio. Wzmacnia sygnał hreflang już obecny na stronie. Gdy schema jest nieobecna lub każde tłumaczenie ma tę samą wartość tylko dla angielskiego, ten sygnał znika i systemy uwzględniające języki nie mogą odróżnić poszczególnych wersji. Sposób, w jaki silniki AI traktują audio, omawiamy w naszym przewodniku AEO i audio.

Wybór właściwego modelu ElevenLabs dla stron WPML

ElevenLabs oferuje kilka modeli i nie wszystkie obsługują te same języki. Jeśli WPML obsługuje język nieobsługiwany przez wybrany model ElevenLabs, nie możesz poprawnie narrować tego tłumaczenia.

Aktualne pokrycie językowe na rok 2026:

  • Multilingual v2 obsługuje 29 języków, w tym angielski, hiszpański, francuski, niemiecki, włoski, portugalski, niderlandzki, polski, szwedzki, duński, fiński, turecki, arabski, hindi, japoński, koreański i chiński.
  • Flash v2.5 obsługuje 32 języki: wszystkie z v2 plus węgierski, norweski i wietnamski, z opóźnieniem modelu wynoszącym około 75 ms.
  • Eleven v3 obsługuje 74 języki, co daje najszersze pokrycie spośród wszystkich modeli. Ma jednak jedno ograniczenie przeważające nad dodatkowymi funkcjami: nie jest przeznaczony do użycia w czasie rzeczywistym. ElevenLabs stwierdza to wprost. Model jest większy i używa kodeka głosowego o wyższej jakości, więc generowanie trwa dłużej. Do zastosowań w czasie rzeczywistym lub konwersacyjnych ElevenLabs zaleca Flash v2.5.

Dla strony WPML z tłumaczeniem norweskim Multilingual v2 nie wystarczy. Flash v2.5 sobie poradzi. Jeśli strona wymaga języka obsługiwanego tylko przez v3, akceptujesz dłuższy czas generowania w zamian za pokrycie językowe. TTSWP kieruje każdy język do wybranego przez ciebie głosu, więc możesz łączyć modele według potrzeb.

Jak sprawdzić, czy twoja wtyczka TTS naprawdę obsługuje WPML

Nie musisz czytać kodu, żeby to sprawdzić. Pięć minut w przeglądarce powie ci, co się dzieje.

  1. Przełącz język. Otwórz oryginalny artykuł, a następnie przełącz na tłumaczenie za pomocą przełącznika języka WPML. Sprawdź, czy URL się zmienił (np. na /pl/) i czy slug wpisu jest przetłumaczonym slugiem.
  2. Naciśnij play i posłuchaj. Głos powinien pasować do języka strony. Angielski głos na stronie po polsku oznacza, że wtyczka nie przeszła pierwszego kroku.
  3. Sprawdź URL audio. Kliknij odtwarzacz prawym przyciskiem myszy i skopiuj źródło audio. Porównaj je z adresem URL audio z oryginalnego artykułu. Jeśli oba adresy są identyczne dla różnych języków, wtyczka współdzieli jeden plik.
  4. Wyświetl źródło strony i wyszukaj AudioObject. Poszukaj pola inLanguage. Powinno ono odpowiadać kodowi języka strony. Jeśli pole nie istnieje lub zawsze wynosi en, schema jest błędna.
  5. Sprawdź hreflang. Wartość inLanguage w audio powinna być zgodna z hreflang strony. Rozbieżności dezorientują wyszukiwanie AI i psują cytowanie dla poszczególnych języków.

Przeprowadź tę listę kontrolną przed zakupem czegokolwiek. Działa z każdą wtyczką TTS, nie tylko TTSWP.

Jak powinna wyglądać poprawna konfiguracja TTS dla WPML

Oto co zalecamy na produkcyjnej stronie WPML. Każdy krok odpowiada jednemu z opisanych wcześniej błędów.

ProblemZłe podejścieWłaściwe podejście
Język w AJAXStała ICL_LANGUAGE_CODEFiltr wpml_current_language lub wpml_post_language_details powiązany z ID wpisu
Przechowywanie audioJeden plik współdzielony przez tłumaczeniaJeden plik na każde ID przetłumaczonego wpisu, serwowany z CDN
Wybór głosuTen sam głos dla każdego językaJeden głos ElevenLabs przypisany do każdego języka WPML
Wybór modeluJeden model na sztywno dla wszystkich językówWybór między Multilingual v2, Flash v2.5 lub Eleven v3 dla każdego języka
SchemaBrak lub tylko angielski AudioObjectAudioObject z inLanguage zgodnym z hreflang strony

TTSWP domyślnie stosuje podejście z prawej kolumny. Wtyczka odczytuje przetłumaczony wpis bezpośrednio, generuje nowy plik audio dla każdego ID wpisu, dostarcza go przez CloudFront i generuje dane strukturalne AudioObject osobno dla każdego języka. Dokumentacja integracji z WPML przeprowadza przez całą konfigurację.

Jedno realne ograniczenie

Audio w każdym języku kosztuje więcej znaków niż jeden współdzielony plik. Jeśli publikujesz artykuł liczący 1500 słów i tłumaczysz go na pięć języków, płacisz za pięć generacji, a nie jedną. To cena poprawności. Współdzielenie jednego pliku byłoby tańsze, ale audio nie pasowałoby do strony. Nie zalecamy poświęcania wrażeń czytelnika dla oszczędności kredytów i mówimy o tym wprost w dokumentacji kredytów.

Jeśli budżet jest napięty, generuj audio tylko dla języków, które mają realny ruch. Statystyki językowe WPML i twoje dane analityczne powiedzą ci, które tłumaczenia warto nagrać.

Najczęstsze pytania

Czy TTSWP obsługuje WPML od razu po instalacji?

Tak. Po aktywowaniu obu wtyczek TTSWP automatycznie wykrywa WPML, odczytuje przetłumaczoną treść wpisu dla każdego języka i przechowuje osobny plik audio dla każdego tłumaczenia. W ustawieniach TTSWP przypisujesz jeden głos do każdego języka, a następnie publikujesz tłumaczenia jak zwykle. Audio jest regenerowane przy każdej aktualizacji tłumaczenia. Kroki konfiguracji znajdziesz na stronie integracji z WPML.

Dlaczego moja aktualna wtyczka TTS czyta wszystko po angielsku na przetłumaczonych stronach?

Najprawdopodobniej przyczyną jest przestarzała stała ICL_LANGUAGE_CODE używana wewnątrz wywołania AJAX. Podczas AJAX ta stała często zwraca domyślny język strony zamiast aktualnego, przez co wtyczka generuje lub serwuje angielskie audio na stronach w innych językach. Rozwiązaniem jest przejście na filtr wpml_current_language lub odczytywanie języka bezpośrednio z ID wpisu.

Czy mogę używać różnych głosów ElevenLabs dla każdego języka WPML?

Tak. TTSWP mapuje jeden głos ElevenLabs na każdy język WPML. Tłumaczenia hiszpańskie są czytane głosem hiszpańskim, niemieckie głosem niemieckim itd. Możesz też wybierać różne modele dla poszczególnych języków, co ma znaczenie, gdy docelowy język jest obsługiwany tylko przez Flash v2.5 lub Eleven v3, a nie przez Multilingual v2.

Jakie języki obsługuje ElevenLabs dla stron WPML?

Multilingual v2 obsługuje 29 języków, Flash v2.5 obsługuje 32 (dodając norweski, węgierski i wietnamski), a Eleven v3 obsługuje 74 języki. Wybierz model z najszerszym pokryciem, na jakie pozwala twój budżet opóźnienia. Większość stron WPML dobrze działa z Multilingual v2 lub Flash v2.5. Strony z rzadszymi językami przenoszą te tłumaczenia do Eleven v3.

Czy TTSWP generuje dane strukturalne dla każdego języka na potrzeby wyszukiwania AI?

Tak. TTSWP generuje AudioObject dla każdego przetłumaczonego wpisu z wartością inLanguage zgodną z hreflang strony. Daje to wyszukiwarkom i narzędziom AI jasny sygnał o tym, które audio należy do której wersji językowej artykułu, zamiast oznaczać wszystkie tłumaczenia w ten sam sposób.

Następny krok

Przeprowadź pięcioetapowy test w przeglądarce na wtyczce TTS, której używasz teraz. Jeśli którykolwiek krok się nie powiedzie, to właśnie błąd, który musisz naprawić przed dodaniem kolejnych tłumaczeń. Jeśli szukasz rozwiązania obsługującego wszystkie pięć punktów od razu po instalacji, zainstaluj Tekst na mowę - TTSWP z WordPress.org, połącz z backendem TTSWP i przypisz jeden głos do każdego języka WPML. Wtyczka zajmie się resztą.