[ Index ]
 

Code source de Symfony 1.0.0

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/lib/i18n/Gettext/ -> PO.php (source)

   1  <?php
   2  /**
   3   * TGettext_PO class file.
   4   *
   5   * This program is free software; you can redistribute it and/or modify
   6   * it under the terms of the BSD License.
   7   *
   8   * Copyright(c) 2004 by Qiang Xue. All rights reserved.
   9   *
  10   * To contact the author write to {@link mailto:qiang.xue@gmail.com Qiang Xue}
  11   * The latest version of PRADO can be obtained from:
  12   * {@link http://prado.sourceforge.net/}
  13   *
  14   * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
  15   * @version $Revision: 1415 $  $Date: 2006-06-11 10:33:51 +0200 (Sun, 11 Jun 2006) $
  16   * @package System.I18N.core
  17   */
  18  
  19  // +----------------------------------------------------------------------+
  20  // | PEAR :: File :: Gettext :: PO                                        |
  21  // +----------------------------------------------------------------------+
  22  // | This source file is subject to version 3.0 of the PHP license,       |
  23  // | that is available at http://www.php.net/license/3_0.txt              |
  24  // | If you did not receive a copy of the PHP license and are unable      |
  25  // | to obtain it through the world-wide-web, please send a note to       |
  26  // | license@php.net so we can mail you a copy immediately.               |
  27  // +----------------------------------------------------------------------+
  28  // | Copyright (c) 2004 Michael Wallner <mike@iworks.at>                  |
  29  // +----------------------------------------------------------------------+
  30  //
  31  // $Id: PO.php 1415 2006-06-11 08:33:51Z fabien $
  32  
  33  /**
  34   * File::Gettext::PO
  35   * 
  36   * @author      Michael Wallner <mike@php.net>
  37   * @license     PHP License
  38   */
  39   
  40  require_once dirname(__FILE__).'/TGettext.class.php';
  41  
  42  /** 
  43   * File_Gettext_PO
  44   *
  45   * GNU PO file reader and writer.
  46   * 
  47   * @author      Michael Wallner <mike@php.net>
  48   * @version     $Revision: 1415 $
  49   * @access      public
  50   * @package System.I18N.core 
  51   */
  52  class TGettext_PO extends TGettext
  53  {
  54      /**
  55       * Constructor
  56       *
  57       * @access  public
  58       * @return  object      File_Gettext_PO
  59       * @param   string      path to GNU PO file
  60       */
  61      function TGettext_PO($file = '')
  62      {
  63          $this->file = $file;
  64      }
  65  
  66      /**
  67       * Load PO file
  68       *
  69       * @access  public
  70       * @return  mixed   Returns true on success or PEAR_Error on failure.
  71       * @param   string  $file
  72       */
  73      function load($file = null)
  74      {
  75          if (!isset($file)) {
  76              $file = $this->file;
  77          }
  78          
  79          // load file
  80          if (!$contents = @file($file)) {
  81              return false;
  82          }
  83          $contents = implode('', $contents);
  84          
  85          // match all msgid/msgstr entries
  86          $matched = preg_match_all(
  87              '/(msgid\s+("([^"]|\\\\")*?"\s*)+)\s+' .
  88              '(msgstr\s+("([^"]|\\\\")*?"\s*)+)/',
  89              $contents, $matches
  90          );
  91          unset($contents);
  92          
  93          if (!$matched) {
  94              return false;
  95          }
  96          
  97          // get all msgids and msgtrs
  98          for ($i = 0; $i < $matched; $i++) {
  99              $msgid = preg_replace(
 100                  '/\s*msgid\s*"(.*)"\s*/s', '\\1', $matches[1][$i]);
 101              $msgstr= preg_replace(
 102                  '/\s*msgstr\s*"(.*)"\s*/s', '\\1', $matches[4][$i]);
 103              $this->strings[parent::prepare($msgid)] = parent::prepare($msgstr);
 104          }
 105          
 106          // check for meta info
 107          if (isset($this->strings[''])) {
 108              $this->meta = parent::meta2array($this->strings['']);
 109              unset($this->strings['']);
 110          }
 111          
 112          return true;
 113      }
 114      
 115      /**
 116       * Save PO file
 117       *
 118       * @access  public
 119       * @return  mixed   Returns true on success or PEAR_Error on failure.
 120       * @param   string  $file
 121       */
 122      function save($file = null)
 123      {
 124          if (!isset($file)) {
 125              $file = $this->file;
 126          }
 127  
 128          // open PO file
 129          if (!is_resource($fh = @fopen($file, 'w'))) {
 130              return false;
 131          }
 132  
 133          // lock PO file exclusively
 134          if (!flock($fh, LOCK_EX)) {
 135              fclose($fh);
 136              return false;
 137          }
 138          // write meta info
 139          if (count($this->meta)) {
 140              $meta = 'msgid ""' . "\nmsgstr " . '""' . "\n";
 141              foreach ($this->meta as $k => $v) {
 142                  $meta .= '"' . $k . ': ' . $v . '\n"' . "\n";
 143              }
 144              fwrite($fh, $meta . "\n");
 145          }
 146          // write strings
 147          foreach ($this->strings as $o => $t) {
 148              fwrite($fh,
 149                  'msgid "'  . parent::prepare($o, true) . '"' . "\n" .
 150                  'msgstr "' . parent::prepare($t, true) . '"' . "\n\n"
 151              );
 152          }
 153          
 154          //done
 155          @flock($fh, LOCK_UN);
 156          @fclose($fh);
 157          return true;
 158      }
 159  }


Généré le : Fri Mar 16 22:42:14 2007 par Balluche grâce à PHPXref 0.7