Integration of Machine Translation for 1C-Bitrix
We faced the task of translating a catalog of 20,000 products into three languages. Manual translation would have taken months and cost hundreds of about $9–13 in savings. Our experience shows that machine translation (MT) covers 80-90% of the volume in hours, saving up to 70% of the budget compared to manual work. Only critical texts—main page, landing pages, legal documents—need human review. In one project, we reduced translation costs by 70% and completed the initial translation in hours. We have implemented over 20 MT integrations for catalogs ranging from 1,000 to 100,000 products. We will assess your project and offer a turnkey solution—from service selection to implementation and post-editing.
Choosing the Right MT Service for Bitrix
The main candidates are DeepL, Google Cloud Translation, and Yandex Translate. All three provide REST APIs but differ in quality for specific language pairs and handling of e-commerce content issues.
| Service | Language Pairs | Price (per character) | Highlights |
|---|---|---|---|
| DeepL | 31 languages (EU) | $0.00005 | Best quality for DE/FR/EN/PL, HTML support |
| Google Cloud Translation | 200+ | $0.00002 (basic) | Wide coverage, CIS language support |
| Yandex Translate | 100+ | $0.00003 | Optimal for RU→KZ/BE, batch transmission |
DeepL offers the best quality for European languages (DE, FR, EN, PL). API v2 supports text/html format—it translates text while preserving HTML tags. This is critical for formatted product descriptions.
Google Cloud Translation covers over 200 languages, including CIS languages (KZ, UZ, AZ). The basic model (translate/v2) is cheaper, while the NMT model (translate/v3) is more accurate.
Yandex Translate is optimal for RU→KZ and RU→BE pairs. API v2 supports batch transmission of up to 10,000 characters per request.
Handling HTML in Product Descriptions
Descriptions in b_iblock_element field DETAIL_TEXT often contain HTML markup. If you pass such text to an MT API as plain text, tags get translated literally: <strong> becomes <strong> in the target language (this has happened with Yandex when format is not specified).
Solution for Google Translation v3:
$client = new TranslationServiceClient(); $response = $client->translateText([ 'parent' => 'projects/{project}/locations/global', 'contents' => [$htmlContent], 'mimeType' => 'text/html', // Critical! 'sourceLanguageCode' => 'ru', 'targetLanguageCode' => 'en', ]); For DeepL: use the tag_handling=html parameter in the request. This flag tells DeepL to translate only text nodes, leaving tag attributes and structure untouched.
Protecting Variables and Shortcodes from Translation
Product descriptions often contain internal placeholders: {SIZE_GUIDE}, [product_id=123], or <!--#include file="..."-->. An MT service might "translate" these, breaking functionality.
Solution: Before sending to MT, replace all service constructs with placeholders that the MT service will not alter. For DeepL, use ignore_tags or wrap constructs in <keep> tags. After translation, revert the replacements.
$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); // Translate $text... // Restore placeholders foreach ($placeholders as $key => $value) { $translatedText = str_replace($key, $value, $translatedText); } Batch Processing and API Limits
For a catalog of 20,000 items, translating one request per product is slow and expensive. Batch processing is key:
- Google: up to 1024 strings per request
- DeepL: up to 50 texts per request
- Yandex: up to 10,000 characters total per request
We implement a translation queue: each product is a queue task. A worker picks a batch, sends it to the MT API, and saves the result. On error, we retry with exponential backoff.
Translations are saved into language versions of elements (b_iblock_element_lang) via CIBlockElement::SetPropertyValues() with LANGUAGE_ID specified. After saving, we invalidate the element cache.
Post-Edit Workflow
Machine translation is not final. Translators need a way to mark items as "needs review" or "manually edited." We add an infoblock property MT_STATUS (list: auto, reviewed, manual) for each language. Translators see only items with status auto, avoiding a full catalog review.
Our Process and What’s Included
- Selection and configuration of the MT service (DeepL, Google, Yandex) based on your needs
- Development of an integration module handling HTML, placeholders, and queues
- Creation of a post-editing interface in the Bitrix admin panel
- Documentation for using the translation system
- Team training (content managers, translators)
- One month of support after deployment
Timeframe Estimates
| Scenario | Timeline |
|---|---|
| MT API integration, batch translation of names and descriptions | 2–4 weeks |
| + HTML handling, placeholders, retry queue | 4–6 weeks |
| + Post-editing interface in Bitrix admin | +2–3 weeks |
We also offer post-release optimization: monitoring translation quality, fine-tuning models (if available), and configuration adjustments.
Why Work With Us
Our engineers are 1C-Bitrix certified with extensive experience in translation system integration. We guarantee data integrity and correct infoblock operation. Contact us for a consultation and preliminary assessment of your project.

