diff --git a/htdocs/translate.class.php b/htdocs/translate.class.php
index 878f48e6caa..ce3647450fb 100644
--- a/htdocs/translate.class.php
+++ b/htdocs/translate.class.php
@@ -154,11 +154,11 @@ class Translate {
*/
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
$scandir = $this->dir."/".$this->defaultlang;
- $file_lang = $scandir . "/$domain.lang";
+ $file_lang = $scandir . "/".$domain.".lang";
$filelangexists=is_file($file_lang);
if ($alt || ! $filelangexists)
@@ -176,49 +176,72 @@ class Translate {
if ($filelangexists)
{
- //dolibarr_syslog("Translate::load open 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]
";
- 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.'
';
- }
- 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;
+ //dolibarr_syslog("Translate::Load read file ".$file_lang);
- $this->setTransFromTab($key,$value);
- }
- }
- }
- }
- fclose($fp);
+ // 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;
+ 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]
";
+ //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.'
';
+ }
+ 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
- if (! $alt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US")
- {
- dolibarr_syslog("translate::load loading alternate translation file");
- $this->load($domain,1);
- }
+ //$this->setTransFromTab($key,$value);
+ $this->tab_translate[$key]=$value;
+ if ($enablelangcacheinsession) $tabtranslatedomain[$key]=$value; // To save lang in session
+ }
+ }
+ }
+ }
+ 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;
+ }
+ }
}
}