Jump to main content Jump to doc navigation

Что такое лексиконы

Лексиконы хранят переведённые строки MODX. Лексикон — это набор пар ключ => значение, по одному набору на язык, и каждый язык разбит на темы.

Как выбирается язык

Настройка cultureKey решает, какой язык загружается. MODX берёт значение из первого источника, где оно есть:

  1. параметр cultureKey запроса;
  2. cultureKey сессии;
  3. контекстная настройка cultureKey, если запрос идёт в контексте, где она задана;
  4. системная настройка cultureKey.

У системной настройки значение по умолчанию en. Некорректный код языка заменяется значением по умолчанию: код фильтруется шаблоном [A-Za-z0-9_-]+, поэтому de, de_DE и pt-br — допустимые значения.

Настройка locale хранит полную локаль системы, например de_DE.UTF8. Она применяется через setlocale() и задаёт форматы дат, времени и чисел.

Язык менеджера

У менеджера свой язык, и это не системная настройка: значение лежит в сессии под ключом manager_language.

  • Пункт Toggle language в меню Admin меняет его. Для пункта нужно право language.
  • Страница входа выбирает язык, если в сессии его нет: берёт manager_language из запроса, затем из сессии, затем из заголовка Accept-Language браузера, иначе использует en.

Доступные языки — это каталоги в core/lexicon/, а доступные темы — файлы *.inc.php в каталоге языка.

Лексиконы

Темы лексиконов должны быть загружены перед использованием.

Использование лексиконов в шаблонах

[[%key? &topic=`topicname` &namespace=`namespace_name` &language=`en`]]

У тега три свойства:

Свойство По умолчанию Что делает
topic default Тема лексикона.
namespace core Пространство имён, которому принадлежит лексикон.
language настройка cultureKey Язык значений.

Каждое свойство тега доступно и внутри значения как плейсхолдер: [[+свойство]] заменяется значением этого свойства.

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

Использование лексиконов в PHP

$modx->lexicon->load('namespace_name:topicname');
echo $modx->lexicon('key');

load() принимает тему, пространство имён и язык:

Форма Что загружается
topic Тема, взятая из всех пространств имён.
namespace:topic Тема одного пространства имён.
language:namespace:topic Тема одного пространства имён на указанном языке.

Без языка используется текущий: настройка cultureKey, а в менеджере — язык менеджера.

Переопределение одной записи

Одну строку можно переопределить в менеджере, в разделе Admin → Lexicon Management. Дважды щёлкните по значению записи и впишите новое, а кнопкой Create добавьте строку, которой в ядре нет вообще.

Такая запись хранится в базе данных, имеет приоритет над файлом темы и переживает обновление MODX. Revert Lexicon Entry убирает переопределение одной записи, а Revert Entries — переопределения целой темы и языка.

Остальное — на странице Добавление отсутствующего перевода.

События

Событие Когда срабатывает
OnInitCulture После того, как заданы язык и локаль, до использования лексиконов.

Создание многоязычного сайта

Обычно применяют два подхода:

  1. Контекст на язык. Настройте контекст для каждого языка и направляйте посетителя в нужный контекст по (суб)домену или подпапке. Используйте gateway-плагин, virtual host или дополнение вроде ContextRouter или Babel. Babel связывает переводы между контекстами. Лексиконы тоже работают в шаблонах разных контекстов: создайте нужные контекстные настройки cultureKey и locale.
  2. Единый контекст на все языки. Управляйте всеми языками из одного контекста. Для этого нужно дополнение, например Lingua.

Смотрите также

  1. Интернационализация
  2. Добавление отсутствующего перевода
  3. Контексты
    1. Gateway-плагин
    2. Virtual Host
  4. Синтаксис тегов
    1. Основные теги и модификаторы

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • JT Skaggs
  • deJaya
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$194 per month—let's make that $500!

Learn more