Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** TGettext_PO 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.2 $ $Date: 2005/01/05 03:15:14 $* @package System.I18N.core*/// +----------------------------------------------------------------------+// | PEAR :: File :: Gettext :: PO |// +----------------------------------------------------------------------+// | 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: PO.php 2541 2008-10-21 15:05:13Z qiang.xue $/*** File::Gettext::PO** @author Michael Wallner <mike@php.net>* @license PHP License*/require_once dirname(__FILE__).'/TGettext.php';/*** File_Gettext_PO** GNU PO file reader and writer.** @author Michael Wallner <mike@php.net>* @version $Revision: 1.2 $* @access public* @package System.I18N.core*/class TGettext_PO extends TGettext{/*** Constructor** @access public* @return object File_Gettext_PO* @param string path to GNU PO file*/function TGettext_PO($file = ''){$this->file = $file;}/*** Load PO file** @access public* @return mixed Returns true on success or PEAR_Error on failure.* @param string $file*/function load($file = null){if (!isset($file)) {$file = $this->file;}// load fileif (!$contents = @file($file)) {return false;}$contents = implode('', $contents);// match all msgid/msgstr entries$matched = preg_match_all('/(msgid\s+("([^"]|\\\\")*?"\s*)+)\s+' .'(msgstr\s+("([^"]|\\\\")*?"\s*)+)/',$contents, $matches);unset($contents);if (!$matched) {return false;}// get all msgids and msgtrsfor ($i = 0; $i < $matched; $i++) {$msgid = preg_replace('/\s*msgid\s*"(.*)"\s*/s', '\\1', $matches[1][$i]);$msgstr= preg_replace('/\s*msgstr\s*"(.*)"\s*/s', '\\1', $matches[4][$i]);$this->strings[parent::prepare($msgid)] = parent::prepare($msgstr);}// check for meta infoif (isset($this->strings[''])) {$this->meta = parent::meta2array($this->strings['']);unset($this->strings['']);}return true;}/*** Save PO file** @access public* @return mixed Returns true on success or PEAR_Error on failure.* @param string $file*/function save($file = null){if (!isset($file)) {$file = $this->file;}// open PO fileif (!is_resource($fh = @fopen($file, 'w'))) {return false;}// lock PO file exclusivelyif (!flock($fh, LOCK_EX)) {fclose($fh);return false;}// write meta infoif (count($this->meta)) {$meta = 'msgid ""' . "\nmsgstr " . '""' . "\n";foreach ($this->meta as $k => $v) {$meta .= '"' . $k . ': ' . $v . '\n"' . "\n";}fwrite($fh, $meta . "\n");}// write stringsforeach ($this->strings as $o => $t) {fwrite($fh,'msgid "' . parent::prepare($o, true) . '"' . "\n" .'msgstr "' . parent::prepare($t, true) . '"' . "\n\n");}//done@flock($fh, LOCK_UN);@fclose($fh);chmod($file,PRADO_CHMOD);return true;}}