Ignore:
Timestamp:
Dec 4, 2013, 12:39:55 AM (11 years ago)
Author:
chronos
Message:
  • Added: Language selection menu in top right panel.
  • Added: All language files are updated from administration.
  • Added: LocaleManager to implement basic management functions.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/includes/Locale.php

    r610 r618  
    55        var $Data;
    66        var $Code;
     7        var $Title;
    78
    89  function __construct()
     
    1011        $this->Data = array();
    1112        $this->Code = 'en';
     13        $this->Title = 'English';
    1214  }     
    1315 
     
    1517        {
    1618        }
     19       
     20        function Translate($Text)
     21        {       
     22                if(array_key_exists($Text, $this->Data) and ($this->Data[$Text] != ''))
     23                  return($this->Data[$Text]);
     24                  else return($Text);
     25        }       
    1726}
    1827
     
    2231        var $Dir;
    2332       
    24         function __construct()
    25         {
     33        function __construct($System)
     34        {
     35                parent::__construct($System);
    2636                $this->Texts = new LocaleText();
    27         }
    28        
    29         function Translate($Text)
    30         {               
    31                 if(array_key_exists($Text, $this->Texts->Data) and ($this->Texts->Data[$Text] != ''))
    32                   return($this->Texts->Data[$Text]);
    33                   else return($Text);
    3437        }
    3538       
     
    4144                        $ClassName = 'LocaleText'.$Language;                   
    4245                  $this->Texts = new $ClassName();
    43                 } else $this->Texts = new LocaleText();
     46                } else throw new Exception('Language file '.$FileName.' not found');
    4447                $this->Texts->Load();
    4548        }
     
    97100          '  {'."\n".
    98101          '    $this->Code = \''.$this->Texts->Code.'\';'."\n".
     102          '    $this->Title = \''.$this->Texts->Title.'\';'."\n".
    99103                '    $this->Data = array('."\n";
    100104                foreach($this->Texts->Data as $Index => $Item)
     
    153157}
    154158
    155 $Locale = new Locale();
     159class LocaleManager extends Model
     160{
     161        var $CurrentLocale;
     162        var $Codes;
     163        var $Dir;
     164       
     165        function __construct($System)
     166        {
     167                parent::__construct($System);
     168                $this->Codes = array('en');
     169                $this->CurrentLocale = new Locale($System);             
     170        }
     171       
     172        function LoadAvailable()
     173        {
     174                $this->Available = array();
     175        $FileList = scandir($this->Dir);
     176    foreach($FileList as $FileName)
     177    {
     178          if(substr($FileName, -4) == '.php')
     179          {             
     180                $Code = substr($FileName, 0, -4);
     181                $Locale = new Locale($this->System);
     182                $Locale->Dir = $this->Dir;
     183                $Locale->Load($Code);
     184                $this->Available['Code'] = array('Code' => $Code, 'Title' => $Locale->Texts->Title);
     185          }
     186          }
     187  }
     188       
     189        function UpdateAll($Directory)
     190        {
     191                $Locale = new Locale($this->System);
     192                $Locale->AnalyzeCode($Directory);
     193          $FileList = scandir($this->Dir);
     194    foreach($FileList as $FileName)
     195    {
     196          if(substr($FileName, -4) == '.php')
     197          {             
     198                  $FileLocale = new Locale($this->System);
     199                  $FileLocale->Dir = $this->Dir;                 
     200                  $FileLocale->Load(substr($FileName, 0, -4));
     201                 
     202                  // Add new
     203                  foreach($Locale->Texts->Data as $Index => $Item)
     204                    if(!array_key_exists($Index, $FileLocale->Texts->Data))
     205                      $FileLocale->Texts->Data[$Index] = $Item;
     206                  // Remove old
     207                  foreach($FileLocale->Texts->Data as $Index => $Item)
     208                    if(!array_key_exists($Index, $Locale->Texts->Data))
     209                      unset($FileLocale->Texts->Data[$Index]);
     210              $FileLocale->UpdateToDatabase($this->System->Database, $FileLocale->Texts->Code);
     211              $FileName = $this->Dir.'/'.$FileLocale->Texts->Code.'.php';
     212            $FileLocale->SaveToFile($FileName);
     213          }
     214        }
     215        $this->CurrentLocale->Load($this->CurrentLocale->Texts->Code);
     216        }
     217       
     218        function LoadLocale($Code)
     219        {
     220    $this->CurrentLocale->Dir = $this->Dir;
     221          $this->CurrentLocale->Load($Code);
     222        }
     223}
    156224
    157225// Short named global function
    158226function T($Text)
    159227{
    160         global $Locale;
    161        
    162         return($Locale->Translate($Text));
    163 }
     228        global $LocaleManager;
     229       
     230        if(isset($LocaleManager)) return($LocaleManager->CurrentLocale->Texts->Translate($Text));
     231          else return($Text);
     232}
Note: See TracChangeset for help on using the changeset viewer.