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. Все права защищены.
Перераспределение и использование в исходной и двоичной формах, с изменениями или без них, разрешены при соблюдении следующих условий:
* Перераспределения исходного кода должны содержать вышеуказанное уведомление об авторских правах, этот список условий и следующее освобождение от ответственности. * Перераспределения в двоичной форме должны воспроизводить вышеуказанное уведомление об авторских правах, этот список условий и следующее освобождение от ответственности в документации и/или других материалах, предоставляемых с распространением.
ЭТО ПОЛОЖЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРАМИ И КОНТРИБУТОРАМИ "В НАСТОЯЩЕМ ВИДЕ", И ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ СТОРОНЫ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ОТКАЗЫВАЮТСЯ. НИ В КОЕМ СЛУЧАЕ АВТОРСКИЕ ПРАВА ИЛИ КОНТРИБУТОРЫ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ПРИМЕРНЫЕ ИЛИ ПОСЛЕДСТВИТЕЛЬНЫЕ УБЫТКИ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ПОКУПКОЙ ЗАМЕЩАЮЩИХ ТОВАРОВ ИЛИ УСЛУГ; ПОТЕРЯ УПОТРЕБЛЕНИЯ, ДАННЫХ ИЛИ ПРИБЫЛИ; ИЛИ ПЕРЕРЫВАНИЕ ДЕЯТЕЛЬНОСТИ), ВСЕ ПРИЧИНЫ И ВСЕ ТЕОРИИ ОТВЕТСТВЕННОСТИ, НЕЗАВИСИМО ОТ ДОГОВОРА, СТРОГОЙ ОТВЕТСТВЕННОСТИ ИЛИ ДЕЛИКТА (ВКЛЮЧАЯ НЕБРЕЖНОСТЬ ИЛИ ДРУГИЕ) ВОЗНИКАЮТ ИЗ ИСПОЛЬЗОВАНИЯ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ О НИХ БЫЛО ПРЕДУПРЕЖДЕНО.
Этот класс написан путём адаптации класса 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 байтов.
См. также
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