2011-09-27 151 views
5

目前我有一個語言加載在MY_Controller中,它擴展了CI_Controller。但是在一個特殊的頁面中,控制器(我們稱之爲ABC控制器)擴展了MY_Controller,我需要用另一種語言覆蓋加載的語言。我嘗試在這個ABC控制器中加載另一種語言,但沒有成功。有沒有辦法卸載加載的語言並加載另一種語言?Codeigniter更改加載語言

+0

檢查在這篇文章中的答案http://stackoverflow.com/questions/31895341/codeigniter-dynamic-language-functionality/41661355#41661355 –

回答

3

您是否嘗試過只加載所需的語言文件?

$this->lang->load('filename', 'language'); 

應該然後訪問就像你的默認語言。我還沒有測試過這個壽命,但從我的理解來看,這應該是一條路。

參考:http://codeigniter.com/user_guide/libraries/language.html


修訂

我結束了挖多一點給你,發現你不能加載默認語言(在你的控制器將其定義爲默認)然後再嘗試將其更改爲其他內容。

遵循以下步驟:

  • 如果你需要比英語(默認)之外的語言,設置,在你的配置。
  • 如果要加載其他語言的控制器的基礎上,你需要使用類似會議陣列/用戶選擇在constructor定義(最常見的。
  • 你不能在構造函數中加載2種語言(1,則另一個不同的類..不會每次論壇的帖子在這裏工作)

參考:http://codeigniter.com/forums/viewthread/176223/

+0

是的,我已經加載了默認語言(英語)內MY_Controller擴展其他控制器。我嘗試加載一個輔助(中文)語言,希望它能夠覆蓋這個ABC控制器內部的英語語言,這個語言也擴展了MY_Controller,但是仍然只能訪問英語語言。 – coder

+0

我已經更新了我的答案,看起來像你需要修復你的控制器,不能在1個控制器(或你擴展的控制器)中聲明2種語言。 – Jakub

+0

酷thx。我想我只需要爲我的MY_Controller構造函數實現另一個可選參數,以確定要加載哪種語言。這應該適用於我的情況。 Thx努力! – coder

4

我遇到這樣的問題,並找到一個棘手的解決方案

$this->lang->load('text', 'english'); 
echo $this->lang->line('__YOUR_LANG_VARIABLE__'); 

//CI will record your lang file is loaded, unset it and then you will able to load another 
//unset the lang file to allow the loading of another file 
if(isset($this->lang->is_loaded)){ 
    for($i=0; $i<=sizeof($this->lang->is_loaded); $i++){ 
     unset($this->lang->is_loaded[$i]); 
    } 
} 

$this->lang->load('text', 'chinese'); 
echo $this->lang->line('__YOUR_LANG_VARIABLE__'); 

希望它有幫助。

+0

這是使用具有相同密鑰的語言文件處理時唯一的工作解決方案 –

+0

像魅力一樣工作!謝謝! – Roomm

17

一個更簡單的辦法就是重新設置語言數據和is_loaded

$this->lang->is_loaded = array(); 
$this->lang->language = array(); 
+1

作品完美!正是我在找的東西。 – JoshHighland

+1

很好的答案,謝謝你帶來了! – Ando

+0

這對我來說工作得很好。謝謝! – grpaiva

4

我知道這是一個有點晚來回答這個問題,但我認爲你可以更改配置項目「語言」動態基於網頁的要求。

$this->config->set_item('language', 'chinese'); 
$this->config->set_item('language', 'english'); // based on the language folder of course holding language files 

我不得不在用戶基礎郎發送簡訊的要求,幫我更改語言上飛,希望這可以幫助..

+0

適用於我:D ...這應該是我接受的答案,我相信這是所有給出答案中最簡單的解決方案。 –

-1

如果您安裝了內置codeigniter和您要添加的語言包的任何應用程序,只需按以下步驟操作:

  1. 添加文件夾application/language/arabic
  2. 語言文件(我加了阿拉伯語郎SMA2建於CI )
  3. 轉到指定的文件setting.php
  4. 在​​你會發現陣列:
<div class="controls"> 

    <?php /* 

    $lang = array (
     'english' => 'English', 

     'arabic' => 'Arabic', // +++ Add this line 

     'spanish' => 'Español' 

現在保存並運行應用程序。