Июл
7
8

Polylang — плагин для мультиязычных сайтов на нескольких языках в WordPress

Плагин PolylangВ последних реализациях мультиязычных сайтов на WordPress я использую именно этот модуль. По сравнению с обозреваемым ранее плагином WPML он мне кажется более доступным для понимания и легким в работе. В принципе, похожее мнение о нем встречал в разных подборках/обзорах на аналогичные решения. Недавно внедрил Polylang на еще один проект и просто в восторге! Да, тут есть свои определенные нюансы (о которых поведаю ниже), но в целом продукт очень толковый. Разумеется в посте идет речь о бесплатном варианте (не премиальной версии).

Оглавление:

Основная задача плагина Polylang – реализация мультиязычности в Вордпресс CMS. Не следует путать это с переводом шаблона на русский, т.к. это немного другая история — здесь пользователь получает доступ к сайту в WordPress на нескольких языках и может читать/видеть тексты на том, который лучше ему подходит. Данная фишка применима больше к крупным международным/туристическим порталам или веб-проектам, ориентированным под страны с многоязычным населением.

С помощью модуля:

  • Вы можете легко переводить заметки, страницы, категории/теги, меню либо создавать их с нуля, выбирая одну из доступных локалей.
  • Поддерживается любое количество языковых версий, в том числе и письмо справа налево.
  • Доступна обработка пользовательских типов записей (таксономий), разных форматов постов, RSS-фидов и базовых виджетов.
  • При создании новых переводов постов все категории/метки автоматически копируются.
  • Адрес альтернативных версий веб-сайта может формироваться с помощью дополнительного параметра в URL (например «/en/») либо реализовываться на субдомене.
  • Переключение языков реализуется через виджет, функцию или в меню.

Премиальная сборка предлагает еще несколько опций, но мне всегда хватало бесплатных.

Polylang для WordPress

Кстати, на официальном сайте в разделе поддержки найдете полезную документацию: вопросы-ответы, разработчикам, с чего начать, продвинутые советы, инфу о совместимости с WooCommerce и др. Если описания рабочего процесса ниже вам будет недостаточно и/или нужно будет реализовать задачи посерьезнее – рекомендую туда заглянуть.

Установка и настройка Polylang для WordPress

Ищите модуль по названию в WP-админке или скачивайте отсюда. В данный момент у него более 400тысяч загрузок и почти максимальная оценка (850 юзеров поставили ему 5-рку). Единственное, что может слегка смущать – наличие около сотни багов, над которыми разработчики активно трудятся. Критичных ошибок пока не встречал.

Алгоритм работы следующий:

1. После активации модуля переходим в раздел “Languages”, где выбираем одноименный подпункт меню. Здесь надо создать базовый язык по умолчанию. Для этого в первом параметре “Choose a language” достаточно выбрать нужное значение из списка, и все опции автоматически будут установлены.

Polylang - добавление языков

Так как это первая наша запись, то значение “Order” (порядок языковых версий) будет установлен в ноль. Осталось только кликнуть по кнопке “Add new language”.

2. Сразу после добавления базовой локали в админке появится следующее сообщение:

Polylang - язык по умолчанию

Система уведомляет вас о том, что у всех записей, категорий и страниц не указан никакой язык, и если вы хотите установить для них только что добавленный, то требуется кликнуть по ссылке в данном сообщении. Выполните это.

3. Раз уж нам надо сделать многоязычный сайт в Wordpress, то без (как минимум) еще одного дополнительного языка нам не обойтись. Выполняете такую же процедуру как и на первом шаге – переходим в “Languages” и в выпадающем списке находим нужное нам значение. Внимание! В данном случае параметр “Order” меняем на единицу (двойку, тройку и т.д., для каждого следующего объекта).

Polylang - добавление языков

4. Теперь переходим в раздел настроек плагина “Settings”, где находим пункт “URL modifications”. В моем случае нужно было сделать классический вариант URL’а по типу:

  • Базовая версия — https://название_сайта.ru/pro-nas/
  • Английская: https://название_сайта.ru/en/about-us/

То есть идентификатор локали идет сразу после доменного имени. Поэтому я выбрал следующие настройки:

Настройки Polylang в WordPress

Здесь:

  • Оставляем по умолчанию вариант с директорией в URL-линке.
  • Избавляем от приставки language в адресе + убираем отображение идентификатора локали по умолчанию.
  • На главной в URL не выводится название страницы, а только языковая версия.
  • Сохраняем все настройки.

Переключатель языков в Polylang – виджет и функция

Требуемый нам виджет называется «Language Switcher». Выглядит он следующим образом.

Виджет переключатель языков в Polylang

Содержит такие настройки как:

  • отображение выпадающим списком (dropdown);
  • вывод текстовых названий локалей;
  • показ соответствующих флажков;
  • скрытие текущего языка;
  • скрытие вариантов, где нет перевода.

Все предельно просто. Если же вам надо как-то нестандартно вписать данный элемент в дизайн сайта, то к счастью, разработчики предусмотрели отдельную функцию для этой задачи:

Функция pll_the_languages

pll_the_languages( $args );

В ее параметрах указываются разные аргументы, для которых вы ставите значения 1 или 0, отвечающие за срабатывание или отключение опции (1 – да, 0 – нет):

  • dropdown – показ в виде dropdown списка;
  • show_names – вывод названий языков;
  • display_names_as – отображение локалей как “имени” или “slug”;
  • show_flags – выводить флаги или нет;
  • hide_if_empty – скрытие выбора для постов/страниц Вордпресс без мультиязычности;
  • force_home – принудительный линк на главную;
  • echo – демонстрировать результат сразу или вернуть строку (по умолчанию – да);
  • hide_if_no_translation – скрыть переключение/выбор, если нет перевода;
  • hide_current – не показывать текущий язык;
  • post_id – отображение ссылок на заметки/страницы, определенные через post_id;
  • raw – создание своего собственного элемента-переключателя.

Самый популярный пример использования функции:

<ul>
<?php pll_the_languages( array( 'show_flags' => 1, 'show_names' => 0 ) ); ?>
</ul>

В таком случае посетители увидят просто несколько флажков без какого-либо текста. Думаю, принцип добавления, указанных выше, параметров вам понятен. 

Заменяем стандартные иконки-флаги на свои

Для использования своих иконок вместо стандартных нужно:

  1. Сохранить изображения в формате по типу “en_US.png”, то есть его название должно соответствовать локали (для украинской версии это просто — uk.png). В качестве расширений файлов допускаются: PNG, SVG, JPG.
  2. Далее создаете на FTP в директории wp-content новую папку /polylang куда и заливаете все эти иконки флажков.
  3. Затем заходите в админку в раздел “Languages” – “Settings”, где открываете пункт настроек “URL modifications” и просто сохраняете их, ничего не изменив.

На этом все. Из дополнительных подсказок/советов:

  • Создавать свою директорию /wp-content/polylang/ нужно дабы после обновления плагина изображения не перезаписались базовыми по умолчанию. Хотя, если вы используете дочернюю тему, то как я понял, картинки загружать в /polylang/flags/ вполне реально.
  • Кастомные флажки работают только во фронтенде, в админке – нет.
  • Для определения размеров SVG файлов нужно юзать фильтр pll_custom_flag (в других случаях достаточно подправить CSS):
add_filter( 'pll_custom_flag', 'pll_custom_flag', 10, 2 ); 
function pll_custom_flag( $flag, $code ) {
    $flag['url']    = "http://mysite.com/wordpress/wp-content/polylang/{$code}.svg";
    $flag['width']  = 32;
    $flag['height'] = 22;
    return $flag;
}

Создание переводов на разные языки

Итак, мы разобрались со всеми с базовыми настройками плагина мультиязычности в WordPress и теперь пришло время добавить сами переводы на сайт. Делается это в несколько этапов, поскольку для тех или иных элементов существуют свои подходы.

Строчные параметры

Они находятся в разделе плагина под названием “Strings translations”. Как я понимаю, сюда входят некоторые базовые системные значения + «вкрапления» из других модулей: заголовок, архивы, главная, ошибка 404, формат даты и т.п.

Polylang - строчные переводы

Если посмотреть на мой пример на скриншоте выше, то там часть фраз импортирована из Yoast SEO. Судя по всему, разработчики плагинов могут как-то юзать эту фишку для организации лучшей совместимости с Polylang.

Переводы страниц/постов

Тут все достаточно наглядно и интуитивно понятно. Переходите к списку всех записей и в самом конце каждой строки увидите наличие тех или иных локализаций.

Polylang - переводы постов и страниц

Здесь:

  • галочками отмечается наличие текста на нужном языке;
  • нажимая на иконку “+” (плюс) вы создаете новый перевод;
  • иконка “карандаша” – редактирование.

В самой верхней панели имеется переключение между языками – допускается просмотр сразу несколько версий либо какой-то одной. Это уже кому как удобнее редактировать. Вам также разрешается создавать новые локализации при работе в текстовом редакторе:

Polylang - переводы постов и страниц

Тут аналогично требуется кликнуть по иконке с “+”, после чего откроется новое окно для создания записи. Она будет привязана в качестве перевода оригинальной как только вы нажмете «Опубликовать».

Важно! В бесплатной версии плагина Polylang в WordPress настройках недоступно указание одинаковых URL двум элементам! То есть вы можете создавать только разные URL-адреса для вебстраниц. Хотя с другой стороны по SEO так, в принципе, и советуют делать.

Перевод шаблонов

В некоторых из них можно провернуть прием, аналогичный предыдущему пункту: то есть сначала выбираете нужный язык в верхней горизонтальной панели, а затем заходите в раздел админки «Внешний вид» — «Настроить». Если фишка не сработала, попробуйте специальное решение на GitHub которое называется “Add Polylang to WordPress Customizer” и добавляет выбор локали в инструмент настройщика шаблона.

Однако лично я комбинировал два других подходов:

  • Непосредственно в самих файлах макета использовал условный оператор IF и функцию pll_current_language(), которая отдает двухбуквенный slug текущего установленного языка.
  • Также создал новые блоки виджетов а затем в них добавлял соответствующий контент (как показано ниже).

Логично, что в первом случае у вас все данные “зашиты” в шаблон, и пользователь не сможет их легко менять в панели управления (в отличии от второго подхода). Иногда для решения задачи хватает и одного метода… Либо пробуйте скрипт с GitHub.

Виджеты, плагины, графика и др.

В этом подразделе приведу инфу по разным более мелким вопросам.

1. Во-первых, для виджетов разрешается выбирать язык отображения. Это удобно, т.к. можно показывать не просто разные тексты людям, а и вообще другие информационные блоки.

Polylang - переводы виджетов

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

Polylang - переводы плагинов

3. Иногда приходится делать локализацию изображений дабы они корректно срабатывали для каких-то специфичных плагинов или тем. Если перейти в «Медиабиблиотеку», то там увидите такие же элементы управления, как и для страниц/заметок.

Polylang - переводы изображений

Важно! Теоретически, если перейти в параметры “Settings” для Polylang, то можно отключить локализацию изображений на сайте. Лично у меня эта фишка не сработала при решении одной определенной задачи – попробуйте, может в вашем случае получится. 

Дополнительные фишки плагина Polylang

Напоследок еще пару советов, помогающих сделать мультиязычный сайт на нескольких языках в WordPress с применением данного решения:

  • Во-первых, если вы использовали ранее WPML, то есть специальное решение для перехода к рассматриваемому модулю – называется оно “WPML to Polylang”.
  • Когда кто-то заходит на определенную версию сайта, например, английскую (en), то в следующий раз юзеру она сразу будет открываться автоматически. Опять же в “Settings” видел параметр “Detect browser language” – можно попробовать его выключить.
  • Что касается совместимости с WooCommerce, то в некоторых местах советуют премиальный официальный аддон. Бесплатные альтернативы я пока что не искал.

Итого. В общем, достаточно много инфы получилось собрать про настройку Polylang. Как по мне, это реально один из самых топовых плагинов для мультиязычного сайта в WordPress. Его описание в репозитории показывается достаточно много активных багов/правок, но пусть вас это не смущает – работа над ними активно ведется. По функциональности все реально круто + наглядно, что тоже немаловажно. Конечно, платная сборка обладает некоторыми дополнительными крутыми функциями, но пока мне и обычная вполне подходит.

Если у вас ест что добавить или вопросы – пишем под постом.

комментариев 8 к статье “Polylang — плагин для мультиязычных сайтов на нескольких языках в WordPress”

  • Олег   04.07.2019

    Из последних багов плагина (появились внезапно — до этого работал без проблем):

    1. Неправильное переключение языка (в моем случае должен на англоязычную версию, а переключает на русский)
    2. Неправильное отображение урла англоязычной версии главной (вставляет после /en/ название страницы)
    3. Очень долго грузит другие языковые версии сайта.
    Сайт digitowl.com.ua
    Все сделал, как описано в статье, то есть настройки правильные. Интересно, кто-то также имеет такие проблемы, или это только у меня :/

  • Tod   05.07.2019

    Олег, если честно не заметил озвученных вами проблем, возможно, кукисы-кэш браузерах сохранены и надо попробовать зайти через VPN/TOR или почистить их. По второму пункту так ведь и должно быть — приставка /en/ для всех языковых версий кроме основного языка. 3 — переключение версий это просто переход по ссылкам, вряд ли оно как-то может грузить сайт, скорее, проблема в чем-то другом. Но вообще всегда можно тестить глюки, отключая другие модули и установив базовый шаблон — если все ок на базовых настройках, то ищется проблема в плагинах/теме.

  • Hovo   09.08.2019

    Доброго времени суток! Перевод плагин делает а вот меню нет. Меню остается на одном языке. Перепробовал все ну или почти все — не пойму в чем проблема, может быть в версии
    Очень надеюсь на помощь

  • Tod   09.08.2019

    Hovo, меню может зависеть от подключенного шаблона, то есть я бы попробовал эту фишку на том, что идет по умолчанию. Ну, и все модули выключили другие. Обычно после активации плагина в разделе меню дублируются существующие менюшки на 2 языка. Может у вас изначально не было никакого меню создано? В общем, совет один — попробовать на базовой теме + без плагинов. Потом я бы начал гуглить подобную ошибку в сети — иногда в модулях встречаются подобные косяки, хорошо, что тут разработчики их со временем устраняют.
    P.S. Если все же не удастся найти проблему, то есть 2 варианта решения — используете функцию pll_current_language для определения языка в шаблоне и выводите менюшку через ее функцию, либо через виджеты создаете 2 языковых версии.

  • Влад   18.08.2019

    Добрый день.
    спасибо за полезную статью.
    все сделал.
    получилось
    сайт travel.ms
    тема isleMag

    Единственное, не переводится Заголовок Блока начальной страницы.
    Он одинаково показывается в разных языках. Сейчас это «Лайфхаки» на стартовой странице
    Подскажите, пожалуйста, как исправить?
    спасибо

  • Tod   19.08.2019

    Влад, нужно смотреть код как именно выводится этот заголовок — если категория, то переводить категорию, если в шаблоне, то через language файл локализации темы (если есть) либо добавить условный оператор прямо в шаблон и выводить значения в зависимости от текущего языка.

  • Влад   19.08.2019

    Tod, спасибо за ответ.
    Это точно не категория, тк Категории нормально перевелись.

    Скорее всего не » language файл локализации темы» т.к. это поле не «вшито » в тему, а его свободно можно менять.

    Скорее всего мой путь — «добавить условный оператор прямо в шаблон и выводить значения в зависимости от текущего языка.»
    Подскажите, как это правильно сделать?
    где можно почитать?

    Ниже — код этого фрагмента

    Лайфхаки

    <div class="owl-carousel islemag-template1-posts smaller-nav no-radius"

  • Tod   20.08.2019

    Влад, можно попробовать перевод с gettext функцией — дописать только туда условный оператор «если другой язык — выполнить перевод». За текущий язык отвечает pll_current_language, всю конструкцию добавляете в файл функций.

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Заработай в GoGetLinks
Лучшее в категории
Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости