We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 39584
    • 29 Posts
    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/" - изменить на домен вашего сайта.

    Естественно без ковычек копируем smiley

    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. Между тегами
    <head>
    Добавляем строку -
    <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.]
      • 42418
      • 3 Posts
      Все работает вроде, только вот wayfinder перестал отображаться совсем
        • 39584
        • 29 Posts
        Смотрите wayfinder, причем он тут вообще не понимаю, здесь вроде не описана настройка с изменением параметров wayfinderа
          • 42418
          • 3 Posts
          там просто startid на ресурс с другого контекста стоит, поэтому не отображается
            • 39584
            • 29 Posts
            Чет странно... не возникало таких проблем стоит всегда startid=`0`
              • 42418
              • 3 Posts
              0 это как? у меня родительский пункт меню 2. при нуле что отображается?
                • 39584
                • 29 Posts
                Как вариант решения - создать два чанка MENU и MENU_EN в них задать startid нужные, а в шаблоне через конструкцию IF и проверку langkey будет вызывать необходимый чанк.
                  • 42749
                  • 1 Posts
                  с вашим способом не получается работать с файлами и картинками, <base href="[[++site_url]]" /> дает как раз адрес http://some-site.com/en/ , как бороться с этой бедой? не переносить же все файлы в папочку en
                  • Quote from: konstantingreat999 at Feb 07, 2013, 08:01 PM
                    с вашим способом не получается работать с файлами и картинками, <base href="[[++site_url]]"> дает как раз адрес http://some-site.com/en/ , как бороться с этой бедой? не переносить же все файлы в папочку en
                    нет конечно smiley просто нужно перед картинками к примеру вставить слеш "/", тогда путь будет от корня сайта.
                    Так-же в head при подключении стилей и в футоре js файлов, ставьте слеш и всё.
                      Valentin Rasulov - Industrial design (Hobbies - Web Development)
                      Development not standard projects on CMF MODx Revolution.
                      Small sample of extensions
                      • 40744
                      • 1 Posts
                      $lankey = substr($_SERVER['REQUEST_URI'], 1, 2);
                      это жестоко

                      site.com/en/ != site.com/endurance.html