CDbMessageSource

优质
小牛编辑
138浏览
2023-12-01
所有包 | 属性 | 方法 | 事件
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代表翻译消息的数据来源存储在数据库中。

数据库必须包含着下面两个表:
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
);
‘SourceMessage’表存储着要翻译的信息,‘Message’表存储着翻译好的信息。 下面这两个表的名称是可以自定义设置, sourceMessageTable 和 translatedMessageTable。

当cachingDuration设置为正数时,翻译的消息将被缓存。

公共属性

隐藏继承属性

属性类型描述定义在
behaviorsarray这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。CApplicationComponent
cacheIDstring用来缓存消息的缓存应用组件ID。 默认为‘cache’,这里指应用程序缓存组件。 如果你想禁用缓存组件,请将此属性设置为false。CDbMessageSource
cachingDurationinteger保存缓存信息的生命周期,单位是秒。 默认为0表示该缓存被禁用。CDbMessageSource
connectionIDstring数据库连接的应用程序组件的ID。默认值为‘db’。CDbMessageSource
dbConnectionCDbConnection适应信息源的数据库链接。CDbMessageSource
forceTranslationboolean当源语言和目标语言相同时,是否强制翻译信息。 默认为false,意思是源语言和目标语言不同时执行。CMessageSource
isInitializedboolean检查应用组件是否已经初始化。CApplicationComponent
languagestring返回源信息的书写语言。 默认为application language。CMessageSource
sourceMessageTablestring消息表的名称,默认为‘SourceMessage’。CDbMessageSource
translatedMessageTablestring翻译后的信息数据表的名字,默认为‘Message’。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()计算一个PHP表达式,或根据组件上下文执行回调。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;

用来缓存消息的缓存应用组件ID。 默认为‘cache’,这里指应用程序缓存组件。 如果你想禁用缓存组件,请将此属性设置为false。

cachingDuration 属性 public integer $cachingDuration;

保存缓存信息的生命周期,单位是秒。 默认为0表示该缓存被禁用。

connectionID 属性 public string $connectionID;

数据库连接的应用程序组件的ID。默认值为‘db’。

dbConnection 属性 只读 (可用自 v1.1.5) public CDbConnection getDbConnection()

适应信息源的数据库链接。

sourceMessageTable 属性 public string $sourceMessageTable;

消息表的名称,默认为‘SourceMessage’。

translatedMessageTable 属性 public string $translatedMessageTable;

翻译后的信息数据表的名字,默认为‘Message’。

方法详细

getDbConnection() 方法 (可用自 v1.1.5)
public CDbConnection getDbConnection()
{return}CDbConnection信息源使用的数据库连接。
源码: framework/i18n/CDbMessageSource.php#102 (显示) publicfunctiongetDbConnection()
{
if($this->_db===null)
{
$this->_db=Yii::app()->getComponent($this->connectionID);
if(!$this->_dbinstanceofCDbConnection)
thrownewCException(Yii::t('yii','CDbMessageSource.connectionIDisinvalid.Pleasemakesure"{id}"referstoavaliddatabaseapplicationcomponent.',
array('{id}'=>$this->connectionID)));
}
return$this->_db;
}

适应信息源的数据库链接。

loadMessages() 方法
protected array loadMessages(string $category, string $language)
$categorystring信息分类
$languagestring目标语言
{return}array返回加载好的信息
源码: framework/i18n/CDbMessageSource.php#78 (显示) protectedfunctionloadMessages($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)
returnunserialize($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)
$categorystring信息分类
$languagestring目标语言
{return}array返回从数据库加载的信息
源码: framework/i18n/CDbMessageSource.php#122 (显示) protectedfunctionloadMessagesFromDb($category,$language)
{
$sql=<<<EOD
SELECTt1.messageASmessage,t2.translationAStranslation
FROM{$this->sourceMessageTable}t1,{$this->translatedMessageTable}t2
WHEREt1.id=t2.idANDt1.category=:categoryANDt2.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;
}

从数据库加载信息。 你可以重写这个方法来定制保存在数据库的信息。