В данной статье мы разберем как настроить мультиязычность на 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 (см. таблицу с настройками выше).

Переключение языков на сайте.
Теперь завершающий этап. Нам нужно разместить кнопки переключения на самом сайте. Для этого разместим в коде сайта (чанке, шаблоне) следующее:
<ul>
[[BabelLinks?
&showCurrent=`1`
]]
</ul>
Все нужные для работы и стилизации параметры BabelLinks можно посмотреть тут
https://docs.modx.com/extras/revo/babel/babel.babellinks.