Форматы: HTML, JSON, конструкторы

Текст текстом не ограничивается. Модуль различает три случая.

Обычная строка

Название товара, подпись кнопки, короткое поле. Переводится как есть.

Неразрывный пробел в такой строке ставится символом, а не сущностью: в поле без разметки сущность была бы видна человеку как есть.

HTML

Описание товара, текст новости. Разметка должна вернуться из перевода целой.

Здесь неразрывный пробел ставится сущностью — в HTML это правильный вид.

Незакрытый тег чинится всегда, независимо от настроек типографики. Ответ модели вида <span>текст<span> вместо закрывающего тега — это не вопрос оформления, а сломанная разметка: один такой тег разъезжает вёрстку всей страницы.

Что модуль считает поломкой и как их ищет — Сверка перевода с оригиналом.

Конструкторы страниц

Поле с содержимым визуального конструктора (sprint.editor) — это JSON со структурой блоков. Переводить его как текст нельзя: перевелись бы имена ключей и служебные значения.

Модуль отдаёт JSON целиком, отдельным форматом. Разбор структуры и выбор переводимых узлов делает сервис: он переводит подписи, заголовки и текстовые значения, оставляя структуру нетронутой.

Проверка после перевода — число узлов должно совпасть. Не совпало — запись отменяется.

Типографика к содержимому конструктора не применяется. Оно идёт другим путём и до типографа не доходит.

Новые ключи конструктора

Добавляются на стороне сервиса, в его разборщике. На стороне Битрикса менять нечего: модуль передаёт JSON целиком и о его внутреннем устройстве не знает.

Это сознательное разделение: знание о формате блоков живёт в одном месте, а не в каждом установленном модуле.