Июл
7
16

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. Его описание в репозитории показывается достаточно много активных багов/правок, но пусть вас это не смущает – работа над ними активно ведется. По функциональности все реально круто + наглядно, что тоже немаловажно. Конечно, платная сборка обладает некоторыми дополнительными крутыми функциями, но пока мне и обычная вполне подходит.

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

комментариев 16 к статье “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, всю конструкцию добавляете в файл функций.

  • Влад   31.08.2019

    Я правильно понимаю, мне нужно сделать следующее:
    прописать в functions

    add_filter(‘gettext’, ‘translate_text’);
    add_filter(‘ngettext’, ‘translate_text’);

    function translate_text($translated) {
    $translated = str_ireplace(‘Лайфхаки’, ‘Lifehacks’, $translated);
    return $translated;
    }

    а что сделать потом?

  • Влад   31.08.2019

    мне нужно менять это слово на другое, только если пользователь находится на англ версии сайта.

    вопросы такие
    1. что дальше делать, как правильно написать этот условный код («если язык страницы английский то вызываем эту функцию, которая переводит текст»)?
    2. и куда этот код вставить? как найти тот файлик, который нужно править руками?

    спасибо!

  • Tod   01.09.2019

    Для добавления условия нужно вместо предыдущего варианта функции сделать такой:
    function translate_text($translated) {
    if (pll_current_language() == 'en') {
    ... тут идет список ваших переводов ...
    }
    return $translated;
    }

  • Влад   02.09.2019

    Вот , что получилось:

    function translate_text($translated) {
    if (pll_current_language() == ‘en’) {
    $translated = str_ireplace(‘Лайфхаки’, ‘Lifehacks’, $translated);
    }
    return $translated;
    }

    вставил этот текст в самое начало файла functions.php

    к сожалению, ничего не произошло. :(

  • Tod   02.09.2019

    Влад, пришлите на почту все содержимое файла функций, я гляну.

  • Влад   03.09.2019

    отправил ))

  • Шерзод   06.09.2019

    Здраствуйте, у меня есть вопрос! Если я перехожу на другую страницу мной выбранным языком(не дефолтный), то на другой странице опять дефолтный язык, как можно реализовать чтобы когда я переходил на другую страницу был мной выбранный язык, можете помочь

  • Tod   07.09.2019

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

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


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

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

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

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

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

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