Купить этот сайт

Настройка мультиязычности в drupal 7

03 Jun, 2014

Добавление языка

Для начала надо добавить поддержку языка, в данном примере я добавлю русский и сделаю его основным. Включаем модуль "Local"
(входит в ядро друпала), идем в «Configuration > Regional and Language > Languages».
add language
Здесь нажимаем «add language», выбираем из списка нужный. Затем я сделал русский основным языком, поставив галку в таблице «Default».
Set russian language default

В моем случае выбор языка будет зависить от префикса пути, т. е. английский будет по адресу «site.com/en/mypage», а русский по адресу «site.com/mypage». Чтобы в блоке переключения языков ссылка на русскую версию была вида «site.com/mypage» вместо «site.com/ru/mypage», настроим префикс языка. Здесь же нажимаем ссылку «edit» напротив русского, и просто очищаем поле «Path prefix language code».
Set language prefix

Теперь переходим на вкладку «Detection and selection». Здесь можно настроить способ, как будет определяться нужный язык. Я пока включил «ULR», т.е. язык определятся по поддомену или префиксу.
Detectin and selection

Перевод интерфейса

Скачиваем файл перевода нужного языка по адресу «https://localize.drupal.org/», затем идем на страницу «admin/config/regional/translate/import», и импортируем перевод из этого файла в нужный язык.
Добавление перевода на русский

Блок с ссылками для переключения языка

После того, как включено более одного языка, нужно включить блок для переключения языков. Идем в «Структура > Блоки», находим блок «Language switcher» и помещаем его в нужный регион. Он работает, но выглядит не очень интересно, просто ссылки на переключение языков. Если хочется флажков, то можно это сделать либо через css (ссылки обладают соответствующими классами, так что проблем нет), либо с помощью модуля Language Icons, в нем флажки присутствуют «из каробки».
Language Icons block

Перевод материалов (Нод)

Для мультиязычности контента я рекомендую использовать модули Entity Translation и Title, дальше их я и буду использовать. Еще можно переводить контент модулем Internationalization, но он на каждый перевод создает отдельную ноду, чем мне и не нравится. В остальном же он вполне рабочий, и с его помощью в дальнейшем я буду переводить меню, блоки и т.д.

Итак, устанавливаем модули Entity Translation и Title, затем надо выбрать, какие сущности можно будет переводить, это делается на странице «admin/config/regional/entity_translation». Я здесь выбрал ноды и термины таксономии.
Entity translation settings

Теперь идем в «Структура > Тип материалов > %ваш_тип», на вкладке «Настройка публикации» включаем опцию «Enabled, with field translation».
Content type settings

Потом на вкладке «Управление полями» напротив «title» нажимаем «replace», это сделает Title обычным полем, и его можно будет переводить (для этого и нужен был модуль Title).
Title replace

Также заходим в настройки полей, которые хотим сделать переводимыми, и ставим внизу галку «Users may translate all occurrences of this field». Обычно это надо сделать для поля «Body» и других полей с текстовым содержимым.
Field settings
Делаем так с каждым типом контента, который будем переводить.

После проделанных действий при создании ноды будет доступен выпадающий список с выбором языка для ноды. После сохранения ноды появится вкладка «Translate», в которой можно добавить перевод ноды и посмотреть уже существующие.
Node add translate
Если при создании ноды выбран нейтральный язык, то вкладка перевода не будет доступна, и нода будет показыватся в одном варианте при любом выбранном языке.

Перевод терминов таксономии

Идем в «Структура > Таксономия > %словарь > Управление полями», нажимаем «replace» напротив полей названия и описания словаря. Это позволит сделать их переводимыми. Здесь принцип тот же, что и с нодами: добавляем термин, затем на вкладке «Translate» делаем его перевод.

Для перевода меню понадобится модуль Internationalization (а точнее его подмодуль Menu translation) и Variable. Устанавливаем и включаем необходимые модули, потом идем в настройки каждого меню, которое хотим переводить и включаем опцию « Translate and Localize»
Menu settings

После этого можно сделать перевод каждого меню. У исходного пункта ставим нейтральный язык, сохраняем.
menu item settings
Затем в списке пунктов меню нажимает ссылку «Translate», чтобы добавить перевод этого пункта.
menu item add translate

Есть еще вариант перевода меню, когда у исходного пункта ставите определенный язык вместо нейтрального, затем добавляете к нему перевод. При этом пункты меню в списке дублируются, что с одной стороны не очень удобно, с другой — можно создавать раздельные варианты меню для разных языков. Тут уже надо исходить из конкретной ситуации.
Menu items translated

Перевод меток полей (fields labels)

Для перевода меток полей надо включить модуль «Field translation» из пакета «Internationalization». Теперь в настройках поля появляется вкладка «Translate», где можно добавить перевод метки.
Field label translation

Перевод метки поля комментария (comment)

С помощью модуля «Field translation» можно перевести и метку поля комментария. Идем в настройки типа контента, нажимаем на вкладку «Comment fields».
Comment field settings
Затем жмем «edit» напротив поля «comment» (или «комментарий»), здесь уже будет вкладка «Translate», где можно добавить перевод этого поля.
Comment label translate

Перевод блоков

Включаем модуль «Block languages» из уже упомянутого пакета «Internationalization», после чего в настройках каждого блока появляется вкладка «Languages». Здесь во-первых ставим чекбокс «Make this block translatable», сохраняем.
Block settings
Потом опять идет в настройки блока, и здесь уже видим, что появилась вкладка «Translate», нам туда :)
block translate list
На странице перевода вас может ждать сюрприз: если поле названия блока переводится без проблем, то для текстового содержимого возможно будет сообщение «Strings with this format are not allowed for translation.», а само поле заблокировано для ввода.
not allowed for translation
Чтобы исправить это недоразумение, идем на страницу «admin/config/regional/i18n/strings», и отмечаем нужные текстовые форматы.
Translatable text formats
Теперь контент в блоке переводится без проблем.

Язык интерфейса админки

При включенной мультиязычности друпала есть особенность — когда, к примеру, вы редактируете ноду на английском языке, весь интерфейс становится английским, а когда ноду на русском — интерфейс русский. Это определенно сбивает с толку, таже если вы свободно владеете обоими языками.

Для решения проблемы можно использовать модуль Administration Language, который позволяет уставить определенный язык для админки, и он больше не будет скакать туда-сюда.

Еще вариант, без использования дополнительных модулей: на странице «admin/config/regional/language/configure» в разделе «User interface text language detection» включить и установить на самый верх опцию «Follow the user's language preference».
Detection and selection
После чего идем в настройки своей учетной записи и устанавливаем себе язык по умолчанию. Теперь админка на нужном языке назависимо от языка редактируемой ноды.

Теги: 

2 комментария

by moxa on чт, 02/10/2014 - 18:26

Если Вы заинтересованы в локализации Drupal ПО, я рекомендую Вам использовать этот инструмент на базе web: https://poeditor.com/

by DreamR1der on чт, 02/10/2014 - 22:33

Не вижу смысла использовать онлайн-редактор для этих целей, тем более требующий регистрацию. Сейчас полно нативных редакторов под любую ось.

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.