Changeset 118341 in spip-zone


Ignore:
Timestamp:
Oct 29, 2019, 4:50:21 PM (7 weeks ago)
Author:
cedric@…
Message:

gestion de la traduction de tableau avec deepL et gestion plus propre du cas particulier du tableau de 1 texte

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/traduire_texte/trunk/inc/traducteurs.php

    r118339 r118341  
    3030         */
    3131        public function traduire($texte, $destLang = 'fr', $srcLang = 'en', $throw = false){
     32                $log = 'Trad:' . $this->type;
    3233                if (is_array($texte)) {
    33                         // si le traducteur ne sait pas faire, on itere sur le tableau
    34                         if (!$this->isArrayCapable) {
     34                        // si le traducteur ne sait pas faire ou que ca ne sera pas plus rapide, on itere sur le tableau
     35                        if (!$this->isArrayCapable or count($texte) == 1) {
    3536                                $ress = [];
    3637                                $erreur = false;
     
    4849
    4950                        $c = count($texte);
     51                        $log .= " array($c)";
    5052                        $len = array_sum(array_map('mb_strlen', $texte));
    5153                        $extrait = mb_substr(reset($texte), 0, 40);
    52                         spip_log('Trad:' . $this->type . " array($c)" . $len . 'c. : ' . $extrait . ($len>40 ? '...' : ''), 'translate' . _LOG_DEBUG);
    5354                }
    5455                else {
     
    5859                        $len = mb_strlen($texte);
    5960                        $extrait = mb_substr($texte, 0, 40);
    60                         spip_log('Trad:' . $this->type . ' ' . $len . 'c. : ' . $extrait . ($len>40 ? '...' : ''), 'translate' . _LOG_DEBUG);
    61                 }
     61                }
     62                spip_log($log . ' ' . $len . 'c. : ' . $extrait . ($len>40 ? '...' : ''), 'translate' . _LOG_DEBUG);
     63
    6264                $erreur = false;
    6365                $res = $this->_traduire($texte, $destLang, $srcLang, $erreur);
     
    110112        public $type = 'deepl';
    111113        public $maxlen = 29000; // The request size should not exceed 30kbytes
    112         public $isArrayCapable = false;
     114        public $isArrayCapable = true;
    113115        protected $apiVersion = 2;
    114116
     
    119121                        $deepl   = new BabyMarkt\DeepL\DeepL($this->apikey, $this->apiVersion);
    120122                        $tagHandling = [];
    121                         if (strpos($texte, "</") !== false and preg_match(",</\w+>,ms", $texte)) {
    122                                 $tagHandling = ['xml'];
     123                        foreach (is_array($texte)?$texte:[$texte] as $t) {
     124                                if (strpos($t, "</") !== false and preg_match(",</\w+>,ms", $t)) {
     125                                        $tagHandling = ['xml'];
     126                                        break;
     127                                }
    123128                        }
    124129                        $traduction = $deepl->translate($texte, $srcLang, $destLang, $tagHandling);
     130                        if (is_array($texte)) {
     131                                if (count($texte) == 1 and is_string($traduction)) {
     132                                        $traduction = array_combine(array_keys($texte), [$traduction]);
     133                                }
     134                                else {
     135                                        $traduction = array_combine(array_keys($texte), array_column($traduction, 'text'));
     136                                }
     137                        }
    125138                } catch (Exception $e) {
    126139                        $erreur = $e->getMessage();
Note: See TracChangeset for help on using the changeset viewer.