I'm building a multilingual site under Codeigniter 3.0 and I'd like to have this behavior:
The default language of the site is 'en'. When user visits site (/), it gets browser's Accept-language and stores it in session var. Then I check if language is 'en' or not. If not, it redirects to mysite.com/lang. Case language is not 'en', do nothing so it keeps mysite.com/
The problem is that CI takes /lang as a controller.
I edited routes.php as following:
$route['es'] = '/';
$route['en'] = '/';
$route['de'] = '/';
But now I'm on a "too many redirects" issue as routes.php redirects to / when coming from /language and in my controller redirects to /language
My controller:
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);
}
}
}
How can I solve this? Thanks