Эта будет несколько необычная заметка. В ней буду рассказывать не столько о работе с программами перевода (хотя о них скажу более чем достаточно), сколько об особенностях внедрения перевода в тему на WordPress.
Что представляют из себя файлы перевода
Файлы перевода имеют расширение .po и .mo. Они создаются с помощью специальных программ, которые будут описаны ниже.
Во время работы с переводом мы используем файл с расширением po:
ru_RU.po - если планируется перевод с английского на русский
Но для того, чтобы WordPress понимал перевод ему нужен скомпилированный ужатый файл .mo.
ru_RU.po - если планируется перевод с английского на русский
Как поменять язык темы WordPress
Раньше надо было менять язык файла темы в файле wp-config.php, но сегодня это устарелый метод.
Для отображения сайта на другом языке, в настройках сайта меняем язык. Настройки находятся по такому пути (в адрес вставьте свой сайт):
Чем переводить темы для WordPress
Мне известны две программы для перевода WordPress тем.
Программа Poedit
Poedit — самая популярная, она же появилась первой. Бесплатная версия программы не позволяет проанализировать сайт и создать список для перевода. А вручную всё заносить очень тяжело. Бесплатная версия Poedit может пригодиться, если нужно перевести уже готовый к переводу файл.
В платной версии можно автоматизировать перевод.
Плагин Loco Translate
Плагин бесплатный и позволяет сделать много из того, что программа Poedit делает платно.
Плагин Loco Translate не только переводит темы, но и плагины. Интерфейс у программы очень удобный и ничего лишнего.
В данном случае остановимся на переводе тем. На скриншоте ниже видно, что для сайта созданы два языка. Если языкового файла нет, его можно сгенерировать нажав на ссылку Create template:
Заходим внутрь нужного языка и видим минималистический интерфейс со всем необходимым:
Как поменять папку для файлов перевода WordPress
Для переводов тем в WordPress существует папка по умолчанию languages. Находится она в не папки темы, а в папке wp-content. Мне не нравится держать файлы одной темы в разных местах, поэтому подключаю папку с темами внутри своей темы. Для этого в файл functions.php надо добавить:
Добавляется это в функцию setup темы:
function ploshadka_setup() {
load_theme_textdomain( 'ploshadka', get_template_directory() . '/assets/lang' );
}
endif;
add_action( 'after_setup_theme', 'ploshadka_setup' );
Как внедрить перевод в тему своего сайта
Текст в теме WordPress находится в разных конструкциях html и php. Отсюда по разному эти php вариации будут выглядеть.
1. echo __(
Самый простой вариант:
где ploshadka — это ваш домен.
2. printf в несколько строк
Иногда необходимо изменить конструкцию, чтобы было легче внедрить перевод:
printf('<div>%s<span>%s</span></div>',
__( 'Текст для перевода 1 ', 'ploshadka' ),
__( 'Текст для перевода 2', 'ploshadka' )
);
?>
Результат будет иметь такой вид:
3. printf в одну строку
Если необходимо, чтобы в переводе был и русский и английский текст одновременно, который позже переведем только на английский:
Результат будет как и в предыдущем варианте:
Но при этом в программе перевода потребуется перевести только одну строчку. А это очень удобно.
4. Вместе с произвольными полями
Или так:
Результат будет один:
5. Несколько переменных php
Если есть конструкция с переменными, например:
То выносим переменную и создаем перевод таким образом:
6. Перевод внутри переменной
Нужно перевести такую конструкцию:
Переделываем её в такую штуку:
'<div><p>%s</p><p>%s</p></div>',
__( 'Перый абзац', 'ploshadka' ) . $string1,
__( 'Второй абзац', 'ploshadka' ) . $string2
);
6. Перевод внутри функций
Если внутри функции содержится текст для перевода:
Когда ту же функцию нужно вывести в более сложном варианте. Надо single_cat_title сделать переменной и тогда можно вставлять:
$string = single_cat_title('', false);
echo sprintf( __( 'Первое предложение %s. Второе предложение %s.', 'ploshadka' ), $string, $string );
?>
Результат:
Как вывести данные в зависимости от языка сайта
И наконец, если не хочется что-то переводить отдельно, то можно написать текст для каждого языка прямо в шаблоне темы сайта. Для этого использовать инструкцию if определяющую язык сайта:
if ( get_locale() == 'ru_RU' ) {
echo 'ploshadka.net на русском';
}
elseif ( get_locale() == 'en_US' ) {
echo 'ploshadka.net на английском';
}
?>
Или так:
Любой текст, когда сайт на русском.
<?php } elseif ( get_locale() == 'en_US' ) { ?>
А здесь выводим для английской версии сайта.
<?php } ?>
<?php
if ( get_locale() == 'ru_RU' ) {
Этого достаточно для того что тема полностью была на русском языке ?)
Вот так правильно ?))
Я вот нашла файл языка темы и вписала строчку у вас скопировала , не знаю правильно ли
Даже не знаю как вам объяснить. По тому куда вы это положили и что ожидаете после этого… если метафорически то, то что вы сделали, это как дуршлаг (возьмите любой неподходящий предмет), который используют для мытья ягод, отдать вместо мячика мальчишкам во дворе и ожидать, что это поможет игре в футбол 🙂
Вам судя по всему нужен перевод шаблона. Вы либо скачиваете уже готовый перевод темы и кладете его в папку languages. Либо устанавливаете на сайт переводчик и переводите самостоятельно — смотрите выше заголовок «Чем переводить темы для WordPress»
Плагин Локо транслейт как бы его не хвалили для меня он никак , что хочется ему то переводит а то что надо увы ( По поводу готового перевод шаблона темы если вы про сайт вордпрес . орг там и 90 % перевода темы чтоб его скачать установить , поэтому для меня проблема перерыла инет нече толкового чесно … 😁 Не могу я импортированные демо сайты перевести … (😁 и вы правы про дуршлаг я ж в этом нечего не понимаю потому и написала ж вам коммент об этом выше )))
Локо транслейтит переводит только то, что заложено в коде темы. Если в теме нет этого, то локо транслейтит не видит этих сообщений и не сможет предложить их. Впрочем это будет касаться любого плагина.
Если просто, то для перевода каждое сообщение в коде, которое требуется перевести должно обрамляться так:
где ploshadka это Text Domain, он указывается в файле перевода и может быть любое единое название.
У меня в этой статье более техническая информация. Возможно более подробно сможете почитать на другом сайте:
https://wp-kama.ru/id_10492/perevody-v-wordpress.html
А как быть с переводом в функциях обработчик форм. Для примера такой код
/**
* Form contact us
*/
global $errors;
$errors = new WP_Error;
function handler_contact_us() {
global $errors;
if( empty($name) ) {
$errors->add( 'name', __('Fill in the field "Your name"', 'my-text-domain') );
}
if( $errors->has_errors() ) {
wp_send_json_error($errors);
}
}
Текст ошибки выводит на фронт через JS, но переводится не корректно, вместо нужного перевода, выводит перевод основного языка на сайте. Используется WP Multisite, несколько языков, основной язык русский. И на других версиях языков/сайтах — выводится именно русский перевод, даже не английский.