Контексты + Babel: Многоязычность MODX

23.05.2023

В данной статье мы разберем как настроить мультиязычность на CMS MODX Revo. Для этого рассмотрим типичный пример с двумя языковыми версиями сайта (языков может быть больше). Процесс настройки не является сложным. Просто следуйте инструкции и все будет ?

Наша задача получить ссылки такого типа:

  • https://web-site.com.ua/ — украинский
  • https://web-site.com.ua/en/ — английский

Для реализации многоязычности нам понадобиться следующие компоненты:

Настройка .htaccess

После скачивания CMS MODX Вы обнаружите в корневой папке файл ht.access, переименуем его в .htaccess

Далее отредактируем его содержимое:

Заменить или закомментировать (в начале строки #)

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

На

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(uk|en)/favicon.ico$ favicon.ico [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(uk|en)/assets(.*)$ assets$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(uk|en)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]

 

Где (uk|en) должны совпадать с параметром cultureKey (подробнее ниже)

 

Настройка контекстов

Для начала создадим новый контекст в административной части, для этого перейдем Система → Контексты → Создать новый

В поле "Ключ" вводим, например, для английского - "en".

ВАЖНО! Эти ключи в дальнейшем будут использованные в плагине переключения контекстов.

Далее правый клик мыши по новому контексту и выбираем "Редактировать". Переходим по табу "Настройки контекста" и нажимаем "Создать новый".

Для каждой языковой версии нам нужны следующие настройки

Существующий контекст (ключ "web"): Новый контекст (ключ "en"):

Base URL

  • Ключ: base_url (!именно base_url, MODX предлагает не тот ключ)
  • Имя: Base URL
  • Запись словаря для раздела: language
  • Значение: /

Base URL

  • Ключ: base_url
  • Имя: Base URL
  • Запись словаря для раздела: language
  • Значение: /en/

Culture key

  • Ключ: cultureKey
  • Имя: Culture key
  • Запись словаря для раздела: language
  • Значение: uk

Culture key

  • Ключ: cultureKey
  • Имя: Culture key
  • Запись словаря для раздела: language
  • Значение: en

Site start

  • Ключ: site_start
  • Имя: Site start
  • Запись словаря для раздела: language
  • Значение: 1

Site start

  • Ключ: site_start
  • Имя: Site start
  • Запись словаря для раздела: language
  • Значение: id страницы для Главной в английской версии.
    Все id создаем через Babel, об этом ниже.

Site name

  • Ключ: site_name
  • Имя: Site name
  • Запись словаря для раздела: language
  • Значение: Название сайта

Site name

  • Ключ: site_name
  • Имя: Site name
  • Запись словаря для раздела: language
  • Значение: Название сайта на английском языке

Site URL

  • Ключ: site_url
  • Имя: Site URL
  • Запись словаря для раздела: language
  • Значение: / (или https://web-site.com.ua/)

Site URL

  • Ключ: site_url
  • Имя: Site URL
  • Запись словаря для раздела: language
  • Значение: /en/ (или https://web-site.com.ua/en/)

Error page

  • Ключ: error_page
  • Имя: 404 page
  • Запись словаря для раздела: language
  • Значение: id страницы для 404 ошибки

Error page

  • Ключ: error_page
  • Имя: 404 page
  • Запись словаря для раздела: language
  • Значение: id страницы для 404 ошибки в английской версии.
    Все id создаем через Babel, об этом ниже.

Locale

  • Ключ: locale
  • Имя: Setting locale
  • Запись словаря для раздела: language
  • Значение: uk_UA.UTF8

Locale

  • Ключ: locale
  • Имя: Setting locale
  • Запись словаря для раздела: language
  • Значение: en_US.UTF8

Для контекста «web» все настройки уже есть в «Системных настройках», но мы их меняем в «Настройках контекста».

Создание плагина GateWay

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

В админке переходим по табу "Элементы" и нажимаем на иконку "Новый плагин".

В поле имя пишем GateWay и помещаем следующий код:

<?php
if($modx->context->get('key') != "mgr"){
                switch ($_REQUEST['cultureKey']) {
                        case 'en':
                        /* switch the context */
                        $modx->switchContext('en');
                        break;
                    default:
                        /* Set the default context here */
                        $modx->switchContext('web');
                        break;
                }
                unset($_GET['cultureKey']);
            }

Далее переходим по вкладке "Системные события", включаем OnHandleRequest и сохраняем.

Установка Babel

Устанавливаем пакет Babel, в панели управления переходим по "Пакеты" -> "Установщик" и нажимаем "Загрузить дополнения" и находим там Babel, загружаем и устанавливаем пакет.

Здесь уже должны быть контексты которые мы создали (по примеру это: web, en; если поле пустое, то можно вписать ключи контекстов руками), другие настройки оставляем без изменений.

Создание контента на разных языках

В панели управления сайта, во вкладке "Ресурсы", мы видим контексты которые создали ранее. Как раз в них мы будем создавать страницы для разных языковых версий.

Как нам связать существующие или создать новые ресурсы для разных языков?

Для этих целей как раз и был установлен плагин Babel. При сохранении ресурса в правом верхнем углу возле кнопки «Сохранить» появится меню отвечающее за языковые версии сайта ("Создать перевод", "Связать перевод"). Используя это меню как раз и происходит связь ресурсов в разных контекстах (языковых версиях).

Полученные id ресурсов и используем в настройках контекстов для страниц Главная и 404 (см. таблицу с настройками выше).

Переключение языков на сайте.

Теперь завершающий этап. Нам нужно разместить кнопки переключения на самом сайте. Для этого разместим в коде сайта (чанке, шаблоне) следующее:

Fenom:

<ul> 
{'BabelLinks' | snippet:[
	'showCurrent' => 1,
]}
</ul>

MODX:

<ul>
[[BabelLinks?
&showCurrent=`1`
]]
</ul>

Все нужные для работы и стилизации параметры BabelLinks можно посмотреть тут

https://docs.modx.com/extras/revo/babel/babel.babellinks.