我正在使用Codeigniter建立一个多语言的在线站点。我的问题是 如何将数据从数据库传递到Codeigniter语言文件 。到目前为止,我的逻辑是运行foreach查询,该查询将使用translation_key和value填充语言文件。问题在于语言文件不是扩展的CI_class类,现在我不知道如何继续。
foreach
您将如何处理该问题?文档没有说明如何在数据库中使用语言类。
您走在正确的轨道上。您需要动态创建一个语言文件(例如,每当您更新数据库的语言内容时)
第一:数据库布局
创建一个表lang_token的列id,category, description,lang,token,填充它的领域是这样的:
lang_token
id
category
description
lang
token
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目录中查找,每种语言应存储在其自己的文件夹中。确保创建了英语或德语等子目录,例如application/language/english
application/language/english
第三:控制器功能可即时创建语言文件
关于Codeigniter语言文件:好的做法是对给定文件中的所有消息使用通用前缀(类别),以避免与其他文件中名称相似的项目发生冲突。结构类似: $lang['category_description'] = “token”;
$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); }
最后说明:
updatelangfile(‘english’)
function __construct(){ parent::__construct(); $this->load->helper('file'); $this->lang->load('general', 'english');
}