Yii Framework v1.1.10 绫诲弬鑰

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〃缈昏瘧娑堟伅鐨勬暟鎹潵婧愬瓨鍌ㄥ湪鏁版嵁搴撲腑銆

鏁版嵁搴撳繀椤诲寘鍚潃涓嬮潰涓や釜琛:
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鈥欒〃瀛樺偍鐫缈昏瘧濂界殑淇℃伅銆 涓嬮潰杩欎袱涓〃鐨勫悕绉版槸鍙互鑷畾涔夎缃紝 sourceMessageTabletranslatedMessageTable

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

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
__call() 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 CComponent
__get() 杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 CComponent
__isset() 妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 CComponent
__set() 璁剧疆涓涓粍浠剁殑灞炴у笺 CComponent
__unset() 璁剧疆涓涓粍浠剁殑灞炴т负null銆 CComponent
asa() 杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° CComponent
attachBehavior() 闄勫姞涓涓涓哄埌缁勪欢銆 CComponent
attachBehaviors() 闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 CComponent
attachEventHandler() 涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋 CComponent
canGetProperty() 纭畾灞炴ф槸鍚﹀彲璇汇 CComponent
canSetProperty() 纭畾灞炴ф槸鍚﹀彲鍐欍 CComponent
detachBehavior() 浠庣粍浠朵腑鍒嗙涓涓涓恒 CComponent
detachBehaviors() 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 CComponent
detachEventHandler() 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 CComponent
disableBehavior() 绂佺敤涓涓檮鍔犺涓恒 CComponent
disableBehaviors() 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
enableBehavior() 鍚敤涓涓檮鍔犺涓恒 CComponent
enableBehaviors() 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
evaluateExpression() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 CComponent
getDbConnection() 閫傚簲淇℃伅婧愮殑鏁版嵁搴撻摼鎺ャ CDbMessageSource
getEventHandlers() 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 CComponent
getIsInitialized() 妫鏌ュ簲鐢ㄧ粍浠舵槸鍚﹀凡缁忓垵濮嬪寲銆 CApplicationComponent
getLanguage() 杩斿洖杩斿洖婧愪俊鎭殑涔﹀啓璇█銆 榛樿涓application language CMessageSource
hasEvent() 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 CComponent
hasEventHandler() 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 CComponent
hasProperty() 纭畾灞炴ф槸鍚﹁瀹氫箟銆 CComponent
init() 鍒濆鍖栧簲鐢ㄧ粍浠躲 CApplicationComponent
onMissingTranslation() 褰撲俊鎭笉鑳借缈昏瘧鏃跺彂璧枫 CMessageSource
raiseEvent() 鍙戣捣涓涓簨浠躲 CComponent
setLanguage() 璁剧疆璁剧疆婧愪俊鎭殑涔﹀啓璇█銆 CMessageSource
translate() 缈昏瘧淇℃伅鍒版寚瀹氳瑷銆 CMessageSource

鍙椾繚鎶ゆ柟娉

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
loadMessages() 鍔犺浇鎸囧畾璇█鍜屽垎绫荤殑缈昏瘧淇℃伅銆 CDbMessageSource
loadMessagesFromDb() 浠庢暟鎹簱鍔犺浇淇℃伅銆 CDbMessageSource
translateMessage() 缈昏瘧鎸囧畾淇℃伅銆 CMessageSource

浜嬩欢

闅愯棌缁ф壙浜嬩欢

浜嬩欢鎻忚堪瀹氫箟鍦
onMissingTranslation 褰撲俊鎭笉鑳借缈昏瘧鏃跺彂璧枫 CMessageSource

灞炴ц缁

cacheID 灞炴
public string $cacheID;

鐢ㄦ潵缂撳瓨娑堟伅鐨勭紦瀛樺簲鐢ㄧ粍浠禝D銆 榛樿涓衡榗ache鈥欙紝杩欓噷鎸囧簲鐢ㄧ▼搴忕紦瀛樼粍浠躲 濡傛灉浣犳兂绂佺敤缂撳瓨缁勪欢锛岃灏嗘灞炴ц缃负false銆

cachingDuration 灞炴
public integer $cachingDuration;

淇濆瓨缂撳瓨淇℃伅鐨勭敓鍛藉懆鏈燂紝鍗曚綅鏄銆 榛樿涓0琛ㄧず璇ョ紦瀛樿绂佺敤銆

connectionID 灞炴
public string $connectionID;

鏁版嵁搴撹繛鎺ョ殑搴旂敤绋嬪簭缁勪欢鐨処D銆傞粯璁ゅ间负鈥榙b鈥欍

dbConnection 灞炴 鍙 锛堝彲鐢ㄨ嚜 v1.1.5锛

閫傚簲淇℃伅婧愮殑鏁版嵁搴撻摼鎺ャ

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>&& $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;
}

浠庢暟鎹簱鍔犺浇淇℃伅銆 浣犲彲浠ラ噸鍐欒繖涓柟娉曟潵瀹氬埗淇濆瓨鍦ㄦ暟鎹簱鐨勪俊鎭

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.