У меня на сайте есть подробный урок про локализацию плагинов и тем в WordPress, но, когда мы говорим о создании мультиязычного сайта при помощи Polylang, то ситуация в корне изменяется.
Кстати говоря, рекомендую вам свой видеокурс про создание темы WordPress на основе готовой вёрстки.
Предположим есть вот такая форма на сайте с установленным Polylang и нам нужно её перевести:
Вы получите море хейта с моей стороны, если для достижения этой цели будете использовать страницы настроек для каждого языка, да ещё и в ACF.
Прежде всего, взгляните в меню WordPress, а именно в подменю плагина Polylang в админке:
Это означает, что в Polylang уже есть встроеный функционал, который мы можем использовать. И я сейчас разделю весь процесс на два шага!
Это всё делается при помощи функции 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 ); }
functions.php
, то после деакцивации плагинов – до свидания сайт. Ошибка 500 даже не даст вам попасть в админку.После этого в админке на странице Strings translations мы можем обнаружить вот что:
Как же их переводить? А легко – переключаем языки в админ баре и переводим:
Изменится ли сразу же текст в нашей форме? Пока что нет. Потому что нам нужен ещё и второй шаг!
Тут нам понадобится либо функция 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>
В итоге форма локализована, при переключении языка сайта, она будет меняться на соответствующий язык:
Всякие ситуации бывают – иногда клиент может захотеть внезапно отключить плагин 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; } }
Если вдруг функции перестанут существовать, то ничего не случится, будет всего лишь выводиться английская версия перевода!
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Отличный совет, спасибо!
Кстати, если не защитить проверкой на существование функций polylang, сайт ляжет также и на время обновления плагина polylang, неприятная фигня)
И если делаете сайт с polylang, нужно периодически отключать этот плагин и смотреть, ничего ли не отвалилось.
+++
Спасибо большущее за понятные примеры :) Очень помогли
Пожалуйста! 🙏🏼😌
спасибо тебе огромное долго искал решения