PHP Codeigniter 多语言站点使用会话变量来存储语言密钥
Posted
技术标签:
【中文标题】PHP Codeigniter 多语言站点使用会话变量来存储语言密钥【英文标题】:PHP Codeigniter multi-language site use session variables to store language key 【发布时间】:2012-10-03 04:07:25 【问题描述】:我目前正在使用 codeigniter 2.1.2 构建一个网站。现在我遇到了有效构建多语言网站的问题。
我已经阅读了语言类教程和助手,我已经存储了两个语言文件夹“中文”和“英文”。
我打算做的是我想要一个名为“lang”的语言会话变量。我想要以下内容:
-
如果不存在会话变量“lang”,我将创建一个并将其指向“english”
如果会话变量已设置并且用户单击更改语言,则会话变量将从“中文”更改为“英文”或“英文”更改为“中文”。
我对 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']);
【问题讨论】:
【参考方案1】:制作一个语言控制器。当用户点击语言链接时,将用户引导至相关方法 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"]);
?>
【讨论】:
【参考方案2】:使用 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
【讨论】:
以上是关于PHP Codeigniter 多语言站点使用会话变量来存储语言密钥的主要内容,如果未能解决你的问题,请参考以下文章