Разработка SEO оптимизированных высокопроизводительных фронтенд приложений на базе 1С-Битрикс.

Многоязыковые сайты с использованием автоматического перевода

Артем Житник

Артем Житник


Фото Ивана Шилова взято с Unsplash

Вводная была такая: 2 сайта на разных доменах, полные аналоги друг друга, но на разных языках (русский, английский). Необходимо максимально завязать работу на основную русскую версию, а английская в идеале строилась бы полностью на автопереводе.

Типичная интернационализация Битрикса

Изначально сайты были полностью отличны друг от друга, разные шаблоны сайтов со своими шаблонами компонентов. Заказчик решил двигаться в сторону унификации, чтобы отличался только контент, а оболочка была общая. Сказано-сделано, перенесли все в единый шаблон сайта, адаптировали все надписи через механизм локализации Битрикс к многоязычности (файлы в папках lang). Задача стандартная, останавливаться не буду. Структуру инфоблоков выбрали такую:

Контент (русский) тип инфоблоков
  Статьи (русский) инфоблок
    Автор (строка) свойство
  ...
Контент (английский) тип инфоблоков
  Статьи (английский) инфоблок
    Автор (строка) свойство
  ...

Коды задали с указанием языка: content_ru, articles_ru и т.д.

В исходном коде дублирование было исключено, пришли к относительному порядку. Но параллельно вести два набора инфоблоков это то еще "удовольствие". Занятие муторное, заказчик попросил посмотреть в сторону автоматизации.

Перевод через API

Беглый поиск переводчиков с API показал отсутствие вменяемых бесплатных вариантов. Пришлось сдаваться Яндексу. Наперед замечу что для данного сайта расходы на API оказались небольшие, контента не миллионы статей. Оплата идет по количеству переведенных символов. Детальные описания статей заданы в формате html, который API умеет корректно переводить. Остальной контент - обычный текст. Также была заморочка с переводом некоторых терминов, брендов. Они должны были переводится по специальным правилам. API умеет и это, через создание своего глоссария, который передается в API.

Автоматизация перевода

У меня был опыт создания многоязычных проектов в django, react приложениях. Там этот вопрос достаточно продуман, есть куча библиотек, включая i18n контента. В Битрикс, как обычно, делаем костыльными методами.

Через события OnBeforeIBlockElementAdd, OnBeforeIBlockElementUpdate, OnAfterIBlockSectionAdd, OnAfterIBlockSectionUpdate проверяется модификация русского инфоблока, по коду находится элемент/раздел в английской версии, перезаписывается контент переведенными через API значениями. Если английского варианта нет - создается новый с таким кодом. Если меняется английская версия вручную, по идее мы должны перестать перезаписывать автоматически перевод, вроде как редактор сам начинает ее вести. Для этой цели завел highloadblock с перечнем ID переводимых автоматически элементов и разделов.

Деталей реализации не привожу, только концепцию. Пришлось помучаться с клонированием файлов для английских версий, а также с частичным переводом некоторых свойств (включая множественные).

Отображение статуса перевода в админке

Хотелось бы показать контент-редактору состояние перевода элементов и разделов. Используя событие OnAdminListDisplay добавил в списки инфоблоков колонку:

Также там может показываться ошибка "Не задан символьный код", "Отсутствует перевод". Колонка показывается только на русских версиях, потому что перевод делается в одну сторону. Английская версия в данной реализации вторична.

Для удобства, используя событие OnBeforeProlog добавил контекстные меню типа:

Также добавил групповые действия:

Итог

Несмотря на то что для заказчика появились дополнительные расходы в денежном выражении, он освободился от необходимости кучу времени тратить на муторное синхронное редактирование контента разных языковых версий, что при его занятости гораздо ценнее. Как пелось в известной песне: "Вкалывают роботы, а не человек".

    Битрикс

©2024 ReactiveBx работает на «1С-Битрикс: Управление сайтом» и Next.js