CodeIgniter - 全局加载语言(不是按文件而是按文件夹)

CodeIgniter - Load language globally (not by file but by folder)

现在:

在配置文件中您可以设置默认语言:

$config['language'] = 'german';

每个加载的语言文件现在都从 'german' 文件夹中加载

$this->lang->load('custom_messages');
echo $this->lang->line('hello');          //prints "hallo"

通过

在本地更改语言很容易
$this->lang->load('custom_messages', 'english');
echo $this->lang->line('hello');          //prints "hello"

愿望:

但我想像配置文件一样在整个系统范围内更改语言(登录时选择语言)。所以我不必用正确的语言属性一个一个地加载每个 _lang-File。

伪代码(配置语言 -> 德语)

$this->lang->set('english');
$this->lang->load('custom_messages');
echo $this->lang->line('hello');          //should print "hello"

没有关于这个(在我看来很常见)用例的记录。

这行不通:

$this->config->set_item('language', 'english');

我已经在本地进行了测试,您似乎可以使用 set_item 更改语言,但您必须在加载语言文件之前执行此操作。

您可以在构造函数中执行此操作,在会话中保存当前语言名称,然后在构造函数中设置它

public function __construct () {
    parent::__construct();
    $this->config->set_item('language', $this->session->userdata('current_language'));  
}

这是我的测试控制器:

public function index()
    {
        var_dump($this->config->item('language')); // english
        $this->config->set_item('language', 'german');
        var_dump($this->config->item('language')); // german
        $this->lang->load('test');
        var_dump($this->lang->line('something')); // german translated line
    }