Выяснили, что баг с категориями всё таки возникает в закодированном коде вашего модуля мультиязычности.
Тут bitrix/modules/modulemarket.translator/include.php Событие OnBeforeIBlockSectionUpdate
Если убрать амперсанд из функции у аргумента $arFields, чтобы она перестала быть ссылочной переменной - все заработает правильно. Скрин https://72seo.ru/s/2024-03-14_103311.jpg
Поскольку там код закодирован, то невозможно предсказать последствия такого изменения.
Поэтому очень прошу проверить ваш закодированный код и разобраться в описанной выше ошибке. Заранее спасибо!
при этом в базе пропадает значения SITE_ID и LANGUAGE_ID
________________________ Резюмирую, после доработок в файле datamanager.php принципиально вообще ни чего не поменялось. Ошибки как были так и есть, HL как не работал так и не работает. Только сейчас окончательно поломался, даже перевод не выдаёт в ответе getlist.
Очевидно что при создании модуля обошли стороной HL блоки, функционал явно сырой.
1. Если при вызове HL Блока в getlist вставить "select" => array("*"), то значения вернутся непереведенные. Без этого параметра переводится.
2. Массив переведенных значений имеет дубли в названии ключей UF_UF_ и деже если после использовать функцию RenameRowKeys всё равно не переименовываются, она тоже не работает корректно
3. Выше пункты еще цветочки, в сравнении с работой с самими блоками из админки. - зашёл в элемент - сохранил на русском - переключил язык на En - сохранил - в таблице mm_hl_lang_selector появилась запись, но сбросился чекбокс. - сохраняю повторно без правок - сбрасываются SITE_ID и LANGUAGE_ID в таблице базы - сохраняю повторно - записывается новая запись и так до бесконечности
Вообще, зачем добавлять в таблицу SITE_ID когда привязка идёт к языку, это лишнее значение.
Также можно запустить переименование ключей, UF_UF_ на UF_ \Modulemarket\Translator\Highloadblock\HighLoadBlockTable::RenameRowKeys($arRes); Только нужно саму функцию переписать
В файле /bitrix/modules/modulemarket.translator/lib/highloadblock/highloadblocktable.php функция RenameRowKeys Заменить весь код на этот
"Сделать возможность перевода полей форм модуля Веб формы"
Сейчас есть куча форм и чтобы их адаптировать под каждый язык на публичке, нужно делать копии форм под каждый язык и потом в коде в каждом сайте вручную проставлять нужный ID формы. Это достаточно хлопотно. Собственно данный модуль и решает вопросы подобных танцев с бубном в Инфоблоках, Highload блоках, Свойствах и очень в тему добавить поддержку Веб форм.
"Не сохраняет значения других полей, пока не заполнено для базового языка."
Если нужно чтобы поле на базовой версии языка было пустое, а на en было заполнено, то такой трюк не прокатит. Есть связка с базовым языком и без заполнения его не получится указать другую локализацию.
Не совсем понял почему так сделано, но в некоторых случаях было бы полезно указывать поля для других языков.
Считаю, будет полезно сделать автоматический перевод метаданных разделов и элементов. С возможностью в ручном режиме, по скрипту всей базы и при создании новых элементов. Не совсем понял почему изначально при разработке автоперевода остальных полей это не было сделано.
Если есть какая то в этом логика, то сделайте, пожалуйста, включение через параметр перевод и метаданных.
"Поля Раздела на другом языке применяется только после повторного сохранения базовой языковой версии"
А теперь детали: Если перейти в раздел и выбрать например EN и внести изменения в элементе: название, метаданные и прочая информация и нажать сохранить, то на публичной части сайте они не применяются даже после полного сброса кеша сайта. Применение происходит только при сохранении в админке на базовом языке, в моём случае на русском.
Это дико не удобно, постоянно сохранять раздел по 2 раза и переключаться между языками, теряется время.
Всё правильно работает при работе с элементами, значит можно правильно настроить для разделов.