diff --git a/htdocs/html.formadmin.class.php b/htdocs/html.formadmin.class.php index e5f7673380cf0e146f890476d24dcadd9921f069..fa930f3d54275689555fe9af706c8387e9ae6714 100644 --- a/htdocs/html.formadmin.class.php +++ b/htdocs/html.formadmin.class.php @@ -52,7 +52,7 @@ class FormAdmin * \param htmlname Nom de la zone select * \param showauto Affiche choix auto */ - function select_lang($selected='',$htmlname='lang_id',$showauto=0) + function select_lang($selected='',$htmlname='lang_id',$showauto=0,$filter=0) { global $langs; @@ -66,23 +66,26 @@ class FormAdmin print '>'.$langs->trans("AutoDetectLang").'</option>'; } - sort($langs_available); - $num = count($langs_available); - $i = 0; - if ($num) + asort($langs_available); + + foreach ($langs_available as $key => $value) { - while ($i < $num) + if ($filter && is_array($filter)) { - if ($selected == $langs_available[$i]) + if ( ! array_key_exists($key, $filter)) { - print '<option value="'.$langs_available[$i].'" selected="true">'.$langs_available[$i].'</option>'; + print '<option value="'.$key.'">'.$value.'</option>'; } - else - { - print '<option value="'.$langs_available[$i].'">'.$langs_available[$i].'</option>'; - } - $i++; } + else if ($selected == $key) + { + print '<option value="'.$key.'" selected="true">'.$value.'</option>'; + } + else + { + print '<option value="'.$key.'">'.$value.'</option>'; + } + $i++; } print '</select>'; } diff --git a/htdocs/langs/en_US/languages.lang b/htdocs/langs/en_US/languages.lang new file mode 100644 index 0000000000000000000000000000000000000000..57c24d8a8b097ec079158f8e60e970037888d14c --- /dev/null +++ b/htdocs/langs/en_US/languages.lang @@ -0,0 +1,25 @@ +# Dolibarr language file - en_US - languages +CHARSET=UTF-8 + +Language_ar_AR=Arabe +Language_ca_ES=ca_ES ? +Language_da_DA=Danois +Language_de_DE=Allemand +Language_en_AU=English (Australie) +Language_en_GB=English (Royaume-Uni) +Language_en_US=English (Etats-Unis) +Language_es_ES=Espagnol +Language_fi_FI=Finois +Language_fr_BE=French (Belgique) +Language_fr_CA=French (Canada) +Language_fr_CH=French (Suisse) +Language_fr_FR=French +Language_it_IT=Italien +Language_nb_NO=Norvégien (Bokmal) +Language_nl_BE=Néerlandais (Belgique) +Language_nl_NL=Néerlandais (Pays-Bas) +Language_pl_PL=Polonais +Language_pt_BR=Portugais (Brésil) +Language_pt_PT=Portugais +Language_ro_RO=Roumain +Language_ru_RU=Russe \ No newline at end of file diff --git a/htdocs/langs/fr_FR/languages.lang b/htdocs/langs/fr_FR/languages.lang new file mode 100644 index 0000000000000000000000000000000000000000..28fc56658853f933e4f4988d156b84ba212613ea --- /dev/null +++ b/htdocs/langs/fr_FR/languages.lang @@ -0,0 +1,25 @@ +# Dolibarr language file - fr_FR - languages +CHARSET=UTF-8 + +Language_ar_AR=Arabe +Language_ca_ES=ca_ES ? +Language_da_DA=Danois +Language_de_DE=Allemand +Language_en_AU=Anglais (Australie) +Language_en_GB=Anglais (Royaume-Uni) +Language_en_US=Anglais (Etats-Unis) +Language_es_ES=Espagnol +Language_fi_FI=Finois +Language_fr_BE=Français (Belgique) +Language_fr_CA=Français (Canada) +Language_fr_CH=Français (Suisse) +Language_fr_FR=Français +Language_it_IT=Italien +Language_nb_NO=Norvégien (Bokmal) +Language_nl_BE=Néerlandais (Belgique) +Language_nl_NL=Néerlandais (Pays-Bas) +Language_pl_PL=Polonais +Language_pt_BR=Portugais (Brésil) +Language_pt_PT=Portugais +Language_ro_RO=Roumain +Language_ru_RU=Russe \ No newline at end of file diff --git a/htdocs/product.class.php b/htdocs/product.class.php index ad98b48095ed506fcf4946e688e5a02e97f12726..381a07eb087e4992bf50386bd6ef313276b354d5 100644 --- a/htdocs/product.class.php +++ b/htdocs/product.class.php @@ -580,14 +580,16 @@ class Product extends CommonObject $langs_available = $langs->get_available_languages(); $current_lang = $langs->getDefaultLang(); - foreach ($langs_available as $value) + foreach ($langs_available as $key => $value) { - $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."product_lang"; - $sql.= " WHERE fk_product=".$this->id." AND lang='".$value."'"; + $sql = "SELECT rowid"; + $sql.= " FROM ".MAIN_DB_PREFIX."product_lang"; + $sql.= " WHERE fk_product=".$this->id; + $sql.= " AND lang='".$key."'"; $result = $this->db->query($sql); - if ($value == $current_lang) + if ($key == $current_lang) { if ($this->db->num_rows($result)) // si aucune ligne dans la base { @@ -595,12 +597,12 @@ class Product extends CommonObject $sql2.= " SET label='".addslashes($this->libelle)."',"; $sql2.= " description='".addslashes($this->description)."',"; $sql2.= " note='".addslashes($this->note)."'"; - $sql2.= " WHERE fk_product=".$this->id." AND lang='".$value."'"; + $sql2.= " WHERE fk_product=".$this->id." AND lang='".$key."'"; } else { $sql2 = "INSERT INTO ".MAIN_DB_PREFIX."product_lang (fk_product, lang, label, description, note)"; - $sql2.= " VALUES(".$this->id.",'".$value."','". addslashes($this->libelle); + $sql2.= " VALUES(".$this->id.",'".$key."','". addslashes($this->libelle); $sql2.= "','".addslashes($this->description); $sql2.= "','".addslashes($this->note)."')"; } @@ -611,21 +613,21 @@ class Product extends CommonObject if ($this->db->num_rows($result)) // si aucune ligne dans la base { $sql2 = "UPDATE ".MAIN_DB_PREFIX."product_lang"; - $sql2.= " SET label='".addslashes($this->multilangs["$value"]["libelle"])."',"; - $sql2.= " description='".addslashes($this->multilangs["$value"]["description"])."',"; - $sql2.= " note='".addslashes($this->multilangs["$value"]["note"])."'"; - $sql2.= " WHERE fk_product=".$this->id." AND lang='".$value."'"; + $sql2.= " SET label='".addslashes($this->multilangs["$key"]["libelle"])."',"; + $sql2.= " description='".addslashes($this->multilangs["$key"]["description"])."',"; + $sql2.= " note='".addslashes($this->multilangs["$key"]["note"])."'"; + $sql2.= " WHERE fk_product=".$this->id." AND lang='".$key."'"; } else { $sql2 = "INSERT INTO ".MAIN_DB_PREFIX."product_lang (fk_product, lang, label, description, note)"; - $sql2.= " VALUES(".$this->id.",'".$value."','". addslashes($this->multilangs["$value"]["libelle"]); - $sql2.= "','".addslashes($this->multilangs["$value"]["description"]); - $sql2.= "','".addslashes($this->multilangs["$value"]["note"])."')"; + $sql2.= " VALUES(".$this->id.",'".$key."','". addslashes($this->multilangs["$key"]["libelle"]); + $sql2.= "','".addslashes($this->multilangs["$key"]["description"]); + $sql2.= "','".addslashes($this->multilangs["$key"]["note"])."')"; } // on ne sauvegarde pas des champs vides - if ( $this->multilangs["$value"]["libelle"] || $this->multilangs["$value"]["description"] || $this->multilangs["$value"]["note"] ) + if ( $this->multilangs["$key"]["libelle"] || $this->multilangs["$key"]["description"] || $this->multilangs["$key"]["note"] ) if (!$this->db->query($sql2)) return -1; } } @@ -642,8 +644,8 @@ class Product extends CommonObject $langs_available = $langs->get_available_languages(); if ( $langue != '') - foreach ($langs_available as $value) - if ( $value == $langue ) $current_lang = $value; // si $langue est une valeur correcte + foreach ($langs_available as $key => $value) + if ( $key == $langue ) $current_lang = $key; // si $langue est une valeur correcte if ( !$current_lang ) $current_lang = $langs->getDefaultLang(); // sinon on choisi la langue par defaut diff --git a/htdocs/product/traduction.php b/htdocs/product/traduction.php index 7ac362180e94786fc38cc5186f566a23b2420780..8ea6a566a922ab77212ba1710c776e76961ff98e 100644 --- a/htdocs/product/traduction.php +++ b/htdocs/product/traduction.php @@ -31,7 +31,7 @@ require_once(DOL_DOCUMENT_ROOT."/product.class.php"); require_once(DOL_DOCUMENT_ROOT."/html.formadmin.class.php"); $langs->load("products"); -$langs->load("bills"); +$langs->load("languages"); // Security check if (isset($_GET["id"]) || isset($_GET["ref"])) @@ -80,12 +80,12 @@ $_POST["cancel"] != $langs->trans("Cancel") && if ( $product->setMultiLangs() > 0 ) { $_GET["action"] = ''; - $mesg = 'Fiche mise � jour'; + $mesg = 'Fiche mise a jour'; } else { $_GET["action"] = 'add'; - $mesg = 'Fiche non mise � jour !' . "<br>" . $product->mesg_error; + $mesg = 'Fiche non mise a jour !' . "<br>" . $product->mesg_error; } } @@ -144,6 +144,8 @@ $titre=$langs->trans("CardProduct".$product->type); $picto=($product->type==1?'service':'product'); dol_fiche_head($head, 'translation', $titre, 0, $picto); +if ($mesg) print '<div class="error">'.$mesg.'</div>'; + print '<table class="border" width="100%">'; // Reference @@ -156,14 +158,14 @@ print '</table>'; if ($_GET["action"] == 'edit') { - print '<form action="" method="post">'; + print '<form action="" method="POST">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="action" value="vedit">'; print '<input type="hidden" name="id" value="'.$_GET["id"].'">'; foreach ( $product->multilangs as $key => $value) { - print "<br /><b><u>$key :</u></b><br />"; + print "<br /><b><u>".$langs->trans('Language_'.$key)." :</u></b><br />"; print '<table class="border" width="100%">'; print '<tr><td valign="top" width="15%">'.$langs->trans('Label').'</td><td><input name="libelle-'.$key.'" size="40" value="'.$product->multilangs[$key]["libelle"].'"></td></tr>'; print '<tr><td valign="top" width="15%">'.$langs->trans('Description').'</td><td>'; @@ -207,7 +209,7 @@ else foreach ( $product->multilangs as $key => $value) { $cnt_trans++; - print "<br /><b><u>$key :</u></b><br />"; + print "<br /><b><u>".$langs->trans('Language_'.$key)." :</u></b><br />"; print '<table class="border" width="100%">'; print '<tr><td width="15%">'.$langs->trans('Label').'</td><td>'.$product->multilangs[$key]["libelle"].'</td></tr>'; print '<tr><td width="15%">'.$langs->trans('Description').'</td><td>'.$product->multilangs[$key]["description"].'</td></tr>'; @@ -240,19 +242,8 @@ print "\n</div>\n"; /* * Formulaire d'ajout de traduction */ -if ($_GET["action"] == 'add' || ($user->rights->produit->creer || $user->rights->service->creer)) +if ($_GET["action"] == 'add' && ($user->rights->produit->creer || $user->rights->service->creer)) { - $langs_available = $langs->get_available_languages(); - $current_lang = $langs->getDefaultLang(); - - - // on construit la liste des traduction qui n'existe pas deja - $select = '<select class="flat" name="lang">'; - foreach ($langs_available as $value) - if ( !array_key_exists($value, $product->multilangs) ) // si la traduction n'existe pas - $select.= "<option value='$value'>$value</option>"; - $select.='</select>'; - print '<br>'; print '<form action="" method="post">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; @@ -260,7 +251,7 @@ if ($_GET["action"] == 'add' || ($user->rights->produit->creer || $user->rights- print '<input type="hidden" name="id" value="'.$_GET["id"].'">'; print '<table class="border" width="100%">'; print '<tr><td valign="top" width="15%">'.$langs->trans('Translation').'</td><td>'; - $formadmin->select_lang($fuser->conf->MAIN_LANG_DEFAULT,'lang',0); + $formadmin->select_lang('','lang',0,$product->multilangs); print '</td></tr>'; print '<tr><td valign="top" width="15%">'.$langs->trans('Label').'</td><td><input name="libelle" size="40"></td></tr>'; print '<tr><td valign="top" width="15%">'.$langs->trans('Description').'</td><td><textarea name="desc" rows="3" cols="80"></textarea></td></tr>'; diff --git a/htdocs/translate.class.php b/htdocs/translate.class.php index b2b4361de8b5572411515f8ce7985b64c34f2950..b9881812b7b395743934133a0789e71b8225c52c 100644 --- a/htdocs/translate.class.php +++ b/htdocs/translate.class.php @@ -521,13 +521,15 @@ class Translate { function get_available_languages($langdir=DOL_DOCUMENT_ROOT) { // We scan directory langs to detect available languages - $handle=opendir($langdir ."/langs"); + $handle=opendir($langdir."/langs"); $langs_available=array(); - while ($file = trim(readdir($handle))) + while ($dir = trim(readdir($handle))) { - if (preg_match('/^[a-z]+_[A-Z]+/i',$file)) + if (preg_match('/^[a-z]+_[A-Z]+/i',$dir)) { - array_push($langs_available,$file); + $this->load("languages"); + + $langs_available[$dir] = $this->trans('Language_'.$dir); } } return $langs_available;