Codeigniter为每种语言提供不同的DB

时间:2010-02-15 16:30:28

标签: php codeigniter multilingual

我正在使用codeigniter,我正在处理的项目必须使用两种语言。

我唯一想知道的是当会话变量设置为某个值时,如何在codeigniter中选择不同的数据库。

示例:

如果会话变量'language'设置为'EN',我希望它选择数据库: “databasename_EN”

在所有其他情况下选择DB: “databasename_EN”

我发现的唯一一件事是你可以做$ this-> db-> load('bla');但这意味着你必须在每个模型中添加一个DB-load,你必须禁用自动加载'数据库'。

3 个答案:

答案 0 :(得分:4)

为了获得最佳结果,我将创建一个pre_system挂钩,用于检查$ _SESSION ['lang']变量是否存在以及是否设置了常量:

define('LANG', isset($_SESSION['lang']) ? $_SESSION['lang'] : 'EN');

然后在您的数据库配置文件中执行以下操作:

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_".LANG;
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

应该尽量减少麻烦。

答案 1 :(得分:3)

Phil Sturgeaon的一个变种回答:


$active_group = LANG; // switch the DB based on the LANG constant

$db['EN']['hostname'] = "localhost";
$db['EN']['username'] = "root";
$db['EN']['password'] = "";
$db['EN']['database'] = "databasename_EN";
// etc

$db['FR']['hostname'] = "localhost";
$db['FR']['username'] = "root";
$db['FR']['password'] = "";
$db['FR']['database'] = "database_FR";
//etc

答案 2 :(得分:1)

我猜你可以创建一个MyModel类来扩展Model并处理这个体操。你需要做的就是使用MyModel作为模型的父类。