Add a test to put lang file into session cache

This commit is contained in:
Laurent Destailleur 2008-01-20 16:05:50 +00:00
parent d32bcc22c3
commit d8be80eb26

View File

@ -154,11 +154,11 @@ class Translate {
*/ */
function Load($domain,$alt=0) function Load($domain,$alt=0)
{ {
if (isset($this->tab_loaded[$domain]) && $this->tab_loaded[$domain]) { return; } // Le fichier de ce domaine est deja chargé if (! empty($this->tab_loaded[$domain])) { return; } // Le fichier de ce domaine est deja chargé
// Repertoire de traduction // Repertoire de traduction
$scandir = $this->dir."/".$this->defaultlang; $scandir = $this->dir."/".$this->defaultlang;
$file_lang = $scandir . "/$domain.lang"; $file_lang = $scandir . "/".$domain.".lang";
$filelangexists=is_file($file_lang); $filelangexists=is_file($file_lang);
if ($alt || ! $filelangexists) if ($alt || ! $filelangexists)
@ -176,9 +176,25 @@ class Translate {
if ($filelangexists) if ($filelangexists)
{ {
//dolibarr_syslog("Translate::load open file ".$file_lang); //dolibarr_syslog("Translate::Load read file ".$file_lang);
if($fp = @fopen($file_lang,"rt"))
// Enable cache of lang file in session (faster but need more memory)
// Speed gain: 40ms - Memory overusage: 200ko (Size of session cache file)
$enablelangcacheinsession=false;
if ($enablelangcacheinsession && isset($_SESSION['lang_'.$domain]))
{ {
foreach($_SESSION['lang_'.$domain] as $key => $value)
{
$this->tab_translate[$key]=$value;
$this->tab_loaded[$domain]=1; // Marque ce fichier comme chargé
}
}
else
{
if ($fp = @fopen($file_lang,"rt"))
{
if ($enablelangcacheinsession) $tabtranslatedomain=array(); // To save lang in session
$finded = 0; $finded = 0;
while (($ligne = fgets($fp,4096)) && ($finded == 0)) while (($ligne = fgets($fp,4096)) && ($finded == 0))
{ {
@ -187,9 +203,10 @@ class Translate {
$tab=split('=',$ligne,2); $tab=split('=',$ligne,2);
$key=trim($tab[0]); $value=''; $key=trim($tab[0]); $value='';
//print "Domain=$domain, found a string for $tab[0] with value $tab[1]<br>"; //print "Domain=$domain, found a string for $tab[0] with value $tab[1]<br>";
if (! $this->getTransFromTab($key)) //if (! $this->getTransFromTab($key))
if (! $this->tab_translate[$key] && isset($tab[1]))
{ {
if (isset($tab[1])) $value=trim(ereg_replace('\\\n',"\n",$tab[1])); $value=trim(ereg_replace('\\\n',"\n",$tab[1]));
if (eregi('^CHARSET$',$key)) if (eregi('^CHARSET$',$key))
{ {
@ -203,7 +220,9 @@ class Translate {
if ($this->charset_inputfile == 'UTF-8') $value=utf8_decode($value); if ($this->charset_inputfile == 'UTF-8') $value=utf8_decode($value);
//if ($this->charset_inputfile == 'ISO-8859-1') $value=$value; //if ($this->charset_inputfile == 'ISO-8859-1') $value=$value;
$this->setTransFromTab($key,$value); //$this->setTransFromTab($key,$value);
$this->tab_translate[$key]=$value;
if ($enablelangcacheinsession) $tabtranslatedomain[$key]=$value; // To save lang in session
} }
} }
} }
@ -213,11 +232,15 @@ class Translate {
// Pour les langues aux fichiers parfois incomplets, on charge la langue alternative // Pour les langues aux fichiers parfois incomplets, on charge la langue alternative
if (! $alt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US") if (! $alt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US")
{ {
dolibarr_syslog("translate::load loading alternate translation file"); dolibarr_syslog("Translate::Load loading alternate translation file");
$this->load($domain,1); $this->load($domain,1);
} }
$this->tab_loaded[$domain]=1; // Marque ce fichier comme chargé $this->tab_loaded[$domain]=1; // Marque ce fichier comme chargé
// To save lang in session
if ($enablelangcacheinsession && sizeof($tabtranslatedomain)) $_SESSION['lang_'.$domain]=$tabtranslatedomain;
}
} }
} }
} }