Справочники highload-блоков

Цвета, размеры, бренды, материалы обычно лежат в highload-блоках, а на витрине их показывает свойство типа «справочник». Подпись у строки одна на все языки.

Где лежит перевод

В той же строке, рядом с базовым значением: UF_NAME и UF_NAME_EN — соседние колонки одной таблицы. Никаких теневых таблиц и классов, собранных на лету.

Как включить

Экран Инфоблоки, раздел «Справочники». Впишите рядом с нужным блоком коды переводимых полей через запятую, без языкового суффикса — обычно это UF_NAME. Затем «Сохранить и создать языковые поля».

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

Дальше правка строки попадает в очередь и переводится, как элемент или раздел.

Как показать на витрине

Свойство типа «справочник» хранит у элемента не подпись, а идентификатор строки. Поэтому перевод подставляется явно:

IblockHelper::directoryName($tableName, $xmlId, $default);
IblockHelper::directoryNames($tableName, $xmlIds);

Имя таблицы лежит в настройках свойства, в ключе TABLE_NAME.

Второй хелпер читает пачкой, и в фильтре каталога он и нужен: значений справочника там десятки, и запрос на каждое превратит фильтр в самую медленную часть страницы.

Пустой перевод базовое значение не затирает: русское слово на английской странице лучше, чем пустая подпись.

Границы

Переводятся только строковые поля. У списка свои варианты, у файла и привязки переводить нечего.

Множественные поля пары не образуют. Первое поле списка служит подписью строки в отчётах очереди — по нему вы узнаёте, о какой строке речь.