Changeset 618


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.
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Modules/User/Registration.php

    r601 r618  
    1919       
    2020                $Output = '<form action="?" method="post">
    21                 <fieldset><legend>Registrace nového uživatele</legend>
     21                <fieldset><legend>'.T('New user registration').'</legend>
    2222                <table>
    2323                <tr><td colspan="2">Pozorně si přečtěte <a href="info.php">pokyny k překladu</a> a řiďte se jimi. Překládat je nutno včetně háčků a čárek!<br/><br/></td></tr>
  • trunk/admin/index.php

    r610 r618  
    9292function ShowLocale()
    9393{
    94         global $Locale, $System;
     94        global $LocaleManager, $System;
    9595       
    96         $Locale->AnalyzeCode(dirname(dirname(__FILE__)));
    97         $Locale->UpdateToDatabase($System->Database, $Locale->Texts->Code);
    98         $FileName = dirname(dirname(__FILE__)).'/locale/'.$Locale->Texts->Code.'.php';
    99         $Locale->SaveToFile($FileName);
     96        $LocaleManager->UpdateAll(dirname(dirname(__FILE__)));
    10097        $Output = 'Překlad rozhraní přegenerován';
    10198        $Output .= '<table class="BaseTable"><tr><th>Originál</th><th>Překlad</th></tr>';
    102         foreach($Locale->Texts->Data as $Index => $Item)
     99        foreach($LocaleManager->CurrentLocale->Texts->Data as $Index => $Item)
    103100          $Output .= '<tr><td>'.$Index.'</td><td>'.$Item.'</td></tr>';
    104101        $Output .= '</table>';
    105         $Output .= 'Překladová soubor '.$FileName.' zaktualizován';
     102        $Output .= 'Překladové soubory zaktualizovány';
    106103        return($Output);
    107104}
  • 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}
  • trunk/includes/Version.php

    r615 r618  
    66// and system will need database update.
    77
    8 $Revision = 615; // Subversion revision
     8$Revision = 618; // Subversion revision
    99$DatabaseRevision = 610; // Database structure revision
    10 $ReleaseTime = '2013-11-27';
     10$ReleaseTime = '2013-12-04';
  • trunk/includes/global.php

    r615 r618  
    1111include_once(dirname(__FILE__).'/AppModule.php');
    1212include_once(dirname(__FILE__).'/Locale.php');
    13 $Locale = new Locale();
    14 $Locale->Dir = dirname(__FILE__).'/../locale';
    15 $Locale->Load($Config['Web']['Locale']);
    1613
    1714// Include application modules
  • trunk/includes/system.php

    r610 r618  
    2323  function Init()
    2424  {
    25         global $Config;
     25        global $Config, $LocaleManager;
    2626           
    2727    $this->Config = $Config;
     
    3535    //$this->Database->LogSQLQuery = $this->Config['Web']['LogSQLQuery'];
    3636    $this->ModuleManager = new AppModuleManager();
    37 
     37   
     38    $this->PathItems = ProcessURL();
     39    // Initialize locale
     40    $LocaleManager = new LocaleManager($this);
     41    $LocaleManager->Dir = dirname(dirname(__FILE__)).'/locale';
     42    $LocaleManager->Available = array(
     43      'cs' => array('Code' => 'cs', 'Title' => 'Česky'),
     44      'en' => array('Code' => 'en', 'Title' => 'English'),
     45    );
     46    $Code = $Config['Web']['Locale'];
     47    if(array_key_exists('Locale', $_SESSION)) $Code = $_SESSION['Locale'];
     48    if(array_key_exists('locale', $_GET)) $Code = $_GET['locale'];
     49    //echo(phpinfo());
     50    if(!array_key_exists($Code, $LocaleManager->Available)) $Code = 'en';
     51    $_SESSION['Locale'] = $Code;
     52    $LocaleManager->LoadLocale($Code);       
     53   
    3854    $this->Menu = array
    3955    (                   
     
    141157    if($this->DoNotShowPage == false)
    142158    {
    143       $this->PathItems = ProcessURL();
    144159          $this->ShowPage();
    145160    }   
     
    229244        function ShowTopBar()
    230245        {
     246                global $LocaleManager;
     247               
    231248                $Output = '<div class="Menu">';
    232249                if(!$this->System->User->Licence(LICENCE_USER))
    233250                        $Output .= '<div class="advert">'.$this->System->Config['Web']['Advertisement'].'</div>';
    234                 $Output .= '<span class="MenuItem"></span>';
     251                $Output .= '<span class="MenuItem"></span><span class="MenuItem2">';
    235252                if($this->System->User->Licence(LICENCE_USER))
    236253                {
     
    238255                        //$Team = $DbResult->fetch_assoc();
    239256                        //$Output .= ''<span class="MenuItem">Moje překlady: <a href="">Dokončené</a> <a href="">Rozpracované</a> <a href="">Exporty</a> Tým: <a href="">'.$Team['name'].'</a></span>';
    240                         $Output .= '<span class="MenuItem2">'.$this->System->User->Name.' <a href="'.$this->System->Link('/?action=logout').'">'.T('Logout').'</a>'.
     257                        $Output .= $this->System->User->Name.' <a href="'.$this->System->Link('/?action=logout').'">'.T('Logout').'</a>'.
    241258                                        ' <a href="'.$this->System->Link('/user.php?user='.$this->System->User->Id).'">'.T('My page').'</a>'.
    242259                                        ' <a href="'.$this->System->Link('/Options.php').'">'.T('Options').'</a>'.
     
    245262                                        ' <a title="Vaše rozpracované text" href="'.$this->System->Link('/TranslationList.php?user='.
    246263                                        $this->System->User->Id.'&amp;group=0&amp;state=3&amp;text=&amp;entry=').'">'.T('Unfinished').'</a>'.
    247                                         ' <a title="Nikým nepřeložené texty" href="'.$this->System->Link('/TranslationList.php?user=0&amp;group=0&amp;state=1&amp;text=&amp;entry=').'">'.T('Untranslated').'</a>'.
    248                                         '</span>';
     264                                        ' <a title="Nikým nepřeložené texty" href="'.
     265                                        $this->System->Link('/TranslationList.php?user=0&amp;group=0&amp;state=1&amp;text=&amp;entry=').'">'.T('Untranslated').'</a>';
    249266                } else
    250267                {
    251                         $Output .= '<span class="MenuItem2"><form action="'.$this->System->Link('/?action=login').'" method="post"> '.
     268                        $Output .= '<form action="'.$this->System->Link('/?action=login').'" method="post"> '.
    252269                                        'Jméno: <input type="text" name="LoginUser" size="8 " /> '.
    253270                                        'Heslo: <td><input type="password" name="LoginPass" size="8" /> '.
    254271                                        '<input type="submit" value="'.T('Login').'" /></form> &nbsp; '.
    255                                         '<a href="'.$this->System->Link('/registrace.php').'">'.T('Registration').'</a></span>';
     272                                        '<a href="'.$this->System->Link('/registrace.php').'">'.T('Registration').'</a>';
    256273                }
    257                 $Output .= '</div>';
     274                $Output .= ' <form action="?setlocale" method="get">';
     275                $Output .= '<select onchange="window.location=\'?locale=\'+this.value">';
     276                foreach($LocaleManager->Available as $Locale)
     277                {
     278                        if($Locale['Code'] == $LocaleManager->CurrentLocale->Texts->Code) $Selected = ' selected="selected"';
     279                          else $Selected = '';
     280                        $Output .= '<option title="" value="'.$Locale['Code'].'"'.$Selected.' onchange="this.form.submit()">'.$Locale['Title'].'</option>';
     281                }
     282                $Output .= '</select><noscript><input type="submit" value="Submit"></noscript></form>';
     283                $Output .= '</span></div>';
    258284                return($Output);
    259285        }
  • trunk/locale/cs.php

    r610 r618  
    66  {
    77    $this->Code = 'cs';
     8    $this->Title = 'Česky';
    89    $this->Data = array(
    910      'Access denied' => 'Nemáte oprávnění',
     
    4445      'Search' => 'Vyhledávání',
    4546      'Do search' => 'Hledat',
     47      'New user registration' => 'Registrace nového uživatele',
    4648    );
    4749  }
  • trunk/locale/en.php

    r610 r618  
    66  {
    77    $this->Code = 'en';
     8    $this->Title = 'English';
    89    $this->Data = array(
    910      'Access denied' => '',
     
    1617      'All news' => '',
    1718      'Add' => '',
    18       'Message was sent.' => '',
    1919      'Registration' => '',
    2020      'Menu' => '',
     21      'Incorrect name or password' => '',
     22      'Login successful. Welcome <strong>%s</strong>!' => '',
     23      'User name or password was not entered' => '',
     24      'Servers' => '',
     25      'Message was sent' => '',
     26      'New user registration' => '',
     27      'Online translators' => '',
     28      'Files' => '',
     29      'Instructions' => '',
     30      'Data source' => '',
     31      'Presentation' => '',
     32      'IRC chat' => '',
     33      'Administration' => '',
     34      'Page "%s" not found' => '',
     35      'Logout' => '',
     36      'My page' => '',
     37      'Options' => '',
     38      'Translated' => '',
     39      'Unfinished' => '',
     40      'Untranslated' => '',
     41      'Login' => '',
     42      'Search' => '',
     43      'Do search' => '',
     44      'Translate groups' => '',
     45      'Version' => '',
     46      'Source code' => '',
     47      'Changelog' => '',
    2148    );
    2249  }
Note: See TracChangeset for help on using the changeset viewer.