0

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

我有我的逻辑来保持 name_en 和 name_fr、description_en 和 description_fr...所有这些都在同一个表中,所以当我添加新语言时,我会将这些行加倍。当我将进行 Select 查询时,我会将段“en”传递给查询并连接到 name_ 或 description_ 的末尾,因此它将成为 name_en 或 description_fr 或 category_es。

我希望有更好的方法,你们中的一些已经使用过的人会帮助我完成。

4

1 回答 1

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());
    }
于 2013-03-10T20:16:47.527 回答