Как модуль встраивается в компоненты

Своих компонентов у модуля нет и не будет. Форк штатного компонента — это чужая копия в поставке, которая ломается на каждом обновлении ядра, и сопровождать её пришлось бы вечно.

Вместо этого модуль подставляет перевод в данные, которые компонент уже получил. Делается это в result_modifier.php шаблона — одной-двумя строками.

Две разные ситуации

Данные вы выбираете сами. Тогда перевод подставляется при выборке, и дописывать в шаблон вообще ничего не нужно: Выборка с учётом языка.

Данные выбрал штатный компонент. Тогда в его шаблон добавляется вызов хелпера. Про это все страницы раздела.

Общий вид

// result_modifier.php шаблона компонента
use mrLexndr\Translate\IblockHelper;

IblockHelper::substituteStandardFields($arResult);

Для списков — по элементу:

foreach ($arResult['ITEMS'] as &$arItem) {
    IblockHelper::substituteStandardFields($arItem);
}
unset($arItem);

Порядок важен. SEO-подстановка читает уже подставленные поля, поэтому substituteSeo() зовут после substituteStandardFields(), а не до.

Данные получайте массово. Подстановка в цикле — нормально, запросы в цикле — нет. Хелпер рассчитан на то, что элементы у вас уже на руках.

Кеш компонента

Вызовы в result_modifier.php выполняются при промахе кеша, и результат кешируется вместе с остальным. Это правильное место: перевод считается один раз на сборку кеша, а не на каждый показ.

Отсюда следствие: после перевода витрина покажет старое, пока кеш не истечёт. Сбросьте кеш сайта, если проверяете результат сразу.

Страницы по компонентам

Компонент Что подставляется
news.list списки новостей и статей
news.detail детальная страница, SEO, alt и title картинок
catalog.element карточка товара
catalog.section витрина раздела
search.page результаты поиска
breadcrumb хлебные крошки
sale.basket.basket корзина
sale.order.ajax оформление заказа

Если вашего компонента здесь нет — принцип тот же: найдите в его result_modifier.php массив с элементами и подставьте перевод в него. Нестандартный компонент от штатного в этом смысле не отличается.

Про готовые рецепты под коммерческие шаблоны

Аспро, Next и подобные сборки мы под рукой не держим, поэтому готовых рецептов «вставьте вот сюда» для них здесь нет и придумывать их наугад мы не будем. Принцип от шаблона не зависит: вызов идёт в result_modifier.php того шаблона, который у вас реально подключён.