如何从数据库中创建笨语言文件?如何从数据库中创建笨语言文件?(How to create Codei

2019-05-12 06:33发布

我在建设有笨的多语言在线网站。 我的问题是如何从数据库将数据传递到笨语言文件 。 我的逻辑至今运行foreach查询,这将填充translation_key和价值的语言文件。 问题是语言文件不是一些扩展CI_class类,现在我不知道如何继续前进。

你会如何来接近这个问题? 文档没有任何关于如何使用语言类数据库说。

Answer 1:

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

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

第三:控制功能,即时创建语言文件

关于该笨的语言文件:这是用于所有消息的共同的前缀(类)在给定的文件,以避免与其他文件类似名称的项目冲突有结构就像是一个很好的做法: $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'); } 


文章来源: How to create Codeigniter language files from database?