Codeigniter переключить язык с URL - PullRequest
       1

Codeigniter переключить язык с URL

0 голосов
/ 06 сентября 2018

Я построил все это: я имею в виду переключение языков с помощью ловушек, но теперь я хочу получить язык из URL и затем переключить его, как:

http://localhost/about-me

или

http://localhost/o-meni

Так что, если я отправлю первую ссылку кому-то, он должен автоматически определить язык и отобразить эту страницу и все навигационные ссылки на этом языке.

В маршрутах, которые я уже передал параметру функции моего основного контроллера, какой язык я хочу использовать. Теперь мне нужно установить этот язык. Но если я сделаю $ this-> session-> set_userdata ('site_lang', "српски"), язык позади не изменится для всех.

Я заметил, что в существующем переключателе языков перенаправление используется после установки языкового сеанса на выбранный язык, перенаправления на реферальную ссылку, но как теперь управлять прямым вводом пользователя?

Надеюсь, я прояснил ситуацию и надеюсь, что кто-то займется этим.

Спасибо.

1 Ответ

0 голосов
/ 07 сентября 2018

Я нашел решение, подобное этому:

Обновление 1:

Я сделал это так, сначала в переключателе языка:

class LanguageSwitcher extends CI_Controller {

  public function __construct() {
    parent::__construct();
  }

  function switchLang($language = "") {
    $lang_en['about-me'] = 'o-meni';
    $lang_sr['o-meni'] = 'about-me';

    $lang_en['services'] = 'usluge';
    $lang_sr['usluge'] = 'services';

    $lang_en['products'] = 'proizvodi';
    $lang_sr['proizvodi'] = 'products';

    $lang_en['downloads'] = 'preuzimanja';
    $lang_sr['preuzimanja'] = 'downloads';

    $lang_en['contact'] = 'kontakt';
    $lang_sr['kontakt'] = 'contact';

    if ($language === "") {
      $language = 'српски';
    }

    $this->session->set_userdata('site_lang', $language);

    $referrer = strtolower($this->agent->referrer());
    //log_message('error', "switchLang:" . $referrer . ", lang:" . $language);
    if ($referrer !== "") {
      $l = str_replace(base_url(), "", substr($referrer, strrpos($referrer, base_url())));

      if (urldecode($language) === 'српски' && array_key_exists($l, $lang_en)) {
        $referrer = str_replace($l, $lang_en[$l], $referrer);
      } else
      if (urldecode($language) === 'english' && array_key_exists($l, $lang_sr)) {
        $referrer = str_replace($l, $lang_sr[$l], $referrer);
      }

      redirect($referrer);
    }
  }

}

а во-вторых, в моем контроллере создайте функцию для вызова:

private function redirectLanguage($param) {
  $site_lang = urldecode($this->session->userdata('site_lang'));
  //echo $param . "+" . $site_lang;
  if ($param === "sr" && ($site_lang === "english" || $site_lang === "")) {
    $this->session->set_userdata('site_lang', "српски");
    $this->lang->load("message", "српски");
  } else if ($param === "en" && ($site_lang === "српски" || $site_lang === "")) {
    $this->session->set_userdata('site_lang', "english");
    $this->lang->load("message", "english");
  }
}

следующим образом:

  public function about($param = "") {

    $this->redirectLanguage($param);

    $this->load->view('header');
    $this->load->view('main_starts');
    $this->load->view('about-me');
    $this->load->view('main_ends');
    $this->load->view('footer');
  }

таким образом, я могу перехватить ее, если непосредственно вставить в адресную строку браузера, и загрузитьсообщения и установить сеанс site_lang.

Теперь это работает, все, кроме некоторых проблем в IE и EDGE;

Обновление 2:

Мне пришлосьдобавьте его, чтобы убедиться, что он будет работать и в других браузерах:

$browser = $this->agent->browser();

if ($browser === "Chrome" || $browser === "Firefox") {
  header("Cache-Control: max-age=3600, public");
} else {
  header("Expires: Sun, 19 Nov 1978 05:00:00 GMT");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
}

, потому что сеансы не будут хорошо работать в Internet Explorer, если включено кэширование, поэтому лучше отключите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...