Changeset 93093 in spip-zone


Ignore:
Timestamp:
Nov 22, 2015, 9:04:13 PM (5 years ago)
Author:
eric@…
Message:

Correction de la fonction de merge des traductions.

Location:
_plugins_/taxonomie/trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/taxonomie/trunk/demo/taxonomie.html

    r92945 r93093  
    77<?php
    88    include_spip('services/itis/itis_api');
     9    include_spip('inc/filtres');
     10    include_spip('inc/taxonomer');
     11?>
     12
     13        <h1>TAXONOMER</h1>
     14
     15        <h2>Fonction : taxon_merger_traductions</h2>
     16        [(#VAL|tester_taxon_merger_traductions|propre)]
     17
     18        <h2>Fonction : extraire_multi</h2>
     19        [(#VAL|tester_extraire_multi|propre)]
     20<?php die(); ?>
     21
     22        <h2>Fonction : extraire_trads</h2>
     23<?php
     24        $multi = "<multi>[fr]en français</multi>";
     25        $ret = preg_match(_EXTRAIRE_MULTI, $multi, $match);
     26        var_dump($multi, $ret, gettype($ret), $match);
     27        die();
     28
     29        $multi = '';
     30        var_dump($multi, extraire_trads($multi));
     31
     32        $multi = 'sans langue';
     33        var_dump($multi, extraire_trads($multi));
     34
     35        $multi = '[fr]en français';
     36        var_dump($multi, extraire_trads($multi));
     37
     38        $multi = '[fr]en français[en]en anglais';
     39        var_dump($multi, extraire_trads($multi));
     40
     41        $multi = 'en defaut[fr]en français[en]en anglais';
     42        var_dump($multi, extraire_trads($multi));
    943?>
    1044
     
    88122        <h2>Action : read_hierarchy</h2>
    89123<?php
    90  $taxons = itis_read_hierarchy('fungi', 'genus', $sha);
    91  var_dump($taxons, $sha);
     124        $taxons = itis_read_hierarchy('fungi', 'genus', $sha);
     125        var_dump($taxons, $sha);
    92126?>
    93127
  • _plugins_/taxonomie/trunk/inc/taxonomer.php

    r93064 r93093  
    213213
    214214/**
    215  * Fusionne les traductions d'une balise `<multi>` source avec celles d'une autre balise `<multi>`.
    216  * Il est possible de considérer l'une ou l'autre balise comme prioritaire dans le cas où la même
     215 * Fusionne les traductions d'une balise `<multi>` avec celles d'une autre balise `<multi>`.
     216 * L'une des balise est considérée comme prioritaire ce qui permet de régler le cas où la même
    217217 * langue est présente dans les deux balises.
     218 * Si on ne trouve pas de balise `<multi>` dans l'un ou l'autre des paramètres, on considère que
     219 * le texte est tout même formaté de la façon suivante : texte0[langue1]texte1[langue2]texte2...
    218220 *
    219221 * @package SPIP\TAXONOMIE\OBJET
    220222 *
    221  * @param string        $nom_charge
    222  * @param string        $nom_edite
    223  * @param bool|true     $priorite_edition
     223 * @param string        $multi_prioritaire
     224 *              Balise multi considérée comme prioritaire en cas de conflit sur une langue.
     225 * @param string        $multi_non_prioritaire
     226 *              Balise multi considérée comme non prioritaire en cas de conflit sur une langue.
    224227 *
    225228 * @return string
    226  */
    227 function taxon_merger_traductions($nom_charge, $nom_edite, $priorite_edition=true) {
    228         $source = array();
    229         $destination = array();
    230         $nom_merge = '';
    231 
    232         // Suivant la priorite entre édition et chargement automatique on positionne la source
    233         // (priorite plus faible) et la destination (priorité plus haute)
    234         $nom_source = $nom_charge;
    235         $nom_destination = $nom_edite;
    236         if (!$priorite_edition) {
    237                 $nom_source = $nom_edite;
    238                 $nom_destination = $nom_charge;
    239         }
    240 
    241         // On extrait les noms par langue
     229 *              La chaine construite est toujours une balise `<multi>` complète ou une chaine vide sinon.
     230 */
     231function taxon_merger_traductions($multi_prioritaire, $multi_non_prioritaire) {
     232        $multi_merge = '';
     233
     234        // On extrait le contenu de la balise <multi> si elle existe.
    242235        include_spip('inc/filtres');
    243         if (preg_match(_EXTRAIRE_MULTI, $nom_source, $match)) {
    244                 $source = extraire_trads($match[1]);
    245         }
    246         if (preg_match(_EXTRAIRE_MULTI, $nom_destination, $match)) {
    247                 $destination = extraire_trads($match[1]);
    248         }
    249 
    250         // On complète la destination avec les noms de la source dont la langue n'est pas
    251         // présente dans la destination
    252         foreach ($source as $_lang => $_nom) {
    253                 if (!array_key_exists($_lang, $destination)) {
    254                         $destination[$_lang] = $_nom;
     236        $multi_prioritaire = trim($multi_prioritaire);
     237        $multi_non_prioritaire = trim($multi_non_prioritaire);
     238        if (preg_match(_EXTRAIRE_MULTI, $multi_prioritaire, $match)) {
     239                $multi_prioritaire = trim($match[1]);
     240        }
     241        if (preg_match(_EXTRAIRE_MULTI, $multi_non_prioritaire, $match)) {
     242                $multi_non_prioritaire = trim($match[1]);
     243        }
     244
     245        if ($multi_prioritaire) {
     246                if ($multi_non_prioritaire) {
     247                        // On extrait les traductions sous forme de tableau langue=>traduction.
     248                        $traductions_prioritaires = extraire_trads($multi_prioritaire);
     249                        $traductions_non_prioritaires = extraire_trads($multi_non_prioritaire);
     250
     251                        // On complète les traductions prioritaires avec les traductions non prioritaires dont la langue n'est pas
     252                        // présente dans les traductions prioritaires.
     253                        foreach ($traductions_non_prioritaires as $_lang => $_traduction) {
     254                                if (!array_key_exists($_lang, $traductions_prioritaires)) {
     255                                        $traductions_prioritaires[$_lang] = $_traduction;
     256                                }
     257                        }
     258
     259                        // On construit le contenu de la balise <multi> mergé à partir des traductions prioritaires mises à jour.
     260                        // Les traductions vides sont ignorées.
     261                        ksort($traductions_prioritaires);
     262                        foreach ($traductions_prioritaires as $_lang => $_traduction) {
     263                                if ($_traduction) {
     264                                        $multi_merge .= ($_lang ? '[' . $_lang . ']' : '') . trim($_traduction);
     265                                }
     266                        }
     267                } else {
     268                        $multi_merge = $multi_prioritaire;
    255269                }
    256         }
    257 
    258         // On construit le nom mergé à partir de la destination
    259         foreach ($destination as $_lang => $_nom) {
    260                 $nom_merge .= '[' . $_lang . ']' . $_nom;
    261         }
    262         $nom_merge = '<multi>' . $nom_merge . '</multi>';
    263 
    264         return $nom_merge;
     270        } else {
     271                $multi_merge = $multi_non_prioritaire;
     272        }
     273
     274        // Si le contenu est non vide on l'insère dans une balise <multi>
     275        if ($multi_merge) {
     276                $multi_merge = '<multi>' . $multi_merge . '</multi>';
     277        }
     278
     279        return $multi_merge;
    265280}
    266281
  • _plugins_/taxonomie/trunk/lang/taxonomie_fr.php

    r93087 r93093  
    6969        'onglet_gestion' => 'Gestion des règnes',
    7070        'onglet_configuration' => 'Configuration du plugin',
    71         'onglet_navigation' => 'Navigation dans la taxonomie',
     71        'onglet_navigation' => 'Navigation du règne au genre',
    7272
    7373        // S
Note: See TracChangeset for help on using the changeset viewer.