我找不到这个问题的答案......我正在制作一个基于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。
我希望有更好的方法,而且你们中的一些人已经帮助过我了。
答案 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());
}