Перейти к основному содержимому

Локализованные поля

Локализованные поля позволяют определять атрибуты объекта, которые должны быть переведены на несколько языков внутри одного объекта. В эти поля можно помещать выбранные типы данных и макеты — из‑за технических и ограничений хранения не все типы данных доступны.

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

Определение локализованных полей

Сначала нужно настроить локализованные поля и макеты в вашем классе. Это делается в редакторе классов.

Добавление локализованных полей в класс

Затем добавьте в этот контейнер атрибуты, которые необходимо перевести.

Добавление компонента данных в локализованные поля

Pimcore автоматически сгенерирует виджеты ввода для каждого настроенного языка. В редакторе объекта результат будет выглядеть следующим образом:

Предпросмотр локализованной страницы

По умолчанию используется табы (вкладки), если количество языков не превышает 15. Этот предел можно изменить в настройках поля в конфигураторе класса.

Изменение лимита вкладок в локализованных полях

Определение доступных языков

Если языки ещё не настроены, укажите допустимые языки для вашего сайта. Это можно сделать в Settings -> System Settings -> Localization & Internationalization

Добавление языков

Определение обязательных языков

Если вы хотите, чтобы локализованное поле было обязательным, но не для всех языков одновременно, можно определить, какие языки обязательны в Settings -> System Settings -> Localization & Internationalization: поставьте флажок Mandatory language для соответствующих языков.

Наследование

Преобразование значений с учётом наследования и fallback происходит сначала вертикально. Это отличается от Classification Store, где оценка выполняется по горизонтали. Если значение для текущего языка не найдено, проверяется уровень родителя.

Если при подъёме по уровням наследования результата не найдено, проверяется fallback‑язык самого нижнего уровня тем же образом (также с подъёмом по уровням наследования для этого языка).

Рассмотрим пример: предположим, что английский — fallback для немецкого. Мы запрашиваем немецкое значение для объекта на уровне 3. Поскольку единственное значение для языка по умолчанию (English) находится на уровне 1, дерево будет обходиться в соответствии с описанным порядком.

Уровни языковых значений в локализованных полях

Работа через PHP API

Получение доступных языков

Следующий код создаст массив с доступными языками для фронтенда (пользовательской части сайта).

$languages = \Pimcore\Tool::getValidLanguages();  

Отключение fallback‑языков

Вы можете отключить использование fallback‑значений

\Pimcore\Model\DataObject\Localizedfield::setGetFallbackValues(false);  

Доступ к данным

Доступ к данным осуществляется просто, например:

// с глобально зарегистрированной локалью  
$object = DataObject::getById(234);
$object->getInput1(); // вернёт данные en_US для поля "input1"

// получить значение для конкретного языка, независимо от глобальной локали
$object->getInput1("de"); // вернёт немецкое значение для поля "input1"

Установка данных

Установка данных осуществляется аналогично получению.

$object = DataObject::getById(234);  
$object->setInput1("My Name", "fr"); // установить французское значение для поля "input1"

Предупреждение: Обратите внимание, что перемещение поля из обычного поля объекта в контейнер localizedfield приведёт к потере данных этого поля во всех объектах, использующих данный класс.


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.