Yii Framework v1.1.10 绫诲弬鑰

CGettextMoFile

system.i18n.gettext
缁ф壙 class CGettextMoFile » CGettextFile » CComponent
婧愯嚜 1.0
鐗堟湰 $Id: CGettextMoFile.php 2798 2011-01-01 19:29:03Z qiang.xue $
婧愮爜 framework/i18n/gettext/CGettextMoFile.php
CGettextMoFile浠h〃涓涓狹O鐨凣ettext淇℃伅鏂囦欢銆

杩欎釜绫绘槸涓轰簡閫傚簲鍦 PEAR 閲岄潰鐨 Michael Gettext_MO 绫昏屽啓鐨勩 璇峰弬鑰冧笅闈㈢浉鍏崇殑璁稿彲璇併

Copyright (c) 2004-2005, Michael Wallner . All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

鍏叡灞炴

闅愯棌缁ф壙灞炴

灞炴绫诲瀷鎻忚堪瀹氫箟鍦
useBigEndian boolean 褰撹/鍐欎竴涓暣鏁扮殑鏃跺欐槸鍚︿娇鐢 Big Endian銆 CGettextMoFile

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
__call() 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 CComponent
__construct() 鏋勯犲嚱鏁般 CGettextMoFile
__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() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 CComponent
getEventHandlers() 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 CComponent
hasEvent() 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 CComponent
hasEventHandler() 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 CComponent
hasProperty() 纭畾灞炴ф槸鍚﹁瀹氫箟銆 CComponent
load() 浠嶮O鏂囦欢鍔犺浇淇℃伅銆 CGettextMoFile
raiseEvent() 鍙戣捣涓涓簨浠躲 CComponent
save() 淇濆瓨淇℃伅鍒癕O鏂囦欢銆 CGettextMoFile

鍙椾繚鎶ゆ柟娉

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
readByte() 璇诲彇涓涓垨澶氫釜瀛楄妭銆 CGettextMoFile
readInteger() 璇诲彇4瀛楄妭鏁存暟銆 CGettextMoFile
readString() 璇诲彇瀛楃涓层 CGettextMoFile
writeByte() 鍐欏叆瀛楄妭銆 CGettextMoFile
writeInteger() 鍐欏叆4瀛楄妭鏁存暟銆 CGettextMoFile
writeString() 鍐欏叆瀛楃涓层 CGettextMoFile

灞炴ц缁

useBigEndian 灞炴
public boolean $useBigEndian;

褰撹/鍐欎竴涓暣鏁扮殑鏃跺欐槸鍚︿娇鐢 Big Endian銆

鏂规硶璇︾粏

__construct() 鏂规硶
public void __construct(boolean $useBigEndian=false)
$useBigEndian boolean 褰撹/鍐欎竴涓暣鏁扮殑鏃跺欐槸鍚︿娇鐢 Big Endian銆
婧愮爜锛 framework/i18n/gettext/CGettextMoFile.php#56 (鏄剧ず)
public function __construct($useBigEndian=false)
{
    
$this->useBigEndian=$useBigEndian;
}

鏋勯犲嚱鏁般

load() 鏂规硶
public array load(string $file, string $context)
$file string 鏂囦欢璺緞
$context string 淇℃伅鍐呭
{return} array 缈昏瘧鐨勪俊鎭紙婧愪俊鎭 => 缈昏瘧鐨勪俊鎭級
婧愮爜锛 framework/i18n/gettext/CGettextMoFile.php#67 (鏄剧ず)
public function load($file,$context)
{
    if(!(
$fr=@fopen($file,'rb')))
        throw new 
CException(Yii::t('yii','Unable to read file "{file}".',
            array(
'{file}'=>$file)));

    if(!@
flock($fr,LOCK_SH))
        throw new 
CException(Yii::t('yii','Unable to lock file "{file}" for reading.',
            array(
'{file}'=>$file)));

    
$magic=current($array=unpack('c',$this->readByte($fr,4)));
    if(
$magic==-34)
        
$this->useBigEndian=false;
    else if(
$magic==-107)
        
$this->useBigEndian=true;
    else
        throw new 
CException(Yii::t('yii','Invalid MO file: {file} (magic: {magic}).',
            array(
'{file}'=>$file,'{magic}'=>$magic)));

    if((
$revision=$this->readInteger($fr))!=0)
        throw new 
CException(Yii::t('yii','Invalid MO file revision: {revision}.',
            array(
'{revision}'=>$revision)));

    
$count=$this->readInteger($fr);
    
$sourceOffset=$this->readInteger($fr);
    
$targetOffset=$this->readInteger($fr);

    
$sourceLengths=array();
    
$sourceOffsets=array();
    
fseek($fr,$sourceOffset);
    for(
$i=0;$i<$count;++$i)
    {
        
$sourceLengths[]=$this->readInteger($fr);
        
$sourceOffsets[]=$this->readInteger($fr);
    }

    
$targetLengths=array();
    
$targetOffsets=array();
    
fseek($fr,$targetOffset);
    for(
$i=0;$i<$count;++$i)
    {
        
$targetLengths[]=$this->readInteger($fr);
        
$targetOffsets[]=$this->readInteger($fr);
    }

    
$messages=array();
    for(
$i=0;$i<$count;++$i)
    {
        
$id=$this->readString($fr,$sourceLengths[$i],$sourceOffsets[$i]);
        if((
$pos=strpos($id,chr(4)))!==false && substr($id,0,$pos)===$context)
        {
            
$id=substr($id,$pos+1);
            
$message=$this->readString($fr,$targetLengths[$i],$targetOffsets[$i]);
            
$messages[$id]=$message;
        }
    }

    @
flock($fr,LOCK_UN);
    @
fclose($fr);

    return 
$messages;
}

浠嶮O鏂囦欢鍔犺浇淇℃伅銆

readByte() 鏂规硶
protected string readByte(resource $fr, integer $n=1)
$fr resource 鏂囦欢鍙ユ焺
$n integer 瑕佽鍙栫殑瀛楄妭鏁
{return} string 瀛楄妭
婧愮爜锛 framework/i18n/gettext/CGettextMoFile.php#206 (鏄剧ず)
protected function readByte($fr,$n=1)
{
    if(
$n>0)
        return 
fread($fr,$n);
}

璇诲彇涓涓垨澶氫釜瀛楄妭銆

readInteger() 鏂规硶
protected integer readInteger(resource $fr)
$fr resource 鏂囦欢鍙ユ焺
{return} integer 杩斿洖缁撴灉
婧愮爜锛 framework/i18n/gettext/CGettextMoFile.php#229 (鏄剧ず)
protected function readInteger($fr)
{
    return 
current($array=unpack($this->useBigEndian 'N' 'V'$this->readByte($fr,4)));
}

璇诲彇4瀛楄妭鏁存暟銆

鍙傝

readString() 鏂规硶
protected string readString(resource $fr, integer $length, integer $offset=NULL)
$fr resource 鏂囦欢鍙ユ焺
$length integer 瀛楃涓查暱搴
$offset integer 瀛楃涓插湪鏂囦欢涓殑鍋忕Щ鍊硷紝濡傛灉涓簄ull鍒欐槸褰撳墠浣嶇疆銆
{return} string 杩斿洖缁撴灉
婧愮爜锛 framework/i18n/gettext/CGettextMoFile.php#252 (鏄剧ず)
protected function readString($fr,$length,$offset=null)
{
    if(
$offset!==null)
        
fseek($fr,$offset);
    return 
$this->readByte($fr,$length);
}

璇诲彇瀛楃涓层

save() 鏂规硶
public void save(string $file, array $messages)
$file string 鏂囦欢璺緞
$messages array 缈昏瘧鐨勪俊鎭紙淇℃伅ID => 缈昏瘧鐨勪俊鎭級銆 娉ㄦ剰锛 濡傛灉淇℃伅鏈変笂涓嬫枃锛屼俊鎭疘D涓瀹氳鐢ㄤ笂涓嬫枃鐨 chr(4) 鍓嶇紑浣滀负鍒嗛殧绗︺
婧愮爜锛 framework/i18n/gettext/CGettextMoFile.php#137 (鏄剧ず)
public function save($file,$messages)
{
    if(!(
$fw=@fopen($file,'wb')))
        throw new 
CException(Yii::t('yii','Unable to write file "{file}".',
            array(
'{file}'=>$file)));

    if(!@
flock($fw,LOCK_EX))
        throw new 
CException(Yii::t('yii','Unable to lock file "{file}" for writing.',
            array(
'{file}'=>$file)));

    
// magic
    
if($this->useBigEndian)
        
$this->writeByte($fw,pack('c*'0x950x040x120xde));
    else
        
$this->writeByte($fw,pack('c*'0xde0x120x040x95));

    
// revision
    
$this->writeInteger($fw,0);

    
// message count
    
$n=count($messages);
    
$this->writeInteger($fw,$n);

    
// offset of source message table
    
$offset=28;
    
$this->writeInteger($fw,$offset);
    
$offset+=($n*8);
    
$this->writeInteger($fw,$offset);
    
// hashtable size, omitted
    
$this->writeInteger($fw,0);
    
$offset+=($n*8);
    
$this->writeInteger($fw,$offset);

    
// length and offsets for source messagess
    
foreach(array_keys($messages) as $id)
    {
        
$len=strlen($id);
        
$this->writeInteger($fw,$len);
        
$this->writeInteger($fw,$offset);
        
$offset+=$len+1;
    }

    
// length and offsets for target messagess
    
foreach($messages as $message)
    {
        
$len=strlen($message);
        
$this->writeInteger($fw,$len);
        
$this->writeInteger($fw,$offset);
        
$offset+=$len+1;
    }

    
// source messages
    
foreach(array_keys($messages) as $id)
        
$this->writeString($fw,$id);

    
// target messages
    
foreach($messages as $message)
        
$this->writeString($fw,$message);

    @
flock($fw,LOCK_UN);
    @
fclose($fw);
}

淇濆瓨淇℃伅鍒癕O鏂囦欢銆

writeByte() 鏂规硶
protected integer writeByte(resource $fw, string $data)
$fw resource 鏂囦欢鍙ユ焺
$data string 鏁版嵁
{return} integer 杩斿洖鍐欏叆鐨勫瓧鑺傛暟
婧愮爜锛 framework/i18n/gettext/CGettextMoFile.php#218 (鏄剧ず)
protected function writeByte($fw,$data)
{
    return 
fwrite($fw,$data);
}

鍐欏叆瀛楄妭銆

writeInteger() 鏂规硶
protected integer writeInteger(resource $fw, integer $data)
$fw resource 鏂囦欢鍙ユ焺
$data integer 鏁版嵁
{return} integer 杩斿洖鍐欏叆鐨勫瓧鑺傛暟
婧愮爜锛 framework/i18n/gettext/CGettextMoFile.php#240 (鏄剧ず)
protected function writeInteger($fw,$data)
{
    return 
$this->writeByte($fw,pack($this->useBigEndian 'N' 'V', (int)$data));
}

鍐欏叆4瀛楄妭鏁存暟銆

writeString() 鏂规硶
protected integer writeString(resource $fw, string $data)
$fw resource 鏂囦欢鍙ユ焺
$data string 瀛楃涓
{return} integer 杩斿洖鍐欏叆鐨勫瓧鑺傛暟
婧愮爜锛 framework/i18n/gettext/CGettextMoFile.php#265 (鏄剧ず)
protected function writeString($fw,$data)
{
    return 
$this->writeByte($fw,$data."\0");
}

鍐欏叆瀛楃涓层

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.