Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** TGettext class file.** This program is free software; you can redistribute it and/or modify* it under the terms of the BSD License.** Copyright(c) 2004 by Qiang Xue. All rights reserved.** To contact the author write to {@link mailto:qiang.xue@gmail.com Qiang Xue}* The latest version of PRADO can be obtained from:* {@link http://prado.sourceforge.net/}** @author Wei Zhuo <weizhuo[at]gmail[dot]com>* @version $Revision: 1.4 $ $Date: 2005/01/09 23:36:23 $* @package System.I18N.core*/// +----------------------------------------------------------------------+// | PEAR :: File :: Gettext |// +----------------------------------------------------------------------+// | This source file is subject to version 3.0 of the PHP license, |// | that is available at http://www.php.net/license/3_0.txt |// | If you did not receive a copy of the PHP license and are unable |// | to obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Copyright (c) 2004 Michael Wallner <mike@iworks.at> |// +----------------------------------------------------------------------+//// $Id: TGettext.php 2541 2008-10-21 15:05:13Z qiang.xue $/*** File::Gettext** @author Michael Wallner <mike@php.net>* @license PHP License*//*** Use PHPs builtin error messages*///ini_set('track_errors', true);/*** File_Gettext** GNU gettext file reader and writer.** #################################################################* # All protected members of this class are public in its childs. #* #################################################################** @author Michael Wallner <mike@php.net>* @version $Revision: 1.4 $* @access public* @package System.I18N.core*/class TGettext{/*** strings** associative array with all [msgid => msgstr] entries** @access protected* @var array*/protected $strings = array();/*** meta** associative array containing meta* information like project name or content type** @access protected* @var array*/protected $meta = array();/*** file path** @access protected* @var string*/protected $file = '';/*** Factory** @static* @access public* @return object Returns File_Gettext_PO or File_Gettext_MO on success* or PEAR_Error on failure.* @param string $format MO or PO* @param string $file path to GNU gettext file*/function factory($format, $file = ''){$format = strToUpper($format);$filename = dirname(__FILE__).'/'.$format.'.php';if(is_file($filename) == false)throw new Exception ("Class file $file not found");include_once $filename;$class = 'TGettext_' . $format;return new $class($file);}/*** poFile2moFile** That's a simple fake of the 'msgfmt' console command. It reads the* contents of a GNU PO file and saves them to a GNU MO file.** @static* @access public* @return mixed Returns true on success or PEAR_Error on failure.* @param string $pofile path to GNU PO file* @param string $mofile path to GNU MO file*/function poFile2moFile($pofile, $mofile){if (!is_file($pofile)) {throw new Exception("File $pofile doesn't exist.");}include_once dirname(__FILE__).'/PO.php';$PO = new TGettext_PO($pofile);if (true !== ($e = $PO->load())) {return $e;}$MO = $PO->toMO();if (true !== ($e = $MO->save($mofile))) {return $e;}unset($PO, $MO);return true;}/*** prepare** @static* @access protected* @return string* @param string $string* @param bool $reverse*/function prepare($string, $reverse = false){if ($reverse) {$smap = array('"', "\n", "\t", "\r");$rmap = array('\"', '\\n"' . "\n" . '"', '\\t', '\\r');return (string) str_replace($smap, $rmap, $string);} else {$string = preg_replace('/"\s+"/', '', $string);$smap = array('\\n', '\\r', '\\t', '\"');$rmap = array("\n", "\r", "\t", '"');return (string) str_replace($smap, $rmap, $string);}}/*** meta2array** @static* @access public* @return array* @param string $meta*/function meta2array($meta){$array = array();foreach (explode("\n", $meta) as $info) {if ($info = trim($info)) {list($key, $value) = explode(':', $info, 2);$array[trim($key)] = trim($value);}}return $array;}/*** toArray** Returns meta info and strings as an array of a structure like that:* <code>* array(* 'meta' => array(* 'Content-Type' => 'text/plain; charset=iso-8859-1',* 'Last-Translator' => 'Michael Wallner <mike@iworks.at>',* 'PO-Revision-Date' => '2004-07-21 17:03+0200',* 'Language-Team' => 'German <mail@example.com>',* ),* 'strings' => array(* 'All rights reserved' => 'Alle Rechte vorbehalten',* 'Welcome' => 'Willkommen',* // ...* )* )* </code>** @see fromArray()* @access protected* @return array*/function toArray(){return array('meta' => $this->meta, 'strings' => $this->strings);}/*** fromArray** Assigns meta info and strings from an array of a structure like that:* <code>* array(* 'meta' => array(* 'Content-Type' => 'text/plain; charset=iso-8859-1',* 'Last-Translator' => 'Michael Wallner <mike@iworks.at>',* 'PO-Revision-Date' => date('Y-m-d H:iO'),* 'Language-Team' => 'German <mail@example.com>',* ),* 'strings' => array(* 'All rights reserved' => 'Alle Rechte vorbehalten',* 'Welcome' => 'Willkommen',* // ...* )* )* </code>** @see toArray()* @access protected* @return bool* @param array $array*/function fromArray($array){if (!array_key_exists('strings', $array)) {if (count($array) != 2) {return false;} else {list($this->meta, $this->strings) = $array;}} else {$this->meta = @$array['meta'];$this->strings = @$array['strings'];}return true;}/*** toMO** @access protected* @return object File_Gettext_MO*/function toMO(){include_once dirname(__FILE__).'/MO.php';$MO = new TGettext_MO;$MO->fromArray($this->toArray());return $MO;}/*** toPO** @access protected* @return object File_Gettext_PO*/function toPO(){include_once dirname(__FILE__).'/PO.php';$PO = new TGettext_PO;$PO->fromArray($this->toArray());return $PO;}}