CLocale


system.i18n
继承 class CLocale » CComponent
源自 1.0
版本 $Id: CLocale.php 3518 2011-12-28 23:31:29Z alexander.makarow $
源码
CLocale代表一个区域的相关数据。

这些数据包括数字格式和日期格式信息。

公共属性

属性 类型 描述 定义在
aMName string AM名称 CLocale
currencyFormat string 货币格式 CLocale
dataPath string 目录包含着区域数据。 如果未设置此属性,区域数据将从‘framework/i18n/data’加载。 CLocale
dateFormat string 日期格式 CLocale
dateFormatter CDateFormatter 返回这个区域的日期格式 CLocale
dateTimeFormat string 日期时间格式,比如:日期和时间的顺序。 CLocale
decimalFormat string 十进制格式 CLocale
id string 区域ID(典型格式) CLocale
localeDisplayName string 获取本地化i18数据文件在(framework/i18n/data/ files)。 CLocale
monthNames array 返回指定宽度的月份名称。 CLocale
numberFormatter CNumberFormatter 返回这个区域的数字格式 CLocale
orientation string 文字方向,要么是‘ltr’(从左到右),要么是‘rtl’(从右到左)。 CLocale
pMName string PM名称 CLocale
percentFormat string 百分比格式 CLocale
pluralRules array 复数形式表达式 CLocale
scientificFormat string 科学记数法格式 CLocale
timeFormat string 日期格式 CLocale
weekDayNames array 返回指定宽度的星期名字。 CLocale

公共方法

方法 描述 定义在
__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
getAMName() 返回AM名称 CLocale
getCanonicalID() 转换区域ID为典型格式。 CLocale
getCurrencyFormat() 返回货币格式 CLocale
getCurrencySymbol() 返回该区域的货币符号,如果符号不存在则返回null。 CLocale
getDateFormat() 返回日期格式 CLocale
getDateFormatter() 返回返回这个区域的日期格式 CLocale
getDateTimeFormat() 返回日期时间格式,比如:日期和时间的顺序。 CLocale
getDecimalFormat() 返回十进制格式 CLocale
getEraName() 返回年代名称 CLocale
getEventHandlers() 返回一个事件的附加处理程序列表。 CComponent
getId() 返回区域ID(典型格式) CLocale
getInstance() 返回指定区域实例。 CLocale
getLanguage() 返回显示本地化语言名称,如果不存在返回null。 CLocale
getLanguageID() 转换区域ID为语言ID。 CLocale
getLocaleDisplayName() 获取本地化i18数据文件在(framework/i18n/data/ files)。 CLocale
getLocaleIDs() 返回框架可以识别的区域ID。 CLocale
getMonthName() 返回月份名称 CLocale
getMonthNames() 返回指定宽度的月份名称。 CLocale
getNumberFormatter() 返回返回这个区域的数字格式 CLocale
getNumberSymbol() 返回符号 CLocale
getOrientation() 返回文字方向,要么是‘ltr’(从左到右),要么是‘rtl’(从右到左)。 CLocale
getPMName() 返回PM名称 CLocale
getPercentFormat() 返回百分比格式 CLocale
getPluralRules() 返回复数形式表达式 CLocale
getScientificFormat() 返回科学记数法格式 CLocale
getScript() 返回显示本地化脚本名称,如果不存在返回null。 CLocale
getScriptID() 转换区域ID为脚本ID。 CLocale
getTerritory() 返回显示范围名称,如果不存在返回null。 CLocale
getTerritoryID() 转换区域ID为范围ID。 CLocale
getTimeFormat() 返回日期格式 CLocale
getWeekDayName() 返回星期名称 CLocale
getWeekDayNames() 返回指定宽度的星期名字。 CLocale
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasProperty() 确定属性是否被定义。 CComponent
raiseEvent() 发起一个事件。 CComponent

受保护方法

方法 描述 定义在
__construct() 构造函数。 CLocale

属性详细

aMName 属性 只读
public string getAMName()

AM名称

currencyFormat 属性 只读
public string getCurrencyFormat()

货币格式

dataPath 属性 (可用自 v1.1.0)
public static string $dataPath;

目录包含着区域数据。 如果未设置此属性,区域数据将从‘framework/i18n/data’加载。

dateFormat 属性 只读
public string getDateFormat(string $width='medium')

日期格式

dateFormatter 属性 只读

返回这个区域的日期格式

dateTimeFormat 属性 只读
public string getDateTimeFormat()

日期时间格式,比如:日期和时间的顺序。

decimalFormat 属性 只读
public string getDecimalFormat()

十进制格式

id 属性 只读
public string getId()

区域ID(典型格式)

localeDisplayName 属性 只读 (可用自 v1.1.9)
public string getLocaleDisplayName(string $id=NULL, string $category='languages')

获取本地化i18数据文件在(framework/i18n/data/ files)。

monthNames 属性 只读
public array getMonthNames(string $width='wide', boolean $standAlone=false)

返回指定宽度的月份名称。

numberFormatter 属性 只读

返回这个区域的数字格式

orientation 属性 只读 (可用自 v1.1.2)
public string getOrientation()

文字方向,要么是‘ltr’(从左到右),要么是‘rtl’(从右到左)。

pMName 属性 只读
public string getPMName()

PM名称

percentFormat 属性 只读
public string getPercentFormat()

百分比格式

pluralRules 属性 只读
public array getPluralRules()

复数形式表达式

scientificFormat 属性 只读
public string getScientificFormat()

科学记数法格式

timeFormat 属性 只读
public string getTimeFormat(string $width='medium')

日期格式

weekDayNames 属性 只读
public array getWeekDayNames(string $width='wide', boolean $standAlone=false)

返回指定宽度的星期名字。

方法详细

__construct() 方法
protected void __construct(string $id)
$id string 区域ID(例如:en_US)
protected function __construct($id)
{
    
$this->_id=self::getCanonicalID($id);
    
$dataPath=self::$dataPath===null dirname(__FILE__).DIRECTORY_SEPARATOR.'data' self::$dataPath;
    
$dataFile=$dataPath.DIRECTORY_SEPARATOR.$this->_id.'.php';
    if(
is_file($dataFile))
        
$this->_data=require($dataFile);
    else
        throw new 
CException(Yii::t('yii','Unrecognized locale "{locale}".',array('{locale}'=>$id)));
}

构造函数。 由于构造方法受保护, 请使用getInstance来获得指定区域的实例。

getAMName() 方法
public string getAMName()
{return} string AM名称
public function getAMName()
{
    return 
$this->_data['amName'];
}

getCanonicalID() 方法
public static string getCanonicalID(string $id)
$id string 要转移的区域ID
{return} string 返回区域ID的典型格式
public static function getCanonicalID($id)
{
    return 
strtolower(str_replace('-','_',$id));
}

转换区域ID为典型格式。 在典型格式中,区域ID只能由小写字母和下划线组成。

getCurrencyFormat() 方法
public string getCurrencyFormat()
{return} string 货币格式
public function getCurrencyFormat()
{
    return 
$this->_data['currencyFormat'];
}

getCurrencySymbol() 方法
public string getCurrencySymbol(string $currency)
$currency string 3个字母的ISO4217码。比如:“USD”代表美元,“EUR”代表欧元。
{return} string 该区域的货币符号,如果符号不存在则返回null。
public function getCurrencySymbol($currency)
{
    return isset(
$this->_data['currencySymbols'][$currency]) ? $this->_data['currencySymbols'][$currency] : null;
}

getDateFormat() 方法
public string getDateFormat(string $width='medium')
$width string 日期格式宽度。可以是‘full’,‘long’,‘medium’或‘short’。
{return} string 日期格式
public function getDateFormat($width='medium')
{
    return 
$this->_data['dateFormats'][$width];
}

getDateFormatter() 方法
public CDateFormatter getDateFormatter()
{return} CDateFormatter 返回这个区域的日期格式
public function getDateFormatter()
{
    if(
$this->_dateFormatter===null)
        
$this->_dateFormatter=new CDateFormatter($this);
    return 
$this->_dateFormatter;
}

getDateTimeFormat() 方法
public string getDateTimeFormat()
{return} string 日期时间格式,比如:日期和时间的顺序。
public function getDateTimeFormat()
{
    return 
$this->_data['dateTimeFormat'];
}

getDecimalFormat() 方法
public string getDecimalFormat()
{return} string 十进制格式
public function getDecimalFormat()
{
    return 
$this->_data['decimalFormat'];
}

getEraName() 方法
public string getEraName(integer $era, string $width='wide')
$era integer 年代(0,1)
$width string 年代名称宽度。它可以是‘wide’,‘abbreviated’或‘narrow’。
{return} string 年代名称
public function getEraName($era,$width='wide')
{
    return 
$this->_data['eraNames'][$width][$era];
}

getId() 方法
public string getId()
{return} string 区域ID(典型格式)
public function getId()
{
    return 
$this->_id;
}

getInstance() 方法
public static CLocale getInstance(string $id)
$id string 区域ID(例如:en_US)
{return} CLocale 返回区域实例
public static function getInstance($id)
{
    static 
$locales=array();
    if(isset(
$locales[$id]))
        return 
$locales[$id];
    else
        return 
$locales[$id]=new CLocale($id);
}

返回指定区域实例。 由于CLocale的构造方法是受保护的, 你只可以使用这个方法来取得指定区域的实例。

getLanguage() 方法 (可用自 v1.1.9)
public string getLanguage(string $id)
$id string Unicode语言标识符IETF BCP 47。 例如:代码“en_US”英语(美国)和“en_GB”代表英语(英国)。
{return} string 显示本地化语言名称,如果不存在返回null。
public function getLanguage($id)
{
    return 
$this->getLocaleDisplayName($id'languages');
}

getLanguageID() 方法 (可用自 v1.1.9)
public string getLanguageID(string $id)
$id string 要转换的区域ID
{return} string 语言ID
public function getLanguageID($id)
{
    
// normalize id
    
$id $this->getCanonicalID($id);
    
// remove sub tags
    
if(($underscorePosition=strpos($id'_'))!== false)
    {
        
$id substr($id0$underscorePosition);
    }
    return 
$id;
}

转换区域ID为语言ID。 语言ID为下划线前的一组字母。

getLocaleDisplayName() 方法 (可用自 v1.1.9)
public string getLocaleDisplayName(string $id=NULL, string $category='languages')
$id string array key from an array named by $category。
$category string 数据类别。单一的‘languages’,‘scripts’或‘territories’。
{return} string 返回指定的本地化名称,如果不存在则返回null。
public function getLocaleDisplayName($id=null$category='languages')
{
    
$id $this->getCanonicalID($id);
    if (isset(
$this->_data[$category][$id]))
    {
        return 
$this->_data[$category][$id];
    }
    else if ((
$category == 'languages') && ($id=$this->getLanguageID($id)) && (isset($this->_data[$category][$id])))
    {
        return 
$this->_data[$category][$id];
    }
    else if ((
$category == 'scripts') && ($id=$this->getScriptID($id)) && (isset($this->_data[$category][$id])))
    {
        return 
$this->_data[$category][$id];
    }
    else if ((
$category == 'territories') && ($id=$this->getTerritoryID($id)) && (isset($this->_data[$category][$id])))
    {
        return 
$this->_data[$category][$id];
    }
    else {
        return 
null;
    }
}

获取本地化i18数据文件在(framework/i18n/data/ files)。

getLocaleIDs() 方法
public static array getLocaleIDs()
{return} array 框架可以识别的区域ID。
public static function getLocaleIDs()
{
    static 
$locales;
    if(
$locales===null)
    {
        
$locales=array();
        
$dataPath=self::$dataPath===null dirname(__FILE__).DIRECTORY_SEPARATOR.'data' self::$dataPath;
        
$folder=@opendir($dataPath);
        while((
$file=@readdir($folder))!==false)
        {
            
$fullPath=$dataPath.DIRECTORY_SEPARATOR.$file;
            if(
substr($file,-4)==='.php' && is_file($fullPath))
                
$locales[]=substr($file,0,-4);
        }
        
closedir($folder);
        
sort($locales);
    }
    return 
$locales;
}

getMonthName() 方法
public string getMonthName(integer $month, string $width='wide', boolean $standAlone=false)
$month integer 月份(1-12)
$width string 月份名称宽度,它可以是‘wide’,‘abbreviated’或‘narrow’。
$standAlone boolean 是否返回独立格式的月份名称
{return} string 月份名称
public function getMonthName($month,$width='wide',$standAlone=false)
{
    if(
$standAlone)
        return isset(
$this->_data['monthNamesSA'][$width][$month]) ? $this->_data['monthNamesSA'][$width][$month] : $this->_data['monthNames'][$width][$month];
    else
        return isset(
$this->_data['monthNames'][$width][$month]) ? $this->_data['monthNames'][$width][$month] : $this->_data['monthNamesSA'][$width][$month];
}

getMonthNames() 方法
public array getMonthNames(string $width='wide', boolean $standAlone=false)
$width string 月份名称宽度,它可以是‘wide’,‘abbreviated’或‘narrow’。
$standAlone boolean 是否返回独立格式的月份名称
{return} array 返回由(1-12)索引的月份名称
public function getMonthNames($width='wide',$standAlone=false)
{
    if(
$standAlone)
        return isset(
$this->_data['monthNamesSA'][$width]) ? $this->_data['monthNamesSA'][$width] : $this->_data['monthNames'][$width];
    else
        return isset(
$this->_data['monthNames'][$width]) ? $this->_data['monthNames'][$width] : $this->_data['monthNamesSA'][$width];
}

返回指定宽度的月份名称。

getNumberFormatter() 方法
public CNumberFormatter getNumberFormatter()
{return} CNumberFormatter 返回这个区域的数字格式
public function getNumberFormatter()
{
    if(
$this->_numberFormatter===null)
        
$this->_numberFormatter=new CNumberFormatter($this);
    return 
$this->_numberFormatter;
}

getNumberSymbol() 方法
public string getNumberSymbol(string $name)
$name string 符号名称
{return} string 符号
public function getNumberSymbol($name)
{
    return isset(
$this->_data['numberSymbols'][$name]) ? $this->_data['numberSymbols'][$name] : null;
}

getOrientation() 方法 (可用自 v1.1.2)
public string getOrientation()
{return} string 文字方向,要么是‘ltr’(从左到右),要么是‘rtl’(从右到左)。
public function getOrientation()
{
    return isset(
$this->_data['orientation']) ? $this->_data['orientation'] : 'ltr';
}

getPMName() 方法
public string getPMName()
{return} string PM名称
public function getPMName()
{
    return 
$this->_data['pmName'];
}

getPercentFormat() 方法
public string getPercentFormat()
{return} string 百分比格式
public function getPercentFormat()
{
    return 
$this->_data['percentFormat'];
}

getPluralRules() 方法
public array getPluralRules()
{return} array 复数形式表达式
public function getPluralRules()
{
    return isset(
$this->_data['pluralRules']) ? $this->_data['pluralRules'] : array();
}

getScientificFormat() 方法
public string getScientificFormat()
{return} string 科学记数法格式
public function getScientificFormat()
{
    return 
$this->_data['scientificFormat'];
}

getScript() 方法 (可用自 v1.1.9)
public string getScript(string $id)
$id string Unicode脚本标识符IETF BCP 47。 例如:代码“en_US”英语(美国)和“en_GB”代表英语(英国)。
{return} string 显示本地化脚本名称,如果不存在返回null。
public function getScript($id)
{
    return 
$this->getLocaleDisplayName($id'scripts');
}

getScriptID() 方法 (可用自 v1.1.9)
public string getScriptID(string $id)
$id string 要转换的区域ID
{return} string 脚本ID
public function getScriptID($id)
{
    
// normalize id
    
$id $this->getCanonicalID($id);
    
// find sub tags
    
if(($underscorePosition=strpos($id'_'))!==false)
    {
        
$subTag explode('_'$id);
        
// script sub tags can be distigused from territory sub tags by length
        
if (strlen($subTag[1])===4)
        {
            
$id $subTag[1];
        }
        else
        {
            
$id null;
        }
    }
    else
    {
        
$id null;
    }
    return 
$id;
}

转换区域ID为脚本ID。 脚本ID为下划线后四位字符组成。

getTerritory() 方法 (可用自 v1.1.9)
public string getTerritory(string $id)
$id string Unicode范围标识符IETF BCP 47。 例如:代码“en_US”英语(美国)和“en_GB”代表英语(英国)。
{return} string 显示范围名称,如果不存在返回null。
public function getTerritory($id)
{
    return 
$this->getLocaleDisplayName($id'territories');
}

getTerritoryID() 方法 (可用自 v1.1.9)
public string getTerritoryID(string $id)
$id string 要转换的区域ID
{return} string 范围ID
public function getTerritoryID($id)
{
    
// normalize id
    
$id $this->getCanonicalID($id);
    
// find sub tags
    
if (($underscorePosition=strpos($id'_'))!== false)
    {
        
$subTag explode('_'$id);
        
// territory sub tags can be distigused from script sub tags by length
        
if (strlen($subTag[1])<4)
        {
            
$id $subTag[1];
        }
        else
        {
            
$id null;
        }
    }
    else
    {
        
$id null;
    }
    return 
$id;
}

转换区域ID为范围ID。 范围ID由下划线后2至3位字母和数字组成。

getTimeFormat() 方法
public string getTimeFormat(string $width='medium')
$width string 时间格式宽度。可以是‘full’,‘long’,‘medium’或‘short’。
{return} string 日期格式
public function getTimeFormat($width='medium')
{
    return 
$this->_data['timeFormats'][$width];
}

getWeekDayName() 方法
public string getWeekDayName(integer $day, string $width='wide', boolean $standAlone=false)
$day integer 星期(0-6,0意味着星期天)
$width string 星期名称宽度。它可以是‘wide’,‘abbreviated’或‘narrow’。
$standAlone boolean 是否返回独立格式的星期名称
{return} string 星期名称
public function getWeekDayName($day,$width='wide',$standAlone=false)
{
    if(
$standAlone)
        return isset(
$this->_data['weekDayNamesSA'][$width][$day]) ? $this->_data['weekDayNamesSA'][$width][$day] : $this->_data['weekDayNames'][$width][$day];
    else
        return isset(
$this->_data['weekDayNames'][$width][$day]) ? $this->_data['weekDayNames'][$width][$day] : $this->_data['weekDayNamesSA'][$width][$day];
}

getWeekDayNames() 方法
public array getWeekDayNames(string $width='wide', boolean $standAlone=false)
$width string 星期名称宽度。它可以是‘wide’,‘abbreviated’或‘narrow’。
$standAlone boolean 是否返回独立格式的星期名称
{return} array 由星期值索引 (0-6,0是星期天,1是星期一, ...)的星期名字。
public function getWeekDayNames($width='wide',$standAlone=false)
{
    if(
$standAlone)
        return isset(
$this->_data['weekDayNamesSA'][$width]) ? $this->_data['weekDayNamesSA'][$width] : $this->_data['weekDayNames'][$width];
    else
        return isset(
$this->_data['weekDayNames'][$width]) ? $this->_data['weekDayNames'][$width] : $this->_data['weekDayNamesSA'][$width];
}

返回指定宽度的星期名字。