Настройка мультиязычности MODX (Babel/LangRouter)
MODX не имеет встроенной мультиязычности — для неё используют комбинацию контекстов и специализированных пакетов. Два основных подхода: Babel (ассоциирует ресурсы разных контекстов) и LangRouter (маршрутизация по языковому префиксу).
Архитектура: контексты + Babel
Каждый язык — отдельный контекст. Babel устанавливает «связи» между соответствующими ресурсами разных контекстов.
Контекст: web (русский, главный)
├── Главная (id: 1)
├── О компании (id: 5)
Контекст: en (английский)
├── Home (id: 100) ← linked to id:1
├── About Us (id: 105) ← linked to 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 дня.







