Контексти + 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"):

Базовий URL

  • Ключ: base_url (саме base_url, MODX пропонує не той ключ)
  • Ім'я: Base URL
  • Запис словника для розділу: language
  • Значення: /

Базовий URL

  • Ключ: base_url
  • Ім'я: Base URL
  • Запис словника для розділу: language
  • Значення: /en/

Культурний ключ

  • Ключ: cultureKey
  • Ім'я: Culture key
  • Запис словника для розділу: language
  • Значення: uk

Культурний ключ

  • Ключ: cultureKey
  • Ім'я: Culture key
  • Запис словника для розділу: language
  • Значення: en

Початок сайту

  • Ключ: site_start
  • Ім'я: Site start
  • Запис словника для розділу: language
  • Значення: 1

Початок сайту

  • Ключ: site_start
  • Ім'я: Site start
  • Запис словника для розділу: language
  • Значення: id сторінки для Головна в англійській версії.
    Усі id створюємо через Babel, це нижче.

Назва сайту

  • Ключ: site_name
  • Ім'я: Site name
  • Запис словника для розділу: language
  • Значення: Назва сайту

Назва сайту

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

URL сайту

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

URL сайту

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

Сторінка помилки

  • Ключ: error_page
  • Ім'я: 404
  • Запис словника для розділу: language
  • Значення: id сторінки для 404 помилки

Сторінка помилки

  • Ключ: error_page
  • Ім'я: 404
  • Запис словника для розділу: language
  • Значення: id сторінки для помилки 404 в англійській версії.
    Усі id створюємо через Babel, це нижче.

Місцевий

  • Ключ: locale
  • Назва: Налаштування локалі
  • Запис словника для розділу: language
  • Значення: uk_UA.UTF8

Місцевий

  • Ключ: 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.