首页 文章

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

提问于
浏览
0

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

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

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

  • 如果没有会话变量"lang",我将创建一个并指向"english"

  • 如果已设置会话变量并单击用户更改语言,则会话变量将从"chinese"更改为"english"或"english"更改为"chinese" .

我是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

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

    如果要使用唯一的控制器,请创建语言切换器控制器(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

  • 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"]);
        }
    
    }
    
    
    
    ?>
    

相关问题