我在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);
}
}
}
我该如何解决这个问题? 感谢
答案 0 :(得分:0)
尝试:
if ($preferredLang != 'en') {
redirect(base_url()."/$preferredLang");
}
<强>增加:强>
如果您正在使用CI
语言类,则需要在application/language
内设置语言文件,然后在控制器中加载该语言。