【问题标题】:How to create Codeigniter language files from database?如何从数据库创建 Codeigniter 语言文件?
【发布时间】:2014-07-19 08:20:56
【问题描述】:

我正在使用 Codeigniter 构建一个多语言在线网站。 我的问题是如何将数据从数据库传递到 Codeigniter 语言文件。 到目前为止,我的逻辑是运行 foreach 查询,它将使用 translation_key 和 value 填充语言文件。问题是语言文件不是一些扩展的 CI_class 类,现在我不知道如何继续。

你会如何解决这个问题?文档没有说明如何将语言类与数据库一起使用。

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    你在正确的轨道上。您需要动态创建一个语言文件(例如,每当您更新数据库的语言内容时)

    第一:数据库布局

    创建一个表lang_token,其中包含idcategorydescriptionlangtoken 列,并像这样填充其字段:

        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, 'error', 'noMail', 'english', 'You must submit a valid email address'),
          (2, 'error', 'noUser', 'english', 'You must submit a username');
    

    第二篇:关于 CodeIgniter 语言文件

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

    3rd:动态创建语言文件的控制器功能

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

        function updatelangfile($my_lang){
            $this->db->where('lang',$my_lang);
            $query=$this->db->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){
                //$lang['error_csrf'] = 'This form post did not pass our security checks.';
                $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');
      }
      

    【讨论】:

    • Vov,感谢您在此答案中付出的所有努力。我会在接下来的几天里尝试你的代码,我会注意到你的情况。
    • 杰普做到了!再次感谢您!
    猜你喜欢
    • 2022-10-20
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 2012-08-11
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多