Синтез речи для сайтов на WPML: что реально работает

2 мин чтения 15 мин прослушивания
Синтез речи для сайтов на WPML: что реально работает

Если вы используете WPML и хотите, чтобы каждый перевод звучал на правильном языке нужным голосом, плагин синтеза речи должен делать три вещи: читать переведённый пост, генерировать отдельный аудиофайл для каждого языка и корректно определять язык при AJAX-запросах. Большинство плагинов TTS не справляются хотя бы с одним из этих требований. Синтез речи - TTSWP разработан так, чтобы справляться со всеми тремя.

Этот материал — практическое дополнение к нашему руководству по Weglot. Технический подход здесь принципиально другой, и мы начнём с объяснения почему.

WPML хранит переводы как отдельные посты. Weglot — нет.

WPML и Weglot решают задачу многоязычности в WordPress совершенно по-разному, и это различие определяет, что именно должен делать плагин синтеза речи.

WPML создаёт отдельную запись поста для каждого перевода. Английская версия статьи хранится в таблице wp_posts с одним ID. Испанская версия находится в той же таблице, но с другим ID. WPML связывает их через таблицу icl_translations. Переведённый текст — это реальные данные в базе, которые редактирует человек или машинный переводчик WPML.

Weglot работает иначе. В базе данных хранится только оригинал. Переводы создаются в реальном времени и вставляются в HTML-код страницы до того, как она достигает браузера. Плагин, обращающийся к get_post() на сайте с Weglot, всегда видит только исходный язык.

Для синтеза речи это меняет всё. На сайте с WPML читать содержимое поста из базы данных — правильный подход: переведённый текст уже там. Проблемы возникают в другом: какой именно пост читает плагин, какой язык он определяет и хранит ли он один аудиофайл или несколько.

Diagram comparing WPML separate-post storage to Weglot runtime translation, with TTS audio file implications for each model
WPML хранит каждый перевод как отдельный пост в базе данных. Weglot переводит на лету. Эти две модели требуют разных подходов к синтезу речи.

Четыре типичные проблемы плагинов синтеза речи с WPML

Мы тестировали несколько плагинов на тестовом сайте с WPML. Одни и те же четыре проблемы встречались снова и снова. Если ваш текущий плагин страдает хотя бы одной из них, посетители слышат не то аудио, которое вы думаете, что опубликовали.

1. Аудио на неправильном языке из-за ошибок определения языка при AJAX

Это скрытая проблема. Большинство плагинов TTS запрашивают аудиофайл или URL потока через admin-ajax или REST после загрузки страницы. Внутри этого запроса WordPress теряет контекст URL-адреса фронтенда. Плагин спрашивает WPML: «на каком языке мы сейчас?» — и получает неверный ответ.

Основная причина — устаревшая константа ICL_LANGUAGE_CODE. Она определяется один раз в начале запроса и отражает язык, который WPML определил при инициализации. Во время AJAX-вызова, инициированного с испанской страницы, эта константа часто возвращает язык по умолчанию, а не испанский. Плагин синтеза речи генерирует английское аудио для испанской статьи или берёт кешированный английский файл и воспроизводит его в испанском плеере.

Правильный подход — использовать фильтры WPML в реальном времени. Фильтр wpml_current_language возвращает активный язык в момент запроса. Хук wpml_post_language_details возвращает язык конкретного поста — это ещё надёжнее, так как привязывает аудио к ID поста, а не к состоянию запроса.

Как обнаружить проблему: откройте переведённую статью, нажмите «Воспроизвести» и прислушайтесь к первой секунде аудио. Если на странице на испанском звучит английский голос — плагин использует неверный путь определения языка.

2. Один аудиофайл для всех переводов

Некоторые плагины генерируют аудио при публикации оригинального поста и прикрепляют один и тот же файл ко всем переводам. Это быстро и дёшево. И при этом неправильно. Испаноязычный читатель слышит текст на английском или с синтетическим акцентом, который не соответствует странице.

Поскольку переводы в WPML — это отдельные посты с разными ID, правильное поведение — генерировать новый аудиофайл для каждого переведённого поста. Каждый файл хранится под своим ID поста и отдаётся только соответствующему переводу. TTSWP следует этой модели и использует ID поста, а не исходный ID, в качестве ключа кеша.

3. Один голос для всех языков

Французская статья, прочитанная голосом, обученным на английском, звучит неправильно, даже если слова верны. Голоса ElevenLabs несут акцент и интонацию из своих обучающих данных. Голос, обученный на американском английском, будет читать французский текст с американским акцентом, если не назначить голос, соответствующий целевому языку.

TTSWP позволяет сопоставить один голос ElevenLabs с каждым языком WPML. Испанский перевод читает голос, обученный на испанском, немецкий — немецкий голос, и так далее. Подробная настройка описана в документации по сопоставлению языков и голосов.

4. Схема без указания языка аудио

Это техническая деталь, которую большинство плагинов игнорируют. Структурированные данные AudioObject должны содержать свойство inLanguage. Значение должно быть тегом IETF BCP 47 (es, de, nb-NO), совпадающим с атрибутом hreflang страницы.

Совпадающее значение inLanguage даёт поисковым системам и ИИ-инструментам чёткий машиночитаемый сигнал о том, на каком языке записано аудио. Это усиливает сигнал hreflang, уже присутствующий на странице. Если схема отсутствует или все переводы имеют одинаковое значение только для английского, этот сигнал исчезает, и языковые системы не могут различить версии. Подробнее о том, как ИИ-системы обрабатывают аудио, читайте в нашем руководстве по AEO и аудио.

Выбор подходящей модели ElevenLabs для работы с WPML

ElevenLabs предлагает несколько моделей, и они поддерживают разные наборы языков. Если WPML обслуживает язык, который не поддерживается выбранной моделью ElevenLabs, озвучить этот перевод корректно не получится.

Актуальное покрытие по состоянию на 2026 год:

  • Multilingual v2 поддерживает 29 языков: английский, испанский, французский, немецкий, итальянский, португальский, нидерландский, польский, шведский, датский, финский, турецкий, арабский, хинди, японский, корейский и китайский.
  • Flash v2.5 поддерживает 32 языка — все языки v2 плюс венгерский, норвежский и вьетнамский, с задержкой модели около 75 мс.
  • Eleven v3 поддерживает 74 языка — самое широкое покрытие среди всех моделей. Но есть одно существенное ограничение: модель не предназначена для использования в реальном времени. ElevenLabs прямо об этом говорит. Модель крупнее и использует высококачественный голосовой кодек, поэтому генерация занимает больше времени. Для сценариев реального времени или разговорного использования ElevenLabs рекомендует Flash v2.5.

Если на вашем WPML-сайте есть норвежский перевод, Multilingual v2 его не покроет — подойдёт Flash v2.5. Если нужен язык, который поддерживает только v3, придётся принять более высокую задержку генерации ради покрытия. TTSWP маршрутизирует каждый язык к выбранному вами голосу, поэтому при необходимости можно комбинировать модели.

Как проверить, действительно ли ваш плагин синтеза речи поддерживает WPML

Для проверки не нужно читать исходный код. Пять минут в браузере покажут, что происходит на самом деле.

  1. Переключите язык. Откройте оригинальную статью, затем переключитесь на перевод через языковой переключатель WPML. Убедитесь, что URL изменился (например, на /es/) и что слаг поста соответствует переведённому.
  2. Нажмите «Воспроизвести» и послушайте. Голос должен соответствовать языку страницы. Английский голос на испанской странице означает, что плагин не справился с первым шагом.
  3. Проверьте URL аудиофайла. Нажмите правой кнопкой на плеер и скопируйте источник аудио. Сравните его с URL аудио на оригинальной статье. Если оба URL одинаковы для разных языков — плагин использует один файл для всех переводов.
  4. Посмотрите исходный код страницы и найдите AudioObject. Проверьте наличие поля inLanguage. Оно должно соответствовать коду языка страницы. Если поле отсутствует или везде стоит en — схема некорректна.
  5. Проверьте hreflang. Значение inLanguage в аудио должно совпадать с hreflang страницы. Несоответствие мешает ИИ-поиску и нарушает привязку цитирования к конкретному языку.

Запускайте этот чек-лист перед установкой любого плагина. Он работает с любым плагином синтеза речи, не только с TTSWP.

Как выглядит правильная настройка синтеза речи с WPML

Вот что мы рекомендуем для рабочего сайта на WPML. Каждый шаг соответствует одной из описанных выше проблем.

ЗадачаНеверный подходПравильный подход
Язык в AJAXКонстанта ICL_LANGUAGE_CODEФильтр wpml_current_language или wpml_post_language_details, привязанный к ID поста
Хранение аудиоОдин файл для всех переводовОдин файл на каждый переведённый пост, раздаётся через CDN
Выбор голосаОдин голос для всех языковОдин голос ElevenLabs для каждого языка WPML
Выбор моделиОдна модель для всех языковВыбор между Multilingual v2, Flash v2.5 или Eleven v3 для каждого языка
СхемаОтсутствующий или только английский AudioObjectAudioObject с inLanguage, совпадающим с hreflang страницы

TTSWP следует правому столбцу по умолчанию. Плагин читает переведённый пост напрямую, генерирует новый аудиофайл для каждого ID поста, раздаёт его через CloudFront и выводит отдельную схему AudioObject для каждого языка. Подробная настройка описана в документации по интеграции с WPML.

Одно реальное ограничение

Аудио для каждого языка расходует больше символов, чем один общий файл. Если вы публикуете статью на 1500 слов и переводите её на пять языков, вы платите за пять генераций, а не за одну. Это цена за корректную работу. Один общий файл обошёлся бы дешевле, но аудио не соответствовало бы странице. Мы не рекомендуем жертвовать качеством ради экономии кредитов — и говорим об этом прямо в документации по кредитам.

Если бюджет ограничен, генерируйте аудио только для тех языков, которые реально посещают. Статистика языков в WPML и данные аналитики покажут, какие переводы стоит озвучивать.

Часто задаваемые вопросы

Поддерживает ли TTSWP WPML без дополнительной настройки?

Да. Когда оба плагина активированы, TTSWP автоматически определяет WPML, читает переведённое содержимое поста для каждого языка и сохраняет отдельный аудиофайл для каждого перевода. В настройках TTSWP вы назначаете один голос на язык, после чего публикуете переводы как обычно. Аудио перегенерируется при обновлении перевода. Пошаговая настройка описана на странице интеграции с WPML.

Почему мой текущий плагин TTS читает всё на английском на переведённых страницах?

Скорее всего, причина — устаревшая константа ICL_LANGUAGE_CODE внутри AJAX-вызова. При AJAX эта константа часто возвращает язык сайта по умолчанию вместо активного, из-за чего плагин генерирует или отдаёт английское аудио на неанглийских страницах. Решение — перейти на фильтр wpml_current_language или читать язык напрямую из ID поста.

Можно ли использовать разные голоса ElevenLabs для каждого языка WPML?

Да. TTSWP сопоставляет один голос ElevenLabs с каждым языком WPML. Испанские переводы озвучивает испанский голос, немецкие — немецкий, и так далее. Для каждого языка также можно выбрать отдельную модель — это важно, когда нужный язык поддерживается только Flash v2.5 или Eleven v3, но не Multilingual v2.

Какие языки покрывает ElevenLabs для сайтов на WPML?

Multilingual v2 покрывает 29 языков, Flash v2.5 — 32 (добавляя норвежский, венгерский и вьетнамский), Eleven v3 — 74 языка. Выбирайте модель с максимальным покрытием в рамках допустимой задержки. Большинство WPML-сайтов работают на Multilingual v2 или Flash v2.5. Редкие языки подключаются через Eleven v3.

Выводит ли TTSWP отдельную схему для каждого языка в ИИ-поиске?

Да. TTSWP формирует отдельный блок AudioObject для каждого переведённого поста со значением inLanguage, совпадающим с hreflang страницы. Это даёт поисковым системам и ИИ-инструментам чёткий сигнал о том, какое аудио принадлежит какой языковой версии статьи — вместо того чтобы все переводы были помечены одинаково.

Следующий шаг

Запустите пятишаговую проверку в браузере для своего текущего плагина синтеза речи. Если хотя бы один шаг не проходит — именно эту проблему нужно устранить, прежде чем добавлять новые переводы. Если нужна готовая настройка, которая охватывает все пять пунктов, установите Синтез речи - TTSWP с WordPress.org, подключите к бэкенду TTSWP и назначьте один голос для каждого языка WPML. Остальное плагин сделает сам.