Changeset 118339 in spip-zone


Ignore:
Timestamp:
Oct 29, 2019, 4:50:19 PM (5 months ago)
Author:
cedric@…
Message:

La methode traduire() de la classe generique TT_Traducteur peut prendre un tableau de texte en entree et gere en iterant ou en passant tel quel si le traducteur sait traduire un pool de textes d'un coup

File:
1 edited

Legend:

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

    r118334 r118339  
    1010        /** @var int Maximum de caractères traitables en un coup */
    1111        public $maxlen;
     12        /** @var bool Est-ce que le traducteur peut traiter un tableau de textes ou non ? */
     13        public $isArrayCapable;
    1214
    1315        /**
     
    2022
    2123        /**
    22          * @param $texte
     24         * @param string|string[] $texte
    2325         * @param string $destLang
    2426         * @param string $srcLang
    2527         * @param bool $throw
    26          * @return string
     28         * @return string|array
    2729         * @throws Exception
    2830         */
    2931        public function traduire($texte, $destLang = 'fr', $srcLang = 'en', $throw = false){
    30                 if (strlen(trim($texte))==0){
    31                         return '';
    32                 }
    33                 $len = mb_strlen($texte);
    34                 $extrait = mb_substr($texte, 0, 40);
    35                 spip_log('Trad:' . $this->type . ' ' . $len . 'c. : ' . $extrait . ($len>40 ? '...' : ''), 'translate' . _LOG_DEBUG);
     32                if (is_array($texte)) {
     33                        // si le traducteur ne sait pas faire, on itere sur le tableau
     34                        if (!$this->isArrayCapable) {
     35                                $ress = [];
     36                                $erreur = false;
     37                                foreach ($texte as $k=>$t) {
     38                                        if (!$erreur){
     39                                                $res = $this->traduire($t, $destLang, $srcLang, $throw);
     40                                                if ($res === false) {
     41                                                        $erreur = true;
     42                                                }
     43                                        }
     44                                        $ress[$k] = $res;
     45                                }
     46                                return $ress;
     47                        }
     48
     49                        $c = count($texte);
     50                        $len = array_sum(array_map('mb_strlen', $texte));
     51                        $extrait = mb_substr(reset($texte), 0, 40);
     52                        spip_log('Trad:' . $this->type . " array($c)" . $len . 'c. : ' . $extrait . ($len>40 ? '...' : ''), 'translate' . _LOG_DEBUG);
     53                }
     54                else {
     55                        if (strlen(trim($texte))==0){
     56                                return '';
     57                        }
     58                        $len = mb_strlen($texte);
     59                        $extrait = mb_substr($texte, 0, 40);
     60                        spip_log('Trad:' . $this->type . ' ' . $len . 'c. : ' . $extrait . ($len>40 ? '...' : ''), 'translate' . _LOG_DEBUG);
     61                }
    3662                $erreur = false;
    3763                $res = $this->_traduire($texte, $destLang, $srcLang, $erreur);
     
    5581        public $type = 'bing';
    5682        public $maxlen = 10000;
     83        public $isArrayCapable = false;
    5784
    5885        protected function _traduire($texte, $destLang, $srcLang, &$erreur){
     
    83110        public $type = 'deepl';
    84111        public $maxlen = 29000; // The request size should not exceed 30kbytes
     112        public $isArrayCapable = false;
    85113        protected $apiVersion = 2;
    86114
     
    110138        public $type = 'google';
    111139        public $maxlen = 4500;
     140        public $isArrayCapable = false;
    112141
    113142        protected function _traduire($texte, $destLang = 'fr', $srcLang = 'en', &$erreur){
     
    150179        public $type = 'yandex';
    151180        public $maxlen = 10000;
     181        public $isArrayCapable = false;
    152182
    153183        protected function _traduire($texte, $destLang = 'fr', $srcLang, &$erreur){
     
    192222        public $type = 'shell';
    193223        public $maxlen = 1000;
     224        public $isArrayCapable = false;
    194225
    195226        public function _traduire($texte, $destLang = 'fr', $srcLang = 'en', &$erreur){
Note: See TracChangeset for help on using the changeset viewer.