<?php 
 
    /* 
       i18n_tools.inc.php - Common functions used by the I18N tools 
       Copyright (C) 2005  Alan H. Lake 
 
         This program is free software; you can redistribute it and/or modify 
         it under the terms of the GNU General Public License as published by 
         the Free Software Foundation; either version 2 of the License, or 
         (at your option) any later version. 
 
         This program is distributed in the hope that it will be useful, 
         but WITHOUT ANY WARRANTY; without even the implied warranty of 
         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
         GNU General Public License for more details. 
 
         You should have received a copy of the GNU General Public License 
         along with this program; if not, write to the Free Software 
         Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
   
       Current version: 1.0.2 (September 25, 2005) 
    */ 
    include_once "../langTable.class.php"; 
 
    function ReadAllLocaleData ($localepath, $localetype, $selectedlocale) { 
        // Reads all locale data for a particular locale and arrayizes it  
        $storagefunction = "ReadAllLocaleData_" . $localetype; 
        if(substr($localepath,-1) != '/') 
          $localepath .= '/'; 
        $value = $storagefunction ($localepath, $selectedlocale); 
 
        return $value; 
    } 
 
    function ReadAllLocaleData_dbm ($localepath, $selectedlocale) { 
        $dbi = dbmopen ("$localepath" . "$selectedlocale" . ".dbm", "r"); 
        $key = dbmfirstkey ($dbi); 
        while ($key) { 
            $string[$key] = unserialize (dbmfetch ($dbi, $key)); 
            $key = dbmnextkey ($dbi, $key); 
        } 
        dbmclose ($dbi); 
        while (list ($entry, $value) = each ($string)){ 
          $value = addcslashes($value,'"$ 
'); 
        }     
        ksort ($string); 
        reset ($string); 
        return $string; 
    } 
 
    function ReadAllLocaleData_onefile ($localepath, $selectedlocale) { 
        $filename = $localepath.$selectedlocale.".php"; 
        include ($filename); 
        while (list ($entry, $value) = each ($string)){ 
          $value = addcslashes($value,'"$ 
'); 
        } 
        return $string; 
    } 
 
    function ReadAllLocaleData_severalfiles ($localepath, $selectedlocale) { 
        // Open the specified locale directory 
        $dh = opendir ($localepath); 
        while ($file = readdir ($dh)) { 
            if ((substr ($file, -4) == ".php") && 
                (substr ($file, 0, strlen ($selectedlocale)) ==  
                 "$selectedlocale")) { 
                include ("$localepath"."$file"); 
                while (list ($entry, $value) = each ($string)){ 
                  $value = addcslashes($value,'"$ 
'); 
                } 
            } 
        } 
        return $string; 
    } 
 
    function ReadAllLocaleData_SQL ($localepath, $selectedlocale) { 
      $oLang = $_SESSION['oLang']; 
 
      if(!isset($oLang)) 
        die('ReadAllLocaleData_SQL: $oLang is not set.'); 
      $string = $oLang->ReadLocaleData($selectedlocale); 
      return $string; 
    } 
 
    function BuildXLCallList ($filename, $required_string) { 
        // Opens a file and extracts a list of all XL() calls 
 
        // Die if the requested source file does not exist 
        if (!file_exists ($filename)) 
            die ("<p>The source file you specified ($filename) does not " . 
                 "exist.\n"); 
 
        // Open the source file and read its contents 
        $file = fopen ("$filename", "r"); 
        $content = fread ($file, filesize ("$filename")); 
        fclose ($file); 
 
        // Look for calls to function XL 
        $count = preg_match_all ("/(XL\s*\(\")(\S+)(\",)/", $content, $matches); 
 
        // Stuff the matches into our array 
        while (list ($junkindex, $string) = each ($matches[2])) { 
            $required_string[$string] = 1; 
        } 
 
        return $required_string; 
    } 
 
 
    function BuildLocaleList ($localepath, $localetype) { 
        // Global variables 
        global $localetypes; 
        if (!empty ($localetypes[$localetype])) { 
            $storagefunction = "BuildLocaleList_" . $localetype; 
            return $storagefunction ($localepath); 
        } else { 
            die ("Invalid locale type specified ($localetype).\n"); 
        } 
    } 
 
    function BuildLocaleList_dbm ($localepath) { 
        // Read the directory list of the specified localepath, 
        // return array of filename/locale pairs for all dbm files 
 
        // Open the specified locale directory 
        $dh = opendir ($localepath); 
        while ($file = readdir ($dh)) { 
            if (substr ($file, -4) == ".dbm") 
                $result[substr ($file, 0, -4)] = substr ($file, 0, -4); 
        } 
 
        return $result; 
    } 
 
    function BuildLocaleList_onefile ($localepath) { 
        // Read the directory list of the specified localepath, 
        // return array of filename/locale pairs for all monolithic files 
 
        // Open the specified locale directory 
        $dh = opendir ($localepath); 
        while ($file = readdir ($dh)) { 
            if (substr ($file, -4) == ".php") 
                $result[substr ($file, 0, -4)] = substr ($file, 0, -4); 
        } 
        return $result; 
    } 
 
    function BuildLocaleList_severalfiles ($localepath) { 
        // Read the directory list of the specified localepath, 
        // return array of filename/locale pairs for all monolithic files 
 
        // Open the specified locale directory 
        $dh = opendir ($localepath); 
        while ($file = readdir ($dh)) { 
            if ((substr ($file, -4) == ".php") && 
                (substr ($file, -6, 1) == ".")) 
                $result[substr ($file, 0, -6)] = substr ($file, 0, -6); 
        } 
        return $result; 
    } 
 
    function BuildLocaleList_SQL ($localepath) { 
        // $localpath will be empty for this option 
        // return array of locale code/name pairs 
      global $oLang; 
 
      if(!isset($oLang)) 
        die('BuildLocaleList_SQL: $oLang is not set.'); 
      $locales = $oLang->GetLocales(); 
      return $locales; 
    } 
 
 
    function WriteAllLocaleData ($olocalepath, $olocaletype, $selectedlocale, 
                                 $available_strings) { 
        $storagefunction = "WriteAllLocaleData_" . $olocaletype; 
        if(substr($olocalepath,-1) != '/') 
          $olocalepath .= '/'; 
        $value = $storagefunction ($olocalepath, $selectedlocale, $available_strings); 
        return $value; 
    } 
 
 
    function WriteAllLocaleData_dbm ($localepath, $selectedlocale, $data) { 
        $dbi = dbmopen ("$localepath" . "$selectedlocale" . ".dbm", "c"); 
        $counter = 0; 
        while (list ($entry, $value) = each ($data)) { 
            dbminsert ($dbi, $entry, urlencode (serialize ($value))); 
            $counter++; 
        }  
        dbmclose ($dbi); 
        return $counter; 
    } 
 
 
    function WriteAllLocaleData_onefile ($localepath,$selectedlocale,$data) { 
        ksort ($data); 
        reset ($data); 
        $fp = fopen ($localepath . $selectedlocale . ".php", "w"); 
        $counter = 0; 
 
        fputs ($fp, "<?php\n"); 
 
        while (list ($entry, $value) = each ($data)) { 
            $value = str_replace ("\$", "\\\$", $value); 
            $value = str_replace ("\"", "\\\"", $value); 
            $string = "\$string[$entry] = \"$value\";\n"; 
            fputs ($fp, $string); 
            $counter++; 
        } 
        fputs ($fp, "?>\n"); 
        fclose ($fp); 
        echo("Don't forget to check ownership and permissions on this newly created file.<br />"); 
        return $counter; 
    } 
 
    function WriteAllLocaleData_severalfiles ($localepath,$selectedlocale,$data) { 
        ksort ($data); 
        reset ($data); 
        $counter = 0; 
 
        while (list ($entry, $value) = each ($data)) { 
            $newletter = strtolower (substr ($entry, 0, 1)); 
            if ($newletter != $oldletter) { 
                if ($fp) { 
                    fputs ($fp, "?>\n"); 
                    fclose ($fp); 
                } 
                $file = $localepath.$selectedlocale.'.'.$newletter.'.php'; 
                if(!$fp = fopen ($file, "w")) 
                  die($file." couldn't be created.  Check your directory permissions."); 
                fputs ($fp, "<?php\n"); 
            } 
 
            $value = str_replace ("\$", "\\\$", $value); 
            $value = str_replace ("\"", "\\\"", $value); 
            $string = "\$string[$entry] = \"$value\";\n"; 
            fputs ($fp, $string); 
 
            $oldletter = $newletter; 
            $counter++; 
        }  
        fputs ($fp, "?>\n"); 
        fclose ($fp); 
        echo("Don't forget to check ownership and permissions on these newly created files.<br />"); 
        return $counter; 
    } 
 
    function WriteAllLocaleData_SQL ($localepath,$selectedlocale,$data) { 
        global $oLang; 
 
        ksort ($data); 
        reset ($data); 
        $counter = 0; 
 
        if(!isset($oLang)) 
          die('WriteAllLocaleData_SQL: $oLang is not set.'); 
        while (list ($entry, $value) = each ($data)) { 
          $value = str_replace ("\$", "\\\$", $value); 
          $value = str_replace ("\"", "\\\"", $value); 
          if(strlen($value) > 65535){ 
            $len = strlen($value); 
            die('The length of '.$value.' is '.$len.'.  The maximum length is 65535.<br />'); 
          } 
          $oLang->WriteLocaleData($selectedlocale,$entry,$value);  
          $counter++; 
        }  
        return $counter; 
    } 
?> 
 
 |