MODx Revolution, мануал: Создание мультиязычных сайтов.

Создание мультиязычных сайтов на MODx Revolution

Наша цель: необходимо создать один сайт с тремя поддерживаемыми языками и красивыми адресами страниц для каждого языка.

— Английский — your-website-url.com
— Голландский your-website-url.com/nl/
— Немецкий — your-website-url.com/de/

Управление всеми разделами сайта будет производиться из одной панели MODx, создание и редактирование страниц будет легким для администратора.

Основные шаги этого руководства
Шаг №1 – Настройка файла .htaccess
Шаг №2 – Создание контекстов
Шаг №3 – Создание «плагина-шлюза»
Шаг №4 – Установка плагина Babel
Шаг №5 – Создание многоязыкового контента
Шаг №6 — Готово!

Что нужно

Для успешного выполнения всех действий потребуется:

— Установленный MODx Revolution версии 2.1 или выше
— Доступ к корневой директории сайта на веб-сервере (для редактирование файла .htaccess)
— Пакет Babel (версии 2.2.4 или выше). Его можно установить из панели управления сайтом.

Полезные ссылки

— Инструкция по пакету Babel — rtfm.modx.com/display/ADDON/Babel
— Официальная инструкция MODx по созданию мультиязычных файлов — rtfm.modx.com/display/revolution20/Using+Friendly+URLs
— Инструкция по работе с контекстами в MODx — rtfm.modx.com/display/revolution20/Contexts

Шаг №1 — Настройка файла .htaccess

Найдите в корневой директории сайта файл ht.access или .htaccess. Создайте его резервную копию. Переименуйте его в .htaccess (если он так еще не называется).

Сначала необходимо убедиться, что 'RewriteBase' строка корректна. Если Ваш сайт установлен в корневую директорию домена, используйте следующие настройки:

RewriteEngineOn
RewriteBase/

Если же Ваш сайт установлен в какую либо подпапку (напр. sub-folder), используюте следующий код:

RewriteEngineOn
RewriteBase/your-sub-folder/

Убедитесь, что у Вас включен 301 редирект, убирающий (или наоборот, добавляющий) www:

# Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
RewriteCond%{HTTP_HOST}.
RewriteCond%{HTTP_HOST}!^your-website-url\.com [NC]
RewriteRule(.*) http://your-website-url.com/$1 [R=301,L]

Не забудьте заменить здесь your-website-url.com на адрес Вашего сайта!

Следующий важный этап, Вам необходимо этот код ниже блока # The Friendly URLs part, вот так:

# The Friendly URLs part
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule^(en|nl|de)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
 
# redirect all requests to /de/favicon.ico and /nl/favicon.ico
# to /favicon.ico
RewriteCond%{REQUEST_FILENAME}!-d
RewriteCond%{REQUEST_FILENAME}!-f
RewriteRule^(en|nl|de)/favicon.ico$ favicon.ico [L,QSA]
   
# redirect all requests to /de/assets* and /nl/assets* to /assets*
RewriteCond%{REQUEST_FILENAME}!-d
RewriteCond%{REQUEST_FILENAME}!-f
RewriteRule^(en|nl|de)/assets(.*)$ assets$2 [L,QSA]
 
# redirect all other requests to /de/* and /nl/*
# to index.php and set the cultureKey parameter
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule^(en|nl|de)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]

Не забудьте заменить здесь your-website-url.com на адрес Вашего сайта!

В этом примере у нас используются 3 языка, Голландский (nl), Немецкий (de) и Английский (en). Английский язык здесь – это язык по-умолчанию. Если у Вас будут использоваться другие языки, будет необходимо соответственно изменить этот код.

Шаг №2 – Создание контекстов

В панели управления сайтом необходимо создать контекст (context) для каждого из языков. Обратите внимание, что контекст «web», созданный по-молчанию, мы будем использовать для нашего языка по умолчанию, т.е. английского.

Для этого в меню выберите пункт «Система»-> «Контексты» (System > Context) и нажмите «Создать новый» (Create New).

В поле «Ключ контекста» (Context Key) введите Ваш язык на английском языке, например «Deutsch» для немекого или «Nederlands» для голландского.

Далее нажмите правой кнопкой на строке с созданным контекстом и выберите пункт «Обновить контекст» (Update Context). Перейдите на вкладку «Настройки контекста» и нажмите кнопку «Создать новый».

Следующие настройки необходимо создать для каждого языка:

Контекст: Английский
Base URL: ключ «base_url», значение "/"
Culture key: ключ «cultureKey», значение «en»
Site start: ключ «site_start», значение «1»
Site URL: ключ «site_url», значение «your-website-url.com/»

Контекст: Голландский
Base URL: ключ «base_url», значение "/nl/"
Culture key: ключ «cultureKey», значение «nl»
Site start: ключ «site_start», значение «Id «домашней» страницы этого языка (создадим позже)»
Site URL: ключ «site_url», значение «your-website-url.com/nl/»

Контекст: Немецкий
Base URL: ключ «base_url», значение "/de/"
Culture key: ключ «cultureKey», значение «de»
Site start: ключ «site_start», значение «Id «домашней» страницы этого языка (создадим позже)»
Site URL: ключ «site_url», значение «your-website-url.com/de/»

«Тип поля» этих настроек – «Текстовое поле».

Шаг №3 – Создание «плагина-шлюза»

Теперь нужно создать простой плагин для присвоения корректного контекста в зависимости от просматриваемого языка. В Панели управления сайтом перейдите на вкладку «Элементы» и нажмите иконку «Новый плагин».

В поле «Имя» напишите gateway, а в поле «Код» этот код:

<?php
   
if($modx->context->get('key')!="mgr"){
       
/* grab the current langauge from the cultureKey request var */
       
switch($_REQUEST['cultureKey']){
           
case'nl':
               
/* switch the context */
                $modx
->switchContext('Nederlands');
               
break;
           
case'de':
               
/* switch the context */
                $modx
->switchContext('Deutsch');
               
break;
           
default:
               
/* Set the default context here */
                $modx
->switchContext('web');
               
break;
       
}
       
/* unset GET var to avoid
         * appending cultureKey=xy to URLs by other components */

        unset
($_GET['cultureKey']);
   
}
?>

Этот плагин должен срабатывать при возникновении события OnHandleRequest (обработка любого запроса), для того что бы это сзделать, перейдите на вкладку «Системные события» и поставьте галочку напротив этого события.

Сохраните Ваш плагин.

Шаг №4 – Установка плагина Babel

Уже почти все =). Теперь нужно установить плагин Babel. В Панели управления MODx выберите в меню пункт «Система»->«Управление пакетами», нажмите скачать дополнения и найдите «Babel». Скачайте и установите этот пакет. При установке обратите внимание на настройки плагина, там должны быть указаны Ваши контексты через запятую, например: web,Deutsch,Nederlands.

Остальные настройки не трогайте.

Шаг №5 – Создание многоязыкового контента

Теперь нам осталось создать список ссылок на сайте для переключения языка. Плагин Babel имеет весьма простое решение для этого:

<ul></ul>

Шаг №6 — Готово!

Все готово! Надеюсь что эта инструкция поможет Вам!