CGettextPoFile


system.i18n.gettext
继承 class CGettextPoFile » CGettextFile » CComponent
源自 1.0
版本 $Id: CGettextPoFile.php 2798 2011-01-01 19:29:03Z qiang.xue $
源码
CGettextPoFile代表一个PO的Gettext信息文件。

公共方法

方法 描述 定义在
__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
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasProperty() 确定属性是否被定义。 CComponent
load() 从PO文件加载信息。 CGettextPoFile
raiseEvent() 发起一个事件。 CComponent
save() 保存信息到PO文件。 CGettextPoFile

受保护方法

方法 描述 定义在
decode() 信息中的指定字符进行解码。 CGettextPoFile
encode() 信息中的指定字符进行编码。 CGettextPoFile

方法详细

decode() 方法
protected string decode(string $string)
$string string 要解码的信息
{return} string 返回已经解码的信息
protected function decode($string)
{
    return 
str_replace(array('\\"'"\\n"'\\t''\\r'),array('"'"\n""\t""\r"),$string);
}

信息中的指定字符进行解码。

encode() 方法
protected string encode(string $string)
$string string 要编码的信息
{return} string 返回已经编码的信息
protected function encode($string)
{
    return 
str_replace(array('"'"\n""\t""\r"),array('\\"'"\\n"'\\t''\\r'),$string);
}

信息中的指定字符进行编码。

load() 方法
public array load(string $file, string $context)
$file string 文件路径
$context string 信息内容
{return} array 翻译的信息(源信息 => 翻译的信息)
public function load($file,$context)
{
    
$pattern='/(msgctxt\s+"(.*?(?<!\\\\))")?'
        
'\s+msgid\s+"(.*?(?<!\\\\))"'
        
'\s+msgstr\s+"(.*?(?<!\\\\))"/';
    
$content=file_get_contents($file);
    
$n=preg_match_all($pattern,$content,$matches);
    
$messages=array();
    for(
$i=0;$i<$n;++$i)
    {
        if(
$matches[2][$i]===$context)
        {
            
$id=$this->decode($matches[3][$i]);
            
$message=$this->decode($matches[4][$i]);
            
$messages[$id]=$message;
        }
    }
    return 
$messages;
}

从PO文件加载信息。

save() 方法
public void save(string $file, array $messages)
$file string 文件路径
$messages array 翻译的信息(信息ID => 翻译的信息)。 注意: 如果信息有上下文,信息ID一定要用上下文的 chr(4) 前缀作为分隔符。
public function save($file,$messages)
{
    
$content='';
    foreach(
$messages as $id=>$message)
    {
        if((
$pos=strpos($id,chr(4)))!==false)
        {
            
$content.='msgctxt "'.substr($id,0,$pos)."\"\n";
            
$id=substr($id,$pos+1);
        }
        
$content.='msgid "'.$this->encode($id)."\"\n";
        
$content.='msgstr "'.$this->encode($message)."\"\n\n";
    }
    
file_put_contents($file,$content);
}

保存信息到PO文件。