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

Плюсом этого плагина является то, что он позволяет создавать:

  1. Копии страниц/записей на вашем сайте на другом (других) языках:
    Настройки Polylang для записей (страниц)
  2. Добавлять отдельные виджеты на разных языках:
    Polylang в настройках виджетов
  3. Добавлять переключатель языков в меню:
    Переключатель языка в меню Polylang

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

Добавление кода вывода языков в шапке сайта

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

В примере ниже в настройках языка плагина Polylang выбрано не полное название, а часть слова, поэтому на сайте выведены языки в виже сокращенных названий из 3-х букв.
Переключатели языка в меню

Настройки языков в плагине Polylang

Вы можете посмотреть, какие аргументы передавать в функцию pll_the_languages()  в официальной документации. Давайте познакомимся с ними здесь:

Как можно использовать эти параметры?

Например, довольно часто необходимо вывести только короткие названия языков, которые обычно состоят из 2-х букв и являются кодом (slug) в настройках плагина Polylang. Если же нужны полные названия, то вы можете их вывести полностью, если оставите их названия такими в настройках плагина.

Polylang названия и коды языков

Код для вывода слагов:

Если вам необходимо создать свой вариант вывода меню, вы можете использовать функцию pll_current_language( 'slug' ) для вывода текущего языка, но при этом скрыть его из выпадающего списка, который можно создать с помощью функции pll_the_languages():

Результат будет таким:

Выпадающий список на основе pll_the_languages()ф

Выпадающий список можно сделать с помощью css-стилей. Но саму разметку вы создаете с помощью функции pll_the_languages().

Добавление поддержки перевода строк Polylang в функции темы

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

В документации описаны 2 функции - pll__('Text') и pll_e('Text'), которые позволяют вывести любую строку в файлах вашей темы с переводом, который определяется в настройках плагина. Разница в них заключается в том, что pll__('Text') вызывает функции перевода, но не выводит строку, а  pll_e('Text') содержит в себе оператор echo для вывода перевода.

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

Для файла single.php вы можете использовать перевод строк в цикле WordPress:

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

Однако, это только полдела.

Для того чтобы нужные вам строки попали в настройки перевода строк, необходимо привязать вызов функции к action init и использовать в ней функции плагина Polylang pll_register_string() c 2 параметрами: вашим названием и текстом строки, который вы ранее использовали в функциях pll_e или pll__. Обратите внимание, что в двух строках используется тег перевода строки <br>, и при этом перевод учитывает его, а затем отображает на страницах сайта.

В результате работы этой функции вы увидите добавление настроек в таблице, доступной через меню Languages → Strings translations. Вам нужно ввести верный перевод для ваших строк в соответствии с указанными языками.

Перевод строк в настройках плагина Polylang

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

Вывод перевода Polylang в низу одиночной записи

Настройки в Customizer для разных языковНастройки Customizer для вывода постов на главной для 2-х языков

С точки зрения разработки темы обычно возникает вопрос о переводе настроек темы, которые на данный момент чаще всего располагаются в Customizer - Настройщике.

Например, вам необходимо в настройках сделать выбор постов для вывода их на главной странице в количестве 3-х штук. Главная страница существует, например, в 2-х вариантах - на русском и на украинском языке. Внешний вид настроек показан на скриншоте слева.

Каким образом можно выбрать отдельно посты для русской версии страницы, отдельно - для украинской? Вариант кода представлен ниже. В нем вы проверяем, входит ли пост в выборку по русскоязычным постам if($post->ID == pll_get_post($post->ID,'ru') или украиноязычным: if(pll_get_post($post->ID,'uk')).

Обратите внимание, что код для файла customizer.php представлен не полностью, а только для выборки постов. В функции theme_slug_customize_register() нужно еще создать панель настроек с помощью $wp_customize->add_panel() и секцию $wp_customize->add_section('theme_slug_homepage_section').

Подключаем файл стилей, записывая в functions.php темы такой код:

Сами стили мы записываем в файле, который размещаем в папке css/admin/ нашей темы:

В файле front-page.php, который отвечает за формирование статической главной страницы, запишем следующий код:

Небольшие пояснения к коду:

  • theme_slug_get_option() - функция, отвечающая за получение всех настроек темы. Вы можете написать ее сами.
  • THEME_URI - константа, определенная в файле functions.php методом define('THEME_URI', get_template_directory_uri());
  • get_the_post_thumbnail_url( $the_post->ID, 'post-medium')  - получение url изображения записи, которое устанавливается справа внизу в настройках записи для того, чтобы использовать его в качестве фона для блока с записью на главной.

Результат - на разных языках посты выглядят по-разному, подтягивая только статьи на нужном языке:Вывод постов на главной странице дляpolylang

Плагины для перевода настроек с помощью Ploylang

Добавление строк для перевода плагинов и тем

Плагин Theme and plugin translation for Polylang (TTfP) позволяет найти строки в плагинах и темах, которые можно обернуть в функции pll_e('Text') или pll__('Text'). Как правило, в темах и плагинах, которые создаются согласно рекомендациям Кодекса WordPress, вывод строк, предназначенных для перевода на другие языки, формируется с помощью WordPress-функций _e('Text', 'theme_domain') или __('Text', 'theme_domain'). Первый параметр в этих функция 'Text' - это текст для перевода, а второй - 'theme_domain' - это, как правило, название вашей темы (и имя папки с ней).

В результате работы плагина, в меню Languages → Strings translations у вас появятся строки из нужных плагинов/темы, которые вы отмечаете в настройках Theme and plugin translation for Polylang (TTfP):

Настройки плагина для перевода тем и плагинов Строки из плагина для перевода тем и плагинов

Плагин изменения настроек темы в зависимости от языка

Для перевода настроек тем предназначен плагин Customizer Polylang, который добавляет создает переключатель языков в настройках темы и позволяет вам сделать отдельные настройки для каждого из указанных в настройках Polylang языков. На изображении видно, каким образом вы можете использовать этот плагин после установки и активации.

Customizer Polylang

Автор: Админ

9 комментариев

  1. подскажите плиз, как в полиленге сделать, чтоб в выпадающем окне, в месте с названиями выводились и флажки, а то такой настройки нет (

  2. Пробовала аддон к плагину Polylang (Add Polylang support for Customizer.), действительно решает вопросы с конструктором главной страницы, позволяет добавлять ID рубрик к каждой языковой версии. Спасибо разработчику.
    У меня вопрос, вдруг кто-то поможет. Настроила два языка на своём блоге. Всё отлично. Но вот название главной, которое отображается в браузере никак не хочет переключаться. В строках перевода указано верно, но по факту почему-то не меняется.

    • Посмотрите, каким образом оно у вас отображается в теме. Обычно его выносят в в функцию pll_e() в файле темы. Либо это будет header.php, либо index.php, либо front-page.php.
      Обычно вывод заголовка страницы осуществляется в тегах

  3. Недавно я разработал решение для объединения Polylang и Customizer... в случае, если кому-то интересно: https://wordpress.org/plugins/add-polylang-support-for-customizer/

  4. Добрый день) долго изучала инструкцию и то чем помогали разработчики в данной теме. Но пробую реализовать все это у себя и не получается, я начинающий разработчик. Буду благодарна за помощь!
    Мне необходимо перевести фразу "Buy now", добавить ее в Strings translations. Эта фраза прописана отдельно в теме и woocommerce ее не переводит поэтому необходимо попробовать через Strings translations. Что конкретно нужно прописать в function.php? Просто pll_register_string( 'mythemeorpluginslug', 'English text to translate' ); он не понимает. Буду благодарна за помощь!!
    Вот сам код где вызывается эта кнопка

    • Добрый день.
      Если я правильно понимаю ваш код, то нужно сделать 2 шага, а не 1.
      1.Ваш текст 'Buy now' берется из настроек темы. Поэтому в строке echo sprintf( '%s', wp_kses_post( supro_get_option( 'product_buy_now_text' ) ) ); необходимо добавить функцию перевода pll__() таким образом:
      echo sprintf( '%s', wp_kses_post( pll__(supro_get_option( 'product_buy_now_text' ) ) ) );
      2. Затем в файле functions.php необходимо добавить такие строки:

      Правда, у меня появился вопрос - вам на несколько языков этот текст надо перевести или только на русский? Если на один язык, то стоит перейти в меню Внешний вид > Настроить и поискать поле ввода с меткой Product Buy now Text или подобной, а затем ввести нужный текст.

  5. Привет.
    Я выпустил плагин, который добавляет поддержку Customizer - Add Polylang support for Customizer.
    Просто подумал, что некоторые заблудшие души могут найти в этом применение.
    Извините за спам.

    • Спасибо за информацию. "Заблудшие души" вполне могут воспользоваться вашим плагином.

  6. Спасибо за статью! Как раз то, что нужно насчет Polylang.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *