CodeIgniter - 存储和读取数据库中的语言。

时间:2014-04-17 10:41:22

标签: php codeigniter

我将db表中的$lang['list_add']语言参数名称保存为list_add。现在我想将它的值存储在db中用于多种语言,并在我的基于CI的应用程序中检索。

如何在我的应用中访问lang文件,以便他们可以从Db读取和写入语言值?

由于

1 个答案:

答案 0 :(得分:2)

您需要动态创建语言文件(例如,每当您更新数据库的语言内容时)

第一:数据库布局

创建一个包含lang_tokenidcategorydescriptionlang列的表token并填充其字段,如下所示:< / p>

    CREATE TABLE IF NOT EXISTS `lang_token` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `category` text NOT NULL,
      `description` text NOT NULL,
      `lang` text NOT NULL,
      `token` text NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

    INSERT INTO `lang_token` (`id`, `category`, `description`, `lang`, `token`) 
    VALUES
      (1, 'list', 'add', 'english', 'add to list'),
      (2, 'list', 'remove', 'english', 'remove from list');

第二名:关于CodeIgniter语言文件

CodeIgniter将首先在您的应用程序/语言目录中查找,每种语言都应存储在自己的文件夹中。确保您创建了英语或德语等子目录,例如application/language/english

第3名:控制器功能,可以动态创建语言文件

关于Codeigniter语言文件: 对给定文件中的所有消息使用公共前缀(类别)是一种很好的做法,以避免与其他文件中类似命名的项冲突 结构类似于:$lang['category_description'] = “token”;

    function updatelangfile($my_lang){
        $this->db2->where('lang',$my_lang);
        $query=$this->db2->get('lang_token');

        $lang=array();
        $langstr="<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
                /**
                *
                * Created:  2014-05-31 by Vickel
                *
                * Description:  ".$my_lang." language file for general views
                *
                */"."\n\n\n";



        foreach ($query->result() as $row){

            $langstr.= "\$lang['".$row->category."_".$row->description."'] = \"$row->token\";"."\n";
        }
        write_file('./application/language/'.$my_lang.'/general_lang.php', $langstr);

    }

最终说明:

  1. 每当您更改数据库时,都会调用函数updatelangfile(‘english’)
  2. 不要忘记在updatelangfile()所在的控制器的构造函数中加载文件助手语言类

    function __construct(){
        parent::__construct();
        $this->load->helper('file');
        $this->lang->load('general', 'english');
    }