';
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 8b9a06e431d..d1d7a0988c5 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -31,6 +31,7 @@ System=System
SystemInfo=System informations
Yes=Yes
No=No
+AutoDetectLang=Autodetect (browser language)
Rights=Permissions
BoxesDesc=Boxes are screen area that show some informations on some pages. You can choose between showing or not a such box by selecting target page en clicking 'Activate', or by clicking the dustbin to disable it. Only boxes about enabled modules are shown.
ModulesDesc=Dolibarr modules define which functionality is enabled in software. Some modules require permissions you must grant to users, after enabling module.
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 0430b63167c..6d2d0f4b60b 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -31,6 +31,7 @@ System=Syst
SystemInfo=Infos Système
Yes=Oui
No=Non
+AutoDetectLang=Detection auto (langue navigateur)
Rights=Permissions
BoxesDesc=Les boîtes sont des zones d'information réduites qui s'affichent sur certaines pages. Vous pouvez choisir ou non d'activer une boîte en sélectionnant la page cible et en cliquant sur 'Activer', ou en cliquant sur la poubelle pour la désactiver. Seules les boîtes en rapport avec un module actif sont présentées.
ModulesDesc=Les modules Dolibarr définissent les fonctionnalités disponibles dans l'application. Certains modules nécessitent des droits qu'il vous faudra affecter aux utilisateurs pour qu'ils puissent accéder à leurs fonctionnalités.
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index c15c268d2c5..81fc1e527b3 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -3,7 +3,7 @@
* Copyright (C) 2003 Xavier Dutoit
* Copyright (C) 2004-2005 Laurent Destailleur
* Copyright (C) 2004 Sebastien Di Cintio
- * Copyright (C) 2004 Benoit Mortier
+ * Copyright (C) 2004 Benoit Mortier
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/htdocs/translate.class.php b/htdocs/translate.class.php
index a94de46ad6e..3f833916daa 100644
--- a/htdocs/translate.class.php
+++ b/htdocs/translate.class.php
@@ -42,22 +42,27 @@ class Translate {
/**
* \brief Constructeur de la classe
- * \param dir repertoire racine des fichiers de traduction
- * \param defaultlang langue par defaut à utiliser
+ * \param dir Repertoire racine des fichiers de traduction
+ * \param defaultlang Langue par defaut à utiliser
*/
-
- function Translate($dir = "", $defaultlang = "") {
+ function Translate($dir = "", $defaultlang = "")
+ {
$this->dir=$dir;
- $this->defaultlang=$defaultlang;
+ if ($defaultlang == 'auto')
+ {
+ $listlang=split('[,;]',$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
+ $defaultlang=ereg_replace('-','_',$listlang[0]);
+ }
+ if (strlen($defaultlang) <= 3) $defaultlang=$defaultlang."_".$defaultlang;
+ $this->defaultlang=strtolower($defaultlang);
}
/**
* \brief Charge en mémoire le tableau de traduction pour un domaine particulier
* Si le domaine est deja chargé, la fonction ne fait rien
* \param domain Nom du domain (fichier lang) à charger
- * \param alt Charge le fichier alternatif meme si fichier dans la langue est trouvé
+ * \param alt Utilise le fichier alternatif meme si fichier dans la langue est trouvée
*/
-
function Load($domain,$alt=0)
{
if (isset($this->tab_loaded[$domain]) && $this->tab_loaded[$domain]) { return; } // Le fichier de ce domaine est deja chargé
@@ -65,47 +70,52 @@ class Translate {
// Repertoire de traduction
$scandir = $this->dir."/".$this->defaultlang;
$file_lang = $scandir . "/$domain.lang";
+ $filelangexists=is_file($file_lang);
- if ($alt || ! is_file($file_lang)) {
+ if ($alt || ! $filelangexists)
+ {
// Repertoire de la langue alternative
if ($this->defaultlang != "en_US") $scandiralt = $this->dir."/en_US";
else $scandiralt = $this->dir."/fr_FR";
$file_lang = $scandiralt . "/$domain.lang";
+ $filelangexists=is_file($file_lang);
$alt=1;
}
- $i = 0;
- if(is_file($file_lang)) {
- if($fp = @fopen($file_lang,"rt")){
+ if ($filelangexists)
+ {
+ if($fp = @fopen($file_lang,"rt"))
+ {
$finded = 0;
- while (($ligne = fgets($fp,4096)) && ($finded == 0)){
- if ($ligne[0] != "\n" && $ligne[0] != " " && $ligne[0] != "#") {
+ while (($ligne = fgets($fp,4096)) && ($finded == 0))
+ {
+ if ($ligne[0] != "\n" && $ligne[0] != " " && $ligne[0] != "#")
+ {
$tab=split('=',$ligne,2);
//print "Domain=$domain, found a string for $tab[0] with value $tab[1] ";
- if (! isset($this->tab_translate[$tab[0]])) $this->tab_translate[$tab[0]]=trim($tab[1]);
+ if (! isset($this->tab_translate[$tab[0]])) $this->tab_translate[$tab[0]]=trim(isset($tab[1])?$tab[1]:'');
}
}
fclose($fp);
// 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");
$this->load($domain,1);
}
$this->tab_loaded[$domain]=1; // Marque ce fichier comme chargé
}
-
}
-
}
/**
* \brief Retourne la liste des domaines chargées en memoire
* \return array Tableau des domaines chargées
*/
-
- function list_domainloaded() {
+ function list_domainloaded()
+ {
return join(",",array_keys($this->tab_loaded));
}
@@ -120,8 +130,8 @@ class Translate {
* \param param3 chaine de param1
* \return string chaine traduite
*/
-
- function trans($str, $param1='', $param2='', $param3='') {
+ function trans($str, $param1='', $param2='', $param3='')
+ {
return $this->transnoentities($str,htmlentities($param1),htmlentities($param2),htmlentities($param3));
}
diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php
index b37c6d30a98..d3baddb5d36 100644
--- a/htdocs/user/param_ihm.php
+++ b/htdocs/user/param_ihm.php
@@ -142,23 +142,23 @@ if ($_GET["action"] == 'edit')
$var=true;
print '