В этой статье я расскажу вам как за четверть часа сделать ваш сайт мультиязычным.
Итак, что бы сделать контент мультиязычным в Drupal 7 у нас есть два способа:
1) Модуль Internationalization и его подмодули
2) Модуль Entity Translation + модуль Title
Их мы сейчас и рассмотрим.
Подготовка
Перед тем как что-то делать нужно добавить на сайт дополнительный язык. Сделать это можно на страничке “admin/config/regional/language/add”.
И включить его на странице: “admin/config/regional/language”
Так же нужно выбрать способ определения языка, я предпочитаю брать его из URL. В настройках можно указать из какой части URL брать язык (префикс или поддомен), по умолчанию стоит префикс.
“admin/config/regional/language/configure”
Первый способ
Модуль Internationalization появился еще в D6, с его помощью можно переводить различные типы контента. Мы рассмотрим его на примере перевода нод, т.к. они составляют большую часть всего контента.
Установка модуля
Для установки и включения модуля воспользуемся удобным инструментом — drush.
drush dl i18n
drush en -y i18n
Поскольку мы собираемся переводить ноды, необходимо включить подмодуль.
drush en -y i18n_node
Модуль включен и готов к работе.
Настройки Content type
Заходим в настройки публикации СТ и выбираем пункт “Enabled, with translation”.
В настройках мультиязычности выбираем подходящие вам параметры.
Как видим, в списке полей появилось новое поле связанное с выбором языка.
Создание и перевод ноды
Заполняем поля, выбираем нужный язык и сохраняем.
Теперь на странице редактирования ноды появилась новая вкладка Translate.
На странице перевода нам предлагают выбор, добавить новый перевод(1) или задать другую существующую ноду в качестве перевода(2). Т.к. готового перевода у нас нет, мы его будем добавлять.
Открываются форма создания ноды, только язык в ней уже задан и поле отключено.
Итог
Мы имеем 2 ноды, которые имеют разный язык. У ноды с переводом есть ссылка на оригинал.
Думаю, что данный способ не самый лучший, так как происходит дублирование контента.
Поэтому мы рассмотрим второй способ, который позволяет избежать этого.
Второй способ
Установка модулей
drush dl title entity_translation
drush en -y title entity_translation
Настройка модуля
На странице “admin/config/regional/entity_translation” можно выбрать какие типы entity будут переводиться.
Настройка Content type
Заходим в настройки публикации СТ и выбираем пункт “Enabled, with field translation”.
Далее в списке полей нужно заменить Title на обычное поле(это позволяет модуль Title), чтобы его можно было переводить.
Теперь нужно выбрать поля, которые можно будет перевести (Title выбран по умолчанию)
На странице “admin/structure/types/manage/%CT_name%/fields/%field_name%” необходимо включить Field translation.
Создание и перевод ноды
Создание ноды ничем не отличается от создания в первом способе, просто заполняем поля и выбираем язык. Если оставить “Language neutral”, то перевод не будет доступен.
На странице редактировании только что созданной ноды появляется вкладка Translate.
Там можно посмотреть на какие языки нода уже переведена и перевести на остальные доступные.
Заполняем доступные для перевода поля, также на странице есть настройка для публикации перевода и можно указать альтернативный URL.
Итог
В итоге мы имеем одну ноду с двумя вариантами перевода.
Английский:
Немецкий:
Автор: dkiselev
Спасибо за материал! Такой вопрос. А как с синонимами для второго языка. Они должны работать или только технический адреса типа en/node/1. И как их настроить, чтобы корректно отображались
Спасибо за подробную заметку. Очень-очень полезный модуль Entity translations для тех, кто не хочет (или не может) плодить сущностей…
Я представляю, например, каталог магазина, где мало того, что атрибуты товаров надо заполнять как отдельный товар (то есть пара-тройка футболок других цветов и вам уже понадобится в три-четыре раз больше нод), так ещё и переводы сделали как отдельные ноды (пара-тройка языков и сайт превращается в месиво с кучей нод, которое неудобно админить)…