CodeIgniter和多语言数据库

时间:2014-10-06 23:30:04

标签: php mysql database codeigniter multilingual

我正在CodeIgniter上创建一个多语言应用程序,我对如何以正确的方式创建数据库的问题感到困惑。
我以前做过这个,但使用“最简单”的方法:

表新闻

id
title_en
title_de
title_rus
title_fr

依旧......
很容易,因为在一个查询中插入数据库,从一个查询中选择,轻松工作 当我想为用户显示我需要的语言时,我只选择符合的字段 使用这种方法,依赖于数据库的一切都很简单(插入,选择,更新) 但是当我需要添加另一种语言时,有很多事情需要改变 所以我想让我们尝试将所有不同语言的文本字段放在另一个表中。

表新闻

id
date
author

表news_lang

id
news_id
title
language

所以我把它分成了两个表,它们应该为我解决新语言的问题,它应该让数据库看起来更干净。
选择当前语言没问题:

$this->db->select("news.id, news.date, news.author, news_lang.title");
$this->db->join("news_lang", "news_lang.news_id = news.id");
$this->db->where("news.id", $news_id);
$this->db->where("news_lang.language", $language);
$this->db->get("news")->row();


但是当我需要所有语言字段进行编辑时该怎么办? 我可能不得不将它们放在另一个不太好的物体或阵列上 以及让我在这里问的主要问题 - 如何插入所有数据?
在第一种方法中,我已经在模型中的一个方法中完成了这些事情。现在我不认为没有任何其他方法没有使用一些循环 我使用错误的逻辑?还有另一种“干净”的方法吗?
我正在考虑将所有数据放在一个字段而不制作两个表,但是使用json对语言数据进行序列化或编码然后将其放在一个字段中,但我不确定这是否是一个好主意。
你能给我任何建议吗? 谢谢, 麦克

1 个答案:

答案 0 :(得分:0)

我要做的是为每种语言设置单独的表,然后我不会直接访问codeigniter数据库对象,而是创建一个工厂,根据我为其配置的语言,它将为我提供所需的模型。然后从那一点开始,您将使用从工厂获得的任何数据库对象,就好像只有一种语言一样。

类似的东西:

$myDBmodel = $this->dbFactory('news','fr');

$myDBmodel->select("id, date, author, etc...");

然后是工厂:

function dbFactory($table, $language) {

    switch($language) {
        case 'fr':

            (psudocode: return french version of db model)

        default:

            (psudocode:  return whatever your default language version of the model is)
    }
}
相关问题