首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多语言站点使用会话变量存储语言密钥。

多语言站点使用会话变量存储语言密钥。
EN

Stack Overflow用户
提问于 2012-10-12 10:50:28
回答 2查看 9.6K关注 0票数 0

我目前正在建立一个与代码点火器2.1.2的网站。现在,我遇到了一个问题,如何有效地建立一个多语言网站。

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

我打算做的是我想要一个名为"lang“的语言会话变量。我要做以下几件事:

  1. 如果没有会话变量"lang“,我将创建一个,并将其指向"english”。
  2. 如果会话变量已经设置并用户单击以更改语言,则会话变量将从“中文”更改为“英语”或“英文”更改为“中文”。

我对PHP和Codeigniter非常陌生,我现在所能想到的就是如下所示。有人能看到我如何有效地让用户在我的网站上改变语言吗?

我不知道如何在用户单击事件时更改会话变量。

代码语言:javascript
复制
// 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);

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

代码语言:javascript
复制
  <?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']);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-12 11:03:38

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

代码语言:javascript
复制
<?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"]);
    }

}



?>
票数 7
EN

Stack Overflow用户

发布于 2015-09-28 13:11:28

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

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

代码语言:javascript
复制
<?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']);

    }
}

在这里可以找到完整的多语言教程- CodeIgniter中的多语言实现

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12857419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档