We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 50609
    • 4 Posts
    Всем привет!
    Как создать мультиязычность на ModX Revo без подкаталогов?
    Т.е. чтобы не было деления в url на /en/,/ru/ и т.д.
    Т.к. при подкаталогах, возникает множество проблем во всех приложениях с путями!

    Очень надеюсь на Вашу помощь!
      • 25599
      • 59 Posts
      Сделайте на контекстах.
      Для бэкэнда используйте Babel (для двух языков два контекста с соответствующими настройками — cultureKey, error_page, site_start) и вот такой плагин для переключения на фронтэнде (вешается на событие OnHandleRequest):
      <?php
      if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {return;}
      
      if (isset($_GET['lang']) && $_GET['lang'] != $_SESSION['lang']) {
      	if ($_GET['lang'] == 'en') {
      		$_SESSION['lang'] = 'en';
      	}
      	else {
      		$_SESSION['lang'] = 'ru';
      	}
      }
      
      if ($_SESSION['lang'] == 'en') {
      	$modx->switchContext('en');
      }


      Сниппет, выводящий ссылки переключения языков:
      <?php
      $link = $modx->makeUrl($modx->resource->id, '', '', 'full');
      
      if ($modx->getOption('cultureKey') == 'ru') {
      	return '<span class="lang-active">Рус</span> <a href="'.$link.'?lang=en">Eng</a>';
      }
      if ($modx->getOption('cultureKey') == 'en') {
      return '<a href="'.$link.'?lang=ru">Рус</a> <span class="lang-active">Eng</span>';
      }



      И еще делаю чанк «lang»:
      [[++cultureKey:is=`ru`:then=`[[+ru]]`]][[++cultureKey:is=`en`:then=`[[+en]]`]]


      C его помощью можно не плодить шаблоны и чанки, а разные языковые строки в них выводить так:
      [[$lang? &ru=`Русский контент` &en=`English content`]]


      Плюс — все предельно просто, минус — нужно следить, чтобы псевдонимы «парных» страниц в разных яз. версиях были одинаковыми.