Многоязычность для MODX revo

Многоязычность для MODX revo

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

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

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

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

  • MODX Revolution
  • Доступ к файлу .htaccess
  • Пакет Babel

Настройка .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 и помещаем следующий код:

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

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

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

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

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

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

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

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

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

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

Больше не нужно искать и обзванивать диджитал-агентства!
Создайте тендер и получите предложения по цене и срокам от лучших веб-студий Украины.
Это бесплатно и займет 2 минуты. В каталоге 1500+ диджитал-агенств, готовых помочь в реализации ваших задач. Выберите и сэкономьте до 30% времени и бюджета!
Создать тендер
Популярные статьи в разделе Разработка сайтов
Разработка сайтов
Сайт для юридической компании. Особенности разработки Centum-D
Чтобы сделать сайт для юридической компании не просто красивым, но удобным, посещаемым и продающи...
Разработка сайтов
Какими должны быть формы на сайте? Centum-D
Иногда заходишь на сайт, чтобы заказать подарок другу, а сайт выдает тебе форму с кучей полей, ко...
Разработка сайтов
Какой должна быть корзина интернет-магазина Centum-D
Многие владельцы интернет-магазинов часто недоумевают, почему при активном посещении пользователя...
Bug