Помощь Локализации и языки на разных субдоменах РЕШЕНО

Тема в разделе "Opencart", создана пользователем madmaximus85, 4 фев 2014.

Информация :
Внимание форумчане! При создании тем, или выкладывании какой-либо информации проверьте в какой ветке форума вы находитесь! Не путайте Opencart и Opencart2. При несоблюдении данного условия выносится соответствующее наказание! И потом не говорите что вас НЕ ПРЕДУПРЕЖДАЛИ! По возможности используйте обменники mail, yandex, google, dropbox, rghost Дабы избежать просьб перезалить и проблем с рекламой!
Модераторы: ZiX
  1. madmaximus85

    madmaximus85 Постоялец

    Регистр.:
    30 июл 2012
    Сообщения:
    98
    Симпатии:
    51
    Есть сайт на трех языках, сборка 1.5.6, все три языка разбросаны по разным субдоменам со своими локализациями
    site.com русский
    uk.site.com украинский
    en.site.com английский

    проблема в том что при переходе между сайтами сохраняются настройки основного домена, т.е. при переходе с русской на английскую версию остается русский язык и его нужно принудительно переключать (тоже и с валютами по-умолчанию для данного сайта).
    Хотя в настройках магазина в админке локализации заданы верно (т.е. для каждого сайта прописаны свои языки фронтенда). Причем если сразу зайти с другого браузера на en.site.com то открывается верная локализация, а вот если попытаться перейти с site.com по ссылке на en.site.com то язык не меняется.

    Данная проблема была и на других версиях, сейчас решил все-таки побороть, чувствую что копать надо скорее в сессиях и кукисах
     
  2. Цукер

    Цукер Сам себе призедент

    Moderator
    Регистр.:
    5 мар 2008
    Сообщения:
    414
    Симпатии:
    375
    офтоп:
    uk - United Kingdom а не украина....
    ua - украина
     
  3. madmaximus85

    madmaximus85 Постоялец

    Регистр.:
    30 июл 2012
    Сообщения:
    98
    Симпатии:
    51
    Для обозначения языковых субдоменов (а не географической привязки) как я помню
    UKrainian
    ENglish

    На минуточку: uk.wikipedia.org
     
    CAPAXA нравится это.
  4. indie_pal

    indie_pal Создатель

    Регистр.:
    9 фев 2014
    Сообщения:
    4
    Симпатии:
    0
    Проблема в сессиях. Если просто - попробуй оставить только по одному соответствующему языку (по-умолчанию) в каждом магазине, остальные поудаляй. Сведи все заказы в магаз с родным языком (через мультимагазин).
     
  5. madmaximus85

    madmaximus85 Постоялец

    Регистр.:
    30 июл 2012
    Сообщения:
    98
    Симпатии:
    51
    Это и так понятно что в сессиях. Движок стоит один, база одна, в настройках каждого магазина соответственно выпадающие меню для всех предустановленных языков и удалить можно только в локализациях, что вообще не решит проблему. Зачем мне сводить заказы? Проблема в том что клиент переходя по ссылке сохраняет настройки сессии и остается с русским языком на домене где должен стоять английский
     
  6. RORC

    RORC

    Регистр.:
    14 июн 2013
    Сообщения:
    173
    Симпатии:
    41
    самое простое решение переключить ajax скриптом

    в скрипте проверяем домен и язык, если домен сменился и язык не дефолтный для него, то лучше предложить переключить, можно и принудительно конечно.
     
    madmaximus85 нравится это.
  7. madmaximus85

    madmaximus85 Постоялец

    Регистр.:
    30 июл 2012
    Сообщения:
    98
    Симпатии:
    51
    Спасибо, наверное так и сделаю, причем принудительно поскольку каждый домен задумывался только со своим языком. Для переключения языков -используются ссылки на другие домены, где также будет принудительное переключение.

    Начал искать пути передачи данных о языке в xml и тут натолкнулся на решение проблемы

    BINGO index.php

    вот механизм проверки языков в OC
    Сначала смотрит сессии, затем куки и лишь потом смотрит на дефолтный для домена язык!

    Код:
    if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
        $code = $session->data['language'];
    } elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
        $code = $request->cookie['language'];
    } elseif ($detect) {
        $code = $detect;
    } else {
        $code = $config->get('config_language');
    }
    Закомментировал первую часть кода. Решение проблемы найдено
    Код:
    if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
        /*$code = $session->data['language'];
    } elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
        $code = $request->cookie['language'];
    } elseif ($detect) {
        $code = $detect;
    } else {*/
        $code = $config->get('config_language');
    }
     
    Последнее редактирование: 12 фев 2014