MODx REVO multilanguage Мультиязычность + Babel
Опишу пример настройки мультиязычности без изменения файла .htacces.
В данной статье приведу пример с двумя языками "ru" - по дефолту и добавим перевод к нему "en".
После изучения данной статьи, я полагаю, добавить дополнительные языки не составит труда.
Все что потребуется - добавлять контексты, прописывать нужные параметры и вносить изменения в модуль переключения между языками.
Сбособ рабочий, единственное, стоит начать делать без установленного Babel. Или кто разбирается внести изменения - то есть добавить новые созданные контексты в Babel (или контекс если он у Вас один).
Я не буду описывать как добавлять шаблон, представим, что он уже стоит и вы уже разбили на чанки.
Значит у вас стоит допустим шаблон и создано пару документов - Home и News к примеру. Для проверки этого будет достаточно.
1. Если еще не были вклчены frendly urls, то включаем.
Заходим в Система-Системные настройки - Фильтр по - Friendly URL и стамив YES в следующих параметрах:
automatic_alias
friendly_alias_lowercase_only
friendly_alias_strip_element_tags
friendly_urls
global_duplicate_uri_check
use_alias_path
2. Создаем папку en в корне вашего сайта ( если это денвер то путь будет примерно таким -
\WebServers\home\my_site.ru\www\ ). Из корня папки копируем в папку en файлы -
.gitignore, .htacces, config.core.php, index.php, favicon.ico.
Заходим в папку en и вносим изменения в файлы:
а. Как я и говорил в файле .htacces мы не вносим никаких изменений, так же остается не тронутым - .gitignore. Единственное, что может быть - файл после инсталяции называется ht.acces, просто переименовываем в .htacces, если этого еще не было сделано.
b. В config.core.php проверяем путь, который должен идти до core - у меня так
define('MODX_CORE_PATH', 'Z:/home/cnc.ru/www/core/')
Скорее всего он будет правильным, если нет - меняем.
c. В index.php прокручиваем вниз и меняем контекст с "web" на "en" -
/* Initialize the default 'web' context */
$modx->initialize('en');
3. Создаем контекст - "en" (контексты называем двухзначным кодом языка).
В настройках контекстов жмем "Добавить новый". Добавить требуется несколько настроек.
Для контекста "web", по дефолту который у нас русский:
key - "base_url", Value - "/"
key - "cultureKey", Value - "ru"
key - "friendly_alias_translit", Value - "english"
key - "http_host", Value - "www.my_site.ru" - изменить на домен вашего сайта
key - "site_start", Value - "1" - тут должен быть ID стартового документа - допустим Главная.
key - "site_url", Value - "
http://my_site.ru/" - изменить на домен вашего сайта.
Для контекста "en":
key - "base_url", Value - "/en/"
key - "cultureKey", Value - "en"
key - "friendly_alias_translit", Value - "english"
key - "http_host", Value - "www.my_site.ru" - изменить на домен вашего сайта
key - "site_start", Value - "2" - тут должен быть ID стартового документа - допустим Home.
key - "site_url", Value - "
http://my_site.ru/en/" - изменить на домен вашего сайта.
Естественно без ковычек копируем
4. Создаем плагин, название любое - к примеру Switchlang
<?php
$lankey = substr($_SERVER['REQUEST_URI'], 1, 2);
if($modx->context->get('key') != "mgr"){
//grab the current domain from the http_host option
switch ($lankey) {
case 'en':
//switch the context
$modx->switchContext('en');
//set the cultureKey
$modx->setOption('cultureKey', 'en');
break;
default:
// Set the default language/context here
$modx->switchContext('web');
$modx->setOption('cultureKey', 'ru');
break;
}
}
В System Events или Системные события - ищем ключ OnHandleRequest и ставим галочку, после жмем сохранить.
5. Между тегами
Добавляем строку -
<base href="[[++site_url]]" />
6. Ну а теперь проверяем, вводим в браузер строку www.my_site.ru/en - должен заработать.
7. Устанавливаем Babel и уже настраиваем переводы.
P.S. Все пути в теге <head> следует писать по типу "/assets/templates/" - добавляя в начало путей слеш "/", избавитесь от проблемы в путях.
Спасибо ArtDeVue за материал для статьи.
[ed. note: sergeymiracle last edited this post 11 years, 2 months ago.]