MODX. Управление словарями в MODX / Lexicon

Каждая более менее серьезная CMS оснащена функционалом «словарей». Они необходимы для возможности реализации мультиязычных сайтов, или сайтов с различными стилями языковых конструкций. Не исключение в этом случае и MODX Revo.

Словари содержатся в *.inc.php файлах или БД.

  • Словари относящиеся к ядру админки MODX лежат по адресу /core/lexicon/
  • Словари относящиеся к компонентам, по адресу /core/components/имя_компонента/lexicon/  Подробнее о структуре компонентов
  • Словари созданные, через интерфейс управления словарями в системном меню MODX, хранятся в базе данных, в таблице _lexicon_entries.

В каждом каталоге lexicon лежат подкаталоги с аббревиатурой языка (en, ru и т.п.), в которых лежат языковые файлы с конкретным языком. Количество файлов не ограничено, но default.inc.php, как правило, должен присутствовать.

Чтобы создать свой словарь, сперва надо создать пространство имен (Namespaces), в системном меню MODX. Далее,

если словарь не привязан к какому-либо компоненту:

  • идем в меню управления словарями (Lexicons), в системном меню MODX, и нажимаем «создать запись / create entry».
  • Выбираем пространство имен, тему, язык, вводм ключ, нажимаем сохранить — запись готова. 

если словарь привязан к компоненту:

  • в папке компонента идем в папку lexicons, в нужный язык, и вносим значения в формате: 
    $_lang['lexicon_key'] = 'Описание';

    Если попытаться добавить лексическое значение, привязанное к пространству имени компонента, без использования файла, то возможен баг, при котором в базу вносится только первая запись, а все последующие исчезают в неизвестном направлении.

Чтобы увидеть изменения лексических файлов на сайте, необходимо сбросить кеш.

Вызов лексического значения при помощи тегов MODX:

[[%lexicon_key? &namespace=`пространство_имен` &language=`ru`]]

// Fenom
{$_modx->lexicon('lexicon_key')}

//или
{'lexicon_key' | lexicon}

Вызов лексического значения в ExtJS:

_('lexicon_key')

Вызов темы через xPDO:

$modx->lexicon->load('namespase:default');

// с указанием конкретного языка
$modx->lexicon->load('ru:namespase:default');

Для перевода пользовательских настроек системы используется запись лексикона, которая названа в честь ключа настройки с префиксом «setting_»:

setting_ + Key

Описание должно следовать тому же формату и включать суффикс «desc»:

setting_ + Key + _desc