繁体   English   中英

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

[英]codeigniter redirect to language with location as default link

当前在codeigniter多语言网站上工作。 我的网站名称是www.abcd.com,它正在调用默认控制器。 需要重定向www.abcd.com/en/location作为默认链接,当用户更改语言时,它将像www.abcd.com/fr/location一样重定向。 最好的方法是什么,任何帮助将不胜感激

我使用这样的会议

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

尽管您可以使用路由执行此操作,但我始终建议在应用程序/核心内部使用名称为MY_Controller的单独的控制器类,以扩展默认的CI_Controller

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-> uri-> segment(2); //小心,数量取决于您的项目

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM