Разделы Написать в Telegram

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

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

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

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

Как включить

Экран Настройки, вкладка «Что переводить», раскрытие «Дополнительно». Кнопкой «Добавить справочник» выведите нужный блок и отметьте его переводимые поля — обычно это UF_NAME. Нажмите «Сохранить». Сами языковые поля создаёт кнопка «Создать поля в справочниках» на экране Обслуживание, вкладка «Языковые свойства».

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

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

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

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

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

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

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

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

Границы

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

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