mirror of
https://github.com/LBRYFoundation/pool.git
synced 2025-09-21 02:19:47 +00:00
89 lines
No EOL
2.4 KiB
PHP
89 lines
No EOL
2.4 KiB
PHP
<?php
|
|
/**
|
|
* CGettextPoFile class file.
|
|
*
|
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
|
* @link http://www.yiiframework.com/
|
|
* @copyright Copyright © 2008-2009 Yii Software LLC
|
|
* @license http://www.yiiframework.com/license/
|
|
*/
|
|
|
|
/**
|
|
* CGettextPoFile represents a PO Gettext message file.
|
|
*
|
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
|
* @version $Id: CGettextPoFile.php 433 2008-12-30 22:59:17Z qiang.xue $
|
|
* @package system.i18n.gettext
|
|
* @since 1.0
|
|
*/
|
|
class CGettextPoFile extends CGettextFile
|
|
{
|
|
/**
|
|
* Loads messages from a PO file.
|
|
* @param string file path
|
|
* @param string message context
|
|
* @return array message translations (source message => translated message)
|
|
*/
|
|
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[1][$i]===$context)
|
|
{
|
|
$id=$this->decode($matches[2][$i]);
|
|
$message=$this->decode($matches[3][$i]);
|
|
$messages[$id]=$message;
|
|
}
|
|
}
|
|
return $messages;
|
|
}
|
|
|
|
/**
|
|
* Saves messages to a PO file.
|
|
* @param string file path
|
|
* @param array message translations (message id => translated message).
|
|
* Note if the message has a context, the message id must be prefixed with
|
|
* the context with chr(4) as the separator.
|
|
*/
|
|
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);
|
|
}
|
|
|
|
/**
|
|
* Encodes special characters in a message.
|
|
* @param string message to be encoded
|
|
* @return string the encoded message
|
|
*/
|
|
protected function encode($string)
|
|
{
|
|
return str_replace(array('"', "\n", "\t", "\r"),array('\\"', "\\n", '\\t', '\\r'),$string);
|
|
}
|
|
|
|
/**
|
|
* Decodes special characters in a message.
|
|
* @param string message to be decoded
|
|
* @return string the decoded message
|
|
*/
|
|
protected function decode($string)
|
|
{
|
|
return str_replace(array('\\"', "\\n", '\\t', '\\r'),array('"', "\n", "\t", "\r"),$string);
|
|
}
|
|
} |