CGettextMessageSource


system.i18n
继承 class CGettextMessageSource » CMessageSource » CApplicationComponent » CComponent
实现 IApplicationComponent
源自 1.0
版本 $Id: CGettextMessageSource.php 3515 2011-12-28 12:29:24Z mdomba $
源码
CGettextMessageSource表示信息来源是基于GNU的Gettext。

每个CGettextMessageSource的实例代表翻译的信息为单一的域。 并且每个信息类别代表Gettext信息的上下文, 翻译的信息存储为MO或PO文件, 依赖于useMoFile的属性值。

所有翻译被保存在basePath目录下。 翻译的语言保存在MO或PO的文件之下, 子目录的名称为语言ID。 通过指定文件名称catalog的属性,默认为‘messages’。

公共属性

属性 类型 描述 定义在
basePath string 所有翻译信息的基本路径。 默认值为null,这意味着是应用程序的子目录“messages” (例如:“protected/messages”)。 CGettextMessageSource
behaviors array 这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。 CApplicationComponent
cacheID string 用来缓存消息的缓存应用组件ID。 默认为‘cache’,这里指应用程序缓存组件, 如果你想禁用缓存组件,请将此属性设置为false。 CGettextMessageSource
cachingDuration integer 保存缓存信息的生命周期,单位是秒。 默认为0表示该缓存被禁用。 CGettextMessageSource
catalog string 信息目录名称。 这个信息文件名称(不含扩展名),它存储已翻译的信息。默认为‘messages’。 CGettextMessageSource
forceTranslation boolean 当源语言和目标语言相同时,是否强制翻译信息。 默认为false,意思是源语言和目标语言不同时执行。 CMessageSource
isInitialized boolean 检查应用组件是否已经初始化。 CApplicationComponent
language string 返回源信息的书写语言。 默认为application language CMessageSource
useBigEndian boolean 是否使用大字节读和写MO文件。 默认为false。 此属性在useMoFile为true时使用。 CGettextMessageSource
useMoFile boolean 是否从MO文件加载信息,默认为true。 如果为false,则信息将从PO文件加载。 CGettextMessageSource

公共方法

方法 描述 定义在
__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() 初始化应用程序组件。 CGettextMessageSource
onMissingTranslation() 当信息不能被翻译时发起。 CMessageSource
raiseEvent() 发起一个事件。 CComponent
setLanguage() 设置设置源信息的书写语言。 CMessageSource
translate() 翻译信息到指定语言。 CMessageSource

受保护方法

方法 描述 定义在
loadMessages() 加载指定的语言和类别来翻译信息。 CGettextMessageSource
translateMessage() 翻译指定信息。 CMessageSource

事件

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

属性详细

basePath 属性
public string $basePath;

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

cacheID 属性
public string $cacheID;

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

cachingDuration 属性
public integer $cachingDuration;

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

catalog 属性
public string $catalog;

信息目录名称。 这个信息文件名称(不含扩展名),它存储已翻译的信息。默认为‘messages’。

useBigEndian 属性
public boolean $useBigEndian;

是否使用大字节读和写MO文件。 默认为false。 此属性在useMoFile为true时使用。

useMoFile 属性
public boolean $useMoFile;

是否从MO文件加载信息,默认为true。 如果为false,则信息将从PO文件加载。

方法详细

init() 方法
public void init()
public function init()
{
    
parent::init();
    if(
$this->basePath===null)
        
$this->basePath=Yii::getPathOfAlias('application.messages');
}

初始化应用程序组件。 此方法重写父类, 通过预处理来实施用户请求数据。

loadMessages() 方法
protected array loadMessages(string $category, string $language)
$category string 信息类别
$language string 目录语言
{return} array 返回加载的信息
protected function loadMessages($category$language)
{
    
$messageFile=$this->basePath DIRECTORY_SEPARATOR $language DIRECTORY_SEPARATOR $this->catalog;
    if(
$this->useMoFile)
        
$messageFile.=self::MO_FILE_EXT;
    else
        
$messageFile.=self::PO_FILE_EXT;

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

    if (
is_file($messageFile))
    {
        if(
$this->useMoFile)
            
$file=new CGettextMoFile($this->useBigEndian);
        else
            
$file=new CGettextPoFile();
        
$messages=$file->load($messageFile,$category);
        if(isset(
$cache))
        {
            
$dependency=new CFileCacheDependency($messageFile);
            
$cache->set($key,serialize($messages),$this->cachingDuration,$dependency);
        }
        return 
$messages;
    }
    else
        return array();
}

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