Синхронизация структуры
Создаёт свойства и поля, в которых будет лежать перевод. Тексты она не переводит — только готовит место.
Экран Инфоблоки, вкладка «Синхронизация». Из кода:
$res = IblockHelper::syncProperties($iblockId); // все целевые языки
$res = IblockHelper::syncProperties($iblockId, ['en']); // только английский
Возвращает количество изменений и подробный лог — либо описание ошибки.
Что создаётся
- свойства элементов на каждый целевой язык, на основе свойств с суффиксом базового языка или свойств без суффикса;
- поля разделов
UF_NAME_<язык>,UF_DESCRIPTION_<язык>; - варианты свойств-списков, перенесённые по совпадению
XML_ID.
Четыре правила, которые стоит знать до нажатия
Клонируются только переводимые типы. Списки и строковые свойства — обычная строка, HTML, блоки конструктора. Файлы, привязки, числа, даты и служебные типы пропускаются с записью в лог.
Раньше они клонировались на каждый язык и оседали мёртвым грузом: свойство «Картинка EN» не переводится ничем и никогда, а место в форме занимает.
Существующее свойство-перевод не перетирается. Приводится только структура — тип, множественность, настройки типа, привязка к инфоблоку, — и только при реальном расхождении. Название, сортировка, активность, обязательность, настройки поиска и фильтрации остаются такими, какими их сделал администратор.
Варианты списков не удаляются. Если в переводе есть вариант, которого нет в источнике, он остаётся, а расхождение попадает в лог. Причина жёсткая: Битрикс при удалении варианта вычищает и проставленные у элементов значения. Молча делать это в фоне нельзя.
Свойство не пересоздаётся. Символьный код и внешний код у существующего не меняются. Смена символьного кода у базового свойства не каскадит на связанные — если переименовали, связь придётся восстановить руками.
Значения не переносятся
Синхронизация готовит структуру. Тексты переводит автоперевод или вы сами: Запустить автоперевод.
Языковые поля создаёт одно место
Все языковые поля — разделов, словаря, колонки хранилища SEO — создаются одним механизмом. Поэтому они одинаково устроены и одинаково себя ведут: правило, заведённое для одного, действует для всех.
Когда запускать
- после добавления нового целевого языка;
- после создания новых свойств в инфоблоке;
- после переноса инфоблока с другого проекта.
Повторный запуск безопасен: он идемпотентен и на неизменившейся структуре ничего не делает.