Changeset 118316 in spip-zone


Ignore:
Timestamp:
Oct 28, 2019, 3:50:13 PM (5 months ago)
Author:
cedric@…
Message:

une option throw sur la fonction traduire() qui permet de recuperer l'erreur dans une exception
+ on unifie la gestion d'erreur dans les fonctions _traduire()
+ on utilise l'option throw sur le formulaire pour faire une remontee d'erreur parlante

Location:
_plugins_/traduire_texte/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/traduire_texte/trunk/formulaires/traduire_texte.php

    r105923 r118316  
    5555        $langue_traduction = _request('langue_traduction');
    5656
    57         $trad = traduire($source, $langue_traduction, $langue_source);
    58 
    59         if (!$trad) {
    60                 $res['message_erreur'] = 'Une erreur est survenue pour calculer la traduction';
     57        try {
     58                $trad = traduire($source, $langue_traduction, $langue_source, ['throw' => true]);
     59                if (!$trad) {
     60                        $res['message_erreur'] = 'Une erreur inconnue est survenue pendant le calcul de la traduction';
     61                        return $res;
     62                }
     63        }
     64        catch (Exception $e) {
     65                $res['message_erreur'] = 'Une erreur est survenue pour calculer la traduction :'
     66                        . '<br />'
     67                        . $e->getMessage();
    6168                return $res;
    6269        }
  • _plugins_/traduire_texte/trunk/inc/traduire_texte.php

    r118315 r118316  
    1919        }
    2020
    21         public function traduire($texte, $destLang = 'fr', $srcLang = 'en'){
     21        /**
     22         * @param $texte
     23         * @param string $destLang
     24         * @param string $srcLang
     25         * @param bool $throw
     26         * @return string
     27         * @throws Exception
     28         */
     29        public function traduire($texte, $destLang = 'fr', $srcLang = 'en', $throw = false){
    2230                if (strlen(trim($texte))==0){
    2331                        return '';
     
    2533                $len = mb_strlen($texte);
    2634                $extrait = mb_substr($texte, 0, 40);
    27                 spip_log('Trad:' . $this->type . ' ' . $len . 'c. : ' . $extrait . ($len>40 ? '...' : ''), 'translate');
    28                 return $this->_traduire($texte, $destLang, $srcLang);
    29         }
    30 
    31         abstract protected function _traduire($texte, $destLang, $srcLang);
     35                spip_log('Trad:' . $this->type . ' ' . $len . 'c. : ' . $extrait . ($len>40 ? '...' : ''), 'translate' . _LOG_DEBUG);
     36                $erreur = false;
     37                $res = $this->_traduire($texte, $destLang, $srcLang, $erreur);
     38                if ($erreur) {
     39                        spip_log($erreur, 'translate' . _LOG_ERREUR);
     40                        if ($throw) {
     41                                throw new \Exception($erreur);
     42                        }
     43                }
     44
     45                return $res;
     46        }
     47
     48        abstract protected function _traduire($texte, $destLang, $srcLang, &$erreur);
    3249}
    3350
     
    3956        public $maxlen = 10000;
    4057
    41         protected function _traduire($texte, $destLang, $srcLang){
     58        protected function _traduire($texte, $destLang, $srcLang, &$erreur){
    4259                // Bon sang, si tu n'utilises pas .NET, ce truc est documenté par les corbeaux
    4360                // attaquer le machin en SOAP (la méthode HTTP ne convient que pour des textes très courts (GET, pas POST)
     
    5269                        $translation = $client->translate($params);
    5370                } catch (Exception $e) {
    54                         spip_log($e->getMessage(), 'translate');
     71                        $erreur = $e->getMessage();
    5572                        return false;
    5673                }
     
    6784        public $maxlen = 4500;
    6885
    69         protected function _traduire($texte, $destLang = 'fr', $srcLang = 'en'){
     86        protected function _traduire($texte, $destLang = 'fr', $srcLang = 'en', &$erreur){
    7087                $destLang = urlencode($destLang);
    7188                $srcLang = urlencode($srcLang);
     
    91108
    92109                if (isset($json["error"])){
    93                         spip_log($json, 'translate');
     110                        spip_log($json, 'translate' . _LOG_DEBUG);
     111                        $erreur = "Erreur " . $json["error"]['code'] . ": " . $json["error"]['message'];
    94112                        return false;
    95113                }
     
    106124        public $maxlen = 10000;
    107125
    108         protected function _traduire($texte, $destLang = 'fr', $srcLang){
     126        protected function _traduire($texte, $destLang = 'fr', $srcLang, &$erreur){
    109127                $destLang = urlencode($destLang);
    110128                //yandex peut deviner la langue source
     
    134152
    135153                if (isset($json['code']) && $json['code']>200){
    136                         spip_log($json, 'translate');
     154                        spip_log($json, 'translate' . _LOG_DEBUG);
     155                        $erreur = "Erreur " . $json['code'] . ": " . $json['message'];
    137156                        return false;
    138157                }
     
    147166        public $maxlen = 1000;
    148167
    149         public function _traduire($texte, $destLang = 'fr', $srcLang = 'en'){
     168        public function _traduire($texte, $destLang = 'fr', $srcLang = 'en', &$erreur){
    150169                if (!defined('_TRANSLATESHELL_CMD')){
    151                         spip_log('chemin de Translate shell non défini', 'translate.' . _LOG_ERREUR);
     170                        $erreur = "chemin de Translate shell non défini";
    152171                        return false;
    153172                }
     173
    154174                return $this->translate_line($texte, $destLang);
    155175
     
    348368 * @param string $srcLang
    349369 * @param array $options {
     370 *   @var bool $raw
     371 *         Retourne un tableau des couples [ hash => [source, trad, new(bool)] ]
     372 *   @var bool $throw
     373 *         Lancer une exception en cas d'erreur
     374 * }
    350375 * @return string|false|array
    351  * @var bool $raw
    352  *         Retourne un tableau des couples [ hash => [source, trad, new(bool)] ]
    353  * }
     376 * @throws Exception
    354377 */
    355378function traduire($texte, $destLang = 'fr', $srcLang = 'en', $options = array()){
     
    381404        }
    382405
     406        $throw = ((isset($options['throw']) and $options['throw']) ? true : false);
     407
    383408        $todo = array_filter($traductions, 'is_null');
    384409        $inserts = array();
     
    386411        foreach ($todo as $hash => $dummy){
    387412                $paragraphe = $hashes[$hash];
    388                 $trad = $traducteur->traduire($paragraphe, $destLang, $srcLang);
     413                $trad = $traducteur->traduire($paragraphe, $destLang, $srcLang, $throw);
    389414                if ($trad !== false){
    390415                        $traductions[$hash] = $trad;
Note: See TracChangeset for help on using the changeset viewer.