Codeigniter Change loaded language

2020-07-11 04:58发布

问题:

Currently i have a language loaded inside MY_Controller which extends CI_Controller. But inside a special page which controller (let's call it ABC controller) extends MY_Controller, I need to override the loaded language with another language. I tried loading another language inside this ABC controller, but unsuccessful. Is there a way to unload the loaded language and load another language?

回答1:

Have you tried just loading the language file you need?

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

It should be then accessible just like your default language. I haven't tested this tho, but from my understanding this should be the way to go about it.

Reference: http://codeigniter.com/user_guide/libraries/language.html


REVISED

I ended up digging a bit more for you, and found that you CANNOT load a default language (define it as default in your controller) and then later try to change it to something else.

Follow these steps:

  • If you need a language OTHER than english (default), set that in your config.
  • If you want to load ANOTHER language on a controller basis, you need to define that (most commonly in your constructor using something like session array / user selection.
  • You cannot load 2 languages (1 in the constructor, then another in a different class.. won't work!)

Reference here per forum posts: http://codeigniter.com/forums/viewthread/176223/



回答2:

an easier way is to reset the language data and is_loaded

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


回答3:

I know it's a bit late to answer this but I think you can change the config item 'language' dynamically based on page requirement.

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

I had a requirement to send newsletters in users base lang, and this helped me change the language on the fly, hope this might help..



回答4:

I encounter this problem and find a tricky solution.

$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__');

Hope it helps.



回答5:

If you have any application installed built in codeigniter and you want add a language pack, just follow these steps:

  1. Add language files in folder application/language/arabic
  2. (I added arabic lang in sma2 built in ci)
  3. Go to the file named setting.php
  4. In application/modules/settings/views/setting.php you will find the array:
<div class="controls">

    <?php /*

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

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

      'spanish' => 'Español'

Now save and run the application.