/ Сайтостроение / Плагины / Мультиязычность сайта

Мультиязычность сайта

HIT

14.02.2016

1434

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

Ручной перевод сайта — Polylang

Для того чтобы сделать на сайте поддержку нескольких языков (контента и элементов шаблона) — устанавливаем плагин Polylang.

В настройках добавляем необходимые языки: Русский (ставим порядок 1), Английский (en_GB, порядок 2) и другие необходимые языки.

Переходим в закладку Перевод строк и переводим элементы сайта.

Помощь в переводе от Google.

Переходим в закладку Настройки, выбираем вид английского сайта (eng.site.ru или site.ru/eng).
Ставим галочку в пункте — Спрятать название языка по-умолчанию из URL (чтобы в основном сайте не было приставки RU).

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

Вставляем переключатель языков

<div id="langswitch"><ul><?php pll_the_languages(array('show_flags'=>1,'show_names'=>0)); ?></ul></div>

Переход сайта на английскую версию

Чтобы все корректно работало надо периодически обновлять постоянные ссылки

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

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

При дублировании записей произвольные поля ACF ведут себя корректно. Дублируются 1:1, надо только делать перевод

Перевод элементов шаблона

В шаблоне вместо текста, который должен меняться в зависимости от версии ставим

<?php pll_e('Подвесные системы'); ?>

В fuktions.php прописываем

pll_register_string('Suspension systems','Подвесные системы');

После этого переходим в Перевод строк (в настройках плагина Polylang) и в появившихся строках прописываем необходимый текст.

Проверка версии

Для перевода и для других целей может помочь проверка версии.

<?php if( 'ru' == pll_current_language() ) : ?>
//содержимое, если версия русская  
<?php else : ?>
//содержимое, если версия не русская  
<?php endif; ?>

WPML Multilingual CMS

Еще одним мощным решением многоязычного сайта с ручным заполнением является WPML Multilingual. Плагин платный от 29$ (с простейшим функционалом) до 79$ (с расширенным набором функций). WPML, как и предыдущий плагин, создает несколько версий документа (записи, страницы, записи произвольного типа (какие типы переводить — определяется в настройках плагина)). Есть меню массового изменения переводов (нужен в основном для дублирования переводов, в те версии, где он отсутствует).

Довольно удобно работать с переводами. Можно создать например английскую версию документа, далее копировать ее на другие версии (итальянский, испанский) и уже потом постепенно переводить.

В зависимости от выбранной версии 29$ (только первый — WPML Media Translation) / 79$ (все перечисленные) WPML снабжается сопутствующими плагинами:

  • WPML Media Translation — Этот плагин позволяет пользоваться галереей WordPress на различных языках. Вы можете выбирать изображения отдельно для каждого языка.
  • WPML String Translation — Плагин перевода строк позволяет переводить строки интерфейса прямо в WordPress без использования файлов с расширением .mo. Он дает возможность переводить не только надписи, но также созданные пользователем тексты вне записей и страниц. Например, ключевые слова и данные SEO.
  • WPML Translation Management — Когда ваши клиенты получают свой новый многоязычный сайт, ваша работа заканчивается, а их начинается. Плагин управления переводами позволяет администраторам управлять работой с переводами. Они делают обычных пользователей переводчиками, отправляют им задания и следят за продвижением перевода сайта.
  • WPML Sticky Links — Плагин «вязких» ссылок не допускает разрывов внутренних ссылок. Он автоматически отслеживает связанные страницы вашего сайта и обновляет принимаемые ссылки. После изменений в структуре постоянных ссылок, иерархии и даже кратких заголовках страниц все принимаемые ссылки обновляются автоматически.
  • WPML CMS Navigation — Плагин навигации CMS добавляет элементы навигации, которые можно использовать при создании сайта. Например, «хлебные крошки», раскрывающиеся меню и навигацию в боковой панели.
  • WooCommerce Multilingual — Помогает создавать многоязычные сайты электронной коммерции с помощью WooCommerce и WPML.
  • Gravity Forms Multilingual — Позволяет переводить формы Gravity. Вы сможете создать форму на родном языке и перевести ее на другие языки. Нет необходимости использовать несколько форм по одной на язык.
  • BuddyPress Multilingual — Помогает управлять многоязычной социальной сетью с помощью BuddyPress и WPML.

У плагина есть множество сторонних дополнений, вот часть из них:

  • WooCommerce Multilingual – пользуйтесь WooCommerce с WPML (70 000 загрузок). Отдельно без самого плагина от него естественно нет никакого смысла. Но удобно то, что можно приобрести версию WPML за 29$ и добавить к нему это решение.
  • WPML Widgets (30 000) — изменение версий виджетов, в зависимости от языка
  • WPML to Polylang (1000) — Для импорта многоязычных данных из WPML в Polylang.

Условия вывода при конкретном языка

Синтаксис следующий:

if ( ICL_LANGUAGE_CODE=='fr' ) :

Объединение комментариев WPML

WPML также разделяет комментарии в зависимости от выбранного языка, чтобы объединить их в одну ленту нужно воспользоваться плагином WPML comment merging (400+).

Объединение комментариев не сработало

Автоматический перевод сайта

Если нам нужен не ручной а автоматический перевод сайта — то нужно использовать плагин GTranslate. Настройки довольно просты: выбор необходимых языков для перевода, внешний вид виджета для переключения. Для работы плагина необходимо вставить шорткод (сам код есть в настройках плагина) в нужном месте. Плагин будет автоматически переводить весь текст сайта на выбранный язык. При переходе с одной страницы на другую выбранный язык сохраняется. В строке браузера изменений нет.

Всё здорово, но если выставить например 2 языка в виде RU EN то при переключении стилистически никак не выделяется активный язык. Чтобы это исправить, нужно сделать следующее:

  1. Вставить переключатель не в виде шорткода, а виде верстки со скриптами (все это есть на странице настроек плагина)
  2. Прописать ссылкам RU и EN классы rus и eng соответственно
  3. Включить на сайте поддержку jquery.cookie
  4. Вставить скрипт
    $(document).ready(function() { 
    
        var googtrans = $.cookie('googtrans');
    
    	if(googtrans != null) { $('.eng').addClass("lang-activ"); }
    	else { $('.rus').addClass("lang-activ"); }
    	
    }); 
    
    $('a.glink.nturl.notranslate.rus').click(function() {
            $('.eng').removeClass("lang-activ");
    	$('.rus').addClass("lang-activ");
    });
    
    $('a.glink.nturl.notranslate.eng').click(function() {
            $('.eng').addClass("lang-activ");
    	$('.rus').removeClass("lang-activ");
    });

Стили

/* Переключение языков */

a.glink.nturl.notranslate {
    border: 1px solid #eee;
    padding: 5px;
    width: 20px;
    height: 30px;
    text-align: center;
    display: inline-block;
}

.lang-activ {border: 1px solid #e85222 !important;}

Помимо неточного перевода у данного метода есть еще один недостаток — трудность при переводе встроенных форм бронирования. Большинство из них заточены под разделенные версии сайтов (/en/ в URL). Но этот недостаток можно устранить с помощью window.location:

$(window).load(function() {
	
var EnVersion = $.cookie('googtrans');

if(EnVersion != null){
window.history.replaceState({}, '', location.origin + '/en' + location.pathname);
}

});

При загрузке страницы скрипт смотрит Cookie. Если есть googtrans (английская версия), то добавляет после домена /en.

Скрипт необходимо доработать: во-первых переключение происходит без перезагрузки и добавлять параметр в url нужно сразу, но при этом нужно понимать сработает ли сразу перевод формы бронирования, иначе смысл отпадает. И во-вторых при переключении на русский — как стереть из URl /en.

Вот более простое рабочее решение по переключению формы бронирования TravelLine:

// При загрузке страницы
$(window).load(function () {
    var EnVersion = $.cookie('googtrans');

    if (EnVersion != null) {
        $('#tl-search-form-en').show();
        $('#tl-search-form').hide();
        $('#tl-booking-form-en').show();
        $('#tl-booking-form').hide();
    } else {
        $('#tl-search-form').show();
        $('#tl-search-form-en').hide();
        $('#tl-booking-form').show();
        $('#tl-booking-form-en').hide();
    }
});

// При переключении
$('#glinks a').click(function () {
    var EnVersion = $.cookie('googtrans');

    if (EnVersion != null) {
        $('#tl-search-form-en').show();
        $('#tl-search-form').hide();
        $('#tl-booking-form-en').show();
        $('#tl-booking-form').hide();
    } else {
        $('#tl-search-form').show();
        $('#tl-search-form-en').hide();
        $('#tl-booking-form').show();
        $('#tl-booking-form-en').hide();
    }
});

В самом скрипте бронирования нужно также делать коррективы. Либо делать две формы (2 скрипта) с разными параметрами:

['setContext', 'TL-INT-undersun-hotels.sanremo', 'ru'],
['setContext', 'TL-INT-undersun-hotels.sanremo', 'en'],

Либо сделать условие:

var lang = 'ru';

if ($.cookie("googtrans") == "/ru/en") {
    lang = 'en';
}

И прописать переменную

['setContext', 'TL-INT-undersun-hotels.sanremo', lang],

Но в последнем случае — не факт, что она будет переключаться «налету».

Тэги: ,

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Woocommerce variations image swatch

Woocommerce variations image swatch

Описываю работу с плагином Woocommerce variations image swatch. Плагин создает подраздел настроек в настройках Woocommerce. Условно плагин можно разбить на 2 области: область изменения атрибутов вариаций, общие настройки отображения атрибутов Читать далее »

Переключение вида вывода товаров

Переключение вида вывода товаров

Для разных людей по разному удобно просматривать товары: когда они строятся в виде плиток, либо в линию или другими способами. Добавим на сайт функционал переключения вида отображения товаров в архивах. Читать далее »

/
Плагин: Миниатюра таксономии

Плагин: Миниатюра таксономии

Обычно для добавления изображения (миниатюры) таксономии импользую плагин Advanced Custom Fields. Плагин хороший, но довольно тяжеловат, т.к. является мощным многозадачным плагином. Есть более легковесная альтернатива — плагин taxonomy term image Читать далее »

/

Добавить комментарий

Пока нет комментариев. Будь первым!

Мультиязычность сайта Мультиязычность сайта
Json Начало
Рекомендации для васJson НачалоOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.