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,49 +176,72 @@ 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"))
{
$finded = 0;
while (($ligne = fgets($fp,4096)) && ($finded == 0))
{
if ($ligne[0] != "\n" && $ligne[0] != " " && $ligne[0] != "#")
{
$tab=split('=',$ligne,2);
$key=trim($tab[0]); $value='';
//print "Domain=$domain, found a string for $tab[0] with value $tab[1]<br>";
if (! $this->getTransFromTab($key))
{
if (isset($tab[1])) $value=trim(ereg_replace('\\\n',"\n",$tab[1]));
if (eregi('^CHARSET$',$key))
{
// On est tombe sur une balise qui declare le format du fichier lu
$this->charset_inputfile=strtoupper($value);
//print 'File '.$file_lang.' has format '.$this->charset_inputfile.'<br>';
}
else
{
// On stocke toujours dans le tableau Tab en ISO
if ($this->charset_inputfile == 'UTF-8') $value=utf8_decode($value);
//if ($this->charset_inputfile == 'ISO-8859-1') $value=$value;
$this->setTransFromTab($key,$value); // 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]))
fclose($fp); {
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;
while (($ligne = fgets($fp,4096)) && ($finded == 0))
{
if ($ligne[0] != "\n" && $ligne[0] != " " && $ligne[0] != "#")
{
$tab=split('=',$ligne,2);
$key=trim($tab[0]); $value='';
//print "Domain=$domain, found a string for $tab[0] with value $tab[1]<br>";
//if (! $this->getTransFromTab($key))
if (! $this->tab_translate[$key] && isset($tab[1]))
{
$value=trim(ereg_replace('\\\n',"\n",$tab[1]));
if (eregi('^CHARSET$',$key))
{
// On est tombe sur une balise qui declare le format du fichier lu
$this->charset_inputfile=strtoupper($value);
//print 'File '.$file_lang.' has format '.$this->charset_inputfile.'<br>';
}
else
{
// On stocke toujours dans le tableau Tab en ISO
if ($this->charset_inputfile == 'UTF-8') $value=utf8_decode($value);
//if ($this->charset_inputfile == 'ISO-8859-1') $value=$value;
// Pour les langues aux fichiers parfois incomplets, on charge la langue alternative //$this->setTransFromTab($key,$value);
if (! $alt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US") $this->tab_translate[$key]=$value;
{ if ($enablelangcacheinsession) $tabtranslatedomain[$key]=$value; // To save lang in session
dolibarr_syslog("translate::load loading alternate translation file"); }
$this->load($domain,1); }
} }
}
fclose($fp);
$this->tab_loaded[$domain]=1; // Marque ce fichier comme chargé // Pour les langues aux fichiers parfois incomplets, on charge la langue alternative
} if (! $alt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US")
{
dolibarr_syslog("Translate::Load loading alternate translation file");
$this->load($domain,1);
}
$this->tab_loaded[$domain]=1; // Marque ce fichier comme chargé
// To save lang in session
if ($enablelangcacheinsession && sizeof($tabtranslatedomain)) $_SESSION['lang_'.$domain]=$tabtranslatedomain;
}
}
} }
} }