Налаштування мультиязичності MODX (Babel/LangRouter)
MODX не має вбудованої мультиязичності — для неї використовують комбінацію контекстів та спеціалізованих пакетів. Два основних підходи: Babel (асоціює ресурси різних контекстів) та LangRouter (маршрутизація за мовним префіксом).
Архітектура: контексти + Babel
Кожна мова — окремий контекст. Babel встановлює «зв'язки» між відповідними ресурсами різних контекстів.
Контекст: web (російська, головна)
├── Головна (id: 1)
├── Про компанію (id: 5)
Контекст: en (англійська)
├── Home (id: 100) ← пов'язано з id:1
├── About Us (id: 105) ← пов'язано з id:5
Встановлення Babel
# Package Manager → Babel
Системні налаштування Babel:
babel.sites: web,en,de (ключі контекстів через кому)
babel.contextPrefix_en: en/ (URL-префікс)
babel.contextPrefix_de: de/
babel.contextPrefix_web: (порожній = головна мова без префіксу)
Перемикач мов через BabelLinks
[[!BabelLinks?
&tpl=`@INLINE
<a href="[[+url]]" hreflang="[[+cultureKey]]"
class="lang-switch [[+active:is=`1`:then=`lang-switch--active`]]">
[[+cultureKey:upper]]
</a>
`
&activeCls=`active`
]]
BabelLinks автоматично створює посилання на пов'язані ресурси в інших контекстах.
LangRouter: маршрутизація без контекстів
LangRouter — альтернатива без контекстів. Один контекст, різні мови зберігаються в TV або через lex-файли.
# Package Manager → LangRouter
[[!LangRouter?
&default=`ru`
&langs=`ru,en,de`
]]
LangRouter додає /en/, /de/ префікси до URL та перемикає cultureKey.
Лексикони (переклад інтерфейсу)
Для перекладу статичного тексту шаблонів — лексикони MODX:
// core/lexicon/ru/default.inc.php
$_lang['btn_more'] = 'Детальніше';
$_lang['contact_us'] = 'Зв'язатися з нами';
$_lang['read_more'] = 'Читати далі';
Вивід у шаблоні:
[[%btn_more? &namespace=`mysite` &topic=`default`]]
hreflang для SEO
[[!BabelLinks?
&tpl=`@INLINE <link rel="alternate" hreflang="[[+cultureKey]]" href="[[+url]]">`
&toPlaceholder=`hreflang`
]]
<head>
[[+hreflang]]
<link rel="alternate" hreflang="x-default" href="[[++site_url]]">
</head>
Babel vs LangRouter vs контексти вручну
- Контексти + Babel — стандарт для великих сайтів. Повне розділення контенту, шаблонів, налаштувань.
- LangRouter — простіше для малих сайтів, менше налаштувань, обмежена гнучкість.
- Вручну — тільки для простих випадків (2 мови, малий сайт).
Терміни
Налаштування двох мов через Babel з перемикачем і hreflang — 2–3 дні.







