Описание
Метод нестатический: Выполняет перевод одного элемента инфоблока на указанный язык. Метод принимает массив исходных данных, включая свойства, и сохраняет их как перевод в соответствующие таблицы. Используется при автоматическом или ручном переводе контента. Поддерживает работу с пользовательскими свойствами и шаблонами SEO.
Сигнатура метода
bool FCIBlockElement::Translate( int|string $ID, array $arFields, string $target, string|bool $siteId = false, string|bool $source = false );
Параметры вызова
| Параметр | Описание | С версии |
|---|---|---|
| ID | Идентификатор элемента инфоблока, который необходимо перевести. | 2.5.0 |
| arFields | Массив данных для перевода, включая поля элемента, свойства и SEO-шаблоны. Формируется вручную или с помощью GetFieldsForTranslation(). |
2.5.0 |
| target | Целевой язык перевода (например, "en", "fr", "de"). |
2.5.0 |
| siteId | Идентификатор сайта. Если не указан, используется значение параметра target. |
2.5.0 |
| source | Исходный язык перевода. Используется при работе с внешними переводчиками. По умолчанию определяется автоматически. | 2.5.0 |
Возвращаемое значение
Метод возвращает true в случае успешной записи переведённых данных.
Если массив arFields пустой или перевод не может быть выполнен, возвращается false.
Пример
// Получаем данные элемента
$res = CIBlockElement::GetList(["ID" => "asc"], $arFilter);
if ($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
$props = $ob->GetProperties();
// Формируем структуру PROPERTY_VALUES для перевода
foreach ($props as $prop) {
if (is_array($prop['PROPERTY_VALUE_ID'])) {
foreach ($prop['PROPERTY_VALUE_ID'] as $key => $propertyValueId) {
$arFields["PROPERTY_VALUES"][$prop["ID"]][$propertyValueId] = [
'VALUE' => $prop['~VALUE'][$key],
'DESCRIPTION' => $prop['~DESCRIPTION'][$key],
];
}
} else {
$arFields["PROPERTY_VALUES"][$prop["ID"]] = [
$prop['PROPERTY_VALUE_ID'] => [
"VALUE" => $prop['~VALUE'],
'DESCRIPTION' => $prop['~DESCRIPTION'],
]
];
}
}
// Выполняем перевод на все языки, настроенные в инфоблоке
foreach (CFanTranslator::getIblockAutoLangs($arFields['IBLOCK_ID']) as $lid) {
$element = new FCIBlockElement();
$element->Translate($arFields["ID"], $arFields, $lid);
}
}
Примечание: Метод используется совместно с GetFieldsForTranslation() и getIblockAutoLangs() при массовом переводе элементов инфоблока.
Вся логика перевода делегируется внутреннему обработчику CFanTranslator.
Количество показов: 685
Дата изменения: 23.06.2025 13:58:20