Поиск по языкам
Чтобы посетитель находил страницы по словам на своём языке — и видел в выдаче результаты на нём же.
Две разные задачи
Находить — работает почти само. Индексная запись у элемента одна, и штатный индексатор кладёт в неё все свойства, помеченные как участвующие в поиске, включая языковые. Поэтому английский запрос элемент находит.
Показывать — требует одной строки в шаблоне. Заголовок и сниппет в выдаче собираются из базовых полей, поэтому без подмены посетитель английской версии находит нужный товар и видит его русское название.
IblockHelper::substituteSearchResults($arResult);
Подробности — search.page.
Что нужно, чтобы находилось
Языковые свойства должны участвовать в поиске.
Новое языковое свойство наследует эту настройку от исходного при создании. Языковые поля разделов создаются участвующими в поиске — но в старых версиях модуля у них стояло «нет», поэтому на давно работающих проектах настройку стоит проверить.
Индекс должен быть пересобран после создания свойств и после перевода. Модуль индексацией поиска не управляет: это штатный механизм Битрикса, и живёт он своим расписанием.
Чего подмена не делает
Не трогает записи чужих модулей — форума, обычных страниц — и записи разделов.
Не затирает базовый текст пустым переводом: русское название в выдаче лучше пустой строки.
На базовом языке не делает ничего.
Почему одна индексная запись, а не по одной на язык
Потому что так устроен поиск Битрикса, и менять это значило бы переписать его целиком.
У схемы есть приятное следствие: элемент находится по словам любого из языков. Посетитель английской версии, который ввёл русское название модели, товар всё равно найдёт.
И неприятное: релевантность считается по смеси языков в одной записи. На проектах с большим числом языков выдача от этого размывается, и лечится это только настройкой поиска, а не модулем.