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

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

У меня на сайте есть подробный урок про локализацию плагинов и тем в 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;
	}
}

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

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии