Source for file jBundle.class.php

Documentation is available at jBundle.class.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage core
  5. @author     Laurent Jouanneau
  6. @author     Gerald Croes
  7. @contributor Julien Issler, Yannick Le Guédart, Dominique Papin
  8. @copyright  2001-2005 CopixTeam, 2005-2008 Laurent Jouanneau
  9. *  Some parts of this file are took from Copix Framework v2.3dev20050901, CopixI18N.class.php, http://www.copix.org.
  10. *  copyrighted by CopixTeam and released under GNU Lesser General Public Licence.
  11. *  initial authors : Gerald Croes, Laurent Jouanneau.
  12. *  enhancement by Laurent Jouanneau for Jelix.
  13. @copyright 2008 Julien Issler, 2008 Yannick Le Guédart, 2008 Dominique Papin
  14. @link        http://www.jelix.org
  15. @licence    GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  16. */
  17.  
  18. /**
  19. * a bundle contains all readed properties in a given language, and for all charsets
  20. @package  jelix
  21. @subpackage core
  22. */
  23. class jBundle {
  24.     public $fic;
  25.     public $locale;
  26.  
  27.     protected $_loadedCharset = array ();
  28.     protected $_strings = array();
  29.  
  30.     /**
  31.     * constructor
  32.     * @param jSelector   $file selector of a properties file
  33.     * @param string      $locale    the code lang
  34.     */
  35.     public function __construct ($file$locale){
  36.         $this->fic  = $file;
  37.         $this->locale = $locale;
  38.     }
  39.  
  40.     /**
  41.     * get the translation
  42.     * @param string $key the locale key
  43.     * @param string $charset 
  44.     * @return string the localized string
  45.     */
  46.     public function get ($key$charset null){
  47.  
  48.         if($charset == null){
  49.             $charset $GLOBALS['gJConfig']->charset;
  50.         }
  51.         if (!in_array ($charset$this->_loadedCharset)){
  52.             $this->_loadLocales ($this->locale$charset);
  53.         }
  54.  
  55.         if (isset ($this->_strings[$charset][$key])){
  56.             return $this->_strings[$charset][$key];
  57.         }else{
  58.             return null;
  59.         }
  60.     }
  61.  
  62.     /**
  63.     * Loads the resources for a given locale/charset.
  64.     * @param string $locale     the locale
  65.     * @param string $charset    the charset
  66.     */
  67.     protected function _loadLocales ($locale$charset){
  68.         global $gJConfig;
  69.         $this->_loadedCharset[$charset;
  70.  
  71.         $source $this->fic->getPath();
  72.         $cache $this->fic->getCompiledFilePath();
  73.  
  74.         // check if we have a compiled version of the ressources
  75.  
  76.         if (is_readable ($cache)){
  77.             $okcompile true;
  78.  
  79.             if ($gJConfig->compilation['force']){
  80.                $okcompile false;
  81.             }else{
  82.                 if ($gJConfig->compilation['checkCacheFiletime']){
  83.                     if (is_readable ($source&& filemtime($sourcefilemtime($cache)){
  84.                         $okcompile false;
  85.                     }
  86.                 }
  87.             }
  88.  
  89.             if ($okcompile{
  90.                 include ($cache);
  91.                 $this->_strings[$charset$_loaded;
  92.                 return;
  93.             }
  94.         }
  95.  
  96.         $this->_loadResources ($source$charset);
  97.  
  98.         if(isset($this->_strings[$charset])){
  99.             $content '<?php $_loaded= '.var_export($this->_strings[$charset]true).' ?>';
  100.  
  101.             jFile::write($cache$content);
  102.         }
  103.     }
  104.  
  105.  
  106.     /**
  107.     * loads a given resource from its path.
  108.     */
  109.     protected function _loadResources ($fichier$charset){
  110.  
  111.         if (($f @fopen ($fichier'r')) !== false{
  112.             $utf8Mod ($charset=='UTF-8')?'u':'';
  113.             $multiline=false;
  114.             $linenumber=0;
  115.             $key='';
  116.             while (!feof($f)) {
  117.                 if($line=fgets($f)){
  118.                     $linenumber++;
  119.                     $line=rtrim($line);
  120.                     if($multiline){
  121.                         if(preg_match("/^\s*(.*)\s*(\\\\?)$/U".$utf8Mod$line$match)){
  122.                             $multiline($match[2=="\\");
  123.                             if (strlen ($match[1])) {
  124.                                 $sp preg_split('/(?<!\\\\)\#/'$match[1]-,PREG_SPLIT_NO_EMPTY);
  125.                                 $this->_strings[$charset][$key].=' '.trim(str_replace(array('\#','\n'),array('#',"\n"),$sp[0]));
  126.                             else {
  127.                                 $this->_strings[$charset][$key].=' ';
  128.                             }
  129.                         }else{
  130.                             throw new Exception('Syntaxe error in file properties '.$fichier.' line '.$linenumber,210);
  131.                         }
  132.                     }elseif(preg_match("/^\s*(.+)\s*=\s*(.*)\s*(\\\\?)$/U".$utf8Mod,$line$match)){
  133.                         // on a bien un cle=valeur
  134.                         $key=$match[1];
  135.                         $multiline($match[3=="\\");
  136.                         $sp preg_split('/(?<!\\\\)\#/'$match[2]-,PREG_SPLIT_NO_EMPTY);
  137.                         if(count($sp)){
  138.                             $value=trim(str_replace('\#','#',$sp[0]));
  139.                             if($value == '\w'){
  140.                                 $value ' ';
  141.                             }
  142.                         }else{
  143.                             $value='';
  144.                         }
  145.  
  146.                         $this->_strings[$charset][$keystr_replace(array('\#','\n'),array('#',"\n"),$value);
  147.  
  148.                     }elseif(preg_match("/^\s*(\#.*)?$/",$line$match)){
  149.                         // ok, juste un commentaire
  150.                     }else {
  151.                         throw new Exception('Syntaxe error in file properties '.$fichier.' line '.$linenumber,211);
  152.                     }
  153.                 }
  154.             }
  155.             fclose ($f);
  156.         }else{
  157.             throw new Exception('Cannot load the resource '.$fichier,212);
  158.         }
  159.     }
  160. }

Documentation generated on Thu, 22 Mar 2012 22:14:05 +0100 by phpDocumentor 1.4.3