Справочники highload-блоков
Цвета, размеры, бренды, материалы обычно лежат в highload-блоках, а на витрине их показывает свойство типа «справочник». Подпись у строки одна на все языки.
Где лежит перевод
В той же строке, рядом с базовым значением: UF_NAME и UF_NAME_EN —
соседние колонки одной таблицы. Никаких теневых таблиц и классов, собранных на
лету.
Как включить
Экран Инфоблоки, раздел «Справочники». Впишите рядом с
нужным блоком коды переводимых полей через запятую, без языкового суффикса —
обычно это UF_NAME. Затем «Сохранить и создать языковые поля».
По умолчанию список пуст, и это осознанно. Среди полей справочника бывают внешние коды, файлы, привязки и поля чужих модулей. Размножать их все на каждый язык нельзя: получится мёртвый груз, который никто никогда не переведёт.
Дальше правка строки попадает в очередь и переводится, как элемент или раздел.
Как показать на витрине
Свойство типа «справочник» хранит у элемента не подпись, а идентификатор строки. Поэтому перевод подставляется явно:
IblockHelper::directoryName($tableName, $xmlId, $default);
IblockHelper::directoryNames($tableName, $xmlIds);
Имя таблицы лежит в настройках свойства, в ключе TABLE_NAME.
Второй хелпер читает пачкой, и в фильтре каталога он и нужен: значений справочника там десятки, и запрос на каждое превратит фильтр в самую медленную часть страницы.
Пустой перевод базовое значение не затирает: русское слово на английской странице лучше, чем пустая подпись.
Границы
Переводятся только строковые поля. У списка свои варианты, у файла и привязки переводить нечего.
Множественные поля пары не образуют. Первое поле списка служит подписью строки в отчётах очереди — по нему вы узнаёте, о какой строке речь.