Синтез речи для сайтов на Polylang: что реально работает
Полноценный синтез речи для Polylang означает один аудиофайл на переведённый пост — на правильном языке и с правильным голосом. Так как Polylang хранит каждый перевод как отдельный пост WordPress со своим ID, генерация аудио на уровне поста работает нативно. Подводные камни — это выбор голоса, редиректы через куки и кеширование страниц, но не само аудио.
Это четвёртый материал в нашей серии о многоязычном синтезе речи. Ранее мы разбирали WPML, Weglot и релиз GTranslate 3.3.0. По архитектуре Polylang ближе всего к WPML, но со своими особенностями. Вот что мы проверили на практике и что реально работает на продакшн-сайтах с Синтез речи - TTSWP.
Почему Polylang важен для синтеза речи
Polylang работает на большем числе многоязычных сайтов WordPress, чем любой другой бесплатный плагин: более 800 000 активных установок. Первая версия вышла в 2011 году, и плагин до сих пор активно поддерживается. Количество языков не ограничено, языковые пакеты WordPress скачиваются автоматически. Большинство сайтов на Polylang — это блоги, небольшие издания и экономные агентства, которые выбрали его за бесплатное ядро и чистую архитектуру.
Именно эта популярность создаёт проблему для TTS-плагинов. Многие заявляют о поддержке Polylang, но тестируют только язык по умолчанию. Они прикрепляют один аудиофайл к посту, а потом отдают тот же файл для всех переводов. Испанская версия воспроизводит английское аудио. Немецкая версия молчит. Посетители уходят.
Решение структурное. Polylang не добавляет новых таблиц в базу данных и не использует шорткоды. Он строится на таксономиях WordPress — той же базовой функциональности, которая лежит в основе категорий и меток. Каждый перевод живёт как настоящий пост. Поэтому генерация аудио на уровне поста — именно так работает TTSWP — совпадает с тем, как Polylang хранит контент.
Чем Polylang отличается от Weglot и GTranslate
Polylang дублирует посты. Weglot и GTranslate переводят в момент отрисовки страницы. Это единственное отличие определяет всё в части поддержки синтеза речи.
На сайте с Polylang немецкий перевод страницы «О нас» — это отдельный пост WordPress с ID 412, языковым слагом «de» и собственным содержимым в базе данных. WordPress видит его, REST API видит его, и любой TTS-плагин, подключённый к save_post или wp_insert_post, тоже его видит. Аудио генерируется один раз на перевод, на языке этого перевода, и файл кешируется по ID поста.
Weglot и GTranslate работают иначе. Переведённый текст существует только в момент запроса страницы пользователем. Второго поста, к которому можно прикрепить аудио, нет. Мы разбирали обходные пути для Weglot и GTranslate в предыдущих материалах. WPML использует ту же модель дублирования, что и Polylang, поэтому наше руководство по WPML применимо здесь с небольшими поправками.
Для синтеза речи это хорошая новость. Polylang даёт именно то, что нужно: стабильный ID поста для каждого языка, известный языковой слаг и постоянный permalink, который не меняется в момент отрисовки.

Четыре структуры URL в Polylang и что каждая означает для синтеза речи
Polylang предлагает четыре режима URL. Каждый меняет то, как кеши, CDN и код определения языка видят ваши страницы. Выберите неподходящий вариант — и правильный аудиофайл окажется за неправильным URL.
1. Язык только из контента (без кода языка в URL)
Самый сложный вариант. URL example.com/about отдаёт одному посетителю английскую версию, другому — немецкую: по куки или настройкам браузера. Кеш видит один URL и сохраняет один вариант. Побеждает тот язык, который кеш успел захватить первым.
Для синтеза речи сам аудиофайл в порядке — он привязан к ID поста, а не к URL. Проблема в странице, которая встраивает плеер. Если закешированная английская страница загружается с немецким embed аудио, плеер будет воспроизводить немецкое аудио, хотя посетитель ожидал английский текст. Мы не рекомендуем этот режим URL ни на одном кешированном сайте.
2. URL с директориями (/en/, /de/)
Это режим по умолчанию, и именно его мы рекомендуем. Каждый язык живёт по своему пути. Кеши обрабатывают /en/about и /de/about как разные ключи. Нужная страница загружается с нужным плеером и нужным аудиофайлом. Никаких трюков с куки не нужно.
Следите за опцией «скрыть языковую информацию из URL для языка по умолчанию». Когда она включена, у языка по умолчанию пропадает префикс: /about становится английским, а /de/about остаётся немецким. Определение языка по URL в сторонних скриптах тогда не срабатывает на путях языка по умолчанию — слаг отсутствует. Если вы используете эту опцию, опирайтесь на pll_current_language(), а не на разбор URL.
3. Поддомены (en.example.com, de.example.com)
Поддомены дают каждому языку свой хост и своё пространство имён в кеше. TTS-плееры загружаются чисто для каждого языка. Из минусов — DNS, отдельные SSL-сертификаты на каждый поддомен и чуть более сложная аналитика. Хорошо работает при масштабировании.
4. Отдельные домены для каждого языка
Полное разделение: example.com для английского, example.de для немецкого. Синтез речи по-прежнему привязывает аудио к ID поста внутри каждой установки WordPress, и плеер работает одинаково. Этот режим распространён среди брендов, у которых уже есть ccTLD.
Проблема редиректов через куки
Polylang может определять язык браузера посетителя при первом заходе на главную страницу. Затем он устанавливает куки pll_language и перенаправляет посетителя на соответствующую языковую версию. В связке с кешированием страниц именно здесь появляется аудио не на том языке.
Вот последовательность сбоя, которую мы воспроизвели. Французский посетитель заходит на главную. Polylang определяет французский, устанавливает куки pll_language и делает редирект на /fr/. Кеш сохраняет этот редирект-ответ под URL главной страницы. Следующий посетитель — англоговорящий — запрашивает главную и получает закешированный редирект на /fr/. Он попадает на французскую страницу, слышит французское аудио и уходит.
При URL с директориями ущерб ограничивается главной страницей, поскольку у каждой другой страницы есть свой ключ кеша для каждого языка. При режиме «язык только из контента» та же проблема распространяется на все URL сайта.
Работают три решения. Самое простое — отключить определение языка браузера на любом кешированном сайте и дать посетителям выбирать язык через переключатель. Второе — настроить плагин кеширования так, чтобы он учитывал или пропускал куки pll_language. Третье — исключить главную страницу из кеша, чтобы редирект для определения языка всегда выполнялся «живьём».
Если вы используете WP Rocket, W3 Total Cache или LiteSpeed, смотрите нашу документацию по интеграции с кешированием для настройки куки. Polylang работает рядом с этими плагинами, но «работать рядом» — не то же самое, что «понимать язык». Кеш всё равно придётся настраивать самостоятельно.
Поведение AJAX на фронтенде
Polylang автоматически определяет текущий язык во фронтендовых AJAX-запросах и загружает строки для этого языка. Можно также передать явную переменную lang в запросе, чтобы принудительно задать нужный язык. Для синтеза речи это важно, когда аудиоплеер или виджет похожих записей выполняет AJAX-запрос для загрузки другого поста.
В наших тестах Polylang справляется с этим без проблем. Мы не столкнулись с регрессиями языка в AJAX, которые задокументированы в материале про WPML. Если кастомная интеграция должна загружать пост на не текущем языке, передавайте lang явно и проверяйте наличие function_exists('pll_current_language') перед чтением результата.
Настройка Синтез речи - TTSWP на сайте с Polylang
Следующие шаги предполагают, что Polylang уже установлен и как минимум один перевод существует.
- Установите Синтез речи - TTSWP со страницы плагина на WordPress.org. Активируйте его. Если возникнет ошибка прав доступа, обратитесь к документации по установке.
- Подключите плагин к TTSWP, следуя руководству по подключению. Бесплатный план включает приветственные кредиты, так что можно протестировать до перехода на платный тариф.
- Откройте пост на исходном языке и сгенерируйте аудио. Убедитесь, что плеер появился на фронтенде.
- Переключитесь на переведённую версию через переключатель языков Polylang в редакторе постов. Сгенерируйте аудио снова. Polylang загружает другой ID поста, поэтому TTSWP воспринимает это как новую генерацию и сохраняет отдельный файл.
- Выберите голос для каждого перевода. Выбор голоса происходит на уровне поста. Смотрите документацию по выбору голоса для переопределения на уровне поста.
- Проверьте на фронтенде. Откройте
/en/post-slugи/de/post-slugв разных вкладках. Воспроизведите каждый. Голоса и языки должны совпадать.
На данный момент автоматическое сопоставление голоса с языком в TTSWP в первую очередь охватывает WPML и Weglot. Для Polylang выбор голоса происходит на уровне поста, а сопоставление языка по умолчанию работает через определение языка поста, описанное ниже. Для большинства сайтов на Polylang этого достаточно, поскольку каждый перевод — это настоящий пост, и голос задаётся один раз для каждого поста. Текущее поведение описано в документации по интеграции с Polylang.

Как правильно определять язык поста для выбора голоса
Правильный способ получить язык поста в Polylang — функция pll_get_post_language(). Всегда проверяйте, что функция существует, прежде чем вызывать её — это рекомендует сам Polylang. Шаблон выглядит так:
if ( function_exists( 'pll_get_post_language' ) ) {
$lang = pll_get_post_language( $post_id, 'slug' );
// $lang теперь 'en', 'de', 'fr' и т. д.
}
Для контекста фронтенда pll_current_language() возвращает язык текущего запроса. Обе функции стабильны и входят в публичный API Polylang уже много лет. Логика сопоставления голосов должна всегда читать язык из поста, а не из настроек сайта — иначе переводы получат неправильный голос.
Polylang бесплатный против Polylang Pro для синтеза речи
Ничто в Polylang Pro не нужно для работы аудио. Бесплатная версия Polylang даёт TTSWP всё необходимое: дублирование постов по языкам, языковые слаги и публичные API-функции выше.
Polylang Pro добавляет машинный перевод через DeepL, поддержку REST API, переведённые URL-слаги и экспорт XLIFF для аутсорсинга перевода. Ни одна из этих функций не меняет ситуацию с синтезом речи для блогов и страниц. Polylang for WooCommerce — отдельное платное расширение, которое управляет страницами магазина, категориями товаров, атрибутами и транзакционными письмами. Если вы хотите озвучку на страницах товаров, смотрите наше руководство по синтезу речи для WooCommerce.
SEO и AEO с аудио для каждого языка
Polylang автоматически обрабатывает hreflang — это бо́льшая часть SEO-работы для многоязычных сайтов. Добавьте разметку AudioObject для каждой языковой версии, укажите в ней файл именно этого перевода — и вы дадите поисковым системам чёткий сигнал.
По нашим наблюдениям, статьи с аудио и разметкой AudioObject чаще цитируются ИИ-поисковиками. Мы задокументировали методику и результаты в материале про AEO и аудио. Коротко: один аудиофайл на перевод, разметка на перевод — и преимущество для AEO обеспечено.
Распространённые проблемы и их решения
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Перевод воспроизводится не тем голосом | Голос задан глобально, а не для поста | Откройте переведённый пост, задайте голос для него, перегенерируйте |
| У одного языка нет аудио | Аудио никогда не генерировалось для этого перевода | Откройте переведённый пост в редакторе и нажмите «Сгенерировать» |
| Закешированная страница показывает плеер не того языка | Кеш сохранил редирект для определения языка или один вариант страницы | Отключите определение языка браузера или настройте кеш на учёт куки pll_language |
| Плеер для арабского или иврита отображается некорректно | CSS для RTL не применён к плееру | Добавьте RTL-стили через кастомный CSS |
| Строки интерфейса плеера остаются на языке по умолчанию | Строки плагина не зарегистрированы для перевода | Зарегистрируйте строки плеера через pll_register_string, чтобы Polylang показывал их на экране перевода строк |
| Аудио генерируется на языке по умолчанию для всех постов | Логика сопоставления голоса читает локаль сайта вместо языка поста | Проверьте язык поста через pll_get_post_language($post_id, 'slug') |

Об доступности
Озвучка для каждого языка — это ещё и улучшение доступности. Посетители, которые лучше читают на родном языке, но предпочитают слушать, получают сразу оба варианта. Если ваш сайт попадает под требования WCAG 2.2 или Европейского акта о доступности, смотрите наше руководство по соответствию аудио стандарту WCAG. Для общего знакомства с добавлением синтеза речи в WordPress в 2026 году в основном руководстве разобраны все ключевые моменты.
Часто задаваемые вопросы
Работает ли Polylang вместе с синтезом речи?
Да. Polylang хранит каждый перевод как отдельный пост WordPress со своим ID — точно такая же архитектура, которую TTSWP использует для генерации аудио на уровне поста. Сгенерируйте аудио для каждого перевода — и получите один файл на язык с выбранным голосом. Бесплатной версии Polylang достаточно. Никакой специальной настройки сверх стандартной установки TTSWP не требуется.
Нужен ли Polylang Pro для работы с аудио?
Нет. Бесплатная версия Polylang предоставляет всё, что нужно TTSWP: дублирование постов по языкам, языковые слаги и публичные API-функции pll_get_post_language() и pll_current_language(). Polylang Pro добавляет машинный перевод через DeepL, поддержку REST API и переведённые URL-слаги. Ни одна из них не влияет на генерацию или воспроизведение аудио.
Можно ли задать свой голос для каждого языка?
Да. Поскольку каждый перевод — отдельный пост, выбор голоса происходит на уровне поста. Задайте немецкий голос для немецкого перевода, испанский — для испанского, и так далее. TTSWP сохраняет выбор для поста и использует его при каждой повторной генерации. Текущее поведение описано в документации по сопоставлению языков и голосов.
Почему аудио воспроизводится не на том языке?
Чаще всего причина — кеширование страниц в связке с определением языка браузера в Polylang. Кеш сохраняет редирект главной страницы или один языковой вариант и отдаёт его всем. Сам аудиофайл правильный для данного ID поста. Но страница, которая его загружает, — нет. Отключите определение языка браузера на кешированных сайтах или настройте плагин кеширования на учёт куки pll_language. URL с директориями (/en/, /de/) ограничивают проблему только главной страницей, потому что у всех остальных страниц есть свой ключ кеша.
Чем Polylang отличается от WPML для синтеза речи?
Оба дублируют посты для каждого языка, поэтому генерация аудио на уровне поста работает одинаково. Различия — в обработке AJAX, поведении куки и именах функций в API. Polylang использует функции с префиксом pll_ и в целом легче. У WPML больше встроенных функций для WooCommerce, но и сам плагин тяжелее. Подробнее об этом — в нашем материале про WPML.
Можно ли перевести подписи элементов аудиоплеера?
Да, но потребуется один дополнительный шаг. Polylang показывает экран перевода строк для плагинов, которые регистрируют свои UI-строки через pll_register_string(). Если вы хотите, чтобы кнопка воспроизведения, таймер или другие тексты плеера переключались вместе с языком, зарегистрируйте эти строки в дочерней теме или небольшом сайт-специфичном плагине. После этого они появятся в разделе «Языки» → «Перевод строк».
Что делать дальше
Откройте один из переведённых постов в редакторе WordPress и посмотрите на панель аудио. Если там уже стоит нужный язык — настройка завершена. Если нет — задайте голос для этого перевода, перегенерируйте и проверьте фронтенд. Когда один перевод заработает, остальные настраиваются по той же схеме.
Если вы ещё не установили Синтез речи - TTSWP, скачайте его с WordPress.org и подключите к бесплатному аккаунту TTSWP. Протестируйте на одном переводе, послушайте и решите, разворачивать ли на все остальные.
Похожие статьи
Синтез речи для сайтов на WPML: что реально работает
Как добавить синтез речи на сайт с WPML так, чтобы плагин выбирал правильный голос для каждого языка, генерировал отдельный аудиофайл для каждого перевода и корректно определял язык при AJAX-запросах.
Лучшие плагины text-to-speech для WordPress (2026)
Объективный обзор семи лучших WordPress-плагинов для озвучки текста в 2026 году: честный анализ сильных и слабых сторон каждого, плюс полная сравнительная таблица.
Синтез речи для сайтов WordPress с Weglot: что реально работает
Большинство плагинов озвучки заявляют поддержку Weglot, но читают текст из базы данных, а не из перевода. Вот что требует настоящая совместимость с Weglot.