Переводим файлы шаблонов темы с использованием Polylang

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

Кстати говоря, рекомендую вам свой видеокурс про создание темы WordPress на основе готовой вёрстки.

Предположим есть вот такая форма на сайте с установленным Polylang и нам нужно её перевести:

Форма – часть темы, которую мы хотим перевести через Polylang
Форма – часть темы, которую мы хотим перевести через Polylang

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

Прежде всего, взгляните в меню WordPress, а именно в подменю плагина Polylang в админке:

меню перевода строк в 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
	);
 
 
}
  • Прежде всего обратите внимание на условие на строчках 5–7, я его добавил, потому что рекомендую быть осторожными с функциями сторонних плагинов – одно дело вы добавляете их в файлы шаблона, а когда они находятся прямо в functions.php, то после деакцивации плагинов – до свидания сайт. Ошибка 500 даже не даст вам попасть в админку.
  • Третий параметр функции – категория. Нужна для более удобной навигации по строкам перевода в админке.

После этого в админке на странице Strings translations мы можем обнаружить вот что:

Страница с переводами строк в плагине Polylang
На скриншоте я уже предусмотрительно выбрал нашу категорию Footer form.

Как же их переводить? А легко – переключаем языки в админ баре и переводим:

Уже переведённые строки в плагине Polylang

Изменится ли сразу же текст в нашей форме? Пока что нет. Потому что нам нужен ещё и второй шаг!

Шаг 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>

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

переведённая форма через плагин Polylang

И ещё кое-что… Защищаемся от ошибки 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;
	}
}

Если вдруг функции перестанут существовать, то ничего не случится, будет всего лишь выводиться английская версия перевода!

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Комментарии — 4

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

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.