2011-09-27 147 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' 

现在保存并运行应用程序。