Spec-Zone.ru › Yii 1.1

CGettextMoFile

Пакет system.i18n.gettext
Наследование класс CGettextMoFile » CGettextFile » CComponent
С 1.0
Исходный код framework/i18n/gettext/CGettextMoFile.php
CGettextMoFile представляет собой файл сообщений MO Gettext.

Этот класс написан путём адаптации класса Michael's Gettext_MO в PEAR. Обратитесь к следующим условиям лицензии.

Авторское право (c) 2004-2005, Michael Wallner . Все права защищены.

Перераспределение и использование в исходной и двоичной формах, с изменениями или без них, разрешены при соблюдении следующих условий:

* Перераспределения исходного кода должны содержать вышеуказанное уведомление об авторских правах, этот список условий и следующее освобождение от ответственности. * Перераспределения в двоичной форме должны воспроизводить вышеуказанное уведомление об авторских правах, этот список условий и следующее освобождение от ответственности в документации и/или других материалах, предоставляемых с распространением.

ЭТО ПОЛОЖЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРАМИ И КОНТРИБУТОРАМИ "В НАСТОЯЩЕМ ВИДЕ", И ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ СТОРОНЫ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ОТКАЗЫВАЮТСЯ. НИ В КОЕМ СЛУЧАЕ АВТОРСКИЕ ПРАВА ИЛИ КОНТРИБУТОРЫ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ПРИМЕРНЫЕ ИЛИ ПОСЛЕДСТВИТЕЛЬНЫЕ УБЫТКИ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ПОКУПКОЙ ЗАМЕЩАЮЩИХ ТОВАРОВ ИЛИ УСЛУГ; ПОТЕРЯ УПОТРЕБЛЕНИЯ, ДАННЫХ ИЛИ ПРИБЫЛИ; ИЛИ ПЕРЕРЫВАНИЕ ДЕЯТЕЛЬНОСТИ), ВСЕ ПРИЧИНЫ И ВСЕ ТЕОРИИ ОТВЕТСТВЕННОСТИ, НЕЗАВИСИМО ОТ ДОГОВОРА, СТРОГОЙ ОТВЕТСТВЕННОСТИ ИЛИ ДЕЛИКТА (ВКЛЮЧАЯ НЕБРЕЖНОСТЬ ИЛИ ДРУГИЕ) ВОЗНИКАЮТ ИЗ ИСПОЛЬЗОВАНИЯ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ О НИХ БЫЛО ПРЕДУПРЕЖДЕНО.

Открытые свойства

Свойство Тип Описание Определено
useBigEndian boolean использовать Big Endian при чтении и записи целого числа. CGettextMoFile

Открытые методы

Метод Описание Определено
__call() Вызывает метод с указанным именем, который не является методом класса. CComponent
__construct() Конструктор. CGettextMoFile
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. 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() Загружает сообщения из файла MO. CGettextMoFile
raiseEvent() Возбуждает событие. CComponent
save() Сохраняет сообщения в файл MO. 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#55 (показать)
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)));

    
$array=unpack('c',$this->readByte($fr,4));
    
$magic=current($array);
    if(
$magic==-34)
        
$this->useBigEndian=false;
    elseif(
$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]);
        
$pos = strpos($id,chr(4));

        if((
$context && $pos!==false && substr($id,0,$pos)===$context) || (!$context && $pos===false))
        {
            if(
$pos !== false)
                
$id=substr($id,$pos+1);

            
$message=$this->readString($fr,$targetLengths[$i],$targetOffsets[$i]);
            
$messages[$id]=$message;
        }
    }

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

    return 
$messages;
}

Загружает сообщения из файла MO.

readByte() метод

protected string readByte(resource $fr, integer $n=1)
$fr resource дескриптор файла
$n целое количество байтов для чтения
{return} строка байты
Исходный код: framework/i18n/gettext/CGettextMoFile.php#212 (показать)
protected function readByte($fr,$n=1)
{
    if(
$n>0)
        return 
fread($fr,$n);
}

Читает один или несколько байтов.

readInteger() метод

protected integer readInteger(resource $fr)
$fr resource дескриптор файла
{return} целое результат
Исходный код: framework/i18n/gettext/CGettextMoFile.php#235 (показать)
protected function readInteger($fr)
{
    
$array=unpack($this->useBigEndian ? 'N' : 'V', $this->readByte($fr,4));
    return 
current($array);
}

Читает целое число из 4 байтов.

См. также

  • useBigEndian

readString() метод

protected string readString(resource $fr, integer $length, integer $offset=NULL)
$fr resource дескриптор файла
$length целое длина строки
$offset целое смещение строки в файле. Если null, читается из текущей позиции.
{return} строка результат
Исходный код: framework/i18n/gettext/CGettextMoFile.php#259 (показать)
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 строка путь к файлу
$messages массив переводы сообщений (идентификатор сообщения => переведенное сообщение). При наличии контекста сообщения, идентификатор должен быть префиксным с контекстом, используя chr(4) в качестве разделителя.
Исходный код: framework/i18n/gettext/CGettextMoFile.php#143 (показать)
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*', 0x95, 0x04, 0x12, 0xde));
    else
        
$this->writeByte($fw,pack('c*', 0xde, 0x12, 0x04, 0x95));

    
// 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);
}

Сохраняет сообщения в файл MO.

writeByte() метод

protected integer writeByte(resource $fw, string $data)
$fw resource дескриптор файла
$data строка данные
{return} целое количество записанных байтов
Исходный код: framework/i18n/gettext/CGettextMoFile.php#224 (показать)
protected function writeByte($fw,$data)
{
    return 
fwrite($fw,$data);
}

Записывает байты.

writeInteger() метод

protected integer writeInteger(resource $fw, integer $data)
$fw resource дескриптор файла
$data целое данные
{return} целое количество записанных байтов
Исходный код: framework/i18n/gettext/CGettextMoFile.php#247 (показать)
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 строка строка
{return} целое количество записанных байтов
Исходный код: framework/i18n/gettext/CGettextMoFile.php#272 (показать)
protected function writeString($fw,$data)
{
    return 
$this->writeByte($fw,$data."\0");
}

Записывает строку.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CGettextMoFile

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API