Простейшая настройка мультиязычности

Во время работы над modx-test.com (который потом вырос в modhost.pro) придумал и реализовал прикольную мультиязычность.

Никаких копирований файлов, поддоменов и прочих заморочек. 1 простой плагин, который делает всю работу.

Нам нужно 2 контекста, по умолчанию в основном контексте ставим русский язык.
В настройках контекстов указаны следующие параметры:
  • cultureKey — ru
  • site_start — 1
  • error_page — 1
  • cultureKey — en
  • site_start — 3
  • error_page — 3
В системных настройках отключаем проверку дупликатов url во всех контекстах. Url соответствующих страниц должны быть одинаковыми — так гораздо проще.
Иначе, надо будет наворачивать сниппет, выдающий ссылку на другую языковую версию.

А вот и сам плагин, реагирует на событие 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');
}
То есть, при указании параметра ?lang=en или ?lang=ru любой ссылке — контекст сайта переключается, а вместе с ним и язык — и это запоминается в сессию, то есть ссылка больше не нужна.

Прощай геморрой с настройками!

Бонус в виде сниппета для вывода ссылки на переключение:
<?php
$link = $modx->makeUrl($modx->resource->id, '', '', 'full');

if ($modx->getOption('cultureKey') == 'en') {
	return "<a href=\"$link?lang=ru\">Русский</a>";
}
else {
	return "<a href=\"$link?lang=en\">English</a>";
}
Поисковики такой сайт индексируют нормально — ведь на каждой странице есть ссылка на другую языковую версию, и урл отличается.
То есть в индексе страницы с разным ?lang=(en|ru) и с разным содержимым.

Следующая заметка
Редирект на ресурс сразу после его создания
Предыдущая заметка
Форматирование дат


Комментарии ()

  1. Василий Столейков 10 июля 2012, 08:03 # 0
    А можно больше одного языка? 2 и более? Думаю это не будет сложно самому сделать?
    1. Василий Столейков 10 июля 2012, 08:05 # 0
      Я бы не сказал, что с поисковиками всё нормально — при таком раскладе создаются дубликаты страниц.
      К примеру на странице modx-test.com/create.html и modx-test.com/create.html?lang=ru одинаковое содержимое, а значит это дубликат. Нужно как-то от него избавиться…
      1. Николай Мордынский 17 августа 2012, 02:05 # 0
        Читайте правила настройки файла robots.txt к примеру на яндексе есть.
        Там есть команда которая обнуляет значимость указанной переменной.
        1. Николай Мордынский 17 августа 2012, 02:08 # 0
          help.yandex.ru/webmaster/?id=996567
          Директива Clean-param

          Если адреса страниц вашего сайта содержат динамические параметры, которые не влияют на их содержимое (например: идентификаторы сессий, пользователей, рефереров и т.п.), вы можете описать их при помощи директивы 'Clean-param'. Робот Яндекса, используя эту информацию, не будет многократно перезакачивать дублирующуюся информацию. Таким образом, увеличится эффективность обхода вашего сайта, снизится нагрузка на сервер.
        2. Ablialim Saliev 19 июля 2012, 12:09 # 0
          А как этот метод дружит с Babel?
          Можно ли использовать BabelLinks?
          Не то чтобы лень самому попробовать, скорее страшно:) Первый способ который заработал, теперь боюсь экспериментировать.
          1. Василий Наумкин 19 июля 2012, 12:19 # 0
            Отлично дружит, в админке.

            А вот на фронтенде не знаю, не пробовал. У меня просто одинаковые алиасы у разных версий и он не нужен =)
            1. Виталий Батушев 20 июля 2012, 01:43 # 0
              А урок от самого создателя Babel не подходит? www.multilingual-modx.com/blog/2011/multilingual-websites-with-modx-and-babel.html
              У меня сделано по нему, никаких переименований, создания папок и прочих костылей, три языка — русский, английский, испанский.
            2. redstudio.com.ua 14 августа 2012, 00:13 # 0
              Работает все круто! прошу тебя сердечный друг объясни как сделать ссылки modx.redstudio.com.ua/en/ такого типа что бы работало! а то делал по двум урокам на работает у них
              1. Василий Наумкин 14 августа 2012, 06:25 # 0
                Вот тут в комментариях много интересного — community.modx-cms.ru/blog/6971.html
              2. Serghei Rusin 15 августа 2012, 15:16 # 0
                А где можно посмотреть инструкции для настойки мульти-язычности minishop? Спасибо!
                1. Василий Наумкин 15 августа 2012, 15:20 # 0
                  Нет такой инструкции.

                  Товары — это ресурсы. Соответственно, надо читать про мультиязычность и контексты MODX.
                2. Владимир 03 декабря 2012, 13:30 # 0
                  Всем доброго дня!
                  Кто подскажет, где посмотреть все возможные значения (двусимвольные сокращения языка) для cultureKey.
                  В настоящий момент делаю сайт с мультиязычностю Finnish, English, Russian, French, Spanish, Arabic, соответственно, двусимвольные сокращения fi,web,ru,fr,es,ar как для cultureKey так и для настроек плагина babel. Планируется добавления языков которые в babel отсутствуют, и что бы их добавить туда нужно знать общепринятое сокращение. (например один из таких языков иврит)
                  1. Константин Хетагуров 12 декабря 2012, 16:19 # 0
                    Добрый день.
                    Делаю всё как тут написано. Отображается ссылочка на английскую версию сайта, при нажатии на неё в адрес, добавляется ?lang=en и ничего не происходит. Подскажите в чем проблема, пожалуйста. Я так понимаю, что просто не переключаются контексты, правильно?
                    1. Ivan Moshkov 07 января 2013, 23:46 # 0
                      Всем доброго времени суток!

                      В данной реализации, на нерусской версии сайта даты будут выводиться на русском языке. Поэтому в последнее условие необходимо добавить принудительную установку локали:

                      if ($_SESSION['lang'] == 'en') {
                      $modx->switchContext('en');
                      setlocale(LC_TIME, 'en_US.UTF8');
                      }
                      В зависимости от языка или кодировки строчку setlocale(LC_TIME, 'en_US.UTF8'); надо изменить. Точно так же можно написать и для нескольких языков.
                      1. Василий Наумкин 08 января 2013, 05:10 # 0
                        Да, верно.

                        Еще можно выводить даты через сниппет dateAgo — он берёт названия месяцев из лексикона.
                      2. Bond Nataly 08 января 2013, 13:16 # 0
                        Здравствуйте! Подскажите пожалуйста, как переделать ваше решение мультиязычности без контекстов? Т.е.:
                        Создаются ТВ для каждого языка, и у каждого документа прописываются названия, контент и тд на каждом языке.
                        Пробовала ваш вариант плагина, только вместо $modx->switchContext('en'); пробовала $modx->setPlaceholder('cultureKey','en'); и $modx->setOption('cultureKey', 'en'); не помогло.

                        Я даже просто пробовала показать $_SESSION['lang'], переходя по ссылкам shop.test1.ru/?lang=en и shop.test1.ru/?lang=ru — ничего не выводит, т.е. даже сессию не устанавливает.
                        1. Bond Nataly 08 января 2013, 13:27 # 0
                          Включила кеширование настроек контекстов (до этого было отключено), сессия устанавливается. Теперь пробую выводить нужные ТВ в зависимости от сессии, работает через раз — при каждом обновлении страницы, меняются с русских на англ. и наоборот) Видимо дело в кешировании! Подскажите, кто сталкивался, как с этим бороться? Спасибо.
                          1. Bond Nataly 08 января 2013, 13:30 # 0
                            Нет) Простите за флуд, Я так понимаю сессия устанавливается при первом заходе, и уже выводятся нужные ТВ при следующем обновлении страницы. Наверное я туплю, пошла разбираться)
                            1. Bond Nataly 08 января 2013, 13:33 # 0
                              Все получилось, всем спасибо!)
                              1. Василий Наумкин 08 января 2013, 13:56 # 0
                                На здоровье! =)
                                1. Alexander Legan 23 декабря 2013, 02:06 # 0
                                  Привет.
                                  Bond Nataly, как я понял, Вы пытались создать отдельные TV под каждый язык для каждого ресурса, и в итоге все получилось? Буду благодарен если у Вас будет возможность расписать решение поподробнее.
                                  1. Bond Nataly 23 декабря 2013, 11:32 # 0
                                    Ох, это ж было аж год назад, почти ничего не помню уже) Ну приблизительно могу описать так:
                                    При переключении языка у меня в сессию записывался язык (ru,en,ua). И потом исходя из этого, у меня подставлялись нужные TV, которые были названы с префиксом своего языка. Например, en_pagetitle, ua_pagetitle и тд.
                                    И сниппет для вызова нужной тв, например так pagetitle вызывала:
                                    [[!cK?id=`1`&tv=`pagetitle`&field=`Главная страница`]]
                                    И сам сниппет cK:
                                    $cK = (isset($lang)) ? $lang : $_SESSION['lang'];
                                    if($cK != '' && $cK != 'ru') {
                                      $tv_name = $cK.'_'.$tv;
                                      $tvv = $modx->getObject('modTemplateVar', array('name' =>$tv_name));
                                      $out = $tvv->getValue($id);
                                      echo trim($out)!='' ? $out : $field;
                                    } else {
                                      echo $field;
                                    }
                                    1. Alexander Legan 23 декабря 2013, 12:20 # 0
                                      Спасибо. Уже ближе к полуночи сам к такому решению пришёл, а теперь убедился в правильности хода мыслей. Данное решение позволяет избавиться от дублирования ресурсов, что в некоторых случаях (сайтах) очень даже правильно, и это мне подходит. )
                                      Спасибо за оперативность.
                                      1. Bond Nataly 23 декабря 2013, 12:41 # 0
                                        Пожалуйста )
                                2. Мордынский Николай 08 января 2013, 19:33 # 0
                                  Ты однако круче чем Чак Норис. Помог человек силой мысли)) во как!!! ))
                                  1. Василий Наумкин 08 января 2013, 20:06 # 0
                                    Не поминай имя Чака всуе, а то — накажет!
                                  2. Kondakov Dmitriy 09 января 2013, 11:18 # 0
                                    Спасибище огромное! Как нельзя кстати вовремя) только вот не получается сделать с тремя языками, наведите на мысль пожалуйста, в php не особо силен
                                    1. Kondakov Dmitriy 09 января 2013, 12:37 # 0
                                      Разобрался, правда незнаю насколько это правильно. Воспользовался elseif:
                                      код плагина
                                      <?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';
                                      	}
                                      	elseif ($_GET['lang'] == 'kz') {
                                          	$_SESSION['lang'] = 'kz';
                                      	}
                                          else {
                                      		$_SESSION['lang'] = 'ru';
                                      	}
                                      }
                                      
                                      if ($_SESSION['lang'] == 'en') {
                                      	$modx->switchContext('en');
                                      }
                                      if ($_SESSION['lang'] == 'kz') {
                                          $modx->switchContext('kz');
                                      }
                                      1. Василий Наумкин 09 января 2013, 12:46 # 0
                                        Все верно.

                                        Только в последнем блоке вместо 2х if лучше тоже else if.
                                        1. Kondakov Dmitriy 09 января 2013, 13:12 # 0
                                          Точно, поторопился что-то. еще пришлось сделать небольшой сниппет для вывода своего меню в каждом контексте, чтобы не делать несколько шаблонов. Если надо кому выложу
                                          1. Андрей Минаков 24 мая 2013, 15:17 # 0
                                            Было бы здорово.
                                      2. Константин Баранов 08 февраля 2013, 11:36 # 0
                                        делаю для заказчика и важен только сайт, а не гугловская выдача, но интересно, как гугл на такие сессионные вещи реагирует, спасибо за простое и красивое решение.
                                        1. Василий Наумкин 08 февраля 2013, 13:29 # 0
                                          Пока не было проблем.
                                          1. Константин Баранов 09 февраля 2013, 17:48 # 0
                                            Как думаете Василий, лучше делать копии шаблонов, например для английских ресурсов или проверку контекста/сессии для вывода соответствующих чанков/сниппетов в общих шаблонах?
                                            1. Василий Наумкин 09 февраля 2013, 18:02 # 0
                                              Проверка удобнее, а шаблоны быстрее.

                                              Ну а выбирает каждый сам, зависит от размера сайта и личных предпочтений.
                                              1. Богдан 16 февраля 2013, 15:17 # 0
                                                А зачем делать копии чанков или шаблонов? Для каждой фразы создается свой ключ в настройках контекста, а в шаблоне подставляется [[++ключ_фразы]]. Параметры в сниппеты тоже можно передавать таким образом, например [[getresources? &parents=`[[++ID_родителя_для_текущего_языка]]`]]. После завершения основной версии, делается копия контекста и в настройках копии просто переводим фразы на соответствующий язык. По такой схеме, пока не приходилось использовать копии чанков и шаблонов.
                                                1. Василий Наумкин 16 февраля 2013, 17:35 # 0
                                                  Зачем использовать системные параметры, если есть лексиконы?

                                                  Тег [[%name]] специально для этого. Вот дока.
                                                  1. Богдан 16 февраля 2013, 17:44 # 0
                                                    Спасибо, Василий, так еще лучше, почему-то не обращал раньше внимания на управление словарями.
                                          2. Богдан 13 февраля 2013, 02:22 # 0
                                            Самое удобное решение из тех, что встречал, но не без недостатка — url каждой страницы на разных языках должны быть одинаковыми, столкнулся с необходимостью вручную устанавливать урлы во всех контекстах для большого количества ресурсов, что очень неудобно.
                                            1. Богдан 12 марта 2013, 18:21 # 0
                                              Поправил немного сниппет для вывода ссылки на переключение языка:

                                              <?php
                                              if ($modx->getOption('cultureKey') == 'en') {
                                              $translateLink = $modx->runSnippet('BabelTranslation',array('contextKey' => 'web'));
                                              $link = $modx->makeUrl($translateLink,'',array('lang' => 'ru'));
                                              return "<a href=\"$link\">Русский</a>";
                                              }
                                              else {
                                              $translateLink = $modx->runSnippet('BabelTranslation',array('contextKey' => 'en'));
                                              $link = $modx->makeUrl($translateLink,'',array('lang' => 'en'));
                                              return "<a href=\"$link\">English</a>";
                                              }
                                              Теперь нет необходимости указания одинаковых url для соответствующих страниц. Естественно, все соответствующие страницы должны быть связаны через Babel.
                                              1. Артур Костюнин 31 марта 2013, 16:20 # 0
                                                Здравствуйте.
                                                Подскажите в чем может быть проблема (все делал по пунктам). При переходе на английскую версию сайт выдает ошибку

                                                503 Error
                                                Page not found
                                                The page you requested was not found.
                                                Спасибо.
                                                1. Андрей Минаков 24 мая 2013, 00:01 # 0
                                                  Та же ересь. Никак не найду почему. :(
                                                  1. Мордынский Николай 24 мая 2013, 00:40 # 0
                                                    а страничка в английском контексте у тебя стем же урл что и в русском? должны быть одинаковые
                                                    1. Андрей Минаков 24 мая 2013, 12:04 # 0
                                                      Абсолютно идентичные и урл и алиасы — на болванке сайта тестирую, по странице в каждом контексте.
                                                      Более того — такую же ошибку выдает в недефолтном (en) контексте при простом просмотре страницы.
                                                      Предположений много, но дело, кажется, в каких-то настройках — сам скрипт потестить пока не выходит.
                                                      Есть идеи?
                                                      1. Андрей Минаков 24 мая 2013, 14:06 # 0
                                                        Повторил по инструкции на тестовом сайте: заработало! Причин отказа так и не понял. Предполагаемое решение см. чуть ниже.
                                                  2. Андрей Минаков 24 мая 2013, 14:08 # 0
                                                    Решение:
                                                    Предположительно, надо быть внимательным к адресу контекста в плагине:

                                                    $modx->switchContext('адрес_контекста');

                                                    Результат: s2955.modx-test.com
                                                  3. Gabaraev Akhsar 23 апреля 2013, 14:45 # 0
                                                    Здравствуйте!
                                                    А как можно при входе на сайт автоматический выбирать язык в зависимости от страны?
                                                    1. Мордынский Николай 23 апреля 2013, 17:40 # 0
                                                      workinweb.com.ua/content/php-opredelenie-yazyka-brauzera-i-perenapravlenie-na-relevantnuyu-yazykovuyu-stranicu

                                                      Узнаешь язык клиента и инициализируешь соответсвующий контекст в сесси
                                                      1. Gabaraev Akhsar 23 апреля 2013, 18:55 # 0
                                                        Да, я видел эту страницу. Просто думал по ip как-то надежнее, а тут
                                                        mitasych.com/kak-opredelit-geograficheskoe-polozhenie-po-ip-i-svyazat-ego-s-google-maps
                                                        не нашел где качать файлы geoip.inc, geoipcity.inc, geoipregionvars.php.
                                                        1. Мордынский Николай 23 апреля 2013, 20:49 # 0
                                                          а если человек с ноутом заходит на твой сайт из макдональда в Англии и хочет русский а получает en
                                                          1. Gabaraev Akhsar 23 апреля 2013, 20:54 # 0
                                                            То он переключит язык на русский, и выбранный язык хранится в сессии.
                                                            Какой вариант лучше — однозначного мнения нет, как я понял :)
                                                            1. Мордынский Николай 23 апреля 2013, 21:10 # 0
                                                              ну вот видишь сам ответ дал)
                                                    2. Дмитрий Нижник 13 июня 2013, 15:29 # 0
                                                      Подскажите пожалуйста, в чём может быть проблема!

                                                      Всё прекрасно работало, но в один момент ошибка стала вылетать 404ая, копал и накопал вот что когда отключаешь событие 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');
                                                      }
                                                      то сайт открывается, а язык не переключается…

                                                      Помогите пожалуйста, 2 дня уже убил, кэш чистил, переустанавливал систему, ничего не помогает :(
                                                      1. Андрей Минаков 13 июня 2013, 18:08 # 0
                                                        Фазы луны, вероятно. Тоже лечил, но была 503-я: здесь
                                                        У меня все работает с настройками, приведенными в топике. Проверьте имена контекстов в коде (второй контекст точно зовется en?) и их настройки.
                                                        1. Дмитрий Нижник 14 июня 2013, 08:06 # 0
                                                          Всё работало, я только установил Quip и что то пошло не так, естественно я удалил Quip… Точно фаза луны, блин…
                                                          1. Дмитрий Нижник 18 июня 2013, 10:44 # 0
                                                            Удалил [[!Loginza?action=`getProfile`]] всё заработало, фаза луны пришла в норму, что думаете по этому поводу?
                                                            1. Андрей Минаков 20 июня 2013, 12:48 # 0
                                                              Увы, у меня нет версий. Я не очень в php шарю. :(
                                                              Может Логинза что-то в запросе свое дописывала, что скрипт мультиязычности понять не мог?
                                                        2. Сергей Шлоков 19 июня 2013, 20:04 # 0
                                                          Василий, если есть время, кивни правильно или нет. Воюю с контекстами. Есть домен site.ru и поддомен sub.site.ru. Делаю согласно официальному руководству и твоим комментам на habre Как я воевал с контекстами. Не работает через http_host, хоть ты тресни (в контекстах прописал все настройки согласно твоей картинке из коммента).
                                                          Вот плагин на OnHandleRequest
                                                          <?php
                                                          /* don't execute if in the Manager */
                                                          if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {return;}
                                                           
                                                          switch ($modx->getOption('http_host')) {
                                                              case 'sub.site.ru':
                                                                  // if the http_host is of a specific domain, switch the context
                                                                  $modx->switchContext('sub');
                                                                  break;
                                                              default:
                                                                  // by default, don't do anything
                                                                  break;
                                                          }
                                                          Если заменить $modx->getOption('http_host') на $_SERVER['HTTP_HOST'], то все работает, но хотелось бы узнать мнение грамотных специалистов — правильно так?
                                                          1. Василий Наумкин 19 июня 2013, 20:06 # 0
                                                            Если работает — это правильно.
                                                            1. Сергей Шлоков 19 июня 2013, 22:20 # 0
                                                              Спасибо. Успокоил.
                                                          2. Дмитрий Нижник 28 июня 2013, 09:59 # 0
                                                            При переключении языков Wayfinderы частично отключаются т.е. главное меню работает а доп.меню слева не работает, а в английской версии и главное пропадает, после обновления страницы всё появляется

                                                            З.Ы точно так же форма ввода пароля не отображается, только после повторного обновления страницы. Пакет Login. Помогите пожалуйста кто чем может?!
                                                            1. Мордынский Николай 28 июня 2013, 10:38 # 0
                                                              С таким не сталкивался. Все работало как надо.

                                                              Я делал для каждого языка категорию и в нее копировал чанки снипеты и шаблоны отдельно копия каждого элемента для каждого языка нудно зато потом путаницы нет что где менять и скешированием тоже нету проблемм.
                                                              1. Дмитрий Нижник 28 июня 2013, 10:43 # 0
                                                                Заметил что контекст (а именно [[*context_key]]) срабатывает правильно, а вот айди из словаря подставляет от другого контекста. Что за магия, не могу понять
                                                            2. Дмитрий Нижник 28 июня 2013, 11:22 # 0
                                                              С cultureKey проблемы, хотя в контекстах настроено правильно
                                                              1. Дмитрий Нижник 28 июня 2013, 14:50 # 0
                                                                Help!!!
                                                              2. Дмитрий Нижник 28 июня 2013, 17:01 # 0
                                                                Заманался, cultureKey путается при переключении на другие языки… короче спасибо за помощь
                                                                1. Василий Наумкин 28 июня 2013, 17:02 # 0
                                                                  На здоровье!
                                                                2. Homchenko Kostya 03 июля 2013, 19:12 # 0
                                                                  Установил чистый MODx 2.2.8 сделал все по пунктам, не работает ни русская версия ни английская (((( Че за БРЕД ?!?!?!
                                                                  1. Homchenko Kostya 03 июля 2013, 19:51 # 0
                                                                    Все, разобрался. Оказывается в этой части
                                                                    if ($_SESSION['lang'] == 'en') {
                                                                    	$modx->switchContext('en');
                                                                    }
                                                                    там где
                                                                    switchContext('en');
                                                                    
                                                                    надо вместо «en» явно указать имя своего контекста для англоязычных материалов.
                                                                  2. Maxim M 13 августа 2013, 14:44 # 0
                                                                    На демосайте в Firefox 22 под Mac OS после достаточно быстрой смены языков 3-4 раза на странице каталога(да и вообще любой кроме товара) туда-сюда возникает такое при открытии конкретного товара

                                                                    остаются часть чанков случайным образом от прошлого языка. решается сменой языка туда-обратно на странице товара. на скрине, например, от текущего русского есть только цвет.
                                                                    наверное, такое в реальности не произойдет, но все же баг
                                                                    1. Василий Наумкин 13 августа 2013, 14:48 # 0
                                                                      На этом сайте вообще один контекст и все тексты переключаются через лексиконы, динамически. То есть, это одна и таже страница, и некоторые плейсхолдеры на ней кэшируются.

                                                                      Если же делать 2 контекста, как расписано в заметке, то такой проблемы быть не может.
                                                                      1. Maxim M 13 августа 2013, 15:52 # 0
                                                                        Я тоже собирался через лексиконы делать, потому что получается наполнение на всех языках одно, нужно только подписывать в зависимости от языка. Судя по всему, возникает проблема только при быстром переключении подряд, если же это рабочий режим и все делается достаточно медленно, то все ок.
                                                                    2. Павел Левин 06 сентября 2013, 16:37 # 0
                                                                      Я вот делал мультиязычность вида your.domain/en/ и т.п. скок душе угодно по этой инструкции.

                                                                      Правда никаких сессий там не используют и соответственно $_GET параметров.
                                                                      1. Николай 13 сентября 2013, 00:53 # 0
                                                                        Я уже которые сутки пытаюсь догуглиться до истины. Для этого плагина нужен же этот сниппет?
                                                                        На minishop2.com/ Я его не видел, там так же не переводятся товары. Можно настроить это все так чтобы весь сайт был полностью на англ \ рус языке?
                                                                        Я так понял babel создает во втором контексте копию документа, который меняется контентом, шаблонами, и на сайте потом подменяется исходный ресурс на копию. Верно? А как же cart.html, он на сайте должен же быть один.
                                                                        1. Василий Наумкин 13 сентября 2013, 06:03 # 0
                                                                          На minishop2.com это сделано довольно коряво.

                                                                          Нормальный мультиязычный магазин лично я ни разу не делал, но со всех сторон кажется, что дублировать товары для перевода на другой язык — плохо.
                                                                        2. Илья Никитин 14 февраля 2014, 12:36 # 0
                                                                          Подскажите, кто в курсе. Я всё насчёт поисковиков и индексации. Может вместо использования clean-param, который прикажет игнорировать все ?lang= лучше использовать Disallow /*?lang=ru? Иначе как поисковики попадут на страницы переводов, если будут шарить по страницам без параметров? С другой стороны, тогда останутся дубли у иностранных страниц…
                                                                          1. Чикин Артур 14 февраля 2014, 13:09 # 0
                                                                            Robots.txt вам в помощь.
                                                                            1. Василий Наумкин 14 февраля 2014, 13:13 # 0
                                                                              Эта заметка устарела, лучше делать вот так — bezumkin.ru/sections/tips_and_tricks/2439/
                                                                              1. Илья Никитин 15 февраля 2014, 16:45 # 0
                                                                                О, спасибо.
                                                                                Может стоит это указать в начале заметки? А то в гугле эту первым делом выдаёт.
                                                                                1. Василий Наумкин 15 февраля 2014, 18:13 # 0
                                                                                  Лучше я просто редирект сделаю.

                                                                                  bezumkin.ru/sections/tips_and_tricks/2439/
                                                                            Добавление новых комментариев отключено.