如何处理Codeigniter上的多语言uri重定向?

时间:2017-09-18 08:12:53

标签: codeigniter codeigniter-3

我在Codeigniter 3.0下构建了一个多语言网站,我希望有这样的行为:

网站的默认语言是' en'。 当用户访问网站(/)时,它会获得浏览器的Accept-language并将其存储在session var中。然后我检查语言是否是' en'或不。如果没有,则重定向到mysite.com/lang。案例语言不是' en',什么也不做,所以它保留了mysite.com /

问题是CI需要/作为控制器。

我编辑了routes.php如下:

$route['es'] = '/';
$route['en'] = '/';
$route['de'] = '/';

但是现在我在"太多的重定向"问题为routes.php重定向到/来自/语言,并在我的控制器中重定向到/ language

我的控制器:

class Checklanguage  {

        public $CI;

        /**
         * Constructor.
         */
        public function __construct()
        {
                if (!isset($this->CI))
                {
                        $this->CI =& get_instance();
                }
                $this->CI->load->library('session');
        }

        public function redirect_if_not_default()

        {
                /* LANGUAGES SECTION */
                $browserLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
                // if browser has no language, we use 'en'
                if (strlen($browserLang) != 2) $browserLang = 'en';

                // retrieve session lang (maybe NULL)
                $sessionLang = $this->CI->session->userdata('lang');

                // determine which language use
                // if user has not set any language, we use browser lang
                if(!isset($sessionLang)) $preferredLang = $browserLang;
                // if user has changed language, we use session language
                if (strlen($sessionLang) == 2) {
                        $preferredLang = $sessionLang;
                }

                // redirect if language is not 'en'
                if ($preferredLang != 'en') {
                        header('Location: /'.$preferredLang);
                }

        }
}

我该如何解决这个问题? 感谢

1 个答案:

答案 0 :(得分:0)

尝试:

if ($preferredLang != 'en') {
  redirect(base_url()."/$preferredLang");
}

<强>增加:

如果您正在使用CI语言类,则需要在application/language内设置语言文件,然后在控制器中加载该语言。

CI documentation