Чтобы сделать сайт более дружественным к пользователям иногда возникает задача добавления на сайт нескольких языков, на которых будет представлен контент. Можно конечно создавать статьи просто с разным содержимым, но как быть с остальными частями сайта как меню, блоки и т.д.? В этом нам поможет всего несколько модулей, которые полностью переведут весь сайт на любой нужный язык.
Модули, которые нам понадобятся:
- Internationalization - набор модулей для расширения возможностей мультиязычности.
- Variable - модуль для редактирования переменных реестра Drupal. Нужен если вам необходимо перевести на другой язык системные переменные.
Первое что необходимо сделать - это активировать модуль ядра Drupal под названием Locale. После чего по адресуadmin/config/regional/language необходимо добавить нужный нам язык, помимо Английского, который установлен по умолчанию. В моем случае это будет русский язык. Далее нужно выбрать язык, который будет установлен для сайта по умолчанию. Я выбрал русский язык и установил соответствующие переводы для Drupal. Установить переводы можно вручную, скачав с сайта drupal.org или drupaler.ru. Так же переводы можно установить при помощи полезного модуля Localization update, который в дальнейшем очень пригодится для установки или обновления переводов.
После проделанного нужно установить и активировать модули Internationalization и Variable(не обязательно).
Список модулей, которые необходимо активировать:
- Internationalization
- Field translation – перевод полей.
- Menu translation – перевод меню.
- Block languages – перевод блоков.
- Multilingual content – расширение базовых возможностей перевода контента.
- Taxonomy translation – перевод таксономии.
- String translation - перевод определенных пользователем строк. Необходим для вышеперечисленных модулей.
- Variable translation(не обязательно) – перевод системных переменных.
- Variable(не обязательно) – модуль для доступа к системным переменным.
- Variable admin(не обязательно) – UI для редактирования переменных.
Поле установки и активации модулей необходимо перейти по адресу admin/structure/types и для типов контента, для которых нужен перевод, включить поддержку мультиязычности. Сначала включаем в разделе Настройки публикации, выбрав вариант Включить и разрешить перевод, а потом после сохранения в разделе Мультиязычные настройки включаем опцию Требовать язык, что бы на сайте не оказалось контента нейтрального по отношению к языку.
Создадим ноду типа Basic page на русском языке, поместив ссылку на нее в меню. Вот так выглядит наша добавленная страница:
Далее нам необходимо добавить перевод страницы, нажав на кнопку Перевод в списке локальных задач. Аналогично заполняем данным, только на английском языке и добавляем ссылку в меню.
Теперь предстоит самый важный момент, нам необходимо выбрать параметр, по которому будет определяться язык для всего сайта. Для этого переходим по адресу admin/config/regional/language/configure и видим форму параметров определения языка сайта.
Собственно из описания методов все понятно. Методы определения будут срабатывать в зависимости от веса и последовательности, в которой они расположены. Остановимся на методе определения языка по URL. Поставим галочку и активируем его, а также переходим в настройки.
Префикс пути – код языка сайта будет располагаться сразу после базового URL. Например: http://multi.local/en/node/1, http://multi.local/ua/node/1, http://multi.local/ru/node/1.
Домен - код языка сайта будет располагаться в виде поддомена. Например: http://en.multi.local/node/1, http://ua.multi.local/node/1, http://ru.multi.localnode/1.
Сначала остановимся на варианте с префиксом пути. Чтобы при использовании сайта на русском языке в адресе не было ru, перейдем admin/config/regional/language/edit/ru и оставим пустым поле Префикс языка. Так же советую включить блок для смены языка.
Вот так выглядит страница на русском http://multilan.local/page:
Вот так на английском http://multilan.local/en/page:
Теперь пойдем другим путем, и выберем определение языка по Домену.
По адресу admin/config/regional/language настроим языки следующим образом.
Русский:
Английский:
Теперь русская версия доступна по обычному адресу http://multilan.local, а английская по адресу http://en.multilan.local.
После этого можно пользоваться сайтом на нескольких языка. Если по каким-то причинам страница с поддоменом en недоступна, то необходимо проверить настройки сервера и работу директивы htaccess.
Еще один важный момент мультиязычности при использовании доменов - это авторизация на разных версиях сайта. Для того что бы авторизация сохранялась везде, необходимо в файле конфигурации settings.php установить параметр $cookie_domain = '. multilan.local; вот с таким значением.
Это лишь малая часть функциональности набора этих модулей. Благодаря модулю Variable мы можем переводить все доступные переменные, установленные в Drupal при помощи set_variable. Например, слоган сайта для английской и русской версий сайта, название и многое другое. Так же можно переводить меню, блоки, словари, термины таксономии и т.д.
В итоге мы получили полноценный мультиязычный сайт с возможностью перевода всех его составных частей, с помощью всего нескольких модулей.