PHP Codeigniter多语言站点使用会话变量来存储语言键

时间:2012-10-12 10:50:28

标签: php codeigniter multilingual

我目前正在使用codeigniter 2.1.2构建一个网站。现在我遇到了有效构建多语言网站的问题。

我已经阅读了语言课程教程和助手,我已经存储了两个语言文件夹“Chinese”和“English”。

我打算做的是我想要一个名为“lang”的语言会话变量。我想要以下内容:

  1. 如果不存在会话变量“lang”,我将创建一个并将其指向“english”
  2. 如果已设置会话变量并且用户单击以更改语言,则会话变量将从“chinese”更改为“english”或“english”更改为“chinese”。
  3. 我是PHP和Codeigniter的新手,我现在能想到的就是以下内容。任何人都能发挥一些亮点,因为我可以有效地允许用户更改我网站上的语言吗?

    我不知道如何根据用户的点击事件更改会话变量。

    // Load Language Files 
    if(!$this->session->userdata('lang')) {
        $this->session->set_userdata('lang','english');
        $lang = 'english';
    } else {
        $lang = 'chinese';
    }
    $this->lang->load('pages/header',$lang);
    

    我创建了一个语言控制器并设置了会话变量,然后将页面重定向回上一页。这是一个好方法吗?

      <?php
    
    Class language Extends CI_Controller {
    
        function index() {
            if(!$this->session->userdata('lang')) {
                $this->session->set_userdata('lang','english');
            } else {
                $lang = $this->session->userdata('lang');
                if ($lang =="chinese") {
                    $this->session->set_userdata('lang','english');
                } elseif ($lang == "english") {
                    $this->session->set_userdata('lang','chinese');
                } else {
                    $this->session->set_userdata('lang','english');
                }
            }
            header('Location: ' . $_SERVER['HTTP_REFERER']);
        }
    }
    

2 个答案:

答案 0 :(得分:7)

制作语言控制器。当用户点击语言链接时,将用户引导至相关方法 http://www.yoursite.com/language/english用于英语,类似用于中文。我使用cookie而不是会话变量。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Language extends CI_Controller{
    function __construct(){
        parent::__construct();
    }

    public function index(){
        $this->english();
    }

    public function english(){
        $this->lang->load('labels', 'english');
        //$this->session->set_userdata("LANGUAGE","english");
        $cookie = array(
                    'name'   => 'LANGUAGE',
                    'value'  => 'english',
                    'expire' => 604800
                );
        $this->input->set_cookie($cookie);
        header("location: ".$_GET["ref"]);
    }

    public function chinese(){
        $this->lang->load('labels', 'chinese');
        //$this->session->set_userdata("LANGUAGE","chinese");
        $cookie = array(
                    'name'   => 'LANGUAGE',
                    'value'  => 'chinese',
                    'expire' => 604800
                );
        $this->input->set_cookie($cookie);
        header("location: ".$_GET["ref"]);
    }

}



?>

答案 1 :(得分:0)

使用CodeIgniter构建多语言网站的最佳方法是使用语言类,挂钩和控制器。

如果您想使用唯一的控制器,请创建一个语言切换器控制器(LanguageSwitcher)并编写以下代码。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class LanguageSwitcher extends CI_Controller
{
    public function __construct() {
        parent::__construct();
        $this->load->helper('language');
        $siteLang = $this->session->userdata('site_lang');
        if ($siteLang) {
            $this->lang->load('message',$siteLang);
        } else {
            $this->lang->load('message','english');
        }   
    }

    function switchLang($language = "") {

        $language = ($language != "") ? $language : "english";
        $this->session->set_userdata('site_lang', $language);

        redirect($_SERVER['HTTP_REFERER']);

    }
}

可以在此处找到完整的多语言教程 - Multi-Language implementation in CodeIgniter