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