Многоязычные сайты

c

Сделать сайт на двух языках — это не просто добавить переключатель в шапку. На Drupal можно запустить 10 языков за вечер, но если наступить на те же грабли, что и 80% новичков, вы потратите недели на разгребание дублей и битых ссылок. Здесь — конкретные шаги, цифры и грабли. Без воды.

Прежде чем ставить модули, определитесь с архитектурой. Есть три принципиально разных пути: каждый язык — отдельный домен (en.site.ru, de.site.ru), поддиректория (site.ru/en) или субдомен. Для SEO лучше поддиректории — один домен, вся весна перетекает между языками. Для больших корпоративных сайтов (от 5000 страниц) — отдельные домены, чтобы не перегружать базу.

1. Главное решение: какой модуль перевода ставить?

В Drupal 9/10/11 есть два основных подхода: Content Translation (базовый, ядро) и Entity Translation (отдельный модуль). Разница — как они хранят перевод. Content Translation создаёт для каждого перевода отдельную ноду (запись), Entity Translation — хранит все переводы внутри одного ID. Выбор зависит от объёма и системы.

Пример: у вас интернет-магазин на 1000 товаров. Если используете Content Translation — каждое описание товара создаётся как отдельная нода. При редактировании оригинала вам придётся править все переводы вручную или через интерфейс. Entity Translation — переводите поля: описание, цена, характеристики. Одна карточка товара, 3 языка. В 2 раза меньше админских кликов.

Когда какой брать? Content Translation — если структура простая (блог, статья, новости). Entity Translation — для каталогов, таксономий, сложных полей (цены, скидки). Ещё нюанс: Entity Translation не поддерживает Drupal 8 ниже 8.4 — проверьте версию.

2. Пошаговая настройка (чтобы не сломать сайт)

Шаг 1. Включите модули: Locale, Content Translation (или Entity), Language. Идите на страницу /admin/config/regional/language и добавьте языки: русский, английский, немецкий — что нужно. Не забудьте про Language Switcher — это не модуль, а блок, его нужно разместить в нужной области.

Шаг 2. Настройте перевод интерфейса. Это отдельный процесс: через /admin/config/regional/translate можно импортировать готовые .po файлы (найдите на drupal.org/project/l10n_server). Если у вас кастомные типы материалов — переводите их вручную, через интерфейс. Бюджет: 200 строк интерфейса — около 2-3 часов работы переводчика.

Шаг 3. Для каждой сущности (тип материала, таксономия) укажите, какие поля переводить. Зайдите в настройки типа: /admin/structure/types/manage/article → вкладка «Настройки языка». Отметьте галки: «Включить перевод» для полей заголовка, тела, изображения. Если не отметите — поле будет общим для всех языков (иногда это нужно, например, для даты или автора).

3. SEO для многоязычного сайта: что сделать обязательно

Drupal не проставит hreflang теги автоматически, если вы не скачаете модуль Hreflang (contrib). Без него Google может посчитать языковые версии дублями — и ранжирование упадёт. Установите модуль, настройте его на /admin/config/search/hreflang — укажите связку «язык → URL-префикс». Проверьте через Google Search Console: в разделе «Улучшения» должны появиться зелёные отметки.

Ещё одна ловушка — неправильная настройка XML Sitemap. Для каждого языка нужно сгенерировать отдельную карту сайта. Модуль Simple XML Sitemap (contrib) умеет делать это через настройки: включите галку «Разделять по языкам». Пример: sitemap_ru.xml, sitemap_en.xml. Каждая карта — только страницы своего языка. Без этого Google будет индексировать все языки подряд, создавая путаницу.

4. Как автоматизировать перевод (не сидеть и не кликать)

Переводить 1000 страниц вручную — это 200+ часов. Используйте модуль TMGMT (Translation Management Tool). Он подключает профессиональных переводчиков или Google Translate (через плагин). Настройка: установите TMGMT, добавьте провайдера (например, Google Translation API), настройте очереди перевода. Для карточек товаров можно вообще настроить автоперевод через cron — каждую ночь новые ноды будут переводиться автоматически.

Бюджет: Google Translation API стоит около $20 за 1 миллион символов. Для сайта на 1000 страниц (по 500 символов каждая) — около $10. Если нужен качественный перевод — наймите подрядчика на TMGMT (там есть встроенный интерфейс для заказа).

5. Типичные ошибки и как их не допустить

Ошибка 1: переводите только контент, но не интерфейс. Посетитель видит русский текст, но кнопки «Добавить в корзину» — на английском. Выход: используйте .po файлы для интерфейса (скачайте готовые с l10n.drupal.org). Для кастомных модулей — переводите строки через t() в коде и импортируйте .po через Translate interface.

Ошибка 2: не настроили переключатель языка для таксономии. Если у вас категории товаров (рубрики) не переводятся — при переключении языка пользователь видит пустую страницу. Выход: в настройках таксономии включите перевод для каждого словаря. Проверьте, что URL-алиасы (синонимы) тоже переведены: /ru/category/odezhda и /en/category/clothes.

Ошибка 3: забыли про перевод views. Если вы выводите список новостей через Views — убедитесь, что сам View (настройки, заголовки) переведён. В админке Views есть вкладка «Translation» — там можно указать заголовки для каждого языка.

Ошибка 4: пытаетесь перевести уже запущенный сайт без тестовой копии. 90% багов проявляются после включения языковых модулей на живой базе — дубли нод, потеря связей. Всегда делайте копию базы (дамп через Drush: drush sql-dump --result-file=backup.sql) и тестируйте на локальной или стейджинг-среде.

Добавлено: 23.04.2026