Запуск веб-сайта на нескольких языках — это в меньшей степени вопрос перевода и в большей степени вопрос управления: необходимо решать, какой контент переводить, поддерживать синхронность всех версий, показывать каждому посетителю правильную языковую версию и делать всё это так, чтобы редактирование контента не превращалось в рутинную работу. Drupal реализует эти возможности на уровне ядра, что является одной из причин, по которым его выбирают государственные учреждения, международные организации и университеты, публикующие контент на десятках языков.
В этом руководстве подробно рассматривается, как на самом деле работает управление многоязычным контентом в Drupal: четыре основных модуля ядра, три различных типа перевода, добавление и управление языками, механизм, с помощью которого Drupal определяет, какую языковую версию показывать, какой рабочий процесс перевода подходит той или иной команде, а также ошибки, которые чаще всего приводят к проблемам при создании многоязычного сайта.
Почему многоязычность является частью ядра Drupal
Многоязычность — это не плагин, который устанавливается в Drupal дополнительно: она является частью ядра начиная с Drupal 8, а Drupal 9, 10 и 11 продолжили развивать эту функциональность. Это важное отличие. На платформах, где многоязычность реализуется с помощью стороннего расширения, каждое крупное обновление несёт риск того, что слой переводов и сама платформа перестанут работать согласованно. В Drupal языковой слой поставляется и поддерживается вместе с ядром, а система изначально поддерживает более 100 языков.
На практике это означает, что Drupal-сайт можно с самого первого дня планировать как многоязычный, а не адаптировать под многоязычность уже после его создания. Во время установки предлагается выбрать основной язык, и если выбрать язык, отличный от английского, Drupal автоматически включает соответствующие модули и загружает последние переводы интерфейса. На уже существующем сайте для активации этой функциональности достаточно включить несколько модулей — не нужно переходить на другой набор инструментов.
Четыре основных модуля для многоязычности
Многоязычная система Drupal основана на четырёх основных модулях. Только первый из них является строго обязательным, однако на практике большинство сайтов включают все четыре. Их можно активировать в разделе Extend (admin/modules), в секции Multilingual.
- Язык: основа всей системы. Он определяет, какие языки доступны на сайте, устанавливает язык по умолчанию и управляет тем, как Drupal определяет, какую языковую версию отображать. Без него остальные компоненты многоязычной системы работать не будут.
- Перевод контента: позволяет редакторам переводить сущности контента — страницы, статьи, термины таксономии, пользовательские блоки, ссылки меню и многое другое — на каждый из доступных языков. Каждая языковая версия представляет собой отдельную сущность со своими полями, URL и статусом публикации.
- Перевод интерфейса: переводит встроенный текст Drupal, модулей и тем: кнопки, подписи полей форм, сообщения об ошибках и системные строки. Поскольку ядро Drupal уже поставляется с переводами более чем на 100 языков, значительная часть этого текста заполняется автоматически сразу после добавления нового языка. (В старых версиях этот модуль назывался Locale, поэтому в некоторых устаревших руководствах используется именно это название.)
- Перевод конфигурации: переводит конфигурацию, а не контент — название сайта, подписи полей, представления (Views), меню, заголовки блоков и словари. Без этого модуля структура сайта остаётся на одном языке даже тогда, когда весь контент полностью переведён, что незаметно ухудшает пользовательский опыт.
Удобный способ различать эти компоненты: контент — это то, что создают ваши редакторы; конфигурация — то, как устроен сайт; а интерфейс — текст, который предоставляют Drupal и его модули. Для того чтобы сайт действительно воспринимался локализованным, а не наполовину переведённым, необходимо переводить все три составляющие.
Три вида перевода: контент, интерфейс и конфигурация
Самый распространённый источник путаницы в многоязычных проектах Drupal связан не с техническими настройками, а с непониманием того, к какой из трёх систем перевода относится тот или иной фрагмент текста. Правильное понимание этой структуры поможет избежать многочасовых поисков нужной настройки перевода не в том разделе.
- Перевод контента охватывает всё, что создают редакторы: содержимое материалов, заголовки, изображения, термины таксономии, пользовательские блоки и т. д. В современных версиях Drupal перевод настраивается на уровне отдельных полей: вы выбираете, какие поля определённого типа контента должны быть переводимыми. Благодаря этому общее поле (например, код товара) может оставаться одинаковым во всех языковых версиях, в то время как описание будет переводиться.
- Перевод интерфейса охватывает текст, встроенный непосредственно в программное обеспечение. Обычно его не нужно переводить вручную: он загружается вместе с языковым пакетом. При необходимости отдельные строки можно изменить в разделе Конфигурация → Региональные настройки и язык → Перевод пользовательского интерфейса, если вы хотите переопределить конкретную строку.
- Перевод конфигурации охватывает структурный текст, хранящийся в системе конфигурации Drupal. Его можно переводить через вкладку Перевод на соответствующей странице конфигурации или массово через раздел Конфигурация → Региональные настройки и язык → Перевод конфигурации.
Есть одна важная практическая деталь, которую стоит учитывать заранее: переводы интерфейса можно экспортировать и импортировать в виде стандартных файлов .po, однако переводы конфигурации нельзя перенести таким способом, используя только ядро Drupal — для этого потребуется дополнительный сторонний модуль. Если переводы подготавливаются за пределами Drupal, это различие необходимо учитывать при их передаче в систему.
Пошаговое добавление и управление языками
После включения четырёх основных модулей добавить новый язык довольно просто. Общая последовательность действий одинакова во всех современных версиях Drupal:
- Добавьте язык: перейдите в Конфигурация → Региональные настройки и язык → Языки (
admin/config/regional/language) и нажмите Добавить язык. Выберите нужный язык, нажмите Добавить и дождитесь, пока Drupal загрузит переводы интерфейса. После этого язык появится в списке языков и будет готов к использованию. - Определите, что должно переводиться: для каждого типа контента включите возможность перевода и выберите, какие поля должны переводиться, а какие должны оставаться общими для всех языковых версий. Подходите к этому решению осознанно: правильная настройка нужных полей на начальном этапе поможет избежать трудоёмких изменений в дальнейшем.
- Переводите контент: откройте любую сущность, для которой доступен перевод, и перейдите на вкладку Переводы, чтобы добавить её версию на каждом нужном языке. Каждая языковая версия имеет собственный URL и может публиковаться по отдельному графику.
- Переводите конфигурацию и интерфейс: локализуйте название сайта, меню и представления через Перевод конфигурации, а при необходимости переопределяйте отдельные системные строки через Перевод пользовательского интерфейса.
- Добавьте переключатель языка: разместите блок Переключатель языка, чтобы посетители могли переходить между языковыми версиями. Используйте название языка, а не флаг: флаг обозначает страну, а не язык, поэтому его использование может вводить пользователей в заблуждение, особенно в случае языков, распространённых в нескольких странах.
Практический совет, который часто дают опытные команды Drupal: начните с основного языка и одного дополнительного, полностью настройте процесс перевода от начала до конца и только после этого добавляйте другие языки. Проверить весь процесс на двух языках гораздо дешевле, чем обнаружить структурную проблему после добавления шести языков.
Определение языка: как Drupal решает, какую языковую версию показывать
Определение языка — это ключевая функция, которая определяет, какую языковую версию увидит посетитель. Правильная настройка этого механизма имеет большое значение для управления многоязычным сайтом. Drupal может определять предпочтительный язык по нескольким сигналам, применяемым в заданном вами порядке: по URL (например, по префиксу пути /ru или домену), предпочтениям пользователя в его учётной записи, языковым настройкам браузера, сессии или фиксированному языку по умолчанию.
Для большинства сайтов оптимальным основным методом является определение языка по URL: каждая языковая версия получает отдельный адрес, которым можно поделиться и который поисковые системы могут индексировать, а поведение сайта становится более предсказуемым. Механизм определения языка также можно настроить отдельно для контента и административного интерфейса. Благодаря этому многие команды могут сделать публичную часть сайта полностью локализованной, оставив административную панель на одном рабочем языке для редакторов. Порядок этих методов определения языка имеет значение: более конкретный и явно выбранный сигнал (URL) следует разместить выше менее определённых сигналов (например, языка браузера), чтобы осознанный выбор пользователя всегда имел приоритет.
Выбор рабочего процесса перевода
Встроенного интерфейса перевода Drupal достаточно для небольшого сайта, однако по мере роста объёма контента и команды именно рабочий процесс начинает определять, насколько актуальным будет оставаться многоязычный сайт. Существует три основных подхода, и выбор подходящего зависит от масштаба проекта и способа организации переводов.
- Ручной перевод непосредственно в Drupal: редакторы и переводчики входят в систему и выполняют перевод через встроенный интерфейс. Этот вариант идеально подходит для небольших сайтов — например, сайта из 20–30 страниц на двух языках, — где объём контента невелик и все работают непосредственно в Drupal.
- Экспорт и импорт с помощью файлов перевода: контент экспортируется (чаще всего в формате XLIFF), отправляется переводчикам, а после перевода импортируется обратно. Такой подход подходит командам, которые работают с внешними лингвистами, не использующими Drupal, а также для контента, который обновляется предсказуемыми пакетами.
- TMGMT (Translation Management Tool): дополнительный модуль, который превращает перевод в управляемый процесс непосредственно внутри Drupal: позволяет создавать задания на перевод, назначать их внутренней команде или внешним поставщикам услуг, отслеживать статус выполнения и интегрироваться с различными сервисами и системами машинного перевода. Это стандартный выбор для средних и крупных сайтов с большим объёмом контента.
Есть два дополнения, которые делают эти рабочие процессы более надёжными. Content Moderation позволяет определить, как перевод проходит путь от черновика через проверку до публикации, благодаря чему машинный перевод или незавершённая версия не окажется опубликованной случайно. Translation Views или панели управления переводами позволяют отслеживать состояние переводов по всему сайту: что уже переведено, что находится в процессе работы и что ещё не переведено. Для большинства средних и крупных проектов оптимальным вариантом является сочетание TMGMT и проверки человеком: автоматизация обеспечивает скорость, а человек — качество на наиболее важных страницах.
Распространённые ошибки при работе с многоязычностью и способы их избежать
Большинство проблем с многоязычностью в Drupal связано не с ограничениями платформы, а с несколькими решениями, которых можно было легко избежать:
- Слишком позднее определение переводимости полей: изменение настроек переводимости полей после того, как переводы уже созданы, может привести к потере данных. До начала масштабного перевода заранее определите, какие поля должны переводиться, а какие должны оставаться общими для всех языковых версий.
- Перевод контента без перевода конфигурации: сайт, на котором статьи полностью переведены, но меню, название сайта или представления остаются на другом языке, воспринимается как незавершённый. Рассматривайте перевод конфигурации как обязательную часть работы, а не как задачу, которую можно выполнить позже.
- Публикация необработанного машинного перевода: автоматический перевод может быть хорошей отправной точкой, но не конечным результатом. Непроверенный текст может выглядеть неестественно и снижать доверие пользователей. Для важного контента обязательно предусмотрите проверку человеком.
- Использование флагов для обозначения языков: флаг является символом страны, а не языка. Используйте названия языков в переключателе, чтобы не вводить в заблуждение носителей языков, распространённых в нескольких странах.
- Отсутствие резервного варианта для непереведённых страниц: заранее определите, что должно происходить, если для страницы отсутствует перевод: показывать версию на языке по умолчанию или скрывать страницу. Не оставляйте посетителей на пустой или некорректно работающей странице.
- Неосторожное изменение виджетов перевода: при работе со структурированным контентом, например с Paragraphs, переход на асимметричный режим перевода после того, как переводы уже существуют, может привести к потере данных. Перед внесением структурных изменений сначала протестируйте их на копии сайта.
Грамотно организованное управление многоязычностью в основном требует дисциплины: один раз правильно спроектировать структуру контента, переводить все три уровня и обеспечить для каждого языка предсказуемый URL и понятный рабочий процесс. Правильная реализация SEO для многоязычного сайта — hreflang, структура URL и ключевые слова для каждого рынка — является отдельной, но связанной задачей. Подробнее об этом мы рассказываем в нашем руководстве по многоязычному SEO в Drupal, которое непосредственно основывается на том же языковом слое, описанном в нашем руководстве по SEO для Drupal.
Часто задаваемые вопросы об управлении многоязычностью в Drupal
Нужен ли дополнительный модуль или достаточно возможностей ядра?
Для большинства сайтов четырёх основных модулей Drupal достаточно для добавления языков и перевода контента, интерфейса и конфигурации. Дополнительные модули становятся необходимы по мере роста требований: TMGMT — для управления рабочими процессами перевода и интеграции с поставщиками переводческих услуг или системами машинного перевода; расширения переключателя языка — для создания более удобного селектора языков; модуля импорта/экспорта переводов конфигурации — когда переводы подготавливаются за пределами Drupal. Начните с возможностей ядра и добавляйте дополнительные инструменты только тогда, когда возникает реальная необходимость.
Использовать один многоязычный сайт или конфигурацию multisite?
Для большинства организаций лучшим выбором будет одна установка Drupal с языковыми версиями (например, /en и /ru): единая кодовая база, общие структуры контента и централизованные обновления. Конфигурация multisite имеет смысл главным образом тогда, когда каждому рынку действительно требуется отдельное управление — разные команды, разный контент и разные правила управления. Модель единого сайта упрощает администрирование и объединяет авторитет домена, поэтому именно её обычно рекомендуют для большинства многоязычных проектов.
Можно ли изменить настройки переводимости полей после запуска сайта?
Да, можно, но после создания переводов это сопряжено с определённым риском — изменение настройки переводимости поля может привести к потере данных. Безопаснее всего определить, какие поля должны переводиться, а какие должны оставаться общими, ещё на этапе проектирования структуры контента, до начала масштабного перевода. Если позднее изменение всё же необходимо, сначала протестируйте его на копии сайта в тестовой среде и создайте резервную копию, чтобы убедиться, что существующие переводы не будут затронуты, прежде чем применять изменения на рабочем сайте.