【问题标题】:Codeigniter different DB for each languageCodeigniter 每种语言的不同数据库
【发布时间】:2010-02-15 16:30:28
【问题描述】:

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

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

示例:

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

在所有其他情况下,选择 DB: "databasename_EN"

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

【问题讨论】:

  • 你确实意识到了,你刚才说你总是想选择 DB:datebasename_EN

标签: php codeigniter multilingual


【解决方案1】:

为了获得最佳结果,我将创建一个 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";

应该以最小的麻烦做这个把戏。

【讨论】:

    【解决方案2】:

    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
    
    

    【讨论】:

    • 为不同语言设置不同的数据库编码会很方便,但除此之外,您最终只会为每种语言重复用户名/密码配置。
    • 我同意,在这种情况下更改数据库名称就足够了。
    【解决方案3】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2010-12-07
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多