четверг, 13 октября 2011 г.

Многоязычный сайт на Joomla 1.7


Добрый день, уважаемый читатель!
В этой первой статье из нового раздела Joomla мне бы хотелось рассказать о процессе создания многоязычного сайта с помощью CMS Joomla 1.7. В свое время я искал информацию по этому вопросу на русском языке, но к сожалению не нашел. Поэтому я решил написать данную статью, основой для которой стало англоязычное руководство по созданию многоязычного сайта на CMS Joomla 1.7, которое я немного дополнил своими комментариями.
Итак, начнем.
Для начала, следует отметить то, что если в Joomla 1.5.х многоязычность сайта обеспечивалась главным образом сторонними компонентами (например Joomfish), то начиная с версии 1.6 Joomla предлагает подобную функциональность своими силами. Joomla 1.7.х продолжила развитие данной функции. Одним из главных улучшений встроенного механизма создания многоязычного сайта в версии 1.7.х является «ассоциация меню». На практике это выражается в следующем: если в версии 1.6 при смене языков в браузере пользователя перенаправляло с просматриваемой им страницы текущей языковой версии на домашнюю страницу выбираемой им языковой версии, то в версии 1.7 можно настроить «ассоциации меню» - т. е. установить соответствие статьи одной языковой версии с такой же статьей другой языковой версии. В результате этого, пользователь останется на той же странице, которую просматривал, но только изменится язык содержимого.

Процесс создания многоязычного сайта на Joomla 1.7 состоит из следующих этапов:
    1. Установите требуемые языковые файлы для каждого языка, который вы хотите использовать в своем сайте.

    2. Создайте «языки содержания». Для этого перейдите в меню «Расширения» - «Менеджер языков» («Extensions» - «Language Manager»).  

      В открывшейся странице перейдите на вкладку «Содержание» («Contents») и нажмите кнопку «Новый» («New»). Создайте новый «язык содержания», заполнив данные о нем в окне редактора нового языка. 

      После этого, добавленный Вами «язык содержания» будет доступен во всех соответствующих меню админки Joomla 1.7
    1. Теперь создадим структуру нашего будущего многоязычного сайта. Для этого сначала создадим для каждого языка, который мы хотим использовать, корневую категорию, которую привяжем к этому языку (в окне создания категории из выпадающего списка языков выберите желаемый язык для этой категории вместо указанного там значения «Все» («All»)). При этом в названии категории желательно указать, к какому языку она относится. 

      Если необходимо, создайте дочерние категории для каждой корневой (родительской) категории, при этом язык дочерних категорий должен соответствовать языку родительской категории. В каждой категории создайте необходимое Вам количество статей, следуя правилу «язык статьи равен языку категории». 
    1. Когда структура сайта готова, можно приступать к созданию меню. Как и в случае со статьями\категориями, придется создавать меню для каждого «языка содержания». 

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

      В каждой версии меню (для определенного языка) один из пунктов должен указывать на домашнюю страницу (для этого же языка). 

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


      Как только мы присвоем для каждого меню домашнюю страницу, а админке мы увидим напротив меню соответствующий языку меню флажок. 

      В языковом менеджере на вкладке «содержание» («content») можно увидеть индикатор того, что для определенного «языка содержания» есть соответствующая ему домашняя страница. ВАЖНО: если «язык содержания» не содержит домашнюю страницу (в таблице напротив него стоит значение «Нет» («No»)), он будет недоступен посетителям вашего сайта.

    2. Чтобы отобразить созданные нами меню, необходимо для каждого из них создать и опубликовать свой модуль, опять таки привязанный к языку («язык модуля» должен соответствовать «языку меню», которое он будет отображать). 

      При этом модуль, отображающий меню «по умолчанию» (которое создается автоматически при установке Joomla 1.7) необходимо снять с публикации.

    3. Следующим шагом будет создания «стиля шаблона» для каждого «языка содержания». Это очень удобная вещь, т. к. позволяет отображать свой стиль шаблона в зависимости от языка. (например, логотип сайта может меняться в зависимости от выбранного пользователем языка, модуль может быть доступен в одной языковой версии и недоступен в другой и др.). Для создания стиля шаблона, необходимо скопировать шаблон в окне менеджера шаблонов, 
      дать копии осознанное имя (например, связанное с языком, для которого будет использована данная копия шаблона) и настроить полученную копию (привязать ее к языку).
    4. Выполнив предыдущие шаги, нам осталось только создать модули для выбора языков и опубликовать их, чтобы пользователи могли выбирать язык сайта. Как и прежде, каждый модуль привязан к соответствующему «языку содержания».

    5. Заключительный этап. Нам осталось только включить плагин «фильтра языков» (Language Filter plug-in) в менеджере плагинов. 
      Если мы хотим использовать «ассоциации меню» (т. е. чтобы пользователь при смене языков оставался на той же странице, что он и просматривал, но в другой языковой версии, вместо того, чтобы его перенаправляло на домашнюю страницу выбранной им языковой версии), в плагине «фильтра языков» необходимо установить соответствующий переключатель. 
      Кроме того, необходимо настроить для каждого желаемого пункта меню соответствующие ассоциации с аналогичными пунктами меню других языковых версий.
В заключении хочется сказать, что функциональность новой Joomla позволяет сделать вещи, для реализации которых раньше необходимо было использовать сторонние программы. Из данного примера видно, что многоязычность работает «из коробки», плюс к этому, если раньше чтобы показать различный логотип или модуль в зависимости от языка сайта мне необходимо было использовать специальные плагины, то сейчас это также можно сделать стандартными средствами Joomla 1.7
На этом все. До свидания!



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

Женя комментирует...

Спасибо. Очень хорошая статья, лучшая из всех, которые я нашел в гугле. Но вот вопрос: зачем для каждого языка создавать отдельное меню? Например, можно создать одно mainmenu и в нем создать все нужные пункты на всех языках, присваивая каждому пункту нужный язык. Думаю, так будет более красиво и удобно, все данные(пункты) одного меню будут вместе, а не расбросаны

Dmytro Sobeshchanskiy комментирует...

Да, Вы правы, можно и так. Тут уж действительно дело вкуса, как кому удобней :-)

flexgav комментирует...

У меня после включения плагина фильтра языков на сайте выдается ошибка о циклической переадресации. В чем может быть проблема? Заранее благодарен.

Dmytro Sobeshchanskiy комментирует...

Поздновато заметил, но все таки отвечу. Вариантов всего два: либо что-то с Joomla (маловероятно конечно, но если сайт только проектируется и не наполнен контентом, то можно попробовать переустановить Joomla, желательно скачанную с оф сайта. Это и быстрее и проще.) или что-то намудрили с настройками языка. Во втором случае без "пациента" сложно что-то сказать.

Анонимный комментирует...

Здравствуйте, Дмитрий!
Спасибо за статью.
У меня вопрос к участникам обсуждения.
Как правильно убрать index.php с урлы, что бы не было ошибки и перенаправить сразу на страницу языка.
К примеру, у меня ошибка 404 http://site.ru/ru/ на странице - не может найти файл. Спасибо за ответы!

Dmytro Sobeshchanskiy комментирует...

Скажите, а у Вас для всех языков указана "стартовая страница" (Content - Article Manager, в колонке "Featured" для каждого языка сайта (выбирается в крайнем правом выпадающем списке) должна быть одна синяя звездочка напротив статьи )? Если я правильно понял, для языка "ru" не указана стартовая страница - вот он ее найти и не может

Prosto_Luara комментирует...

Спасибо! Статья очень полезная для меня, правда пока учусь на Joomla 1.5 и поиск решения очередной возникшей проблемы с переделкой дизайна шаблона привел на Ваш блог. Надеюсь найти в дальнейшем полезный материал по работе с Джумлой.

Анонимный комментирует...

Большое спасибо. Очень хорошая статья

Dmytro Sobeshchanskiy комментирует...

Пожалуйста :-)

Anne комментирует...

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

Dmytro Sobeshchanskiy комментирует...

Да, можно. Флаги языков для Joomla 1.7 и выше находятся в папке www\media\mod_languages\images. (Для joomla 1.5 многоязычный сайт делается как правило силами модуля Joomfish и флаги находятся в папке www\components\com_joomfish\images\flags). Файл флага должен иметь имя из двух букв в соответствии с кодом языка.

Taxup комментирует...

Статья лучше и понятней чем на джумла.ру.
Возникла проблема: после добавления двух дополнительных языков (английского и немецкого) и проведения всех процедур в месте, где у меня расположен модуль переключателя, не отображается флаг русского языка, английский и немецкий есть, переключение работает замечательно, а вот как поставить русский?

спасибо

Dmytro Sobeshchanskiy комментирует...

Проверьте правильно ли указан код флага в русском "языке содержания" (чтобы он соответствовал названию картинки флага в соответствующей папке)

Анонимный комментирует...

У меня тоже ошибка 404 при попытке открыть http://vysite.org.index.php/nl/

Хотя я создал меню и указал язык и главную страницу...

Че делать?