CDbMessageSource
| 鍖 | system.i18n |
|---|---|
| 缁ф壙 | class CDbMessageSource » CMessageSource » CApplicationComponent » CComponent |
| 瀹炵幇 | IApplicationComponent |
| 婧愯嚜 | 1.0 |
| 鐗堟湰 | $Id: CDbMessageSource.php 3515 2011-12-28 12:29:24Z mdomba $ |
| 婧愮爜 | framework/i18n/CDbMessageSource.php |
CDbMessageSource浠h〃缈昏瘧娑堟伅鐨勬暟鎹潵婧愬瓨鍌ㄥ湪鏁版嵁搴撲腑銆
鏁版嵁搴撳繀椤诲寘鍚潃涓嬮潰涓や釜琛:
褰cachingDuration璁剧疆涓烘鏁版椂锛岀炕璇戠殑娑堟伅灏嗚缂撳瓨銆
鏁版嵁搴撳繀椤诲寘鍚潃涓嬮潰涓や釜琛:
CREATE TABLE SourceMessage
(
id INTEGER PRIMARY KEY,
category VARCHAR(32),
message TEXT
);
CREATE TABLE Message
(
id INTEGER,
language VARCHAR(16),
translation TEXT,
PRIMARY KEY (id, language),
CONSTRAINT FK_Message_SourceMessage FOREIGN KEY (id)
REFERENCES SourceMessage (id) ON DELETE CASCADE ON UPDATE RESTRICT
);
鈥楽ourceMessage鈥欒〃瀛樺偍鐫瑕佺炕璇戠殑淇℃伅锛屸楳essage鈥欒〃瀛樺偍鐫缈昏瘧濂界殑淇℃伅銆
涓嬮潰杩欎袱涓〃鐨勫悕绉版槸鍙互鑷畾涔夎缃紝
sourceMessageTable 鍜 translatedMessageTable銆
褰cachingDuration璁剧疆涓烘鏁版椂锛岀炕璇戠殑娑堟伅灏嗚缂撳瓨銆
鍏叡灞炴
| 灞炴 | 绫诲瀷 | 鎻忚堪 | 瀹氫箟鍦 |
|---|---|---|---|
| behaviors | array | 杩欎釜搴旂敤缁勪欢闄勫姞鐨勮涓恒 杩欐琛屼负灏嗗湪搴旂敤缁勪欢璋冪敤init鏃堕檮鍔犲湪搴旂敤缁勪欢涓娿 璇峰弬鐓CModel::behaviors濡備綍鎸囧畾姝ゅ睘鎬у笺 | CApplicationComponent |
| cacheID | string | 鐢ㄦ潵缂撳瓨娑堟伅鐨勭紦瀛樺簲鐢ㄧ粍浠禝D銆 榛樿涓衡榗ache鈥欙紝杩欓噷鎸囧簲鐢ㄧ▼搴忕紦瀛樼粍浠躲 濡傛灉浣犳兂绂佺敤缂撳瓨缁勪欢锛岃灏嗘灞炴ц缃负false銆 | CDbMessageSource |
| cachingDuration | integer | 淇濆瓨缂撳瓨淇℃伅鐨勭敓鍛藉懆鏈燂紝鍗曚綅鏄銆 榛樿涓0琛ㄧず璇ョ紦瀛樿绂佺敤銆 | CDbMessageSource |
| connectionID | string | 鏁版嵁搴撹繛鎺ョ殑搴旂敤绋嬪簭缁勪欢鐨処D銆傞粯璁ゅ间负鈥榙b鈥欍 | CDbMessageSource |
| dbConnection | CDbConnection | 閫傚簲淇℃伅婧愮殑鏁版嵁搴撻摼鎺ャ | CDbMessageSource |
| forceTranslation | boolean | 褰撴簮璇█鍜岀洰鏍囪瑷鐩稿悓鏃讹紝鏄惁寮哄埗缈昏瘧淇℃伅銆 榛樿涓篺alse锛屾剰鎬濇槸婧愯瑷鍜岀洰鏍囪瑷涓嶅悓鏃舵墽琛屻 | CMessageSource |
| isInitialized | boolean | 妫鏌ュ簲鐢ㄧ粍浠舵槸鍚﹀凡缁忓垵濮嬪寲銆 | CApplicationComponent |
| language | string | 杩斿洖婧愪俊鎭殑涔﹀啓璇█銆 榛樿涓application language銆 | CMessageSource |
| sourceMessageTable | string | 娑堟伅琛ㄧ殑鍚嶇О锛岄粯璁や负鈥楽ourceMessage鈥欍 | CDbMessageSource |
| translatedMessageTable | string | 缈昏瘧鍚庣殑淇℃伅鏁版嵁琛ㄧ殑鍚嶅瓧锛岄粯璁や负鈥楳essage鈥欍 | CDbMessageSource |
鍏叡鏂规硶
鍙椾繚鎶ゆ柟娉
| 鏂规硶 | 鎻忚堪 | 瀹氫箟鍦 |
|---|---|---|
| loadMessages() | 鍔犺浇鎸囧畾璇█鍜屽垎绫荤殑缈昏瘧淇℃伅銆 | CDbMessageSource |
| loadMessagesFromDb() | 浠庢暟鎹簱鍔犺浇淇℃伅銆 | CDbMessageSource |
| translateMessage() | 缈昏瘧鎸囧畾淇℃伅銆 | CMessageSource |
灞炴ц缁
cacheID
灞炴
public string $cacheID;
鐢ㄦ潵缂撳瓨娑堟伅鐨勭紦瀛樺簲鐢ㄧ粍浠禝D銆 榛樿涓衡榗ache鈥欙紝杩欓噷鎸囧簲鐢ㄧ▼搴忕紦瀛樼粍浠躲 濡傛灉浣犳兂绂佺敤缂撳瓨缁勪欢锛岃灏嗘灞炴ц缃负false銆
cachingDuration
灞炴
public integer $cachingDuration;
淇濆瓨缂撳瓨淇℃伅鐨勭敓鍛藉懆鏈燂紝鍗曚綅鏄銆 榛樿涓0琛ㄧず璇ョ紦瀛樿绂佺敤銆
connectionID
灞炴
public string $connectionID;
鏁版嵁搴撹繛鎺ョ殑搴旂敤绋嬪簭缁勪欢鐨処D銆傞粯璁ゅ间负鈥榙b鈥欍
dbConnection
灞炴
鍙 锛堝彲鐢ㄨ嚜 v1.1.5锛
public CDbConnection getDbConnection()
閫傚簲淇℃伅婧愮殑鏁版嵁搴撻摼鎺ャ
sourceMessageTable
灞炴
public string $sourceMessageTable;
娑堟伅琛ㄧ殑鍚嶇О锛岄粯璁や负鈥楽ourceMessage鈥欍
translatedMessageTable
灞炴
public string $translatedMessageTable;
缈昏瘧鍚庣殑淇℃伅鏁版嵁琛ㄧ殑鍚嶅瓧锛岄粯璁や负鈥楳essage鈥欍
鏂规硶璇︾粏
getDbConnection()
鏂规硶
锛堝彲鐢ㄨ嚜 v1.1.5锛
|
public CDbConnection getDbConnection()
| ||
| {return} | CDbConnection | 淇℃伅婧愪娇鐢ㄧ殑鏁版嵁搴撹繛鎺ャ |
婧愮爜锛 framework/i18n/CDbMessageSource.php#102 (鏄剧ず)
public function getDbConnection()
{
if($this->_db===null)
{
$this->_db=Yii::app()->getComponent($this->connectionID);
if(!$this->_db instanceof CDbConnection)
throw new CException(Yii::t('yii','CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.',
array('{id}'=>$this->connectionID)));
}
return $this->_db;
}
閫傚簲淇℃伅婧愮殑鏁版嵁搴撻摼鎺ャ
loadMessages()
鏂规硶
|
protected array loadMessages(string $category, string $language)
| ||
| $category | string | 淇℃伅鍒嗙被 |
| $language | string | 鐩爣璇█ |
| {return} | array | 杩斿洖鍔犺浇濂界殑淇℃伅 |
婧愮爜锛 framework/i18n/CDbMessageSource.php#78 (鏄剧ず)
protected function loadMessages($category,$language)
{
if($this->cachingDuration>0 && $this->cacheID!==false && ($cache=Yii::app()->getComponent($this->cacheID))!==null)
{
$key=self::CACHE_KEY_PREFIX.'.messages.'.$category.'.'.$language;
if(($data=$cache->get($key))!==false)
return unserialize($data);
}
$messages=$this->loadMessagesFromDb($category,$language);
if(isset($cache))
$cache->set($key,serialize($messages),$this->cachingDuration);
return $messages;
}
鍔犺浇鎸囧畾璇█鍜屽垎绫荤殑缈昏瘧淇℃伅銆
loadMessagesFromDb()
鏂规硶
锛堝彲鐢ㄨ嚜 v1.1.5锛
|
protected array loadMessagesFromDb(string $category, string $language)
| ||
| $category | string | 淇℃伅鍒嗙被 |
| $language | string | 鐩爣璇█ |
| {return} | array | 杩斿洖浠庢暟鎹簱鍔犺浇鐨勪俊鎭 |
婧愮爜锛 framework/i18n/CDbMessageSource.php#122 (鏄剧ず)
protected function loadMessagesFromDb($category,$language)
{
$sql=<<<EOD
SELECT t1.message AS message, t2.translation AS translation
FROM {$this->sourceMessageTable} t1, {$this->translatedMessageTable} t2
WHERE t1.id=t2.id AND t1.category=:category AND t2.language=:language
EOD;
$command=$this->getDbConnection()->createCommand($sql);
$command->bindValue(':category',$category);
$command->bindValue(':language',$language);
$messages=array();
foreach($command->queryAll() as $row)
$messages[$row['message']]=$row['translation'];
return $messages;
}
浠庢暟鎹簱鍔犺浇淇℃伅銆 浣犲彲浠ラ噸鍐欒繖涓柟娉曟潵瀹氬埗淇濆瓨鍦ㄦ暟鎹簱鐨勪俊鎭