2012-10-12 106 views
0

我目前正在用codeigniter 2.1.2構建一個網站。現在我遇到了一個有效構建多語言網站的問題。PHP Codeigniter多語言網站使用會話變量來存儲語言密鑰

我已經閱讀了語言課程教程和幫手,我已經存儲了兩個語言文件夾「中文」和「英文」。

我打算做的是我想要一個名爲「lang」的語言會話變量。我希望以下內容:

  1. 如果沒有會話變量「郎」的存在,我將創建一個指向它爲「英語」
  2. 如果會話變量已經被設置和用戶點擊了語言的變化,那麼會話變量將從「中文」變爲「英文」或「英文」變爲「中文」。

我對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']); 
    } 
} 

回答

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

} 



?> 
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