> YII 类库手册 > CMessageSource
system.i18n
继承 abstract class CMessageSource » CApplicationComponent » CComponent
实现 IApplicationComponent
子类 CDbMessageSource, CGettextMessageSource, CPHPMessageSource
源自 1.0
版本 $Id: CMessageSource.php 3515 2011-12-28 12:29:24Z mDOMba $
源码
CMessageSource是消息翻译类的基类。

信息源是提供信息国际化(i18n)的应用程序组件。 它存储不同的翻译信息结果, 当请求时提供这些翻译信息。

具体类必需实现loadMessages或重写translateMessage。

公共属性

属性 类型 描述 定义在
behaviors array 这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。 CApplicationComponent
forceTranslation boolean 当源语言和目标语言相同时,是否强制翻译信息。 默认为false,意思是源语言和目标语言不同时执行。 CMessageSource
isInitialized boolean 检查应用组件是否已经初始化。 CApplicationComponent
language string 返回源信息的书写语言。 默认为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() 初始化应用组件。 CApplicationComponent
onMissingTranslation() 当信息不能被翻译时发起。 CMessageSource
raiseEvent() 发起一个事件。 CComponent
setLanguage() 设置设置源信息的书写语言。 CMessageSource
translate() 翻译信息到指定语言。 CMessageSource

受保护方法

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

事件

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

属性详细

forceTranslation 属性 (可用自 v1.1.4)
public boolean $forceTranslation;

当源语言和目标语言相同时,是否强制翻译信息。 默认为false,意思是源语言和目标语言不同时执行。

language 属性
public string getLanguage()
public void setLanguage(string $language)

返回源信息的书写语言。 默认为application language。

方法详细

getLanguage() 方法
public string getLanguage()
{return} string 返回源信息的书写语言。 默认为application language。
public function getLanguage()
{
    return 
$this->_language===null Yii::app()->sourceLanguage $this->_language;
}

loadMessages() 方法
abstract protected array loadMessages(string $category, string $language)
$category string 信息类别
$language string 目录语言
{return} array 返回加载信息
abstract protected function loadMessages($category,$language);

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

onMissingTranslation() 方法
public void onMissingTranslation(CMissingTranslationEvent $event)
$event CMissingTranslationEvent the event parameter
public function onMissingTranslation($event)
{
    
$this->raiseEvent('onMissingTranslation',$event);
}

当信息不能被翻译时发起。 处理对象将保存信息到日志, 或者做一些默认处理。 将由translateMessage返回CMissingTranslationEvent::message属性。

setLanguage() 方法
public void setLanguage(string $language)
$language string 设置源信息的书写语言。
public function setLanguage($language)
{
    
$this->_language=CLocale::getCanonicalID($language);
}

translate() 方法
public string translate(string $category, string $message, string $language=NULL)
$category string 信息类别
$message string 要翻译的信息
$language string 目标语言。如果为null(默认),则调用application language。
{return} string 返回已经翻译的信息(如果不需要翻译则返回原始信息)
public function translate($category,$message,$language=null)
{
    if(
$language===null)
        
$language=Yii::app()->getLanguage();
    if(
$this->forceTranslation || $language!==$this->getLanguage())
        return 
$this->translateMessage($category,$message,$language);
    else
        return 
$message;
}

翻译信息到指定语言。

注意: 如果指定语言与source message language相同时则不翻译信息。

如果没有找到对应的翻译信息, 则调用onMissingTranslation事件。 处理对象可以记录这些信息或做一些默认处理, 然后返回CMissingTranslationEvent::message这个事件参数。

translateMessage() 方法
protected string translateMessage(string $category, string $message, string $language)
$category string 信息所属的类别
$message string 要翻译的消息
$language string 目标语言
{return} string 返回已经翻译的信息
protected function translateMessage($category,$message,$language)
{
    
$key=$language.'.'.$category;
    if(!isset(
$this->_messages[$key]))
        
$this->_messages[$key]=$this->loadMessages($category,$language);
    if(isset(
$this->_messages[$key][$message]) && $this->_messages[$key][$message]!=='')
        return 
$this->_messages[$key][$message];
    else if(
$this->hasEventHandler('onMissingTranslation'))
    {
        
$event=new CMissingTranslationEvent($this,$category,$message,$language);
        
$this->onMissingTranslation($event);
        return 
$event->message;
    }
    else
        return 
$message;
}

翻译指定信息。 如果翻译信息没有被找到, 则发起onMissingTranslation事件。

上一篇:
下一篇: