суббота, 8 сентября 2012 г.

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


В этой статье я расскажу вам как за четверть часа сделать ваш сайт мультиязычным.
Итак , что бы сделать контент мультиязычным в 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.


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

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



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




Итог

В итоге мы имеем одну ноду с двумя вариантами перевода.
Английский:


Немецкий:

8 комментариев:

  1. Спасибо за статью! Очень полезно
    Я слышал entity translation будет в ядре Drupal 8

    ОтветитьУдалить
  2. Интересная статья. А как обстоят дела в Drupal с переводом меню, таксономии, всеми другими сущностями, можно ли это реализовать с помощью entity translation?

    ОтветитьУдалить
    Ответы
    1. Таксономию, как и большинство сущностей в друпале можно переводить с помощью модуля entity translation.
      По поводу переводом меню, есть продолжение статьи в которой это рассказывается - http://habrahabr.ru/post/150677/

      Удалить
  3. Отличная статья

    ОтветитьУдалить
  4. На последней картинка язык сайта на английском, а статья на немецком. Статьи автоматом отображаются на выбранном языке сайта или просто имеют перевод при клике?

    ОтветитьУдалить
    Ответы
    1. Если статья имеет перевод на текущий язык сайта (немецкий), то она будет автоматически отображена в нужном переводе.

      Удалить
  5. Этот комментарий был удален автором.

    ОтветитьУдалить
  6. Добрый день! Если Вы заинтересованы в локализации web-ПО, ПО для персональных компьютеров, ПО для мобильных устройств либо иного вида программного обеспечения, я рекомендую Вам использовать этот инструмент на базе web: https://poeditor.com/

    ОтветитьУдалить