Skip to content
  1. Компоненты
  2. multiLingual

multiLingual

Компонент multiLingual реализует функциональность мультиязычных сайтов без дополнительных контекстов, в отличие от компонента Babel.

"Из коробки" подходит для большинства небольших сайтов вроде "сайта-визитки" или несложного каталога.

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

Настройка компонента

Для работы компонента должны быть включены ЧПУ (friendly URLs)

Компонент требует установки pdoTools версии не ниже 2.8.2 (с версиями ниже компонент не тестировался).

Перед тем, как начать работу с компонентом, необходимо установить настройку ml_default_site_url. В нее необходимо записать URL сайта по-умолчанию. Например https://mysite.ru/

Работа с мультиконтекстными сайтами

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

Например, у вас на одной установке modx работают два сайта: http://mysite.com и https://mynewsite.ru.

В контексте первого сайта вы указываете в настройке ml_default_site_url значение http://mysite.com/

В контексте второго - https://mynewsite.ru/

Обратите внимание на слэш на конце.

Плагин mlSetLanguage должен выполняться позже плагина, который переключает контексты! Поэтому в настройках плагина mlSetLanguage, напротив события OnHandleRequest поставьте приоритет выше, чем у вашего переключателя контекстов.

Про выборку ресурсов и pdoTools

При работе со сниппетами пакета pdoTools для выборки ресурсов, такими как pdoResources и pdoMenu, данные сниппеты ничего не знают о компоненте multiLingual, поэтому по-умолчанию, независимо от языковой версии, они будут получать из БД поля ресурсов со значениями на языке по-умолчанию.

Для того, чтобы данные сниппеты выдавали на выходе выборки с переведенными полями, необходимо заменить значения двух системных настроек:

НастройкаЗначение
pdoFetch.classmlFetch
pdofetch_class_path{core_path}components/multilingual/model/multilingual/

При выборке ресурсов другими способами, подстановка переводов ложится на плечи разработчика.

Более подробное описание механизма описано в разделе Принцип перевода выборок

Принцип работы с компонентом

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

В системных настройках вы можете редактировать набор полей, доступных для перевода:

  • Настройка ml_resource_fields задает json массив, в котором указываются поля для переводов:
json
{
  "modResource" : [
    "pagetitle",
    "longtitle",
    "content",
    "description",
    "introtext",
    "menutitle"
  ]
}

Ключ - имя класса, значение - массив полей для перевода.

  • Настройка ml_resource_tv_fields задает json массив, в котором перечисляются названия tv полей для перевода:
json
["tv1","tv2"]

Внимание

Перечисляются именно названия tv-полей, а не ID