Мультиязычность в Drupal 7

в 14:33, , рубрики: drupal, мультиязычность, Песочница, метки: ,

В этой статье я расскажу вам как за четверть часа сделать ваш сайт мультиязычным.
Итак, что бы сделать контент мультиязычным в Drupal 7 у нас есть два способа:
1) Модуль Internationalization и его подмодули
2) Модуль Entity Translation + модуль Title
Их мы сейчас и рассмотрим.

Подготовка

Перед тем как что-то делать нужно добавить на сайт дополнительный язык. Сделать это можно на страничке “admin/config/regional/language/add”.
Мультиязычность в Drupal 7

И включить его на странице: “admin/config/regional/language”
Мультиязычность в Drupal 7

Так же нужно выбрать способ определения языка, я предпочитаю брать его из URL. В настройках можно указать из какой части URL брать язык (префикс или поддомен), по умолчанию стоит префикс.
“admin/config/regional/language/configure”
Мультиязычность в Drupal 7

Первый способ

Модуль Internationalization появился еще в D6, с его помощью можно переводить различные типы контента. Мы рассмотрим его на примере перевода нод, т.к. они составляют большую часть всего контента.

Установка модуля

Для установки и включения модуля воспользуемся удобным инструментом — drush.
drush dl i18n
drush en -y i18n
Поскольку мы собираемся переводить ноды, необходимо включить подмодуль.
drush en -y i18n_node
Модуль включен и готов к работе.

Настройки Content type

Заходим в настройки публикации СТ и выбираем пункт “Enabled, with translation”.
Мультиязычность в Drupal 7

В настройках мультиязычности выбираем подходящие вам параметры.
Мультиязычность в Drupal 7

Как видим, в списке полей появилось новое поле связанное с выбором языка.
Мультиязычность в Drupal 7

Создание и перевод ноды

Заполняем поля, выбираем нужный язык и сохраняем.
Мультиязычность в Drupal 7

Теперь на странице редактирования ноды появилась новая вкладка Translate.
Мультиязычность в Drupal 7

На странице перевода нам предлагают выбор, добавить новый перевод(1) или задать другую существующую ноду в качестве перевода(2). Т.к. готового перевода у нас нет, мы его будем добавлять.
Мультиязычность в Drupal 7

Открываются форма создания ноды, только язык в ней уже задан и поле отключено.
Мультиязычность в Drupal 7

Итог

Мы имеем 2 ноды, которые имеют разный язык. У ноды с переводом есть ссылка на оригинал.
Мультиязычность в Drupal 7
Думаю, что данный способ не самый лучший, так как происходит дублирование контента.
Поэтому мы рассмотрим второй способ, который позволяет избежать этого.

Второй способ

Установка модулей

drush dl title entity_translation
drush en -y title entity_translation

Настройка модуля

На странице “admin/config/regional/entity_translation” можно выбрать какие типы entity будут переводиться.
Мультиязычность в Drupal 7

Настройка Content type

Заходим в настройки публикации СТ и выбираем пункт “Enabled, with field translation”.
Мультиязычность в Drupal 7

Далее в списке полей нужно заменить Title на обычное поле(это позволяет модуль Title), чтобы его можно было переводить.
Мультиязычность в Drupal 7

Теперь нужно выбрать поля, которые можно будет перевести (Title выбран по умолчанию)
На странице “admin/structure/types/manage/%CT_name%/fields/%field_name%” необходимо включить Field translation.
Мультиязычность в Drupal 7

Создание и перевод ноды

Создание ноды ничем не отличается от создания в первом способе, просто заполняем поля и выбираем язык. Если оставить “Language neutral”, то перевод не будет доступен.
На странице редактировании только что созданной ноды появляется вкладка Translate.
Там можно посмотреть на какие языки нода уже переведена и перевести на остальные доступные.
Мультиязычность в Drupal 7

Заполняем доступные для перевода поля, также на странице есть настройка для публикации перевода и можно указать альтернативный URL.
Мультиязычность в Drupal 7

Итог

В итоге мы имеем одну ноду с двумя вариантами перевода.
Английский:
Мультиязычность в Drupal 7

Немецкий:
Мультиязычность в Drupal 7

Автор: dkiselev

  1. Андрей:

    Спасибо за материал! Такой вопрос. А как с синонимами для второго языка. Они должны работать или только технический адреса типа en/node/1. И как их настроить, чтобы корректно отображались

  2. B.X:

    Спасибо за подробную заметку. Очень-очень полезный модуль Entity translations для тех, кто не хочет (или не может) плодить сущностей…

    Я представляю, например, каталог магазина, где мало того, что атрибуты товаров надо заполнять как отдельный товар (то есть пара-тройка футболок других цветов и вам уже понадобится в три-четыре раз больше нод), так ещё и переводы сделали как отдельные ноды (пара-тройка языков и сайт превращается в месиво с кучей нод, которое неудобно админить)…

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js