[ Index ]
 

Code source de Symfony 1.0.0

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

title

Body

[fermer]

/lib/i18n/Gettext/ -> TGettext.class.php (source)

   1  <?php
   2  /**
   3   * TGettext 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: 3152 $  $Date: 2007-01-05 07:16:57 +0100 (Fri, 05 Jan 2007) $
  16   * @package System.I18N.core
  17   */
  18  
  19  // +----------------------------------------------------------------------+
  20  // | PEAR :: File :: Gettext                                              |
  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: TGettext.class.php 3152 2007-01-05 06:16:57Z fabien $
  32  
  33  /**
  34   * File::Gettext
  35   * 
  36   * @author      Michael Wallner <mike@php.net>
  37   * @license     PHP License
  38   */
  39  
  40  /**
  41   * Use PHPs builtin error messages
  42   */
  43  //ini_set('track_errors', true);
  44  
  45  /** 
  46   * File_Gettext
  47   * 
  48   * GNU gettext file reader and writer.
  49   * 
  50   * #################################################################
  51   * # All protected members of this class are public in its childs. #
  52   * #################################################################
  53   *
  54   * @author      Michael Wallner <mike@php.net>
  55   * @version     $Revision: 3152 $
  56   * @access      public
  57   * @package System.I18N.core 
  58   */
  59  class TGettext
  60  {
  61      /**
  62       * strings
  63       * 
  64       * associative array with all [msgid => msgstr] entries
  65       * 
  66       * @access  protected
  67       * @var     array
  68      */
  69      protected $strings = array();
  70  
  71      /**
  72       * meta
  73       * 
  74       * associative array containing meta 
  75       * information like project name or content type
  76       * 
  77       * @access  protected
  78       * @var     array
  79       */
  80      protected $meta = array();
  81      
  82      /**
  83       * file path
  84       * 
  85       * @access  protected
  86       * @var     string
  87       */
  88      protected $file = '';
  89      
  90      /**
  91       * Factory
  92       *
  93       * @static
  94       * @access  public
  95       * @return  object  Returns File_Gettext_PO or File_Gettext_MO on success 
  96       *                  or PEAR_Error on failure.
  97       * @param   string  $format MO or PO
  98       * @param   string  $file   path to GNU gettext file
  99       */
 100      static function factory($format, $file = '')
 101      {
 102          $format = strToUpper($format);
 103          $filename = dirname(__FILE__).'/'.$format.'.php';
 104          if (is_file($filename) == false)
 105              throw new Exception ("Class file $file not found");
 106              
 107          include_once $filename;
 108          $class = 'TGettext_' . $format;
 109  
 110          return new $class($file);
 111      }
 112  
 113      /**
 114       * poFile2moFile
 115       *
 116       * That's a simple fake of the 'msgfmt' console command.  It reads the
 117       * contents of a GNU PO file and saves them to a GNU MO file.
 118       * 
 119       * @static
 120       * @access  public
 121       * @return  mixed   Returns true on success or PEAR_Error on failure.
 122       * @param   string  $pofile path to GNU PO file
 123       * @param   string  $mofile path to GNU MO file
 124       */
 125      function poFile2moFile($pofile, $mofile)
 126      {
 127          if (!is_file($pofile)) {
 128              throw new Exception("File $pofile doesn't exist.");
 129          }
 130          
 131          include_once dirname(__FILE__).'/PO.php';
 132          
 133          $PO = new TGettext_PO($pofile);
 134          if (true !== ($e = $PO->load())) {
 135              return $e;
 136          }
 137          
 138          $MO = $PO->toMO();
 139          if (true !== ($e = $MO->save($mofile))) {
 140              return $e;
 141          }
 142          unset($PO, $MO);
 143          
 144          return true;
 145      }
 146      
 147      /**
 148       * prepare
 149       *
 150       * @static
 151       * @access  protected
 152       * @return  string
 153       * @param   string  $string
 154       * @param   bool    $reverse
 155       */
 156      function prepare($string, $reverse = false)
 157      {
 158          if ($reverse) {
 159              $smap = array('"', "\n", "\t", "\r");
 160              $rmap = array('\"', '\\n"' . "\n" . '"', '\\t', '\\r');
 161              return (string) str_replace($smap, $rmap, $string);
 162          } else {
 163              $string = preg_replace('/"\s+"/', '', $string);
 164              $smap = array('\\n', '\\r', '\\t', '\"');
 165              $rmap = array("\n", "\r", "\t", '"');
 166              return (string) str_replace($smap, $rmap, $string);
 167          }
 168      }
 169      
 170      /**
 171       * meta2array
 172       *
 173       * @static
 174       * @access  public
 175       * @return  array
 176       * @param   string  $meta
 177       */
 178      function meta2array($meta)
 179      {
 180          $array = array();
 181          foreach (explode("\n", $meta) as $info) {
 182              if ($info = trim($info)) {
 183                  list($key, $value) = explode(':', $info, 2);
 184                  $array[trim($key)] = trim($value);
 185              }
 186          }
 187          return $array;
 188      }
 189  
 190      /**
 191       * toArray
 192       * 
 193       * Returns meta info and strings as an array of a structure like that:
 194       * <code>
 195       *   array(
 196       *       'meta' => array(
 197       *           'Content-Type'      => 'text/plain; charset=iso-8859-1',
 198       *           'Last-Translator'   => 'Michael Wallner <mike@iworks.at>',
 199       *           'PO-Revision-Date'  => '2004-07-21 17:03+0200',
 200       *           'Language-Team'     => 'German <mail@example.com>',
 201       *       ),
 202       *       'strings' => array(
 203       *           'All rights reserved'   => 'Alle Rechte vorbehalten',
 204       *           'Welcome'               => 'Willkommen',
 205       *           // ...
 206       *       )
 207       *   )
 208       * </code>
 209       * 
 210       * @see     fromArray()
 211       * @access  protected
 212       * @return  array
 213       */
 214      function toArray()
 215      {
 216          return array('meta' => $this->meta, 'strings' => $this->strings);
 217      }
 218      
 219      /**
 220       * fromArray
 221       * 
 222       * Assigns meta info and strings from an array of a structure like that:
 223       * <code>
 224       *   array(
 225       *       'meta' => array(
 226       *           'Content-Type'      => 'text/plain; charset=iso-8859-1',
 227       *           'Last-Translator'   => 'Michael Wallner <mike@iworks.at>',
 228       *           'PO-Revision-Date'  => date('Y-m-d H:iO'),
 229       *           'Language-Team'     => 'German <mail@example.com>',
 230       *       ),
 231       *       'strings' => array(
 232       *           'All rights reserved'   => 'Alle Rechte vorbehalten',
 233       *           'Welcome'               => 'Willkommen',
 234       *           // ...
 235       *       )
 236       *   )
 237       * </code>
 238       * 
 239       * @see     toArray()
 240       * @access  protected
 241       * @return  bool
 242       * @param   array       $array
 243       */
 244      function fromArray($array)
 245      {
 246          if (!array_key_exists('strings', $array)) {
 247              if (count($array) != 2) {
 248                  return false;
 249              } else {
 250                  list($this->meta, $this->strings) = $array;
 251              }
 252          } else {
 253              $this->meta = @$array['meta'];
 254              $this->strings = @$array['strings'];
 255          }
 256          return true;
 257      }
 258      
 259      /**
 260       * toMO
 261       *
 262       * @access  protected
 263       * @return  object  File_Gettext_MO
 264       */
 265      function toMO()
 266      {
 267          include_once dirname(__FILE__).'/MO.php';
 268          $MO = new TGettext_MO;
 269          $MO->fromArray($this->toArray());
 270          return $MO;
 271      }
 272      
 273      /**
 274       * toPO
 275       *
 276       * @access  protected
 277       * @return  object      File_Gettext_PO
 278       */
 279      function toPO()
 280      {
 281          include_once dirname(__FILE__).'/PO.php';
 282          $PO = new TGettext_PO;
 283          $PO->fromArray($this->toArray());
 284          return $PO;
 285      }
 286  }


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