CPhpMessageSource

优质
小牛编辑
129浏览
2023-12-01
所有包 | 属性 | 方法 | 事件
system.i18n
继承class CPhpMessageSource » CMessageSource » CApplicationComponent » CComponent
实现IApplicationComponent
源自1.0
版本$Id: CPhpMessageSource.php 3515 2011-12-28 12:29:24Z mdomba $
源码framework/i18n/CPhpMessageSource.php
CPhpMessageSource代表翻译的信息和信息源存储在PHP脚本。

CPhpMessageSource使用PHP文件和数组来保存翻译信息。
  • 所有翻译被保存在basePath目录下。
  • 每种语言都会保存在独立目录的PHP文件里面,它的名字跟语言ID相同。每个PHP文件都包含相同的信息类别,文件名称和类别名称相同。
  • PHP文件里会返回数组(源,翻译)。 例如:
    return array(  'original message 1' => 'translated message 1',  'original message 2' => 'translated message 2',
    );
    
当cachingDuration设置为正数,翻译的信息将被缓存。

扩展类的信息(例如:挂件,模块)可以指定管理和使用。 特别注意: 如果信息名是Xyz的扩展,那么信息分类可以指定为'Xyz.categoryName'。 相关信息文件会被认为是‘BasePath/messages/LanguageID/categoryName.php’,在‘BasePath’关联到包含扩展类文件的目录。 当使用Yii::t()来翻译一个扩展信息时, 那么分类名称会被设为‘Xyz.categoryName’。

公共属性

隐藏继承属性

属性类型描述定义在
basePathstring翻译信息的基本路径。 默认为null,这意味着‘messages’是应用程序子目录(如:“protected/messages”)。CPhpMessageSource
behaviorsarray这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。CApplicationComponent
cacheIDstring用来缓存信息的缓存应用程序组件ID.CPhpMessageSource
cachingDurationinteger缓存中信息的生命周期。 默认为0,意思这个缓存被禁止。CPhpMessageSource
forceTranslationboolean当源语言和目标语言相同时,是否强制翻译信息。 默认为false,意思是源语言和目标语言不同时执行。CMessageSource
isInitializedboolean检查应用组件是否已经初始化。CApplicationComponent
languagestring返回源信息的书写语言。 默认为application language。CMessageSource

公共方法

隐藏继承方法

方法描述定义在
__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
getEventHandlers()返回一个事件的附加处理程序列表。CComponent
getIsInitialized()检查应用组件是否已经初始化。CApplicationComponent
getLanguage()返回返回源信息的书写语言。 默认为application language。CMessageSource
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
init()初始化应用程序组件。CPhpMessageSource
onMissingTranslation()当信息不能被翻译时发起。CMessageSource
raiseEvent()发起一个事件。CComponent
setLanguage()设置设置源信息的书写语言。CMessageSource
translate()翻译信息到指定语言。CMessageSource

受保护方法

隐藏继承方法

方法描述定义在
getMessageFile()基于指定的类别和语言来决定信息文件。CPhpMessageSource
loadMessages()加载指定语言和类别的信息翻译。CPhpMessageSource
translateMessage()翻译指定信息。CMessageSource

事件

隐藏继承事件

事件描述定义在
onMissingTranslation当信息不能被翻译时发起。CMessageSource

属性详细

basePath 属性 public string $basePath;

翻译信息的基本路径。 默认为null,这意味着‘messages’是应用程序子目录(如:“protected/messages”)。

cacheID 属性 public string $cacheID;

用来缓存信息的缓存应用程序组件ID. 默认为‘cache’,这里指缓存应用程序组件。 设置为false,将禁止缓存信息。

cachingDuration 属性 public integer $cachingDuration;

缓存中信息的生命周期。 默认为0,意思这个缓存被禁止。

方法详细

getMessageFile() 方法
protected string getMessageFile(string $category, string $language)
$categorystring类别名称
$languagestring语言ID
{return}string信息文件路径
源码: framework/i18n/CPhpMessageSource.php#89 (显示) protectedfunctiongetMessageFile($category,$language)
{
if(!isset($this->_files[$category][$language]))
{
if(($pos=strpos($category,'.'))!==false)
{
$moduleClass=substr($category,0,$pos);
$moduleCategory=substr($category,$pos+1);
$class=newReflectionClass($moduleClass);
$this->_files[$category][$language]=dirname($class->getFileName()).DIRECTORY_SEPARATOR.'messages'.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.$moduleCategory.'.php';
}
else
$this->_files[$category][$language]=$this->basePath.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.$category.'.php';
}
return$this->_files[$category][$language];
}

基于指定的类别和语言来决定信息文件。 如果类别名称包含一个点,它将会被分配成模块类名称和类别名称。 这种情况下, 信息文件会认为是保存在模块类文件目录下的‘messages’子目录。 否则,信息文件会认为保存在basePath。

init() 方法
public void init()
源码: framework/i18n/CPhpMessageSource.php#72 (显示) publicfunctioninit()
{
parent::init();
if($this->basePath===null)
$this->basePath=Yii::getPathOfAlias('application.messages');
}

初始化应用程序组件。 这个方法重写了父类方法, 实现了为用户数据请求做一些预处理。

loadMessages() 方法
protected array loadMessages(string $category, string $language)
$categorystring信息类别
$languagestring目录语言
{return}array加载好的信息
源码: framework/i18n/CPhpMessageSource.php#112 (显示) protectedfunctionloadMessages($category,$language)
{
$messageFile=$this->getMessageFile($category,$language);

if($this->cachingDuration>0&&$this->cacheID!==false&&($cache=Yii::app()->getComponent($this->cacheID))!==null)
{
$key=self::CACHE_KEY_PREFIX.$messageFile;
if(($data=$cache->get($key))!==false)
returnunserialize($data);
}

if(is_file($messageFile))
{
$messages=include($messageFile);
if(!is_array($messages))
$messages=array();
if(isset($cache))
{
$dependency=newCFileCacheDependency($messageFile);
$cache->set($key,serialize($messages),$this->cachingDuration,$dependency);
}
return$messages;
}
else
returnarray();
}

加载指定语言和类别的信息翻译。