From fcb7e9d700e9a26963a9b1ebd169076ebc99a98a Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Fri, 25 May 2007 20:02:23 +0000
Subject: [PATCH] =?UTF-8?q?Am=E9lioration=20du=20support=20UTF-8=20pour=20?=
 =?UTF-8?q?la=20g=E9n=E9ration=20des=20pages=20Web.=20La=20variable=20du?=
 =?UTF-8?q?=20charset=20d'affichage=20qui=20est=20mis=20dna=20sle=20fichie?=
 =?UTF-8?q?r=20config=20est=20stock=E9=20dans=20l'objet=20$conf=20et=20non?=
 =?UTF-8?q?=20en=20session.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 htdocs/comm/propal.php              |  18 +--
 htdocs/commande/fiche.php           |  16 +--
 htdocs/compta/facture.php           |  18 +--
 htdocs/compta/paiement/fiche.php    |   2 +-
 htdocs/conf/conf.php.example        |  12 ++
 htdocs/expedition/fiche.php         |   2 +-
 htdocs/fichinter/fiche.php          |   2 +-
 htdocs/fourn/commande/fiche.php     |  12 +-
 htdocs/install/etape0.php           |  30 ++--
 htdocs/install/etape1.php           |  21 +--
 htdocs/install/inc.php              |   2 +-
 htdocs/install/upgrade2.php         | 204 ++++++++++++++++++++++------
 htdocs/langs/fr_FR/install.lang     |   4 +
 htdocs/lib/CMailFile.class.php      |   5 +-
 htdocs/lib/databases/mysql.lib.php  |   3 +-
 htdocs/lib/databases/mysqli.lib.php |   3 +-
 htdocs/lib/functions.inc.php        |   2 +-
 htdocs/livraison/fiche.php          |   2 +-
 htdocs/master.inc.php               |  24 ++--
 htdocs/translate.class.php          |  34 +++--
 20 files changed, 293 insertions(+), 123 deletions(-)

diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php
index 7bd7e306146..452708c201d 100644
--- a/htdocs/comm/propal.php
+++ b/htdocs/comm/propal.php
@@ -129,7 +129,7 @@ if ($_POST['action'] == 'confirm_deleteproductline' && $_POST['confirm'] == 'yes
       $result=$propal->delete_product($_GET['ligne']);
       if ($_REQUEST['lang_id'])
 	{
-	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 	  $outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
       propale_pdf_create($db, $propal->id, $propal->modelpdf, $outputlangs);
@@ -147,7 +147,7 @@ if ($_POST['action'] == 'confirm_validate' && $_POST['confirm'] == 'yes')
         $result=$propal->update_price($_GET['propalid']);
 		if ($_REQUEST['lang_id'])
 		{
-			$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+			$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 			$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 		}
         propale_pdf_create($db, $propal->id, $propal->modelpdf, $outputlangs);
@@ -286,7 +286,7 @@ if ($_POST['action'] == 'add' && $user->rights->propale->creer)
 			// Generation document PDF
 			if ($_REQUEST['lang_id'])
 			{
-				$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+				$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 				$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 			}
 			propale_pdf_create($db, $id, $_REQUEST['model'], $outputlangs);
@@ -581,7 +581,7 @@ if ($_POST['action'] == "addligne" && $user->rights->propale->creer)
 
 		if ($_REQUEST['lang_id'])
 		{
-			$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+			$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 			$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 		}
   	    propale_pdf_create($db, $propal->id, $propal->modelpdf, $outputlangs);
@@ -605,7 +605,7 @@ if ($_POST['action'] == 'updateligne' && $user->rights->propale->creer && $_POST
 
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
     propale_pdf_create($db, $propal->id, $propal->modelpdf, $outputlangs);
@@ -625,7 +625,7 @@ if ($_REQUEST['action'] == 'builddoc' && $user->rights->propale->creer)
     
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
 	$result=propale_pdf_create($db, $propal->id, $propal->modelpdf, $outputlangs);
@@ -652,7 +652,7 @@ if ($_GET['action'] == 'del_ligne' && $user->rights->propale->creer && !$conf->g
 	$propal->delete_product($_GET['ligne']);
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
 	propale_pdf_create($db, $propal->id, $propal->modelpdf, $outputlangs);
@@ -710,7 +710,7 @@ if ($_GET['action'] == 'up' && $user->rights->propale->creer)
 	$propal->line_up($_GET['rowid']);
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
   propale_pdf_create($db, $propal->id, $propal->modelpdf, $outputlangs);
@@ -724,7 +724,7 @@ if ($_GET['action'] == 'down' && $user->rights->propale->creer)
 	$propal->line_down($_GET['rowid']);
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
   	propale_pdf_create($db, $propal->id, $propal->modelpdf, $outputlangs);
diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php
index f541dad50ae..1c3365da7d7 100644
--- a/htdocs/commande/fiche.php
+++ b/htdocs/commande/fiche.php
@@ -319,7 +319,7 @@ if ($_POST['action'] == 'addligne' && $user->rights->commande->creer)
 
       if ($_REQUEST['lang_id'])
 	{
-	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 	  $outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
       commande_pdf_create($db, $commande->id, $commande->modelpdf, $outputlangs);
@@ -346,7 +346,7 @@ if ($_POST['action'] == 'updateligne' && $user->rights->commande->creer && $_POS
     {
       if ($_REQUEST['lang_id'])
 	{
-	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 	  $outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
       commande_pdf_create($db, $commande->id, $commande->modelpdf, $outputlangs);
@@ -373,7 +373,7 @@ if ($_GET['action'] == 'deleteline' && $user->rights->commande->creer && !$conf-
   $result = $commande->delete_line($_GET['lineid']);
   if ($_REQUEST['lang_id'])
     {
-      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
       $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     }
   commande_pdf_create($db, $_GET['id'], $commande->modelpdf, $outputlangs);
@@ -425,7 +425,7 @@ if ($_POST['action'] == 'confirm_deleteproductline' && $_POST['confirm'] == 'yes
       $commande->delete_line($_GET['lineid']);
       if ($_REQUEST['lang_id'])
 	{
-	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 	  $outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
       commande_pdf_create($db, $_GET['id'], $commande->modelpdf, $outputlangs);
@@ -455,7 +455,7 @@ if ($_GET['action'] == 'up' && $user->rights->commande->creer)
   $commande->line_up($_GET['rowid']);
   if ($_REQUEST['lang_id'])
     {
-      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
       $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     }
   commande_pdf_create($db, $commande->id, $commande->modelpdf, $outputlangs);
@@ -470,7 +470,7 @@ if ($_GET['action'] == 'down' && $user->rights->commande->creer)
   $commande->line_down($_GET['rowid']);
   if ($_REQUEST['lang_id'])
     {
-      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
       $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     }
   commande_pdf_create($db, $commande->id, $commande->modelpdf, $outputlangs);
@@ -495,7 +495,7 @@ if ($_REQUEST['action'] == 'builddoc')	// En get ou en post
 
   if ($_REQUEST['lang_id'])
     {
-      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
       $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     }
   $result=commande_pdf_create($db, $commande->id,$commande->modelpdf,$outputlangs);
@@ -1759,7 +1759,7 @@ else
 				{
 					if ($_REQUEST['lang_id'])
 					{
-						$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+						$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 						$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 					}
 					$result=commande_pdf_create($db, $_REQUEST['id'], '', $_REQUEST['model'], $outputlangs);
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index a905c3b215d..16a39170c41 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -187,7 +187,7 @@ if ($_POST['action'] == 'confirm_valid' && $_POST['confirm'] == 'yes' && $user->
 	{
 		if ($_REQUEST['lang_id'])
 		{
-			$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+			$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 			$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 		}
 		facture_pdf_create($db, $fac->id, '', $fac->modelpdf, $outputlangs);
@@ -245,7 +245,7 @@ if ($_POST['action'] == 'confirm_deleteproductline' && $_POST['confirm'] == 'yes
       $fac->deleteline($_GET['rowid'], $user);
       if ($_REQUEST['lang_id'])
     	{
-	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 	  $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     	}
       facture_pdf_create($db, $fac->id, '', $fac->modelpdf, $outputlangs);
@@ -837,7 +837,7 @@ if ($_POST['action'] == 'updateligne' && $user->rights->facture->creer && $_POST
 
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
     facture_pdf_create($db, $fac->id, '', $fac->modelpdf, $outputlangs);
@@ -860,7 +860,7 @@ if ($_GET['action'] == 'deleteline' && $user->rights->facture->creer && ! $conf-
     {
       if ($_REQUEST['lang_id'])
 	{
-	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 	  $outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
       //	facture_pdf_create($db, $fac->id, '', $fac->modelpdf, $outputlangs);
@@ -884,7 +884,7 @@ if ($_GET['action'] == 'up' && $user->rights->facture->creer)
 	$fac->line_up($_GET['rowid']);
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
   facture_pdf_create($db, $fac->id, '', $fac->modelpdf, $outputlangs);
@@ -898,7 +898,7 @@ if ($_GET['action'] == 'down' && $user->rights->facture->creer)
 	$fac->line_down($_GET['rowid']);
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
   facture_pdf_create($db, $fac->id, '', $fac->modelpdf, $outputlangs);
@@ -1088,7 +1088,7 @@ if ($_REQUEST['action'] == 'builddoc')	// En get ou en post
 
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
 
@@ -2864,7 +2864,7 @@ else
 				{
 					if ($_REQUEST['lang_id'])
 					{
-						$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+						$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 						$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 					}
 					$result=facture_pdf_create($db, $fac->id, '', $_REQUEST['model'], $outputlangs);
@@ -2920,7 +2920,7 @@ else
 				{
 					if ($_REQUEST['lang_id'])
 					{
-						$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+						$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 						$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 					}
 					$result=facture_pdf_create($db, $fac->id, '', $_REQUEST['model'], $outputlangs);
diff --git a/htdocs/compta/paiement/fiche.php b/htdocs/compta/paiement/fiche.php
index 85e0436e5d0..d0464280d23 100644
--- a/htdocs/compta/paiement/fiche.php
+++ b/htdocs/compta/paiement/fiche.php
@@ -86,7 +86,7 @@ if ($_POST['action'] == 'confirm_valide' && $_POST['confirm'] == 'yes' && $user-
 			$fac->fetch($id);
 			if ($_REQUEST['lang_id'])
 			{
-				$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+				$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 				$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 			}
 			facture_pdf_create($db, $fac->id, '', $fac->modelpdf, $outputlangs);
diff --git a/htdocs/conf/conf.php.example b/htdocs/conf/conf.php.example
index 186d526f61b..1ca801ada16 100644
--- a/htdocs/conf/conf.php.example
+++ b/htdocs/conf/conf.php.example
@@ -93,6 +93,18 @@ $dolibarr_main_db_pass="";
 $dolibarr_main_db_type="";
 
 
+#
+#
+#
+$dolibarr_main_db_character_set="";
+
+
+#
+#
+#
+$character_set_client="ISO-8859-1";
+
+
 # dolibarr_main_authentication
 # This parameter contains the way authentication is done.
 # If value "ldap" is used, you must also set parameters dolibarr_main_auth_ldap_*
diff --git a/htdocs/expedition/fiche.php b/htdocs/expedition/fiche.php
index 4d66741eefa..643ddd7f327 100644
--- a/htdocs/expedition/fiche.php
+++ b/htdocs/expedition/fiche.php
@@ -152,7 +152,7 @@ if ($_REQUEST['action'] == 'builddoc')	// En get ou en post
 
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
 	$result=expedition_pdf_create($db,$expedition->id,$expedition->modelpdf,$outputlangs);
diff --git a/htdocs/fichinter/fiche.php b/htdocs/fichinter/fiche.php
index 47c7d6b303b..3e52a75e1ed 100644
--- a/htdocs/fichinter/fiche.php
+++ b/htdocs/fichinter/fiche.php
@@ -131,7 +131,7 @@ if ($_REQUEST['action'] == 'builddoc')	// En get ou en post
 {
   if ($_REQUEST['lang_id'])
     {
-      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
       $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     }
   $result=fichinter_pdf_create($db, $_REQUEST['id'], $_REQUEST['model'], $outputlangs);
diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php
index a25d7389822..48e33b493a9 100644
--- a/htdocs/fourn/commande/fiche.php
+++ b/htdocs/fourn/commande/fiche.php
@@ -144,7 +144,7 @@ if ($_POST['action'] ==	'addligne' && $user->rights->fournisseur->commande->cree
 	{
 	  if ($_REQUEST['lang_id'])
 	    {
-	      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+	      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 	      $outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	    }
 	  supplier_order_pdf_create($db, $commande->id, $commande->modelpdf, $outputlangs);
@@ -176,7 +176,7 @@ if ($_POST['action'] ==	'updateligne' && $user->rights->fournisseur->commande->c
     {
       if ($_REQUEST['lang_id'])
 	{
-	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+	  $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 	  $outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
       supplier_order_pdf_create($db, $commande->id,	$commande->modelpdf, $outputlangs);
@@ -203,7 +203,7 @@ if ($_GET['action'] == 'deleteline' && $user->rights->fournisseur->commande->cre
   $result = $commande->delete_line($_GET['lineid']);
   if ($_REQUEST['lang_id'])
     {
-      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
       $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     }
   supplier_order_pdf_create($db, $_GET['id'], $commande->modelpdf, $outputlangs);
@@ -302,7 +302,7 @@ if ($_GET['action']	== 'up'	&& $user->rights->fournisseur->commande->creer)
   $commande->line_up($_GET['rowid']);
   if ($_REQUEST['lang_id'])
     {
-      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
       $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     }
   supplier_order_pdf_create($db, $commande->id, $commande->modelpdf, $outputlangs);
@@ -317,7 +317,7 @@ if ($_GET['action']	== 'down' && $user->rights->fournisseur->commande->creer)
   $commande->line_down($_GET['rowid']);
   if ($_REQUEST['lang_id'])
     {
-      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
       $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     }
   supplier_order_pdf_create($db, $commande->id, $commande->modelpdf, $outputlangs);
@@ -343,7 +343,7 @@ if ($_REQUEST['action']	== 'builddoc')	// En get ou en	post
 
   if ($_REQUEST['lang_id'])
     {
-      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+      $outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
       $outputlangs->setDefaultLang($_REQUEST['lang_id']);
     }
   $result=supplier_order_pdf_create($db, $commande->id,$commande->modelpdf,$outputlangs);
diff --git a/htdocs/install/etape0.php b/htdocs/install/etape0.php
index c84ff24fb23..a0b410116bc 100644
--- a/htdocs/install/etape0.php
+++ b/htdocs/install/etape0.php
@@ -35,13 +35,21 @@ $langs->setDefaultLang($setuplang);
 $langs->load("admin");
 $langs->load("install");
 
-pHeader($langs->trans("ConfigurationFile"),"etape1");
-
 $error = 0;
 
 /*
  * Actions
  */
+
+ 
+ 
+/*
+ * Affichage page
+ */
+
+pHeader($langs->trans("ConfigurationFile"),"etape1");
+
+// On reporte champ formulaire pr�c�dent pour propagation
 if ($_POST["action"] == "set")
 {
   umask(0);
@@ -50,6 +58,7 @@ if ($_POST["action"] == "set")
     echo '<input type="hidden" name="'.$cle.'"  value="'.$valeur.'">';
     }
 }
+
 /**
  * R�cuparation des information de connexion
  */
@@ -57,13 +66,13 @@ $userroot=isset($_POST["db_user_root"])?$_POST["db_user_root"]:"";
 $passroot=isset($_POST["db_pass_root"])?$_POST["db_pass_root"]:"";
 // R�pertoire des pages dolibarr
 $main_dir=isset($_POST["main_dir"])?trim($_POST["main_dir"]):'';
+
 /**
 * 	Si l'utilisateur n'est pas cr�� d�j� cr��, on se connecte � l'aide du login root'
 */
 require_once($main_dir."/lib/databases/".$_POST["db_type"].".lib.php");
 if (isset($_POST["db_create_user"]) && $_POST["db_create_user"] == "on")
 {	
-	
 	$databasefortest=$conf->db->name;
 	if ($_POST["db_type"] == 'mysql' ||$_POST["db_type"] == 'mysqli')
 	{
@@ -77,10 +86,11 @@ if (isset($_POST["db_create_user"]) && $_POST["db_create_user"] == "on")
 }
 if ($db->error)
 {
-		print $langs->trans("ThisPHPDoesNotSupportTypeBase",$conf->db->type);
+		print '<div class="error">'.$db->error.'</div>';
 		$error++;
 }
 
+
 /*
 * Si creation database demand�e, il est possible de faire un choix
 */
@@ -97,11 +107,10 @@ if ($db->connected){
 	<tr><td valign="top" class="label" colspan="3"><?php echo $langs->trans("CharsetChoice");?></td></tr>
 	<tr>
 		<td valign="top" class="label"><?php echo $langs->trans("CharacterSetClient"); ?></td>
-		<td valign="top" class="label"><select name="character_set_client"/><option>ISO-8859-1</option><option>ISO-8859-15</option><option>UTF-8</option><option>cp866</option><option>cp1251</option><option>cp1252</option><option>KOI8-R</option><option>BIG5</option><option>GB2312</option><option>BIG5-HKSCS</option><option>Shift_JIS</option><option>EUC-JP</option></select></td>
+		<td valign="top" class="label"><select name="character_set_client"><option>ISO-8859-1</option><option>ISO-8859-15</option><option>UTF-8</option><option>cp866</option><option>cp1251</option><option>cp1252</option><option>KOI8-R</option><option>BIG5</option><option>GB2312</option><option>BIG5-HKSCS</option><option>Shift_JIS</option><option>EUC-JP</option></select></td>
 		<td class="label"><div class="comment"><?php echo $langs->trans("CharacterSetClientComment"); ?></div></td>
 	</tr>
-	<?php  
-	include($_POST["db_type"].'.php');?>
+	<?php include($_POST["db_type"].'.php');?>
 <?php
 }else{
 	
@@ -116,5 +125,10 @@ if ($db->connected){
 			print $langs->trans("ErrorGoBackAndCorrectParameters").'<br><br>';
 	}
 }
-pFooter($err,$setuplang);
+
+?>
+</table>
+
+<?php
+pFooter($error,$setuplang);
 ?>
\ No newline at end of file
diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php
index 37d7e1ccb4a..9717b0357bf 100644
--- a/htdocs/install/etape1.php
+++ b/htdocs/install/etape1.php
@@ -135,11 +135,11 @@ if ($_POST["action"] == "set")
 			fputs($fp, '$dolibarr_main_db_type="'.$_POST["db_type"].'";');
 			fputs($fp,"\n");
 
-			/* Choix des charsets*/
-			fputs($fp, '$character_set_client="'.$_POST["character_set_client"].'";');
+			fputs($fp, '$dolibarr_main_db_character_set="'.$_POST["character_set_database"].'";');
 			fputs($fp,"\n");
 			
-			fputs($fp, '$character_set_database="'.$_POST["character_set_database"].'";');
+			/* Choix des charsets*/
+			fputs($fp, '$character_set_client="'.$_POST["character_set_client"].'";');
 			fputs($fp,"\n");
 			
 			fputs($fp, '$collation_connection="'.$_POST["collation_connection"].'";');
@@ -279,7 +279,7 @@ if ($_POST["action"] == "set")
 			$db = new DoliDb($conf->db->type,$conf->db->host,$userroot,$passroot,$databasefortest);
 			if ($db->error)
 			{
-				print $langs->trans("ThisPHPDoesNotSupportTypeBase",$conf->db->type);
+				print '<div class="error">'.$db->error.'</div>';
 				$error++;
 			}
 			
@@ -333,9 +333,9 @@ if ($_POST["action"] == "set")
 					
 					// Affiche aide diagnostique
 					print '<tr><td colspan="2"><br>';
-					print 'Vous avez demand� la cr�ation du login Dolibarr "<b>'.$dolibarr_main_db_user.'</b>", mais pour cela, ';
-					print 'Dolibarr doit se connecter sur le serveur "<b>'.$dolibarr_main_db_host.'</b>" via le super utilisateur "<b>'.$userroot.'</b>".<br>';
-					print 'La connexion ayant �chou�, les param�tres du serveur ou du super utilisateur sont peut-etre incorrects.<br>';
+					print $langs->trans("YouAskDatabaseCreationSoDolibarrNeedToConnect",$dolibarr_main_db_user,$dolibarr_main_db_host,$userroot);
+					print '<br>';
+					print $langs->trans("BecauseConnectionFailedParametersMayBeWrong").'<br><br>';
 					print $langs->trans("ErrorGoBackAndCorrectParameters").'<br><br>';
 					print '</td></tr>';
 					
@@ -392,9 +392,10 @@ if ($_POST["action"] == "set")
 				print '</tr>';
 
 				// Affiche aide diagnostique
-				print '<tr><td colspan="2"><br>Vous avez demand� la cr�ation de la base Dolibarr "<b>'.$dolibarr_main_db_name.'</b>", mais pour cela, ';
-				print 'Dolibarr doit se connecter sur le serveur "<b>'.$dolibarr_main_db_host.'</b>" via le super utilisateur "<b>'.$userroot.'</b>".<br>';
-				print 'La connexion ayant �chou�, les param�tres du serveur ou du super utilisateur sont peut-etre incorrects.<br>';
+				print '<tr><td colspan="2"><br>';
+				print $langs->trans("YouAskDatabaseCreationSoDolibarrNeedToConnect",$dolibarr_main_db_user,$dolibarr_main_db_host,$userroot);
+				print '<br>';
+				print $langs->trans("BecauseConnectionFailedParametersMayBeWrong").'<br><br>';
 				print $langs->trans("ErrorGoBackAndCorrectParameters").'<br><br>';
 				print '</td></tr>';
 
diff --git a/htdocs/install/inc.php b/htdocs/install/inc.php
index 0aa484776c1..d8307654a6e 100644
--- a/htdocs/install/inc.php
+++ b/htdocs/install/inc.php
@@ -87,7 +87,7 @@ if (get_magic_quotes_gpc())
 
 
 // Defini objet langs
-$langs = new Translate('../langs');
+$langs = new Translate('../langs',$conf);
 $langs->setDefaultLang('auto');
 $langs->setPhpLang();
 
diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php
index 4f27a70a0a5..adc34fbe03a 100644
--- a/htdocs/install/upgrade2.php
+++ b/htdocs/install/upgrade2.php
@@ -177,7 +177,9 @@ if (isset($_POST['action']) && $_POST['action'] == 'upgrade')
 		migrate_delete_old_files($db,$langs,$conf);
 
 		// Script pour V2.1 -> V2.2
-		migrate_paiements_orphelins($db,$langs,$conf);
+		migrate_paiements_orphelins_1($db,$langs,$conf);
+
+		migrate_paiements_orphelins_2($db,$langs,$conf);
 		
     	// On commit dans tous les cas.
     	// La proc�dure etant con�ue pour pouvoir passer plusieurs fois quelquesoit la situation.
@@ -281,7 +283,7 @@ function migrate_paiements($db,$langs,$conf)
  * Pour verifier s'il reste des orphelins:
  * select * from llx_paiement as p left join llx_paiement_facture as pf on pf.fk_paiement=p.rowid WHERE pf.rowid IS NULL AND (p.fk_facture = 0 OR p.fk_facture IS NULL)
  */
-function migrate_paiements_orphelins($db,$langs,$conf)
+function migrate_paiements_orphelins_1($db,$langs,$conf)
 {
 	print '<tr><td colspan="4">';
 
@@ -299,16 +301,16 @@ function migrate_paiements_orphelins($db,$langs,$conf)
 	$sql.= " AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
 	$resql = $db->query($sql);
 
+	$row = array();
 	if ($resql) 
 	{
 		$i = $j = 0;
-		$row = array();
 		$num = $db->num_rows($resql);
 		
 		while ($i < $num)
 		{
 			$obj = $db->fetch_object($resql);
-			if ($obj->pamount == $obj->bamount)	// Pour etre sur d'avoir bon cas
+			if ($obj->pamount == $obj->bamount && $obj->socid)	// Pour etre sur d'avoir bon cas
 			{
 				$row[$j]['paymentid'] = $obj->rowid ;		// paymentid
 				$row[$j]['pamount'] = $obj->pamount;
@@ -325,50 +327,154 @@ function migrate_paiements_orphelins($db,$langs,$conf)
 		dolibarr_print_error($db);   
 	}
 	
-	if ($num)
+	if (sizeof($row))
 	{
-		print $langs->trans('MigrationPaymentsNumberToUpdate', $num)."<br>\n";
-		if ($db->begin())
+		print $langs->trans('MigrationPaymentsNumberToUpdate', sizeof($row))."<br>\n";
+		$db->begin();
+		
+		$res = 0;
+		for ($i = 0 ; $i < sizeof($row) ; $i++)
 		{
-			$res = 0;
-			for ($i = 0 ; $i < sizeof($row) ; $i++)
+			print '* '.$row[$i]['datec'].' paymentid='.$row[$i]['paymentid'].' '.$row[$i]['pamount'].' fk_bank='.$row[$i]['fk_bank'].' '.$row[$i]['bamount'].' socid='.$row[$i]['socid'].'<br>';
+
+			// On cherche facture sans lien paiement et du meme montant et pour meme societe.
+			$sql=" SELECT distinct f.rowid from ".MAIN_DB_PREFIX."facture as f";
+			$sql.=" LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
+			$sql.=" WHERE f.fk_statut in (2,3) AND fk_soc = ".$row[$i]['socid']." AND total_ttc = ".$row[$i]['pamount'];
+			$sql.=" AND pf.fk_facture IS NULL";
+			$sql.=" ORDER BY f.fk_statut";
+			//print $sql.'<br>';
+			$resql=$db->query($sql);
+			if ($resql)
 			{
-				//print '* '.$row[$i]['datec'].' paymentid='.$row[$i]['paymentid'].' '.$row[$i]['pamount'].' fk_bank='.$row[$i]['fk_bank'].' '.$row[$i]['bamount'].' socid='.$row[$i]['socid'].'<br>';
-				// On cherche facture du meme montant pour meme societe.
-				// Si y en a plusieurs, on prend la premiere sans lien vers un paiement
-				if ($row[$i]['socid'] > 0)
+				$num = $db->num_rows($resql);
+				//print 'Nb of invoice found for this amount and company :'.$num.'<br>';
+				if ($num >= 1) 
 				{
-					$sql=" SELECT distinct f.rowid from ".MAIN_DB_PREFIX."facture as f";
-					$sql.=" LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
-					$sql.=" WHERE f.fk_statut in (2,3) AND fk_soc = ".$row[$i]['socid']." AND total_ttc = ".$row[$i]['pamount'];
-					$sql.=" AND pf.fk_facture IS NULL";
-					$sql.=" ORDER BY f.fk_statut";
-					print $sql.'<br>';
-					$resql=$db->query($sql);
-					if ($resql)
-					{
-						$num = $db->num_rows($resql);
-						//print 'Nb of invoice found for this amount and company :'.$num.'<br>';
-						if ($num >= 1) 
-						{
-							$obj=$db->fetch_object($resql);
-							$facid=$obj->rowid;
-							
-							$sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement_facture (fk_facture, fk_paiement, amount)";
-							$sql .= " VALUES (".$facid.",".$row[$i]['paymentid'].",".$row[$i]['pamount'].")";
-							$res += $db->query($sql);
-
-							print $langs->trans('MigrationProcessPaymentUpdate', 'facid='.$facid.'-paymentid='.$row[$i]['paymentid'].'-amount='.$row[$i]['pamount'])."<br>\n";
-						}
-					}
-					else
-					{
-						print 'ERROR';
-					}
+					$obj=$db->fetch_object($resql);
+					$facid=$obj->rowid;
+					
+					$sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement_facture (fk_facture, fk_paiement, amount)";
+					$sql .= " VALUES (".$facid.",".$row[$i]['paymentid'].",".$row[$i]['pamount'].")";
+					$res += $db->query($sql);
+
+					print $langs->trans('MigrationProcessPaymentUpdate', 'facid='.$facid.'-paymentid='.$row[$i]['paymentid'].'-amount='.$row[$i]['pamount'])."<br>\n";
 				}
-			} 
+			}
+			else
+			{
+				print 'ERROR';
+			}
+		} 
+		
+		if ($res > 0)
+		{
+			print $langs->trans('MigrationSuccessfullUpdate')."<br>";
+		}
+		else
+		{
+			print $langs->trans('MigrationPaymentsNothingToUpdate')."<br>\n";
 		}
 		
+		$db->commit();
+	}
+	else
+	{
+		print $langs->trans('MigrationPaymentsNothingToUpdate')."<br>\n";
+	}
+
+	print '</td></tr>';
+}
+
+
+/**
+ * Corrige paiement orphelins (liens paumes suite a bugs)
+ * Pour verifier s'il reste des orphelins:
+ * select * from llx_paiement as p left join llx_paiement_facture as pf on pf.fk_paiement=p.rowid WHERE pf.rowid IS NULL AND (p.fk_facture = 0 OR p.fk_facture IS NULL)
+ */
+function migrate_paiements_orphelins_2($db,$langs,$conf)
+{
+	print '<tr><td colspan="4">';
+
+	print '<br>';
+	print '<b>'.$langs->trans('MigrationPaymentsUpdate')."</b><br>\n";
+	
+	// Tous les enregistrements qui sortent de cette requete devrait avoir un pere dans llx_paiement_facture
+	$sql = "SELECT distinct p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
+	$sql.= " bu2.url_id as socid";
+	$sql.= " FROM (".MAIN_DB_PREFIX."paiement as p, ".MAIN_DB_PREFIX."bank_url as bu, ".MAIN_DB_PREFIX."bank as b)";
+	$sql.= " left join llx_paiement_facture as pf on pf.fk_paiement=p.rowid";
+	$sql.= " left join llx_bank_url as bu2 on (bu.fk_bank=bu2.fk_bank AND bu2.type='company')";
+	$sql.= " WHERE pf.rowid IS NULL AND (p.fk_bank=bu.fk_bank AND bu.type='payment') AND bu.fk_bank = b.rowid";
+	$sql.= " AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
+	$resql = $db->query($sql);
+
+	$row = array();
+	if ($resql) 
+	{
+		$i = $j = 0;
+		$num = $db->num_rows($resql);
+		
+		while ($i < $num)
+		{
+			$obj = $db->fetch_object($resql);
+			if ($obj->pamount == $obj->bamount && $obj->socid)	// Pour etre sur d'avoir bon cas
+			{
+				$row[$j]['paymentid'] = $obj->rowid ;		// paymentid
+				$row[$j]['pamount'] = $obj->pamount;
+				$row[$j]['fk_bank'] = $obj->fk_bank;
+				$row[$j]['bamount'] = $obj->bamount;
+				$row[$j]['socid'] = $obj->socid;
+				$row[$j]['datec'] = $obj->datec;
+				$j++;
+			}
+			$i++;
+		}
+	}
+	else {
+		dolibarr_print_error($db);   
+	}
+	
+	if (sizeof($row))
+	{
+		print $langs->trans('MigrationPaymentsNumberToUpdate', sizeof($row))."<br>\n";
+		$db->begin();
+
+		$res = 0;
+		for ($i = 0 ; $i < sizeof($row) ; $i++)
+		{
+			print '* '.$row[$i]['datec'].' paymentid='.$row[$i]['paymentid'].' '.$row[$i]['pamount'].' fk_bank='.$row[$i]['fk_bank'].' '.$row[$i]['bamount'].' socid='.$row[$i]['socid'].'<br>';
+
+			// On cherche facture sans lien paiement et du meme montant et pour meme societe.
+			$sql=" SELECT distinct f.rowid from ".MAIN_DB_PREFIX."facture as f";
+			$sql.=" LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
+			$sql.=" WHERE f.fk_statut in (2,3) AND fk_soc = ".$row[$i]['socid']." AND total_ttc = ".$row[$i]['pamount'];
+			$sql.=" AND pf.fk_facture IS NULL";
+			$sql.=" ORDER BY f.fk_statut";
+			//print $sql.'<br>';
+			$resql=$db->query($sql);
+			if ($resql)
+			{
+				$num = $db->num_rows($resql);
+				//print 'Nb of invoice found for this amount and company :'.$num.'<br>';
+				if ($num >= 1) 
+				{
+					$obj=$db->fetch_object($resql);
+					$facid=$obj->rowid;
+					
+					$sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement_facture (fk_facture, fk_paiement, amount)";
+					$sql .= " VALUES (".$facid.",".$row[$i]['paymentid'].",".$row[$i]['pamount'].")";
+					$res += $db->query($sql);
+
+					print $langs->trans('MigrationProcessPaymentUpdate', 'facid='.$facid.'-paymentid='.$row[$i]['paymentid'].'-amount='.$row[$i]['pamount'])."<br>\n";
+				}
+			}
+			else
+			{
+				print 'ERROR';
+			}
+		} 
+		
 		if ($res > 0)
 		{
 			print $langs->trans('MigrationSuccessfullUpdate')."<br>";
@@ -377,6 +483,8 @@ function migrate_paiements_orphelins($db,$langs,$conf)
 		{
 			print $langs->trans('MigrationPaymentsNothingToUpdate')."<br>\n";
 		}
+
+		$db->commit();
 	}
 	else
 	{
@@ -387,6 +495,20 @@ function migrate_paiements_orphelins($db,$langs,$conf)
 }
 
 
+function migrate_paiements_orphelins_3($db,$langs,$conf)
+{
+
+/*
+select p.rowid from llx_paiement as p left join llx_paiement_facture as pf on pf.fk_paiement=p.rowid WHERE pf.rowid IS NULL AND (p.fk_facture = 0 OR p.fk_facture IS NULL)
+Poru chaque rep, test si
+select count(*) from llx_bank where rowid = obj->fk_bank
+select count(*) from llx_bank_url where url_id = 128 and type='payment'
+Si partout 0, on efface ligne de llx_paiement
+*/
+
+}
+
+
 /*
  * Mise a jour des contrats (gestion du contrat + detail de contrat)
  */
diff --git a/htdocs/langs/fr_FR/install.lang b/htdocs/langs/fr_FR/install.lang
index 12cf38cc01e..345b23214e1 100644
--- a/htdocs/langs/fr_FR/install.lang
+++ b/htdocs/langs/fr_FR/install.lang
@@ -1,4 +1,5 @@
 # Dolibarr language file - fr_FR - install
+CHARSET=ISO-8859-1
 InstallEasy=Nous avons fait en sorte que l'installation soit le plus simple possible, vous n'avez qu'� suivre les �tapes une � une.
 MiscellanousChecks=V�rification de pr�requis
 DolibarrWelcome=Bienvenue sur Dolibarr
@@ -107,7 +108,10 @@ CollationConnection=Collation utilis
 CollationConnectionComment=Veuillez choisir la collation que vous d�sirez choisir pour la cr�ation de la base de donn�es.<br/> Ce param�tre n'est pas s�lectionnable si votre base est d�j� cr��e.
 CharacterSetDatabase=Codage utilis� pour la base de donn�es
 CharacterSetDatabaseComment=Veuillez choisir le codage que vous d�sirez choisir pour la cr�ation de la base de donn�es.<br/> Ce param�tre n'est pas s�lectionnable si votre base est d�j� cr��e.
+YouAskDatabaseCreationSoDolibarrNeedToConnect=Vous avez demand� la cr�ation du login Dolibarr <b>%s</b>, mais pour cela, Dolibarr doit se connecter sur le serveur <b>%s</b> via le super utilisateur <b>%s</b>.
+BecauseConnectionFailedParametersMayBeWrong=La connexion ayant �chou�, les param�tres du serveur ou du super utilisateur sont peut-etre incorrects.
 
+					
 #########
 # upgrade
 #########
diff --git a/htdocs/lib/CMailFile.class.php b/htdocs/lib/CMailFile.class.php
index e752758c518..432c54b90e1 100644
--- a/htdocs/lib/CMailFile.class.php
+++ b/htdocs/lib/CMailFile.class.php
@@ -244,7 +244,8 @@ class CMailFile
     */
     function write_smtpheaders()
     {
-        $out = "";
+		global $conf;
+		$out = "";
 
 		// Sender
         //$out .= "X-Sender: ".getValidAddress($this->addr_from,2).$this->eol;
@@ -266,7 +267,7 @@ class CMailFile
        
         if ($this->msgishtml)
         {
-        	$out.= "Content-Type: text/html; charset=".$_SESSION['charset'].$this->eol;
+        	$out.= "Content-Type: text/html; charset=".$conf->charset_output.$this->eol;
         	$out.= "Content-Transfer-Encoding: 8bit".$this->eol;
         }
         else
diff --git a/htdocs/lib/databases/mysql.lib.php b/htdocs/lib/databases/mysql.lib.php
index 7e96da2c05a..0bb300db0d9 100644
--- a/htdocs/lib/databases/mysql.lib.php
+++ b/htdocs/lib/databases/mysql.lib.php
@@ -164,8 +164,9 @@ class DoliDb
 	// host, login ou password incorrect
 	$this->connected = 0;
 	$this->ok = 0;
+	$this->error=mysql_error();
 	dolibarr_syslog("DoliDB::DoliDB : Erreur Connect mysql_error=".mysql_error());
-      }
+	}
     
     // Si connexion serveur ok et si connexion base demand�e, on essaie connexion base
     if ($this->connected && $name)
diff --git a/htdocs/lib/databases/mysqli.lib.php b/htdocs/lib/databases/mysqli.lib.php
index 1f969e3fa5c..cbd583ead56 100644
--- a/htdocs/lib/databases/mysqli.lib.php
+++ b/htdocs/lib/databases/mysqli.lib.php
@@ -166,7 +166,8 @@ class DoliDb
             // host, login ou password incorrect
             $this->connected = 0;
             $this->ok = 0;
-            dolibarr_syslog("DoliDB::DoliDB : Erreur Connect");
+			$this->error=mysql_error();
+			dolibarr_syslog("DoliDB::DoliDB : Erreur Connect mysql_error=".mysql_error());
         }
 
         // Si connexion serveur ok et si connexion base demand�e, on essaie connexion base
diff --git a/htdocs/lib/functions.inc.php b/htdocs/lib/functions.inc.php
index e095a8a482e..7aa15409b60 100644
--- a/htdocs/lib/functions.inc.php
+++ b/htdocs/lib/functions.inc.php
@@ -1299,7 +1299,7 @@ function dolibarr_print_error($db='',$error='')
     if (! $langs)
     {
         require_once(DOL_DOCUMENT_ROOT ."/translate.class.php");
-        $langs = new Translate(DOL_DOCUMENT_ROOT ."/langs", "en_US");
+        $langs = new Translate(DOL_DOCUMENT_ROOT ."/langs", $conf);
     }
     $langs->load("main");
 
diff --git a/htdocs/livraison/fiche.php b/htdocs/livraison/fiche.php
index 0abc9386b1c..988ccd00c04 100644
--- a/htdocs/livraison/fiche.php
+++ b/htdocs/livraison/fiche.php
@@ -146,7 +146,7 @@ if ($_REQUEST['action'] == 'builddoc')	// En get ou en post
 
 	if ($_REQUEST['lang_id'])
 	{
-		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
+		$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
 		$outputlangs->setDefaultLang($_REQUEST['lang_id']);
 	}
 	$result=delivery_order_pdf_create($db, $_REQUEST['id'],$_REQUEST['model'],$outputlangs);
diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php
index 78e175ed6b2..f83aa2c3e6b 100644
--- a/htdocs/master.inc.php
+++ b/htdocs/master.inc.php
@@ -105,16 +105,22 @@ if ($dolibarr_main_db_encrypted_pass) $dolibarr_main_db_pass = dolibarr_decode($
 require_once(DOL_DOCUMENT_ROOT."/conf/conf.class.php");
 
 $conf = new Conf();
+// On defini tous les parametres de conf
 $conf->db->host   = $dolibarr_main_db_host;
 $conf->db->name   = $dolibarr_main_db_name;
 $conf->db->user   = $dolibarr_main_db_user;
 $conf->db->pass   = $dolibarr_main_db_pass;
+if (! isset($dolibarr_main_db_type) && ! $dolibarr_main_db_type) $dolibarr_main_db_type='mysql';   // Pour compatibilite avec anciennes configs, si non defini, on prend 'mysql'
 $conf->db->type   = $dolibarr_main_db_type;
-if (! $conf->db->type) { $conf->db->type = 'mysql'; }   // Pour compatibilite avec anciennes configs, si non defini, on prend 'mysql'
-// Defini prefix
-if (isset($_SERVER["LLX_DBNAME"])) $dolibarr_main_db_prefix=$_SERVER["LLX_DBNAME"];
+if (! isset($dolibarr_main_db_charset) && ! $dolibarr_main_db_charset) $dolibarr_main_db_charset='ISO-8859-1';   // Pour compatibilite avec anciennes configs, si non defini, on prend 'mysql'
+$conf->db->character_set=$dolibarr_main_db_charset;
+if (! isset($character_set_client) || ! $character_set_client) $character_set_client='ISO-8859-1';
+$conf->character_set_client=$character_set_client;
 if (! isset($dolibarr_main_db_prefix) || ! $dolibarr_main_db_prefix) $dolibarr_main_db_prefix='llx_'; 
 $conf->db->prefix = $dolibarr_main_db_prefix;
+
+// Defini prefix
+if (isset($_SERVER["LLX_DBNAME"])) $dolibarr_main_db_prefix=$_SERVER["LLX_DBNAME"];
 define('MAIN_DB_PREFIX',$dolibarr_main_db_prefix);
 
 // Detection browser
@@ -134,17 +140,7 @@ require_once(DOL_DOCUMENT_ROOT ."/lib/databases/".$conf->db->type.".lib.php");
  * Creation objet $langs
  */
 require_once(DOL_DOCUMENT_ROOT ."/translate.class.php");
-$langs = new Translate(DOL_DOCUMENT_ROOT ."/langs");
-
-/*
- *
- */
-require_once(DOL_DOCUMENT_ROOT ."/conf/conf.class.php");
-if ($character_set_client ){
-	$_SESSION['charset'] = $character_set_client;
-}else{
-	$_SESSION['charset'] =$langs->trans("charset");
-}
+$langs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);	// A mettre apres lecture de la conf
 
 /*
  * Creation objet $db
diff --git a/htdocs/translate.class.php b/htdocs/translate.class.php
index 1b0faac9c9d..27738a3782f 100644
--- a/htdocs/translate.class.php
+++ b/htdocs/translate.class.php
@@ -40,16 +40,22 @@ class Translate {
     var $tab_loaded=array();		// Tableau pour signaler les fichiers deja charg�s
     var $tab_translate=array();		// Tableau des traductions
 
-	var $charset='ISO-8859-1';		// Codage du contenu du fichier langue
+	var $charset_inputfile='ISO-8859-1';	// Codage du contenu du fichier langue
+	var $charset_output='ISO-8859-1';		// Codage par defaut de la sortie de la m�thode trans
 	
 
     /**
      *  \brief      Constructeur de la classe
      *  \param      dir             Repertoire racine des fichiers de traduction
+     *  \param      conf			Objet qui contient la config Dolibarr
      */
-    function Translate($dir = "")
+    function Translate($dir = "",$conf)
     {
-		$this->charset=$_SESSION['charset'];
+		// Si charset output defini
+		if (isset($conf->character_set_client) && $conf->character_set_client) 
+		{
+			$this->charset_output=$conf->character_set_client;
+		}
         $this->dir=$dir;
     }
 
@@ -183,7 +189,21 @@ class Translate {
                         if (! $this->getTransFromTab($key))
                         {
 	                        if (isset($tab[1])) $value=trim(ereg_replace('\\\n',"\n",$tab[1]));
-                        	$this->setTransFromTab($key,$value);
+							
+							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 == 'ISO-8859-1') $value=$value;
+	                        	if ($this->charset_inputfile == 'UTF-8')      $value=utf8_decode($value);
+					
+								$this->setTransFromTab($key,$value);
+							}
                         }
                     }
                 }
@@ -237,9 +257,7 @@ class Translate {
             $newstr=ereg_replace('"','__quot__',$newstr);
 
             // Cryptage en html de la chaine
-            $this->load("main");
-           $charset=sprintf($this->tab_translate["charset"]);
-            $newstr=htmlentities($newstr,ENT_QUOTES,$charset);
+            $newstr=htmlentities($newstr,ENT_QUOTES,$this->charset_output);
 
             // On restaure les tags HTML
             $newstr=ereg_replace('__lt__','<',$newstr);
@@ -315,7 +333,7 @@ class Translate {
     function lang_header()
     {
         //header("Content-Type: text/html; charset=$charset");
-        $texte = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=$this->charset\">\n";
+        $texte = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=".$this->charset_output."\">\n";
     
         return $texte;
     }
-- 
GitLab