2010-02-15 99 views
2

我正在使用codeigniter和我正在處理的項目必須在兩種語言。Codeigniter不同的DB爲每種語言

我弄不清楚的唯一問題是如何在會話變量設置爲特定值時在codeigniter中選擇不同的數據庫。

例如:

如果會話變量 '語言' 設置爲 'EN' 我希望它選擇DB: 「databasename_EN」

在所有其他情況下

選擇DB: 「databasename_EN」

我發現的唯一的事情是,你可以做$ this-> db-> load('bla');但這意味着您必須在每個模型中添加一個數據庫加載,並且必須禁用自動加載「數據庫」。

+1

你一定要明白,你剛纔說你總是要選擇DB:'datebasename_EN' – 2010-02-15 16:44:25

回答

4

對於我將創建一個pre_system掛鉤來一個$ _SESSION [「郎」]變量是否存在,最好的結果,如果它不設置固定:

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

我想你可以創建一個MyModel類擴展模型和處理這個體操。比所有你需要做的是使用MyModel作爲你的模型的父類。

+0

你可能想看看這有很好的http:// codeigniter.com/user_guide/libraries/language.html – t00ny 2010-02-15 20:11:58

3

菲爾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 

+1

這將很方便地爲不同的語言設置不同的數據庫編碼,但除此之外,您最終會重複每種語言的用戶名/密碼配置。 – 2010-02-17 10:00:32

+0

我同意,在這種情況下,更改數據庫名稱應該足夠了。 – gimpe 2010-02-17 14:07:17