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

Синхронизация структуры

Создаёт свойства и поля, в которых будет лежать перевод. Тексты она не переводит — только готовит место.

Экран Обслуживание, вкладка «Языковые свойства». Из кода:

$res = IblockHelper::syncProperties($iblockId);           // все языки перевода
$res = IblockHelper::syncProperties($iblockId, ['en']);   // только английский

Возвращает количество изменений и подробный лог — либо описание ошибки.

Что создаётся

  • свойства элементов на каждый язык перевода, на основе свойств с суффиксом языка сайта или свойств без суффикса;
  • поля разделов UF_NAME_<язык>, UF_DESCRIPTION_<язык>;
  • варианты свойств-списков, перенесённые по совпадению XML_ID.

Четыре правила, которые стоит знать до нажатия

Языковые свойства создаются только для переводимых типов. Списки и строковые свойства — обычная строка, HTML, блоки конструктора. Файлы, привязки, числа, даты и служебные типы пропускаются с записью в лог.

Раньше они создавались на каждый язык и оседали мёртвым грузом: свойство «Картинка EN» не переводится ничем и никогда, а место в форме занимает.

Существующее свойство-перевод не перетирается. Приводится только структура — тип, множественность, настройки типа, привязка к инфоблоку, — и только при реальном расхождении. Название, сортировка, активность, обязательность, настройки поиска и фильтрации остаются такими, какими их сделал администратор.

Варианты списков не удаляются. Если в переводе есть вариант, которого нет в источнике, он остаётся, а расхождение попадает в лог. Причина жёсткая: Битрикс при удалении варианта вычищает и проставленные у элементов значения. Молча делать это в фоне нельзя.

Свойство не пересоздаётся. Символьный код и внешний код у существующего не меняются. Смена символьного кода у базового свойства не каскадит на связанные — если переименовали, связь придётся восстановить руками.

Значения не переносятся

Синхронизация готовит структуру. Тексты переводит очередь, разовый перевод или вы сами: Запустить разовый перевод.

Языковые поля создаёт одно место

Все языковые поля — разделов, словаря, колонки хранилища SEO — создаются одним механизмом. Поэтому они одинаково устроены и одинаково себя ведут: правило, заведённое для одного, действует для всех.

Когда запускать

  • после добавления нового языка перевода;
  • после создания новых свойств в инфоблоке;
  • после переноса инфоблока с другого проекта.

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