Настройка мультиязычности Drupal
Drupal — один из лучших CMS для мультиязычных сайтов. Поддержка переводов встроена в ядро: переводится контент, конфигурация, интерфейс администрирования, меню, блоки, таксономические термины.
Необходимые модули (все в ядре)
drush en language locale content_translation config_translation -y
drush cr
- language — базовый модуль языков
- locale — перевод интерфейса
- content_translation — перевод контента (нод, таксономий, блоков)
- config_translation — перевод конфигурации (лейблы полей, типы контента)
Добавление языков
Конфигурация → Языки → Добавить язык. Drupal автоматически скачивает переводы интерфейса с drupal.org.
Настройка URL-паттерна: Конфигурация → Языки → Detection and selection:
- URL prefix:
ru/,en/— рекомендуется - Domain:
ru.site.com,site.com— для крупных мультиязычных сайтов
Включение перевода для типа контента
Конфигурация → Content language → выбрать тип контента → включить перевод каждого поля отдельно.
Или программно:
// Включить Content Translation для всех полей типа 'article'
$config = \Drupal::configFactory()->getEditable('language.content_settings.node.article');
$config->set('third_party_settings.content_translation.enabled', TRUE)->save();
Создание перевода через API
use Drupal\node\Entity\Node;
// Загрузить оригинальную ноду (английский)
$node = Node::load(42);
// Добавить перевод
if (!$node->hasTranslation('ru')) {
$translated = $node->addTranslation('ru', [
'title' => 'Заголовок на русском',
'body' => ['value' => '<p>Текст на русском</p>', 'format' => 'full_html'],
'status' => 1,
]);
$translated->save();
}
Twig: отображение с учётом языка
{# Получить URL текущего языка #}
{% set current_lang = language.getId() %}
{# Ссылки переключения языков (используйте Views Language Switcher вместо этого) #}
{% for language in languages %}
<a href="{{ path('<current>', {}, {'language': language}) }}"
hreflang="{{ language.getId() }}"
{% if language.getId() == current_lang %}class="active"{% endif %}>
{{ language.getName() }}
</a>
{% endfor %}
Перевод конфигурации
Лейблы полей, описания типов контента, текст кнопок — переводятся через Конфигурация → Переводы. Или через экспорт:
drush config:export
# Отредактировать locale/*.po файлы
drush locale:import ru /path/to/ru.po
Меню и блоки
Каждый пункт меню переводится отдельно через Структура → Меню → [меню] → Edit → Translate. Блоки: Структура → Размещение блоков → [блок] → Translate.
URL-алиасы для переводов
Pathauto создаёт алиасы для каждого перевода отдельно: /about (en), /ru/о-нас (ru). Настройка: Конфигурация → Pathauto → шаблоны включают [node:language].
hreflang для SEO
Drupal автоматически добавляет <link rel="alternate" hreflang="..."> для всех переводов через модуль Metatag:
composer require drupal/metatag
drush en metatag -y
Сроки
Базовая настройка мультиязычности для 2–3 языков с переводом типов контента и интерфейса — 2–3 дня. Полная мультиязычная конфигурация с URL-паттернами, hreflang и меню — 4–5 дней.







