Changeset 608


Ignore:
Timestamp:
Nov 26, 2013, 10:12:48 PM (11 years ago)
Author:
chronos
Message:
  • Added: Implemented mechanism for update interface translation list from source code. Resulted list is saved to lanugage file and database.
Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Modules/FrontPage/FrontPage.php

    r603 r608  
    1818    $this->System->RegisterPage('', 'PageFrontPage');
    1919    $this->System->RegisterMenuItem(array(
    20       'Title' => 'Domů',
    21       'Hint' => 'Hlavní stránka',
     20      'Title' => T('Home'),
     21      'Hint' => T('Main page'),
    2222      'Link' => $this->System->Link('/'),
    2323      'Permission' => LICENCE_ANONYMOUS,
     
    8989  {
    9090        $Count = 40;
    91         $Output = '<strong>Poslední překlady:</strong>';
     91        $Output = '<strong>'.T('Last translated').':</strong>';
    9292 
    9393        $GroupListQuery = 'SELECT `Group`.* FROM `Group`';
  • trunk/Modules/News/News.php

    r581 r608  
    3333        while($DbRow = $DbResult->fetch_assoc())
    3434                $Output .= '<div><strong>'.$DbRow['Title'].' ('.HumanDate($DbRow['Time']).')</strong> <br />'.$DbRow['Text'].' ('.$DbRow['Name'].')</div>';
    35         $Output .= '<a href="'.$this->System->Link('/news/').'">Všechny zprávy</a>';
     35        $Output .= '<a href="'.$this->System->Link('/news/').'">'.T('All news').'</a>';
    3636        $Output .= '</div>';   
    3737        return($Output);
     
    8282                $Output = '<h3>Novinky</h3>'.$PageList['Output'];
    8383                if($this->System->User->Licence(LICENCE_ADMIN))
    84                         $Output .= ' <a href="?a=add">Vložit</a>';
     84                        $Output .= ' <a href="?a=add">'.T('Add').'</a>';
    8585                $Output .= '<div class="shoutbox">';
    8686                $DbResult = $this->System->Database->query('SELECT `News`.`Time`, `News`.`Text`, `News`.`Title`, '.
     
    103103                          '<input type="submit" value="Uložit"/><br/>'.
    104104                          '</form>';
    105                 } else $Output = ShowMessage('Nemáte oprávnění', MESSAGE_CRITICAL);
     105                } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
    106106                return($Output);
    107107        }
     
    120120                          $Output .= $this->ShowList();
    121121                  } else $Output = ShowMessage('Nezadány údaje', MESSAGE_CRITICAL);
    122                 } else $Output = ShowMessage('Nemáte oprávnění', MESSAGE_CRITICAL);
     122                } else $Output = ShowMessage(T('Access denied'), MESSAGE_CRITICAL);
    123123                return($Output);
    124124        }
  • trunk/Modules/User/Profile.php

    r577 r608  
    1818                        if(@mail($Email, $Subject, $Text, 'From: '.$this->System->Config['Web']['AdminEmail'].'\nReply-To: '.$this->System->Config['Web']['AdminEmail'].'\nX-Mailer: PHP/'))
    1919                        {
    20                                 $Output .= ShowMessage('Zpráva byla odeslána.');
     20                                $Output .= ShowMessage(T('Message was sent.'));
    2121                        }
    2222                        else $Output .= ShowMessage('Nepodařilo se odesat E-mail.', MESSAGE_CRITICAL);
  • trunk/admin/UpdateTrace.php

    r605 r608  
    26232623}
    26242624
     2625function UpdateTo609($Manager)
     2626{
     2627  $Manager->Execute('CREATE TABLE IF NOT EXISTS `Locale` (
     2628  `Id` int(11) NOT NULL AUTO_INCREMENT,
     2629  `Language` int(11) NOT NULL,
     2630  `Original` varchar(255) NOT NULL,
     2631  `Translated` varchar(255) NOT NULL,
     2632  `Fuzzy` int(11) NOT NULL,
     2633  PRIMARY KEY (`Id`),
     2634  KEY `Language` (`Language`)
     2635) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;');
     2636
     2637  $Manager->Execute('ALTER TABLE `Locale`
     2638  ADD CONSTRAINT `Locale_ibfk_1` FOREIGN KEY (`Language`) REFERENCES `Language` (`Id`);');
     2639}
     2640
    26252641$Updates = array(
    26262642        498 => array('Revision' => 506, 'Function' => 'UpdateTo506'),
     
    26352651        585 => array('Revision' => 600, 'Function' => 'UpdateTo600'),
    26362652        600 => array('Revision' => 604, 'Function' => 'UpdateTo604'),
     2653        604 => array('Revision' => 609, 'Function' => 'UpdateTo609'),
    26372654);
  • trunk/admin/index.php

    r607 r608  
    2222  '<a href="'.$System->Link('/admin/?action=testing').'">Testování</a><br/>'.
    2323  '<small>Testovací funkce</small><br/><br/>'.   
     24  '<a href="'.$System->Link('/admin/?action=locale').'">Exportovat překlad rozhraní</a><br/>'.
     25  '<small>Exportovat texty z PHP souborů pro překlad rozhraní</small><br/><br/>'.
    2426  '<a href="'.$System->Link('/admin/?action=uncomplete').'">Nastavit nekompletní texty</a><br/>'.
    2527  '<small>Nastaví questy, které jsou v popisu nebo objektu stejné jako nedokončené</small><br/><br/>';   
     
    8890}           
    8991
     92function ShowLocale()
     93{
     94        global $Locale, $System;
     95       
     96        $Locale->AnalyzeCode(dirname(dirname(__FILE__)));
     97        $Locale->UpdateToDatabase($System->Database, 3);
     98        $FileName = dirname(dirname(__FILE__)).'/locale/'.$Locale->Texts->Code.'.php';
     99        $Locale->SaveToFile($FileName);
     100        $Output = 'Překlad rozhraní přegenerován';
     101        $Output .= '<table class="BaseTable"><tr><th>Originál</th><th>Překlad</th></tr>';
     102        foreach($Locale->Texts->Data as $Index => $Item)
     103          $Output .= '<tr><td>'.$Index.'</td><td>'.$Item.'</td></tr>';
     104        $Output .= '</table>';
     105        $Output .= 'Překladová soubor '.$FileName.' zaktualizován';
     106        return($Output);
     107}
     108
    90109$Output = '';
    91110if($User->Licence(LICENCE_ADMIN))
     
    99118    else if($_GET['action'] == 'testing') $Output .= Testing();
    100119    else if($_GET['action'] == 'phpinfo') $Output .= ShowPHPInfo();
     120    else if($_GET['action'] == 'locale') $Output .= ShowLocale();
    101121    else if($_GET['action'] == 'uncomplete') $Output .= Uncomplete();
    102122    else $Output .= ShowMenu();
  • trunk/includes/Database.php

    r553 r608  
    161161  {
    162162    return(addslashes($Text));
     163  }
     164 
     165  function quote($Text)
     166  {
     167        return($this->PDO->quote($Text));
    163168  } 
    164169}
  • trunk/includes/Locale.php

    r603 r608  
    44{
    55        var $Data;
     6        var $Code;
    67
    78  function __construct()
    89  {
    910        $this->Data = array();
     11        $this->Code = 'en';
    1012  }     
    1113 
     
    1517}
    1618
    17 class Locale
     19class Locale extends Model
    1820{
    1921        var $Texts;
     
    4244                $this->Texts->Load();
    4345        }
     46       
     47        function AnalyzeCode($Path)
     48  {
     49        // Search for php files
     50    $FileList = scandir($Path);
     51    foreach($FileList as $FileName)
     52    {
     53        $FullName = $Path.'/'.$FileName;
     54        if(($FileName == '.') or ($FileName == '..')) ; // Skip virtual items
     55        else if(substr($FileName, 0, 1) == '.') ; // Skip Linux hidden files
     56        else if(is_dir($FullName)) $this->AnalyzeCode($FullName);
     57      else if(file_exists($FullName))
     58      {
     59        if(substr($FullName, -4) == '.php')
     60        {
     61                $Content = file_get_contents($FullName);
     62                // Search occurence of T() function
     63                while(strpos($Content, 'T(') !== false)
     64                {
     65                        $Previous = strtolower(substr($Content, strpos($Content, 'T(') - 1, 1));
     66                        $Content = substr($Content, strpos($Content, 'T(') + 2);
     67                        $Ord = ord($Previous);
     68                        //echo($Ord.',');
     69                        if(!(($Ord >= ord('a')) and ($Ord <= ord('z'))))
     70                        {       
     71                                // Do for non-alpha previous character                                           
     72                          $Original = substr($Content, 0, strpos($Content, ')'));
     73                          $Original2 = '';
     74                          if((substr($Original, 0, 1) == "'") and (substr($Original, -1, 1) == "'"))
     75                            $Original2 = substr($Original, 1, -1);
     76                          if((substr($Original, 0, 1) == '"') and (substr($Original, -1, 1) == '"'))
     77                            $Original2 = substr($Original, 1, -1);                       
     78                          if($Original2 != '')
     79                          {
     80                                if(!array_key_exists($Original2, $this->Texts->Data))
     81                                  $this->Texts->Data[$Original2] = '';
     82                          }
     83                        }
     84                }               
     85        }         
     86      }           
     87    }
     88  }
     89 
     90  function SaveToFile($FileName)
     91  {
     92        $Content = '<?php'."\n".
     93    ''."\n".
     94    'class LocaleText'.$this->Texts->Code.' extends LocaleText'."\n".
     95    '{'."\n".
     96          '  function Load()'."\n".
     97          '  {'."\n".
     98          '    $this->Code = \'cs\';'."\n".
     99                '    $this->Data = array('."\n";
     100                foreach($this->Texts->Data as $Index => $Item)
     101                {
     102                        $Content .= "      '".$Index."' => '".$Item."',\n";
     103                }
     104                $Content .= '    );'."\n".
     105          '  }'."\n".
     106    '}'."\n";
     107    file_put_contents($FileName, $Content);
     108  }
     109 
     110  function LoadFromDatabase($Database, $LanguageId)
     111  {
     112        $this->Texts->Data = array();
     113        $DbResult = $Database->select('Locale', '`Original`, `Translated`', '`Language`='.$LanguageId * 1);
     114        while($DbRow = $DbResult->fetch_assoc())
     115          $this->Texts->Data[$DbRow['Original']] = $DbRow['Translated'];
     116  }
     117
     118  function SaveToDatabase(Database $Database, $LanguageId)
     119  {
     120        $Database->delete('Locale', '`Language`='.$LanguageId * 1);
     121        foreach($this->Texts->Data as $Index => $Item)
     122          $Database->query('INSERT INTO `Locale` (`Language`,`Original`,`Translated`) '.
     123          'VALUES('.$LanguageId.','.$Database->quote($Index).','.$Database->quote($Item).')');
     124  }
     125
     126  function UpdateToDatabase(Database $Database, $LanguageId)
     127  {
     128        foreach($this->Texts->Data as $Index => $Item)
     129    {
     130          $DbResult = $Database->select('Locale', '*', '`Original` ='.$Database->quote($Index));
     131          if($DbResult->num_rows > 0)
     132          $Database->update('Locale', '(`Language`='.($LanguageId * 1).') AND '.
     133        '(`Original` ='.$Database->quote($Index).')', array('Translated' => $Item));
     134          else $Database->insert('Locale', array('Language' => $LanguageId * 1,
     135       'Original' => $Index, 'Translated' => $Item));
     136    }
     137  }
    44138}
    45139
  • trunk/includes/Version.php

    r607 r608  
    66// and system will need database update.
    77
    8 $Revision = 607; // Subversion revision
    9 $DatabaseRevision = 604; // Database structure revision
     8$Revision = 608; // Subversion revision
     9$DatabaseRevision = 608; // Database structure revision
    1010$ReleaseTime = '2013-11-26';
  • trunk/locale/cs.php

    r603 r608  
    11<?php
    22
    3 class LocaleTextCs extends LocaleText
     3class LocaleTextcs extends LocaleText
    44{
    5         function Load()
    6         {
    7                 $this->Data = array(
    8                   'Access denied' => 'Nemáte oprávnění',
    9                   'Show welcome' => 'Odkrýt úvod',
    10                   'Hide welcome' => 'Skrýt úvod',
    11                   'Registration' => 'Registrace',
    12                   'Menu' => 'Nabídka',
    13                 );
    14         }
     5  function Load()
     6  {
     7    $this->Code = 'cs';
     8    $this->Data = array(
     9      'Access denied' => 'Nemáte oprávnění',
     10      'Show welcome' => 'Odkrýt úvod',
     11      'Hide welcome' => 'Skrýt úvod',
     12      'Registration' => 'Registrace',
     13      'Menu' => 'Nabídka',
     14      'Home' => 'Domů',
     15      'Main page' => 'Hlavní stránka',
     16      'Last translated' => 'Poslední překlady',
     17      'All news' => 'Všechny zprávy',
     18      'Add' => 'Vložit',
     19      'Message was sent.' => 'Zpráva byla odeslána.',
     20    );
     21  }
    1522}
    16 
Note: See TracChangeset for help on using the changeset viewer.