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

时间:2017-05-02 12:55:10

标签: php html codeigniter multilingual

目前正致力于codeigniter多语言网站。我的网站名称是www.abcd.com,它调用默认控制器。需要将www.abcd.com/en/location重定向为默认链接,当用户更改将重定向的语言时,如www.abcd.com/fr/location。什么是最好的方式,任何帮助将高度赞赏

2 个答案:

答案 0 :(得分:0)

我使用像这样的会议

应用/配置/ 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();
}

应用/公共/ 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);
}

答案 1 :(得分:0)

虽然您可以使用路由执行此操作,但我始终建议在 application / core 中使用名称为 MY_Controller 的单独控制器类,以扩展默认的 CI_Controller < / strong>即可。

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

然后在你的控制器中(比如说Example_controller),你必须扩展 MY_Controller 并在构造函数中添加你想要的功能。

class Example_controller extends MY_Controller {
    public function __construct() {
        parent::__construct();
    }
}

您可以在MY_Controller中根据自己的需求做些什么?好吧,你可以查看

  

$ language = $ this-&gt; uri-&gt; segment(2); //小心,数量取决于你的项目

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

您必须与会话结合才能检查用户是否已选择其语言。