Інтеграція машинного перекладу контенту для 1С-Бітрікс
Перекласти каталог із 20 000 товарів трьома мовами силами перекладачів — це місяці роботи та значний бюджет. Машинний переклад закриває 80–90% обсягу за кілька годин, залишаючи перекладачам лише коректуру критично важливих текстів: головна сторінка, лендінги, юридичні документи. Але інтеграція MT-сервісу з 1С-Бітрікс — це не просто «викликати API», там є нетривіальні технічні завдання.
Вибір MT-сервісу: що важливо для 1С-Бітрікс
Основні кандидати: DeepL, Google Cloud Translation, Yandex Translate. Усі три надають REST API, але відрізняються якістю для конкретних мовних пар та ставленням до специфічних проблем контенту e-commerce:
DeepL — найкраща якість для європейських мов (DE, FR, EN, PL). API v2 підтримує формат text/html — перекладає текст, зберігаючи HTML-теги. Це критично для описів товарів із версткою.
Google Cloud Translation — широке охоплення мов (200+), підтримка мов СНД (KZ, UZ, AZ). Базова модель (translate/v2) дешевша, NMT-модель (translate/v3) точніша.
Yandex Translate — оптимально для пари RU→KZ, RU→BE. API v2 підтримує пакетну передачу до 10 000 символів за запит.
Проблема №1: HTML в описах товарів
Описи в b_iblock_element полі DETAIL_TEXT часто містять HTML-розмітку. Якщо передати такий текст у MT-API як plain text — теги перекладуться буквально: <strong> стане <сильный> (у Yandex це реальний кейс при передачі без вказівки формату).
Рішення для Google Translation v3:
$client = new TranslationServiceClient();
$response = $client->translateText([
'parent' => 'projects/{project}/locations/global',
'contents' => [$htmlContent],
'mimeType' => 'text/html', // Критично!
'sourceLanguageCode' => 'ru',
'targetLanguageCode' => 'en',
]);
DeepL: параметр tag_handling=html у запиті. З цим прапором DeepL перекладає лише текстові вузли, не чіпаючи атрибути тегів та структуру розмітки.
Проблема №2: змінні та шорткоди в контенті
В описах товарів зустрічаються внутрішні підстановки: {SIZE_GUIDE}, [product_id=123], <!--#include file="..."-->. MT-сервіс може «перекласти» ці конструкції — зламавши функціональність.
Рішення: перед надсиланням у MT замінюємо всі службові конструкції на плейсхолдери, які MT-сервіс не чіпає. Для DeepL використовуємо ignore_tags або обрамлюємо конструкції в теги <keep>. Після перекладу робимо зворотну заміну.
$placeholders = [];
$pattern = '/\{[A-Z_]+\}|\[product_id=\d+\]/';
$text = preg_replace_callback($pattern, function ($match) use (&$placeholders) {
$key = 'PLACEHOLDER_' . count($placeholders);
$placeholders[$key] = $match[0];
return $key;
}, $originalText);
// Перекладаємо $text...
// Відновлюємо плейсхолдери
foreach ($placeholders as $key => $value) {
$translatedText = str_replace($key, $value, $translatedText);
}
Пакетна обробка та ліміти API
Для каталогу з 20 000 позицій не можна перекладати по одному запиту на товар — це і повільно, і дорого. Пакетна обробка:
- Google: до 1024 рядків за запит
- DeepL: до 50 текстів за запит
- Yandex: до 10 000 символів сумарно за запит
Реалізуємо чергу перекладу: кожен товар — завдання в черзі. Воркер бере пакет, надсилає в MT-API, зберігає результат. При помилці — повтор з експоненційною затримкою.
Переклади зберігаємо в мовні версії елементів (b_iblock_element_lang) через CIBlockElement::SetPropertyValues() із зазначенням LANGUAGE_ID. Після збереження інвалідуємо кеш елемента.
Постредагування: прапори для перекладача
Машинний переклад не є фінальним. Потрібна можливість для перекладача позначити переклад як «потребує перевірки» або «відредаговано вручну». Додаємо властивість інфоблоку MT_STATUS (список: auto, reviewed, manual) для кожної мови. Перекладач бачить лише елементи зі статусом auto — не перебирає весь каталог.
Орієнтири за термінами
| Сценарій | Термін |
|---|---|
| Інтеграція MT-API, пакетний переклад назв і описів | 2–4 тижні |
| + обробка HTML, плейсхолдери, черга з ретраями | 4–6 тижнів |
| + інтерфейс постредагування в адмінці 1С-Бітрікс | +2–3 тижні |
Вартість розраховується індивідуально. Враховуються: обсяг контенту, кількість мов, обраний MT-сервіс та вимоги до якості перекладу.







