Php codeigniter重定向到位置为默认链接的语言

Php codeigniter重定向到位置为默认链接的语言,php,html,codeigniter,multilingual,Php,Html,Codeigniter,Multilingual,目前正在codeigniter多语言网站上工作。我的网站名是www.abcd.com,正在调用默认控制器。需要将www.abcd.com/en/location重定向为默认链接,当用户更改其将重定向的语言时,如www.abcd.com/fr/location。做这件事的最佳方法是什么,任何帮助都将受到高度赞赏我使用这样的会话 application/config/routes.php $route['default_controller'] = "default_controller/se

目前正在codeigniter多语言网站上工作。我的网站名是www.abcd.com,正在调用默认控制器。需要将www.abcd.com/en/location重定向为默认链接,当用户更改其将重定向的语言时,如www.abcd.com/fr/location。做这件事的最佳方法是什么,任何帮助都将受到高度赞赏

我使用这样的会话

application/config/routes.php

$route['default_controller']    = "default_controller/select_home";
//if make a generic page public example
$route['public/(:any)']         = 'public/public/page_render/$1';
default_controller.php

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

    $this->router =& load_class('Router', 'core');

    $this->_set_lang_language($this->get_language());
}

public function select_home( $page = 'index' ){
    redirect(base_url($page), 'refresh');
}

public function get_language(){
    if( is_null($this->session->userdata('language')) || ! $this->session->userdata('language')){
        $_language      = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    }
    else{
        $_language      = $this->session->userdata('language');
    }

    return $_language;
}

private function _set_lang_language( $language = '' ){
    switch($language){
        case 'en':
                                $new    = 'english';
                                break;
        case 'es':
        default:
                                $new    = 'spanish';
                                break;
    }

    $this->lang->load('calendar', $new);
    $this->lang->load('date', $new);
    $this->lang->load('db', $new);
    $this->lang->load('email', $new);
    $this->lang->load('form_validation', $new);
    $this->lang->load('ftp', $new);
    $this->lang->load('imglib', $new);
    $this->lang->load('number', $new);
    $this->lang->load('profiler', $new);
    $this->lang->load('unit_test', $new);
    $this->lang->load('upload', $new);
}

public function set_language( $language ){
    $this->session->set_userdata('language', $language);

    $this->_set_lang_language();
}
application/public/public.php

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

public function page_render( $page ){
    //you can change your lang with parser or with deferents views as you want
    $data = array(...);

    $this->load->view('header', $data);
    $this->load->view($page, $data);
    $this->load->view('footer', $data);
}

尽管您可以使用routes执行此操作,但我始终建议在应用程序/core内部使用名为MY_controller的单独控制器类,扩展默认的CI_控制器

class MY_Controller extends CI_Controller {
    function __construct() {
    }
}
然后在控制器中(比如说示例控制器),您必须扩展MY\u控制器,并在构造函数中添加所需的功能

class Example_controller extends MY_Controller {
    public function __construct() {
        parent::__construct();
    }
}
您可以在MY_控制器内根据需要执行哪些操作?好吧,你可以查一下

$language=$this->uri->segment(2)//小心,数字取决于你的项目

并在$language的if语句中应用您的功能

class MY_Controller extends CI_Controller {
    function __construct() {
    }
}

为了检查用户是否已经选择了他的语言,您必须与会话相结合。

最好的方法是在routes.php中定义url