diff --git a/htdocs/langs/ca_ES/admin.lang b/htdocs/langs/ca_ES/admin.lang
index 6a128064131..77b5db92f19 100644
--- a/htdocs/langs/ca_ES/admin.lang
+++ b/htdocs/langs/ca_ES/admin.lang
@@ -175,8 +175,8 @@ OfficialWebSiteFr = lloc web oficial francòfon
OfficialWikiFr = Wiki francòfon
OfficialWiki = Wiki Dolibarr
OfficialDemo = Demo en línia Dolibarr
-ForDocumentationSeeWiki = Per a la documentació d'usuari, desenvolupador o Preguntes Freqüents (FAQ), consulteu el wiki Dolibarr:
%s
-ForAnswersSeeForum = Per altres qüestions o realitzar les seves pròpies consultes, pot utilitzar el fòrum Dolibarr:
%s
+ForDocumentationSeeWiki = Per a la documentació d'usuari, desenvolupador o Preguntes Freqüents (FAQ), consulteu el wiki Dolibarr:
%s
+ForAnswersSeeForum = Per altres qüestions o realitzar les seves pròpies consultes, pot utilitzar el fòrum Dolibarr:
%s
HelpCenterDesc1 = Aquesta aplicació, independent de Dolibarr, us permet ajudar a obtenir un servei de suport de Dolibarr.
HelpCenterDesc2 = Alguns d'aquests serveis només estan disponibles en anglès.
CurrentTopMenuHandler = Gestor de menú superior
diff --git a/htdocs/langs/es_ES/admin.lang b/htdocs/langs/es_ES/admin.lang
index fd249b794a3..eaf5b48f3b2 100644
--- a/htdocs/langs/es_ES/admin.lang
+++ b/htdocs/langs/es_ES/admin.lang
@@ -175,8 +175,8 @@ OfficialWebSiteFr = sitio web oficial habla francesa
OfficialWikiFr = Wiki habla francesa
OfficialWiki = Wiki Dolibarr
OfficialDemo = Demo en línea Dolibarr
-ForDocumentationSeeWiki = Para la documentación de usuario, desarrollador o Preguntas Frecuentes (FAQ), consulte el wiki Dolibarr:
%s
-ForAnswersSeeForum = Para otras cuestiones o realizar sus propias consultas, puede utilizar el foro Dolibarr:
%s
+ForDocumentationSeeWiki = Para la documentación de usuario, desarrollador o Preguntas Frecuentes (FAQ), consulte el wiki Dolibarr:
%s
+ForAnswersSeeForum = Para otras cuestiones o realizar sus propias consultas, puede utilizar el foro Dolibarr:
%s
HelpCenterDesc1 = Esta aplicación, independiente de Dolibarr, le permite ayudarle a obtener un servicio de soporte de Dolibarr.
HelpCenterDesc2 = Algunos de estos servicios sólo están disponibles en inglés.
CurrentTopMenuHandler = Gestor de menú superior
diff --git a/htdocs/langs/pt_PT/admin.lang b/htdocs/langs/pt_PT/admin.lang
index 7548ba86811..4304d9a0816 100644
--- a/htdocs/langs/pt_PT/admin.lang
+++ b/htdocs/langs/pt_PT/admin.lang
@@ -172,8 +172,8 @@ OfficialWebSiteFr=sitio web oficial falado/escrito em francês
OfficialWikiFr=Wiki falado/escrito em francês
OfficialWiki=Wiki ERP
OfficialDemo=Demo em linha ERP
-ForDocumentationSeeWiki=Para a documentação de utilizador, programador ou Perguntas Frecuentes (FAQ), consulte o wiki do ERP:
%s
-ForAnswersSeeForum=Para outras questões ou realizar as suas prórpias consultas, pode utilizar o forum do ERP:
%s
+ForDocumentationSeeWiki=Para a documentação de utilizador, programador ou Perguntas Frecuentes (FAQ), consulte o wiki do ERP:
%s
+ForAnswersSeeForum=Para outras questões ou realizar as suas prórpias consultas, pode utilizar o forum do ERP:
%s
HelpCenterDesc1=Esta área permite ajuda-lo a obter um serviço de suporte do ERP.
HelpCenterDesc2=Alguns destes serviços só estão disponiveis em inglés.
CurrentTopMenuHandler=Gestor de menu superior
diff --git a/htdocs/lib/CMailFile.class.php b/htdocs/lib/CMailFile.class.php
index 7f7eed41555..b57305997b1 100644
--- a/htdocs/lib/CMailFile.class.php
+++ b/htdocs/lib/CMailFile.class.php
@@ -53,20 +53,6 @@ class CMailFile
var $error='';
var $smtps; // Contains SMTPs object (if this method is used)
-
- var $html;
- var $image_boundary;
- var $atleastoneimage=0;
- var $html_images=array();
- var $images_encoded=array();
- var $image_types = array('gif' => 'image/gif',
- 'jpg' => 'image/jpeg',
- 'jpeg' => 'image/jpeg',
- 'jpe' => 'image/jpeg',
- 'bmp' => 'image/bmp',
- 'png' => 'image/png',
- 'tif' => 'image/tiff',
- 'tiff' => 'image/tiff');
/**
@@ -99,32 +85,13 @@ class CMailFile
if ($msgishtml == -1)
{
$this->msgishtml = 0;
- if (dol_textishtml($msg)) $this->msgishtml = 1;
+ if (dol_textishtml($msg,1)) $this->msgishtml = 1;
}
else
{
$this->msgishtml = $msgishtml;
}
- // Detect images
- if ($this->msgishtml)
- {
- $this->html = $msg;
- $findimg = $this->findHtmlImages($conf->fckeditor->dir_output);
- // Define if there is at least one file
- if ($findimg)
- {
- foreach ($this->html_images as $i => $val)
- {
- if ($this->html_images[$i])
- {
- $this->atleastoneimage=1;
- dol_syslog("CMailFile::CMailfile: html_images[$i]['name']=".$this->html_images[$i]['name'], LOG_DEBUG);
- }
- }
- }
- }
-
// Define if there is at least one file
foreach ($filename_list as $i => $val)
{
@@ -155,7 +122,7 @@ class CMailFile
$text_encoded = "";
// En-tete dans $smtp_headers
- $this->subject = utf8_decode($subject);
+ $this->subject = $subject;
$this->addr_from = $from;
$this->errors_to = $errors_to;
$this->addr_to = $to;
@@ -165,17 +132,10 @@ class CMailFile
$smtp_headers = $this->write_smtpheaders();
// En-tete suite dans $mime_headers
- if ($this->atleastonefile || $this->atleastoneimage)
+ if ($this->atleastonefile)
{
$mime_headers = $this->write_mimeheaders($filename_list, $mimefilename_list);
}
-
- // On encode les images
- if ($this->atleastoneimage)
- {
- $images_encoded = $this->write_images($this->images_encoded);
- $msg = $this->html;
- }
// Corps message dans $text_body
$text_body = $this->write_body($msg, $filename_list);
@@ -188,7 +148,7 @@ class CMailFile
// On defini $this->headers et $this->message
$this->headers = $smtp_headers . $mime_headers;
- $this->message = $text_body . $images_encoded . $text_encoded;
+ $this->message = $text_body . $text_encoded;
// On nettoie le header pour qu'il ne se termine pas par un retour chariot.
// Ceci evite aussi les lignes vides en fin qui peuvent etre interpretees
@@ -454,22 +414,17 @@ class CMailFile
if (isset($this->deliveryreceipt) && $this->deliveryreceipt == 1) $out .= "Disposition-Notification-To: ".getValidAddress($this->addr_from,2).$this->eol;
//$out .= "X-Priority: 3".$this->eol;
- $out.= "X-Mailer: Dolibarr version " . DOL_VERSION ." (using php mail)".$this->eol;
- $out.= "MIME-Version: 1.0".$this->eol;
-
- if ($this->atleastoneimage)
+ $out .= "X-Mailer: Dolibarr version " . DOL_VERSION ." (using php mail)".$this->eol;
+ $out .= "MIME-Version: 1.0".$this->eol;
+
+ if ($this->msgishtml)
{
- if (! $this->atleastonefile) $out.= "Content-Type: multipart/related; boundary=\"".$this->mime_boundary."\"".$this->eol;
- $out.= "Content-Transfer-Encoding: 8bit".$this->eol;
- }
- else if ($this->msgishtml)
- {
- if (! $this->atleastonefile) $out.= "Content-Type: text/html; boundary=\"".$this->mime_boundary."\"".$this->eol;
+ if (! $this->atleastonefile) $out.= "Content-Type: text/html; charset=".$conf->file->character_set_client.$this->eol;
$out.= "Content-Transfer-Encoding: 8bit".$this->eol;
}
else
{
- if (! $this->atleastonefile) $out.= "Content-Type: text/plain; boundary=\"".$this->mime_boundary."\"".$this->eol;
+ if (! $this->atleastonefile) $out.= "Content-Type: text/plain; charset=".$conf->file->character_set_client.$this->eol;
$out.= "Content-Transfer-Encoding: 8bit".$this->eol;
}
@@ -487,24 +442,19 @@ class CMailFile
{
$mimedone=0;
$out = "";
-
- if ($filename_list)
+ for ($i = 0; $i < count($filename_list); $i++)
{
- for ($i = 0; $i < count($filename_list); $i++)
+ if ($filename_list[$i])
{
- if ($filename_list[$i])
+ if (! $mimedone)
{
- if (! $mimedone)
- {
- $out.= "Content-Type: multipart/mixed; boundary=\"".$this->mime_boundary."\"".$this->eol;
- $mimedone=1;
- }
- if ($mimefilename_list[$i]) $filename_list[$i] = $mimefilename_list[$i];
- $out.= "X-attachments: $filename_list[$i]".$this->eol;
+ $out.= "Content-Type: multipart/related; boundary=\"".$this->mime_boundary."\"".$this->eol;
+ $mimedone=1;
}
+ if ($mimefilename_list[$i]) $filename_list[$i] = $mimefilename_list[$i];
+ $out.= "X-attachments: $filename_list[$i]".$this->eol;
}
}
-
//$out.= $this->eol;
dol_syslog("CMailFile::write_mimeheaders mime_header=\n".$out, LOG_DEBUG);
return $out;
@@ -521,16 +471,15 @@ class CMailFile
$out='';
- if ($this->atleastonefile || $this->atleastoneimage)
+ if ($this->atleastonefile)
{
+ $out.= "--" . $this->mime_boundary . $this->eol;
if ($this->msgishtml)
{
- $out.= "--" . $this->mime_boundary . $this->eol;
$out.= "Content-Type: text/html; charset=".$conf->file->character_set_client.$this->eol;
}
else
{
- $out.= "--" . $this->mime_boundary . $this->eol;
$out.= "Content-Type: text/plain; charset=".$conf->file->character_set_client.$this->eol;
}
$out.= $this->eol;
@@ -544,17 +493,12 @@ class CMailFile
if (! $htmlalreadyinmsg) $out .= "
| '; print img_picto_common('','who.png'); print ' |
| ';
$urlwiki='http://wiki.dolibarr.org';
-if ($langs->defaultlang == 'fr_FR') $urlwiki='http://wiki.dolibarr.org/index.php/Accueil';
-if ($langs->defaultlang == 'es_ES') $urlwiki='http://wiki.dolibarr.org/index.php/Portada';
+if (eregi('fr',$langs->defaultlang)) $urlwiki='http://wiki.dolibarr.org/index.php/Accueil';
+if (eregi('es',$langs->defaultlang)) $urlwiki='http://wiki.dolibarr.org/index.php/Portada';
print ' '.$langs->trans("ForDocumentationSeeWiki",$urlwiki,$urlwiki); print ' '; print ' '.$langs->trans("ForAnswersSeeForum",'http://www.dolibarr.org/forum/','http://www.dolibarr.org/forum/').' '; diff --git a/htdocs/translate.class.php b/htdocs/translate.class.php index 5f0dfb3c422..f5ae4da0eb2 100644 --- a/htdocs/translate.class.php +++ b/htdocs/translate.class.php @@ -33,26 +33,26 @@ */ class Translate { - var $dir; // Directories that contains /langs subdirectory + var $dir; // Directories that contains /langs subdirectory - var $defaultlang; // Langue courante en vigueur de l'utilisateur + var $defaultlang; // Langue courante en vigueur de l'utilisateur - var $tab_loaded=array(); // Tableau pour signaler les fichiers deja charges - var $tab_translate=array(); // Tableau des traductions + var $tab_loaded=array(); // Tableau pour signaler les fichiers deja charges + var $tab_translate=array(); // Tableau des traductions - var $cache_labels=array(); // Cache for labels + var $cache_labels=array(); // Cache for labels - var $charset_inputfile=array(); // To store charset encoding used for language + var $charset_inputfile=array(); // To store charset encoding used for language var $charset_output='UTF-8'; // Codage used by "trans" method outputs - /** - * \brief Constructeur de la classe - * \param dir Force directory that contains /langs subdirectory - * \param conf Objet qui contient la config Dolibarr - */ - function Translate($dir = "",$conf) - { + /** + * \brief Constructeur de la classe + * \param dir Force directory that contains /langs subdirectory + * \param conf Objet qui contient la config Dolibarr + */ + function Translate($dir = "",$conf) + { // If charset output is forced if (! empty($conf->file->character_set_client)) { @@ -60,7 +60,7 @@ class Translate { } if ($dir) $this->dir=array($dir); else $this->dir=$conf->file->dol_document_root; - } + } /** @@ -92,97 +92,97 @@ class Translate { } - /** - * \brief Set accessor for this->defaultlang - * \param srclang Language to use - */ - function setDefaultLang($srclang='fr_FR') - { - //dol_syslog("Translate::setDefaultLang ".$this->defaultlang,LOG_DEBUG); + /** + * \brief Set accessor for this->defaultlang + * \param srclang Language to use + */ + function setDefaultLang($srclang='fr_FR') + { + //dol_syslog("Translate::setDefaultLang ".$this->defaultlang,LOG_DEBUG); - $this->origlang=$srclang; + $this->origlang=$srclang; - if (empty($srclang) || $srclang == 'auto') - { - $langpref=$_SERVER['HTTP_ACCEPT_LANGUAGE']; - $langpref=eregi_replace(";[^,]*","",$langpref); - $langpref=eregi_replace("-","_",$langpref); + if (empty($srclang) || $srclang == 'auto') + { + $langpref=$_SERVER['HTTP_ACCEPT_LANGUAGE']; + $langpref=eregi_replace(";[^,]*","",$langpref); + $langpref=eregi_replace("-","_",$langpref); - $langlist=split("[;,]",$langpref); + $langlist=split("[;,]",$langpref); - $langpart=split("_",$langlist[0]); - //print "Short before _ : ".$langpart[0].'/ Short after _ : '.$langpart[1]; + $langpart=split("_",$langlist[0]); + //print "Short before _ : ".$langpart[0].'/ Short after _ : '.$langpart[1]; - if (isset($langpart[1])) { - $srclang=strtolower($langpart[0])."_".strtoupper($langpart[1]); - // Array to convert long lang code into other long code. - $longforlong=array('no_nb'=>'nb_NO'); - if (isset($longforlong[strtolower($srclang)])) $srclang=$longforlong[strtolower($srclang)]; - } - else { - // Array to convert short lang code into long code. - $longforshort=array('ca'=>'ca_ES', 'nb'=>'nb_NO', 'no'=>'nb_NO'); - if (isset($longforshort[strtolower($langpart[0])])) $srclang=$longforshort[strtolower($langpart[0])]; - else $srclang=strtolower($langpart[0])."_".strtoupper($langpart[0]); - } - } + if (isset($langpart[1])) { + $srclang=strtolower($langpart[0])."_".strtoupper($langpart[1]); + // Array to convert long lang code into other long code. + $longforlong=array('no_nb'=>'nb_NO'); + if (isset($longforlong[strtolower($srclang)])) $srclang=$longforlong[strtolower($srclang)]; + } + else { + // Array to convert short lang code into long code. + $longforshort=array('ca'=>'ca_ES', 'nb'=>'nb_NO', 'no'=>'nb_NO'); + if (isset($longforshort[strtolower($langpart[0])])) $srclang=$longforshort[strtolower($langpart[0])]; + else $srclang=strtolower($langpart[0])."_".strtoupper($langpart[0]); + } + } - $this->defaultlang=$srclang; - } + $this->defaultlang=$srclang; + } - /** - * \brief Return active language code for current user - * \remarks Accessor for this->defaultlang - * \return string Language code used (en_US, en_AU, fr_FR, ...) - */ - function getDefaultLang() - { - return $this->defaultlang; - } + /** + * \brief Return active language code for current user + * \remarks Accessor for this->defaultlang + * \return string Language code used (en_US, en_AU, fr_FR, ...) + */ + function getDefaultLang() + { + return $this->defaultlang; + } - /** - \brief Positionne environnement PHP en fonction du langage - \remarks Le code langue long (fr_FR, en_US, ...) doit avoir etre positionne par setDefaultLang - \return int >0 si ok, <0 so ko - \deprecated - */ - function setPhpLang() - { - //dol_syslog("Translate::setPhpLang ".$this->defaultlang,LOG_DEBUG); + /** + \brief Positionne environnement PHP en fonction du langage + \remarks Le code langue long (fr_FR, en_US, ...) doit avoir etre positionne par setDefaultLang + \return int >0 si ok, <0 so ko + \deprecated + */ + function setPhpLang() + { + //dol_syslog("Translate::setPhpLang ".$this->defaultlang,LOG_DEBUG); return; -/* - $code_lang_tiret=ereg_replace('_','-',$this->defaultlang); - //print 'code_lang_tiret='.$code_lang_tiret; - setlocale(LC_ALL, $this->defaultlang); // Some OS (Windows) need local with _ - setlocale(LC_ALL, $code_lang_tiret); // Other OS need local with - + /* + $code_lang_tiret=ereg_replace('_','-',$this->defaultlang); + //print 'code_lang_tiret='.$code_lang_tiret; + setlocale(LC_ALL, $this->defaultlang); // Some OS (Windows) need local with _ + setlocale(LC_ALL, $code_lang_tiret); // Other OS need local with - - if (defined("MAIN_FORCE_SETLOCALE_LC_ALL") && MAIN_FORCE_SETLOCALE_LC_ALL) - $res_lc_all=setlocale(LC_ALL, MAIN_FORCE_SETLOCALE_LC_ALL.'.UTF-8', MAIN_FORCE_SETLOCALE_LC_ALL); - if (defined("MAIN_FORCE_SETLOCALE_LC_NUMERIC") && MAIN_FORCE_SETLOCALE_LC_NUMERIC) - $res_lc_numeric=setlocale(LC_NUMERIC, MAIN_FORCE_SETLOCALE_LC_NUMERIC.'.UTF-8', MAIN_FORCE_SETLOCALE_LC_NUMERIC); - if (defined("MAIN_FORCE_SETLOCALE_LC_MONETARY") && MAIN_FORCE_SETLOCALE_LC_MONETARY) - $res_lc_monetary=setlocale(LC_MONETARY, MAIN_FORCE_SETLOCALE_LC_MONETARY.'UTF-8', MAIN_FORCE_SETLOCALE_LC_MONETARY); - //print 'x'.$res_lc_all; - return 1; -*/ - } + if (defined("MAIN_FORCE_SETLOCALE_LC_ALL") && MAIN_FORCE_SETLOCALE_LC_ALL) + $res_lc_all=setlocale(LC_ALL, MAIN_FORCE_SETLOCALE_LC_ALL.'.UTF-8', MAIN_FORCE_SETLOCALE_LC_ALL); + if (defined("MAIN_FORCE_SETLOCALE_LC_NUMERIC") && MAIN_FORCE_SETLOCALE_LC_NUMERIC) + $res_lc_numeric=setlocale(LC_NUMERIC, MAIN_FORCE_SETLOCALE_LC_NUMERIC.'.UTF-8', MAIN_FORCE_SETLOCALE_LC_NUMERIC); + if (defined("MAIN_FORCE_SETLOCALE_LC_MONETARY") && MAIN_FORCE_SETLOCALE_LC_MONETARY) + $res_lc_monetary=setlocale(LC_MONETARY, MAIN_FORCE_SETLOCALE_LC_MONETARY.'UTF-8', MAIN_FORCE_SETLOCALE_LC_MONETARY); + //print 'x'.$res_lc_all; + return 1; + */ + } - /** + /** * \brief Load in a memory array, translation key-value for a particular file. - * If data for file already loaded, do nothing. - * All data in translation array are stored in UTF-8 format. - * \param domain File name to load (.lang file). Use @ before value if domain is in a module directory. - * \param alt Use alternate file even if file in target language is found + * If data for file already loaded, do nothing. + * All data in translation array are stored in UTF-8 format. + * \param domain File name to load (.lang file). Use @ before value if domain is in a module directory. + * \param alt Use alternate file even if file in target language is found * \return int <0 if KO, >0 if OK - * \remarks tab_loaded is completed with $domain key. + * \remarks tab_loaded is completed with $domain key. * Value for key is: 1:Loaded from disk, 2:Not found, 3:Loaded from cache */ - function Load($domain,$alt=0) - { - //dol_syslog("Translate::Load domain=".$domain." alt=".$alt); + function Load($domain,$alt=0) + { + //dol_syslog("Translate::Load domain=".$domain." alt=".$alt); // Check parameters if (empty($domain)) @@ -207,30 +207,30 @@ class Translate { } else $searchdir=$searchdir."/langs"; - // Directory of translation files - $scandir = $searchdir."/".$this->defaultlang; - $file_lang = $scandir . "/".$domain.".lang"; - $filelangexists=is_file($file_lang); + // Directory of translation files + $scandir = $searchdir."/".$this->defaultlang; + $file_lang = $scandir . "/".$domain.".lang"; + $filelangexists=is_file($file_lang); //print 'Load default_lang='.$this->defaultlang.' alt='.$alt.' newalt='.$newalt.' '.$file_lang."-".$filelangexists.' '; - // Check in "always available" alternate file if not found or if asked - if ($newalt || ! $filelangexists) - { - // Dir of always available alternate file (en_US or fr_FR) + // Check in "always available" alternate file if not found or if asked + if ($newalt || ! $filelangexists) + { + // Dir of always available alternate file (en_US or fr_FR) if ($this->defaultlang == "en_US") $scandiralt = $searchdir."/fr_FR"; - elseif (eregi('^fr',$this->defaultlang) && $this->defaultlang != 'fr_FR') $scandiralt = $searchdir."/fr_FR"; - elseif (eregi('^en',$this->defaultlang) && $this->defaultlang != 'en_US') $scandiralt = $searchdir."/en_US"; - elseif (eregi('^es',$this->defaultlang) && $this->defaultlang != 'es_ES') $scandiralt = $searchdir."/es_ES"; - else $scandiralt = $searchdir."/en_US"; + elseif (eregi('^fr',$this->defaultlang) && $this->defaultlang != 'fr_FR') $scandiralt = $searchdir."/fr_FR"; + elseif (eregi('^en',$this->defaultlang) && $this->defaultlang != 'en_US') $scandiralt = $searchdir."/en_US"; + elseif (eregi('^es',$this->defaultlang) && $this->defaultlang != 'es_ES') $scandiralt = $searchdir."/es_ES"; + else $scandiralt = $searchdir."/en_US"; - $file_lang = $scandiralt . "/".$domain.".lang"; - $filelangexists=is_file($file_lang); - $newalt=1; - } + $file_lang = $scandiralt . "/".$domain.".lang"; + $filelangexists=is_file($file_lang); + $newalt=1; + } //print 'Load alt='.$alt.' newalt='.$newalt.' '.$file_lang."-".$filelangexists.' '; - if ($filelangexists) - { + if ($filelangexists) + { // 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; @@ -246,20 +246,20 @@ class Translate { 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]); - //print "Domain=$domain, found a string for $tab[0] with value $tab[1] "; - //if (! $this->getTransFromTab($key)) - if (empty($this->tab_translate[$key]) && isset($tab[1])) - { - $value=trim(ereg_replace('\\\n',"\n",$tab[1])); + { + 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]); + //print "Domain=$domain, found a string for $tab[0] with value $tab[1] "; + //if (! $this->getTransFromTab($key)) + if (empty($this->tab_translate[$key]) && isset($tab[1])) + { + $value=trim(ereg_replace('\\\n',"\n",$tab[1])); if (eregi('^CHARSET$',$key)) { @@ -270,8 +270,8 @@ class Translate { else { // On stocke toujours dans le tableau Tab en UTF-8 - //if (empty($this->charset_inputfile[$domain]) || $this->charset_inputfile[$domain] == 'UTF-8') $value=utf8_decode($value); - if (empty($this->charset_inputfile[$domain]) || $this->charset_inputfile[$domain] == 'ISO-8859-1') $value=utf8_encode($value); + //if (empty($this->charset_inputfile[$domain]) || $this->charset_inputfile[$domain] == 'UTF-8') $value=utf8_decode($value); + if (empty($this->charset_inputfile[$domain]) || $this->charset_inputfile[$domain] == 'ISO-8859-1') $value=utf8_encode($value); // We do not load Separator values for alternate files if (! $newalt || (! eregi('^Separator',$key))) @@ -281,101 +281,101 @@ class Translate { } if ($enablelangcacheinsession) $tabtranslatedomain[$key]=$value; // To save lang in session } - } - } - } + } + } + } fclose($fp); - // Pour les langues aux fichiers parfois incomplets, on charge la langue alternative - if (! $newalt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US") - { - // This function MUST NOY contains call to syslog - //dol_syslog("Translate::Load loading alternate translation file (to complete ".$this->defaultlang."/".$domain.".lang file)", LOG_DEBUG); - $this->load($domain,1); - } + // Pour les langues aux fichiers parfois incomplets, on charge la langue alternative + if (! $newalt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US") + { + // This function MUST NOY contains call to syslog + //dol_syslog("Translate::Load loading alternate translation file (to complete ".$this->defaultlang."/".$domain.".lang file)", LOG_DEBUG); + $this->load($domain,1); + } - $this->tab_loaded[$domain]=1; // Marque ce fichier comme charge + $this->tab_loaded[$domain]=1; // Marque ce fichier comme charge // To save lang in session if ($enablelangcacheinsession && sizeof($tabtranslatedomain)) $_SESSION['lang_'.$domain]=$tabtranslatedomain; break; // Break loop on each root dir - } + } } - } + } } if (empty($this->tab_loaded[$domain])) $this->tab_loaded[$domain]=2; // Marque ce fichier comme non trouve return 1; - } + } - /** + /** * \brief Mark domain as not loaded to be able to load it again. - * \param domain File name to load (.lang file). Use @ before value if domain is in a module directory. + * \param domain File name to load (.lang file). Use @ before value if domain is in a module directory. */ - function UnLoad($domain) - { - dol_syslog("Translate::UnLoad domain=".$domain." marked as not loaded", LOG_DEBUG); + function UnLoad($domain) + { + dol_syslog("Translate::UnLoad domain=".$domain." marked as not loaded", LOG_DEBUG); $this->tab_loaded[$domain]=0; - } + } - /** - * \brief Retourne la liste des domaines charg�es en memoire - * \return array Tableau des domaines charg�es - */ - function list_domainloaded() - { - $ret=''; + /** + * \brief Retourne la liste des domaines charg�es en memoire + * \return array Tableau des domaines charg�es + */ + function list_domainloaded() + { + $ret=''; foreach($this->tab_loaded as $key=>$val) { if ($ret) $ret.=','; $ret.=$key.'='.$val; } return $ret; - } + } - /** - * \brief Retourne la version traduite du texte passe en parametre en la codant en HTML - * Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif - * et si toujours pas trouve, il est retourne tel quel - * Les parametres de cette methode peuvent contenir de balises HTML. - * \param key cle de chaine a traduire - * \param param1 chaine de param1 - * \param param2 chaine de param2 - * \param param3 chaine de param3 - * \param param4 chaine de param4 - * \param maxsize taille max - * \return string Chaine traduite et code en HTML - */ - function trans($key, $param1='', $param2='', $param3='', $param4='', $maxsize=0) - { - if ($this->getTransFromTab($key)) - { - // Translation is available - $str=sprintf($this->tab_translate[$key],$param1,$param2,$param3,$param4); - if ($maxsize) $str=dol_trunc($str,$maxsize); - // On remplace les tags HTML par __xx__ pour eviter traduction par htmlentities - $newstr=ereg_replace('<','__lt__',$str); - $newstr=ereg_replace('>','__gt__',$newstr); - $newstr=ereg_replace('"','__quot__',$newstr); + /** + * \brief Retourne la version traduite du texte passe en parametre en la codant en HTML + * Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif + * et si toujours pas trouve, il est retourne tel quel + * Les parametres de cette methode peuvent contenir de balises HTML. + * \param key cle de chaine a traduire + * \param param1 chaine de param1 + * \param param2 chaine de param2 + * \param param3 chaine de param3 + * \param param4 chaine de param4 + * \param maxsize taille max + * \return string Chaine traduite et code en HTML + */ + function trans($key, $param1='', $param2='', $param3='', $param4='', $maxsize=0) + { + if ($this->getTransFromTab($key)) + { + // Translation is available + $str=sprintf($this->tab_translate[$key],$param1,$param2,$param3,$param4); + if ($maxsize) $str=dol_trunc($str,$maxsize); + // On remplace les tags HTML par __xx__ pour eviter traduction par htmlentities + $newstr=ereg_replace('<','__lt__',$str); + $newstr=ereg_replace('>','__gt__',$newstr); + $newstr=ereg_replace('"','__quot__',$newstr); - $newstr=$this->convToOutputCharset($newstr); // Convert string to $this->charset_output + $newstr=$this->convToOutputCharset($newstr); // Convert string to $this->charset_output - // Cryptage en html de la chaine - // $newstr est une chaine stockee en memoire au format $this->charset_output - $newstr=htmlentities($newstr,ENT_QUOTES,$this->charset_output); + // Cryptage en html de la chaine + // $newstr est une chaine stockee en memoire au format $this->charset_output + $newstr=htmlentities($newstr,ENT_QUOTES,$this->charset_output); - // On restaure les tags HTML - $newstr=ereg_replace('__lt__','<',$newstr); - $newstr=ereg_replace('__gt__','>',$newstr); - $newstr=ereg_replace('__quot__','"',$newstr); - return $newstr; - } - else - { + // On restaure les tags HTML + $newstr=ereg_replace('__lt__','<',$newstr); + $newstr=ereg_replace('__gt__','>',$newstr); + $newstr=ereg_replace('__quot__','"',$newstr); + return $newstr; + } + else + { // Translation is not available $newstr=$key; if (eregi('CurrencyShort([A-Z]+)$',$key,$reg)) @@ -396,192 +396,192 @@ class Translate { } return $this->convToOutputCharset($newstr); } - } - - - /** - * \brief Return translated value of a text string - * Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif - * et si toujours pas trouve, il est retourne tel quel. - * Parameters of this method must not contains any HTML tags. - * \param key key of string to translate - * \param param1 chaine de param1 - * \param param2 chaine de param1 - * \param param3 chaine de param1 - * \param param4 chaine de param1 - * \return string chaine traduite - */ - function transnoentities($key, $param1='', $param2='', $param3='', $param4='') - { - $newstr=$key; - if ($this->getTransFromTab($newstr)) - { - // Si la traduction est disponible - $newstr=sprintf($this->tab_translate[$newstr],$param1,$param2,$param3,$param4); - } - return $this->convToOutputCharset($newstr); - } - - - /** - * \brief Return translated value of a text string - * Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif - * et si toujours pas trouve, il est retourne tel quel. - * No convert to encoding charset of lang object is done. - * Parameters of this method must not contains any HTML tags. - * \param key key of string to translate - * \param param1 chaine de param1 - * \param param2 chaine de param1 - * \param param3 chaine de param1 - * \param param4 chaine de param1 - * \return string chaine traduite - */ - function transnoentitiesnoconv($key, $param1='', $param2='', $param3='', $param4='') - { - $newstr=$key; - if ($this->getTransFromTab($newstr)) - { - // Si la traduction est disponible - $newstr=sprintf($this->tab_translate[$newstr],$param1,$param2,$param3,$param4); - } - return $newstr; - } - - - /** - * \brief Retourne la version traduite du texte passe en parametre complete du code pays - * \param str chaine a traduire - * \param countrycode code pays (FR, ...) - * \return string chaine traduite - */ - function transcountry($str, $countrycode) - { - if ($this->tab_translate["$str$countrycode"]) return $this->trans("$str$countrycode"); - else return $this->trans($str); - } - - - /** - * \brief Retourne la version traduite du texte passe en parametre complete du code pays - * \param str chaine a traduire - * \param countrycode code pays (FR, ...) - * \return string chaine traduite - */ - function transcountrynoentities($str, $countrycode) - { - if ($this->tab_translate["$str$countrycode"]) return $this->transnoentities("$str$countrycode"); - else return $this->transnoentities($str); - } + } /** - * \brief Convert a string into output charset (this->charset_output that should be defined to conf->file->character_set_client) - * \param str String to convert - * \param pagecodefrom Page code of src string - * \return string Converted string - */ - function convToOutputCharset($str,$pagecodefrom='UTF-8') - { - if ($pagecodefrom == 'ISO-8859-1' && $this->charset_output == 'UTF-8') $str=utf8_encode($str); + * \brief Return translated value of a text string + * Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif + * et si toujours pas trouve, il est retourne tel quel. + * Parameters of this method must not contains any HTML tags. + * \param key key of string to translate + * \param param1 chaine de param1 + * \param param2 chaine de param1 + * \param param3 chaine de param1 + * \param param4 chaine de param1 + * \return string chaine traduite + */ + function transnoentities($key, $param1='', $param2='', $param3='', $param4='') + { + $newstr=$key; + if ($this->getTransFromTab($newstr)) + { + // Si la traduction est disponible + $newstr=sprintf($this->tab_translate[$newstr],$param1,$param2,$param3,$param4); + } + return $this->convToOutputCharset($newstr); + } + + + /** + * \brief Return translated value of a text string + * Si il n'y a pas de correspondance pour ce texte, on cherche dans fichier alternatif + * et si toujours pas trouve, il est retourne tel quel. + * No convert to encoding charset of lang object is done. + * Parameters of this method must not contains any HTML tags. + * \param key key of string to translate + * \param param1 chaine de param1 + * \param param2 chaine de param1 + * \param param3 chaine de param1 + * \param param4 chaine de param1 + * \return string chaine traduite + */ + function transnoentitiesnoconv($key, $param1='', $param2='', $param3='', $param4='') + { + $newstr=$key; + if ($this->getTransFromTab($newstr)) + { + // Si la traduction est disponible + $newstr=sprintf($this->tab_translate[$newstr],$param1,$param2,$param3,$param4); + } + return $newstr; + } + + + /** + * \brief Retourne la version traduite du texte passe en parametre complete du code pays + * \param str chaine a traduire + * \param countrycode code pays (FR, ...) + * \return string chaine traduite + */ + function transcountry($str, $countrycode) + { + if ($this->tab_translate["$str$countrycode"]) return $this->trans("$str$countrycode"); + else return $this->trans($str); + } + + + /** + * \brief Retourne la version traduite du texte passe en parametre complete du code pays + * \param str chaine a traduire + * \param countrycode code pays (FR, ...) + * \return string chaine traduite + */ + function transcountrynoentities($str, $countrycode) + { + if ($this->tab_translate["$str$countrycode"]) return $this->transnoentities("$str$countrycode"); + else return $this->transnoentities($str); + } + + + /** + * \brief Convert a string into output charset (this->charset_output that should be defined to conf->file->character_set_client) + * \param str String to convert + * \param pagecodefrom Page code of src string + * \return string Converted string + */ + function convToOutputCharset($str,$pagecodefrom='UTF-8') + { + if ($pagecodefrom == 'ISO-8859-1' && $this->charset_output == 'UTF-8') $str=utf8_encode($str); if ($pagecodefrom == 'UTF-8' && $this->charset_output == 'ISO-8859-1') $str=utf8_decode($str); return $str; - } + } - /** - * \brief Retourne la liste des langues disponibles - * \return array list of languages - */ - function get_available_languages($langdir=DOL_DOCUMENT_ROOT) - { - // We scan directory langs to detect available languages - $handle=opendir($langdir ."/langs"); - $langs_available=array(); - while ($file = trim(readdir($handle))) - { - if (eregi('^[a-z]+_[A-Z]+',$file)) - { - array_push($langs_available,$file); - } - } - return $langs_available; - } + /** + * \brief Retourne la liste des langues disponibles + * \return array list of languages + */ + function get_available_languages($langdir=DOL_DOCUMENT_ROOT) + { + // We scan directory langs to detect available languages + $handle=opendir($langdir ."/langs"); + $langs_available=array(); + while ($file = trim(readdir($handle))) + { + if (eregi('^[a-z]+_[A-Z]+',$file)) + { + array_push($langs_available,$file); + } + } + return $langs_available; + } - /** - * \brief Renvoi si le fichier $filename existe dans la version de la langue courante ou alternative - * \param filename nom du fichier � rechercher - * \param searchalt cherche aussi dans langue alternative - * \return boolean true si existe, false sinon - */ - function file_exists($filename,$searchalt=0) - { - // Test si fichier dans repertoire de la langue + /** + * \brief Renvoi si le fichier $filename existe dans la version de la langue courante ou alternative + * \param filename nom du fichier � rechercher + * \param searchalt cherche aussi dans langue alternative + * \return boolean true si existe, false sinon + */ + function file_exists($filename,$searchalt=0) + { + // Test si fichier dans repertoire de la langue foreach($this->dir as $searchdir) { - $htmlfile=$searchdir."/langs/".$this->defaultlang."/".$filename; - if (is_readable($htmlfile)) return true; + $htmlfile=$searchdir."/langs/".$this->defaultlang."/".$filename; + if (is_readable($htmlfile)) return true; - if ($searchalt) { - // Test si fichier dans repertoire de la langue alternative - if ($this->defaultlang != "en_US") $htmlfilealt = $searchdir."/langs/en_US/".$filename; - else $htmlfilealt = $searchdir."/langs/fr_FR/".$filename; - if (is_readable($htmlfilealt)) return true; - } + if ($searchalt) { + // Test si fichier dans repertoire de la langue alternative + if ($this->defaultlang != "en_US") $htmlfilealt = $searchdir."/langs/en_US/".$filename; + else $htmlfilealt = $searchdir."/langs/fr_FR/".$filename; + if (is_readable($htmlfilealt)) return true; + } } - return false; - } + return false; + } - /** - * \brief Return a label for a key. Store key-label in a cache. - * \param db Database handler - * \param key Key to get label (key in language file) - * \param tablename Table name without prefix - * \param fieldkey Field for key - * \param fieldlabel Field for label - * \param fieldval Value to find record - * \return string Label - * \remarks This function can be used to get label in database but more often to get code from key id. - */ - function getLabelFromKey($db,$key,$tablename,$fieldkey,$fieldlabel) - { - // If key empty + /** + * \brief Return a label for a key. Store key-label in a cache. + * \param db Database handler + * \param key Key to get label (key in language file) + * \param tablename Table name without prefix + * \param fieldkey Field for key + * \param fieldlabel Field for label + * \param fieldval Value to find record + * \return string Label + * \remarks This function can be used to get label in database but more often to get code from key id. + */ + function getLabelFromKey($db,$key,$tablename,$fieldkey,$fieldlabel) + { + // If key empty if ($key == '') return ''; // Check in language array - if ($this->transnoentities($key) != $key) - { - return $this->transnoentities($key); // Found in language array - } + if ($this->transnoentities($key) != $key) + { + return $this->transnoentities($key); // Found in language array + } // Check in cache - if (isset($this->cache_labels[$tablename][$key])) // Can be defined to 0 or '' - { - return $this->cache_labels[$tablename][$key]; // Found in cache - } + if (isset($this->cache_labels[$tablename][$key])) // Can be defined to 0 or '' + { + return $this->cache_labels[$tablename][$key]; // Found in cache + } - $sql = "SELECT ".$fieldlabel." as label"; - $sql.= " FROM ".MAIN_DB_PREFIX.$tablename; - $sql.= " WHERE ".$fieldkey." = '".$key."'"; - dol_syslog('Translate::getLabelFromKey sql='.$sql,LOG_DEBUG); - $resql = $db->query($sql); - if ($resql) - { - $obj = $db->fetch_object($resql); - if ($obj) $this->cache_labels[$tablename][$key]=$obj->label; - else $this->cache_labels[$tablename][$key]=''; - $db->free($resql); - return $this->cache_labels[$tablename][$key]; - } - else - { + $sql = "SELECT ".$fieldlabel." as label"; + $sql.= " FROM ".MAIN_DB_PREFIX.$tablename; + $sql.= " WHERE ".$fieldkey." = '".$key."'"; + dol_syslog('Translate::getLabelFromKey sql='.$sql,LOG_DEBUG); + $resql = $db->query($sql); + if ($resql) + { + $obj = $db->fetch_object($resql); + if ($obj) $this->cache_labels[$tablename][$key]=$obj->label; + else $this->cache_labels[$tablename][$key]=''; + $db->free($resql); + return $this->cache_labels[$tablename][$key]; + } + else + { $this->error=$db->lasterror(); dol_syslog("Translate::getLabelFromKey error=".$this->error,LOG_ERR); - return -1; - } - } + return -1; + } + } } |