Модуль «Мультиязычность: Инфоблоки на разных языках» за последние полтора месяца прошёл путь от критичного обновления безопасности до заметного расширения функциональности — массового автоперевода Highload-блоков, поддержки глоссария DeepL и переноса управления принудительным переводом из кода в интерфейс админки. Разберём, что изменилось в каждой из версий.
Версия 2.6.46 — обязательное обновление безопасности
31 мая вышла версия с важным обновлением безопасности: были устранены уязвимости, выявленные по требованиям технической проверки 1С-Битрикс Маркетплейс, — обход аутентификации и раскрытие информации в AJAX-эндпоинте инфоблоков, хранимая XSS в настройках модуля, небезопасная десериализация, а также потенциальный RCE в динамической компиляции HL-сущностей. Разработчики отметили это обновление как обязательное для всех пользователей модуля.
Помимо устранения уязвимостей, в этой версии:
- Исправлено сохранение и чтение записей режима перевода Highload-блоков — корректная работа с таблицами mm_hl_*, обработка строковых пользовательских полей через COALESCE и множественных полей после выборки.
- Снижено количество лишних запросов к базе данных при компиляции сущностей и получении списков за счёт кэширования проверки таблиц и оптимизации обхода UF-полей.
- Непереводимые поля HL (файлы, привязки к другим HL-блокам) в режиме перевода теперь отображаются только для просмотра, без ошибок сервиса токенов диска, а файлы доступны через стандартный механизм загрузок.
Версия 2.7.0 — массовый автоперевод Highload-блоков
30 июня в модуль добавлена одна из самых заметных новых возможностей — массовый автоперевод записей Highload-блоков. В меню «Мультиязычность» появился отдельный пункт «Массовый автоперевод Highload-блоков», где в настройках можно выбрать нужные HL-блоки и задать языки перевода для каждого из них. Реализован пропуск уже переведённых записей и возможность продолжить обработку с последнего места остановки.
Также в этой версии:
- Добавлен поисковый индекс для переводов разделов инфоблоков — при сохранении раздела и переиндексации поиска обновляется поле SEARCHABLE_CONTENT в таблице переводов, поэтому поиск по разделам теперь учитывает переведённые название и описание.
- Исправлено сохранение переводов при редактировании элементов и разделов — корректная обработка пользовательских полей типа customhtml (включая множественные значения) и customfaq, а также подсказок умного фильтра у свойств раздела.
- Исправлено сохранение множественных свойств элементов в режиме перевода — значения теперь корректно привязываются к строкам оригинала, новые пункты FAQ добавляются в базовую таблицу свойств без ошибок, а удалённые переводы очищаются без потери данных оригинала.
- Исправлен автоперевод Highload-блоков — метаданные UF и значения для перевода берутся из основной сущности HL, а не из пустой служебной таблицы, из-за чего ранее автоперевод мог пропускать часть полей.
- Добавлен единый механизм чтения значений пользовательских полей из формы в режиме перевода через событие OnResolveUserFieldPostValue, упрощающий подключение собственных типов полей без правок ядра модуля.
- Улучшена нормализация значений свойств и UF перед записью в таблицы переводов — корректная сериализация HTML-полей, файлов и составных типов данных.
Версия 2.7.1 — поддержка глоссария DeepL
14 июля вышло обновление, добавившее поддержку глоссария DeepL при автопереводе: при установленном отдельном модуле «Глоссарий DeepL» и синхронизированной языковой паре перевод теперь учитывает зафиксированные в глоссарии термины.
Кроме того, логин и пароль для авторизации сервиса перевода больше не задаются в настройках самого модуля мультиязычности — авторизация теперь настраивается централизованно в модуле «Ядро» (modulemarket.core), а в настройках переводчика добавлена подсказка со ссылкой на нужный раздел. Также исправлено корректное отображение ошибок сервиса перевода в песочнице — включая ошибки авторизации и ответа API.
Версия 2.7.2 — доработки и совместимость
17 июля вышла версия с мелкими доработками и добавленной совместимостью с модулями uffaq и ufhowto.
Версия 2.7.5 — принудительный автоперевод переехал в настройки
В тот же день, 17 июля, вышло обновление, которое меняет способ управления принудительным автопереводом. Теперь под выбором языков у каждого инфоблока есть отдельная галочка «Принудительный автоперевод» — при её включении все изменения элемента переводятся заново при каждом сохранении. Прежний способ через константы вида FORCE_TRANSLATE_IB_ID_XX в файле init.php полностью убран — прописывать их больше не нужно.
Также добавлен флаг «Не участвует в автопереводе» для свойств инфоблоков и пользовательских полей — отмеченные свойства и поля исключаются из автоперевода. Галочка отображается прямо в штатных формах редактирования свойства инфоблока и пользовательского поля, без замены самих форм.
Что важно учесть при обновлении
Разработчики отдельно предупреждают: если ранее принудительный автоперевод включался через константы в init.php, после обновления нужно отметить соответствующие инфоблоки галочкой «Принудительный автоперевод» непосредственно в настройках модуля — прежние константы больше не учитываются системой.
Итог: куда движется модуль
За полтора месяца модуль «Мультиязычность» прошёл путь от закрытия критичных уязвимостей безопасности до заметного расширения автоматизации перевода. Основные направления развития — это перенос настроек из кода в удобный интерфейс админки (принудительный перевод, флаги исключения полей), масштабирование автоперевода на новые типы данных (Highload-блоки), повышение точности перевода за счёт интеграции с глоссарием DeepL и постепенное устранение накопившихся ошибок в обработке множественных и составных полей.
Да, если ранее принудительный автоперевод настраивался через константы FORCE_TRANSLATE_IB_ID_XX в init.php — их нужно продублировать галочкой «Принудительный автоперевод» в настройках модуля, иначе автоперевод для этих инфоблоков перестанет срабатывать.
Нет, глоссарий учитывается только при установленном отдельном модуле «Глоссарий DeepL» и при синхронизированной языковой паре — без этих условий обновление до версии 2.7.1 само по себе ничего не изменит в переводе.
Да, начиная с версии 2.7.5 у свойств инфоблоков и пользовательских полей появился флаг «Не участвует в автопереводе» — он доступен прямо в штатной форме редактирования свойства или UF-поля.