We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 39071
    • 21 Posts
    Здравствуйте.
    Понадобилось сделать мультиязычный сайт на Revo (версия 2.2.1-pl (traditional), на всякий случай).
    Делал по инструкции, которая находится на этом сайте:
    http://designfromwithin.com/blog-webdesign-development/2012/01/12/modx-multilingual-setting-up-babel-and-have-a-website-with-multible-languages/
    Пробую пока на денвере всё это, проект назвал revo.

    Сайт предусматривает 2 языка: русский и украинский, по типу
    http://localhost/revo/ (главная страница русской версии)
    http://localhost/revo/ua/ (главная страница украинской версии)
    Флажки вывел, всё сделал, но возникло несколько проблем:
    1. Когда нахожусь на главной http://localhost/revo/ (русский язык) и нажимаю на флажок укр. языка - ничего не происходит, в url не добавляется ua, такое ощущение, что страница просто обновляется или идёт редирект на главную русского языка.
    2. Пробую походить по другим страницам и попереходить с них на укр. язык. Тут сложновато, подробно объясню:
    есть верхние пункты меню, "Главная", "О нас", "Фотогалерея", "Карта сайта", "Контакты", так вот при нажатии на "О нас" и потом, нажав на укр. флажок - url видоизменяется с http://localhost/revo/o-nas на http://localhost/revo/ua/pro-nas но меня редиректит на русскую версию главной страницы и ничего нигде не переводится.
    Нажимаю на "Фотогалерея" русской версии, пробую перевестись, нажимаю на флажок и бац - url как был для русского http://localhost/revo/fotogalereya так и остался, но на главную не редиректит, остаюсь на "Фотогалерее".

    Мой файл .htaccess:
    # MODX supports Friendly URLs via this .htaccess file. You must serve web
    # pages via Apache with mod_rewrite to use this functionality, and you must
    # change the file name from ht.access to .htaccess.
    AddDefaultCharset utf-8
    # Make sure RewriteBase points to the directory where you installed MODX.
    # E.g., "/modx" if your installation is in a "modx" subdirectory.
    #
    # You may choose to make your URLs non-case-sensitive by adding a NC directive
    # to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]
    
    RewriteEngine On
    RewriteBase /revo/
    
    
    # redirect all requests to /de/favicon.ico and /nl/favicon.ico
    # to /favicon.ico
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(ru|ua|)/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 ^(ru|ua)/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 ^(ru|ua)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
    
    # Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
    #RewriteCond %{HTTP_HOST} .
    #RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com [NC]
    #RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
    #
    # or for the opposite domain.com -> www.domain.com use the following
    # DO NOT USE BOTH
    #
    #RewriteCond %{HTTP_HOST} .
    #RewriteCond %{HTTP_HOST} !^www\.example-domain-please-change\.com [NC]
    #RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
    
    
    
    # Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent 
    # https://www.domain.com when your cert only allows https://secure.domain.com
    #RewriteCond %{SERVER_PORT} !^443
    #RewriteRule (.*) https://example-domain-please-change.com.com/$1 [R=301,L]
    
    
    
    
    
    
    
    # Make sure .htc files are served with the proper MIME type, which is critical
    # for XP SP2. Un-comment if your host allows htaccess MIME type overrides.
    
    #AddType text/x-component .htc
    
    
    
    # If your server is not already configured as such, the following directive
    # should be uncommented in order to set PHP's register_globals option to OFF.
    # This closes a major security hole that is abused by most XSS (cross-site
    # scripting) attacks. For more information: http://php.net/register_globals
    #
    # To verify that this option has been set to OFF, open the Manager and choose
    # Reports -> System Info and then click the phpinfo() link. Do a Find on Page
    # for "register_globals". The Local Value should be OFF. If the Master Value
    # is OFF then you do not need this directive here.
    #
    # IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
    #
    # Your server does not allow PHP directives to be set via .htaccess. In that
    # case you must make this change in your php.ini file instead. If you are
    # using a commercial web host, contact the administrators for assistance in
    # doing this. Not all servers allow local php.ini files, and they should
    # include all PHP configurations (not just this one), or you will effectively
    # reset everything to PHP defaults. Consult www.php.net for more detailed
    # information about setting PHP directives.
    
    #php_flag register_globals Off
    
    
    
    # For servers that support output compression, you should pick up a bit of
    # speed by un-commenting the following lines.
    
    #php_flag zlib.output_compression On
    #php_value zlib.output_compression_level 5
    
    
    
    # The following directives stop screen flicker in IE on CSS rollovers. If
    # needed, un-comment the following rules. When they're in place, you may have
    # to do a force-refresh in order to see changes in your designs.
    
    #ExpiresActive On
    #ExpiresByType image/gif A2592000
    #ExpiresByType image/jpeg A2592000
    #ExpiresByType image/png A2592000
    #BrowserMatch "MSIE" brokenvary=1
    #BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
    #BrowserMatch "Opera" !brokenvary
    #SetEnvIf brokenvary 1 force-no-vary
    


    Gateway плагин:
    <?php
    if($modx->context->get('key') != "mgr"){
                    /* grab the current langauge from the cultureKey request var */
                    switch ($_REQUEST['cultureKey']) {
                        case 'uk':
                            /* switch the context */
                            $modx->switchContext('Ukrainian');
                            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']);
                }
    


    Контексты:
    1. web, настройки:

    Base URL

    Key: base_url
    Name: Base URL
    Area Lexicon Entry: language
    Value: /

    Culture key

    Key: cultureKey
    Name: Culture key
    Area Lexicon Entry: language
    Value: ru

    Site start

    Key: site_start
    Name: Site start
    Area Lexicon Entry: language
    Value: 1

    Site URL

    Key: site_url
    Name: Site URL
    Area Lexicon Entry: language
    Value: http://localhost/revo/

    2. Ukrainian настойки,

    Base URL

    Key: base_url
    Name: Base URL
    Area Lexicon Entry: language
    Value: /ua/

    Culture key

    Key: cultureKey
    Name: Culture key
    Area Lexicon Entry: language
    Value: uk

    Site start

    Key: site_start
    Name: Site start
    Area Lexicon Entry: language
    Value: 11

    Site URL

    Key: site_url
    Name: Site URL
    Area Lexicon Entry: language
    Value: http://localhost/revo/ua/

    Связи документов ставил, вроде всё норм, но не могу понять, почему так происходит.
    Извините, что так много написал, я постарался по-подробнее описать, чтоб удобнее было.
    Помогите, пожалуйста!
    Спасибо большое.


    This question has been answered by sergeymiracle. See the first response.

      • 39584
      • 29 Posts
      Создавал такую же тему https://forums.modx.com/thread/?thread=76140&page=1
      Ответ поступил - читаем ниже.
      Настроили работает. Без вмешательства в htacces

      1) файл .htaccess, по дефолу
      2) Я создаю папки в корне сайта - ua (в твоем случае), копирую туда файлы .gitignore, .htaccess, config.core.php, index.php, favicon.ico.
      3) В файле index.php меняем контекст на свой. т.е. если папка en то на контекст en (да, забыл сказать, контексты называем двухзначным кодом языка)
      В файле config.core.php - путь должен быть от корня сервера к папке core (там кстати и менять по-моему не надо, но проверить путь стоит)

      4)создаю плагин (называйте как хотите).

      <?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;
              case 'de':
                  $modx->switchContext('de');
              $modx->setOption('cultureKey', 'de');
                  break;
              default:
                  // Set the default language/context here
                  $modx->switchContext('web');
              $modx->setOption('cultureKey', 'ru');
                  break;
          }
      }
      

      Ставим в вкладке Системные события галочку на против ключа OnHandleRequest

      5) Во всех созданных контекстах, создаём параметры
      Контекст: Английский Base URL: ключ «base_url», значение - «/»
      Culture key: ключ «cultureKey», значение «en»
      Site start: ключ «site_start», значение «id стартовой страницы в данном контексте»
      Site URL: ключ «site_url», значение «http://your-website-url.com/en/»
      "http_host" - "www.yoursite.com"

      6) Уже с Бабелом играться...

      до того как Бабел ставить уже можно проверить запускается ли страничка - your-website-url.com/en
      еще необходимо вставить между тегами head -
      <base href="[[++site_url]]" /> 
      (по идее так )

      Плагин поправь под свои нужды, думаю понятно будет как. [ed. note: sergeymiracle last edited this post 14 years, 6 months ago.]
        • 39071
        • 21 Posts
        Спасибо, но чё-то у меня не получается. Сделал, вроде, правильно.
        В итоге все стили сайта пропали и главная страница теперь "Головна", то есть украинская.
        В контексте web надо настройки создавать и какие?
        И какой cultureKey у украинского языка uk или ua?
          • 39584
          • 29 Posts
          Про cultureKey - скорее все ua, а может и uk. Пробуй.
          web - создавать надо, такие же как и во всех контекстах
          base прописать надо чтоб стили не пропадали
            • 39071
            • 21 Posts
            Неа, всё равно не работает.
            Что по старому методу трижды переделывал, что по вашему предложенному.
            Всё равно выскакивает "Неверное перенаправление на странице" в firefox.
            пробовал в хроме - там "Циклическая переадресация".
            [ed. note: angelo last edited this post 14 years, 6 months ago.]
            • discuss.answer
              • 39584
              • 29 Posts
              https://forums.modx.com/thread/76226/modx-revo-babel#dis-post-421885

              Описал подробно метод.

              Циклическая переадресация из-за неправильных настроек КОНТЕКСТА. По ссылке перейдите там правильные настройки заданы.
                • 39071
                • 21 Posts
                Спасибо, sergeymiracle!
                Хорошего человека грех не отблагодарить!
                Нашёл время и быстро помог!
                  • 40497
                  • 3 Posts
                  Помогите настроить никак не получается. По двум инструкциям делал ничего не получается.
                  Создано два языка при переходе на английскую версию открывается адрес .../en/ но тайтл остается от основного языка. Если же открыть страницу основного языка и нажать на английскую версию то 404 вылазит. В чем может быть проблема подскажите пожалуйста.