如何使用Codeigniter从多语言站点的数据库中读取不同的条目?

时间:2013-03-10 01:09:54

标签: mysql database codeigniter multilingual

我找不到这个问题的答案......我正在制作一个基于Codeigniter和MySQL数据库的多语言网站。对于静态语言文本我正在使用内置的lang函数并根据URL / en / / fr / ...的第一段我正在加载相应的语言文件,但是如何加载和显示相应的数据从数据库?我如何将数据保存在数据库中?我有产品表,一半的条目是数值,但另一半是应该用2或3种语言保存的文本。

我的逻辑是将name_en和name_fr,description_en和description_fr ......保存在同一个表中,所以当我添加新语言时,我会将这些行加倍。 当我将进行Select查询时,我将把段“en”传递给查询并在name_或description_的末尾进行concanate,这样它就会变成name_en或description_fr或category_es。

我希望有更好的方法,而且你们中的一些人已经帮助过我了。

1 个答案:

答案 0 :(得分:0)

我使用两个表来支持多语言。第一个表包括项目字段。例如日期,投票等。语言字段的第二个表。

CREATE TABLE `item` (
  `item_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `nested_category_id` int(11) DEFAULT NULL,
  `image_file` varchar(100) NOT NULL,
  `date` varchar(0) DEFAULT NULL,
  PRIMARY KEY (`item_id`)
);

CREATE TABLE `item_lang` (
  `item_lang_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `lang_id` varchar(2) NOT NULL,
  `item_id` int(11) unsigned NOT NULL,
  `url_name` varchar(255) NOT NULL DEFAULT '',
  `meta_title` varchar(255) DEFAULT NULL,
  `meta_description` text,
  `meta_keywords` varchar(255) DEFAULT NULL,
  `name` varchar(255) NOT NULL,
  `title` varchar(255) DEFAULT NULL,
  `description` text,
  PRIMARY KEY (`item_lang_id`)
);

如果您需要一行,请尝试这样。

function get_row( $id, $lg='tr'){

        $arr = array($id, $lg);

        $sql    = " SELECT ".$this->_table.".*, ".$this->_table_lang.".*
                     FROM ".$this->_table." 
                LEFT JOIN ".$this->_table_lang." 
                       ON ".$this->_table.".".$this->_table."_id = ".$this->_table_lang.".".$this->_table."_id 
                    WHERE ".$this->_table.".".$this->_table."_id = ? 
                      AND ".$this->_table_lang.".lang_id=?";

        $data   = $this->db->query($sql, $arr); 

        return ($data->row());
    }