У меня на сайте есть подробный урок про локализацию плагинов и тем в WordPress, но, когда мы говорим о создании мультиязычного сайта при помощи Polylang, то ситуация в корне изменяется.
Предположим есть вот такая форма на сайте с установленным Polylang и нам нужно её перевести:
Вы получите море хейта с моей стороны, если для достижения этой цели будете использовать страницы настроек для каждого языка, да ещё и в ACF.
Прежде всего, взгляните в меню WordPress, а именно в подменю плагина Polylang в админке:
Это означает, что в Polylang уже есть встроеный функционал, который мы можем использовать. И я сейчас разделю весь процесс на два шага!
Шаг 1. Регистрируем строки, которые хотим перевести
Это всё делается при помощи функции pll_register_string()
, которую можно закинуть в ваш functions.php
на хук init
.
add_action('init', 'truemisha_polylang_strings' ); function truemisha_polylang_strings() { if( ! function_exists( 'pll_register_string' ) ) { return; } pll_register_string( 'truemisha_footer_form_inp_name', // название строки 'Your Name', // сама строка 'Footer form', // категория для удобства false // будут ли тут переносы строк в тексте или нет ); pll_register_string( 'truemisha_footer_form_inp_email', 'E-Mail', 'Footer form', false ); pll_register_string( 'truemisha_footer_form_inp_msg', 'Write your question', 'Footer form', false ); pll_register_string( 'truemisha_footer_form_inp_btn', 'Send', 'Footer form', false ); }
После этого в админке на странице Strings translations мы можем обнаружить вот что:
Как же их переводить? А легко – переключаем языки в админ баре и переводим:
Изменится ли сразу же текст в нашей форме? Пока что нет. Потому что нам нужен ещё и второй шаг!
Шаг 2. Выводим переведённые строки
Тут нам понадобится либо функция pll_e()
либо pll__()
, которые могут вам показаться супер-похожими на функции _e() и __().
На примере формы:
<form class="form validate-form" action="" method="post"> <div class="main-form__wrapper"> <input type="text" name="name" placeholder="<?php echo esc_attr( pll__( 'Your Name' ) ) ?>"> <input type="email" name="email" placeholder="<?php echo esc_attr( pll__( 'E-Mail' ) ) ?>"> <textarea name="question" placeholder="<?php echo esc_attr( pll__( 'Write your question' ) ) ?>"></textarea> </div> <button type="submit" class="button"><?php echo esc_html( pll__( 'Send' ) ) ?></button> </form>
В итоге форма локализована, при переключении языка сайта, она будет меняться на соответствующий язык:
И ещё кое-что… Защищаемся от ошибки 500
Всякие ситуации бывают – иногда клиент может захотеть внезапно отключить плагин Polylang. А мы ведь используем функции Polylang (!), которые после его отключения начнут выкидывать нам «Fatal error: Uncaught Error: Call to undefined function pll_e()», поэтому я рекомендую в ваш functions.php
добавить ещё и такой код:
if( ! function_exists( 'pll__' ) ) { function pll__( $string ) { return $string; } } if( ! function_exists( 'pll_e' ) ) { function pll_e( $string ) { echo $string; } }
Если вдруг функции перестанут существовать, то ничего не случится, будет всего лишь выводиться английская версия перевода!