Changeset 71992 in spip-zone


Ignore:
Timestamp:
Apr 13, 2013, 9:51:34 AM (7 years ago)
Author:
eric@…
Message:

Suite du refactoring de la génération:

  • on supprime des modes 'nouveau' devenus inutiles car on inclut systématiquement le commentaire # NEW pour les nouveaux items par cohérence avec TradLang?.
  • on code le retour de la fonction traiter comme les autres formulaires
Location:
_plugins_/langonet/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/langonet/trunk/formulaires/langonet_generer.html

    r71991 r71992  
    22        <h3 class="titrem">[(#CHEMIN_IMAGE{#FORM.png}|balise_img{'',cadre-icone})]<:langonet:titre_form_generer:></h3>
    33
    4         [<p class='reponse_formulaire reponse_formulaire_ok'>(#ENV*{message_ok})</p>]
     4        [<p class='reponse_formulaire reponse_formulaire_ok'>(#ENV*{message_ok}|table_valeur{resume})</p>]
    55        [<p class='reponse_formulaire reponse_formulaire_erreur'>(#ENV*{message_erreur})</p>]
    66        <!-- <br class='bugajaxie' /> -->
  • _plugins_/langonet/trunk/formulaires/langonet_generer.php

    r71991 r71992  
    2424
    2525function formulaires_langonet_generer_traiter() {
    26         // Recuperation des champs du formulaire
    27         //   $module     -> prefixe du fichier de langue
    28         //                  'langonet' pour 'langonet_fr.php'
     26        // Recuperation des champs du formulaire :
     27        //   $module            -> prefixe du fichier de langue 'langonet' pour 'langonet_fr.php'
    2928        //                  parfois different du 'nom' du plugin
    30         //   $langue     -> index du nom de langue
    31         //                  'fr' pour 'langonet_fr.php'
    32         //   $ou_langue  -> chemin vers le fichier de langue à vérifier
    33         //                  'plugins/auto/langonet/lang'
     29        //   $langue_source     -> index du nom de langue 'fr' pour 'langonet_fr.php'
     30        //   $ou_langue         -> chemin vers le fichier de langue à vérifier 'plugins/auto/langonet/lang'
    3431        $retour_select_langue = explode(':', _request('fichier_langue'));
    3532        $module = $retour_select_langue[1];
     
    4138        // Generation du fichier toujours en UTF-8 aujourd'hui
    4239        $langonet_generer = charger_fonction('langonet_generer_fichier','inc');
    43         $retour = $langonet_generer($module, $langue_source, $ou_langue, $langue_cible, $mode, 'utf8');
     40        $resultats = $langonet_generer($module, $langue_source, $ou_langue, $langue_cible, $mode, 'utf8');
     41        if ($resultats['erreur']) {
     42                $retour['message_erreur'] = $resultats['erreur'];
     43        }
     44        else {
     45                $retour['message_ok']['fichier'] = $resultats['fichier'];
     46                $retour['message_ok']['resume'] = _T('langonet:message_ok_fichier_genere', array('langue' => $langue_cible, 'module' => $module, 'fichier' => $resultats['fichier']));
     47        }
    4448        $retour['editable'] = true;
    4549
  • _plugins_/langonet/trunk/inc/langonet_generer_fichier.php

    r62076 r71992  
    33if (!defined('_ECRIRE_INC_VERSION')) return;
    44
    5 define('_LANGONET_SIGNATURE', "// Ceci est un fichier langue de SPIP -- This is a SPIP language file");
    6 
    7 define('_LANGONET_DEFINITION_L', '<LANGONET_DEFINITION_L>');
    8 define('_LANGONET_DEFINITION_MANQUANTE', '<LANGONET_DEFINITION_MANQUANTE>');
    9 define('_LANGONET_DEFINITION_OBSOLETE', '<LANGONET_DEFINITION_OBSOLETE>');
     5if (!defined('_LANGONET_SIGNATURE'))
     6        define('_LANGONET_SIGNATURE', "// Ceci est un fichier langue de SPIP -- This is a SPIP language file");
     7
     8if (!defined('_LANGONET_DEFINITION_L'))
     9        define('_LANGONET_DEFINITION_L', '<LANGONET_DEFINITION_L>');
     10if (!defined('_LANGONET_DEFINITION_MANQUANTE'))
     11        define('_LANGONET_DEFINITION_MANQUANTE', '<LANGONET_DEFINITION_MANQUANTE>');
     12if (!defined('_LANGONET_DEFINITION_OBSOLETE'))
     13        define('_LANGONET_DEFINITION_OBSOLETE', '<LANGONET_DEFINITION_OBSOLETE>');
     14
     15if (!defined('_LANGONET_TAG_NOUVEAU'))
     16        define('_LANGONET_TAG_NOUVEAU', '# NEW');
     17if (!defined('_LANGONET_TAG_MODIFIE'))
     18        define('_LANGONET_TAG_MODIFIE', '# MODIF');
     19
    1020
    1121/**
     
    2131 * @return
    2232 */
    23 function inc_langonet_generer_fichier($module, $langue_source, $ou_langue, $langue_cible='en', $mode='index', $encodage='utf8', $oublis_inutiles=array()) {
     33function inc_langonet_generer_fichier($module, $langue_source, $ou_langue, $langue_cible='en', $mode='valeur', $encodage='utf8', $oublis_inutiles=array()) {
     34
     35        // Initialisation du tableau des resultats
     36        // Si une erreur se produit lors du deroulement de la fonction, le tableau contient le libelle
     37        // de l'erreur dans $resultats['erreur'].
     38        // Sinon, cet index n'existe pas
     39        $resultats = array();
     40
     41        // On charge le fichier de langue source si il existe dans l'arborescence $ou_langue
     42        // (evite le mecanisme standard de surcharge SPIP)
    2443        include_spip('inc/traduire');
    25         $bandeau = '';
    26         $var_source = "i18n_".$module."_".$langue_source;
    27         $source = _DIR_RACINE.$ou_langue.$module.'_'.$langue_source.'.php';
     44        $var_source = "i18n_" . $module . "_" . $langue_source;
    2845        // Trouver dans quel cas ce fichier n'a pas deja ete inclus a ce stade
    2946        if (empty($GLOBALS[$var_source])) {
    30                 if (!file_exists($source = _DIR_RACINE.$ou_langue.$module.'_'.$langue_source.'.php'))
    31                         return array('message_erreur' =>  _T('langonet:message_nok_fichier_langue',  array('langue' => $langue_source, 'module' => $module, 'dossier' => $ou_langue)));
    32 
    33                 $GLOBALS['idx_lang'] = $var_source;     
     47                if (!file_exists($source = _DIR_RACINE . $ou_langue . $module . '_' . $langue_source . '.php'))
     48                        return array('erreur' =>  _T('langonet:message_nok_fichier_langue',  array('langue' => $langue_source, 'module' => $module, 'dossier' => $ou_langue)));
     49                $GLOBALS['idx_lang'] = $var_source;
    3450                include($source);
    3551        }
    36         // Recuperer le bandeau d'origine si present.
    37         if ($file = file($source)) {
    38                 array_shift($file); // saute < ? php
    39                 foreach($file as $line) {
    40                         $bandeau .= $line;
    41                         if (strpos($line, _LANGONET_SIGNATURE) !== false)
    42                           {$file = ''; break;}
    43                 }
    44                 if ($file) $bandeau = '';
    45         }
    46 
    47         $var_cible = "i18n_".$module."_".$langue_cible;
     52
     53        // Récupérer le bandeau d'origine si il existe.
     54        // Le bandeau est composé des lignes qui précèdent la signature habituelle
     55        $bandeau = '';
     56        if ($tableau = file($source)) {
     57                array_shift($tableau); // saute < ? php
     58                $signature_trouvee = false;
     59                foreach($tableau as $_ligne) {
     60                        $bandeau .= $_ligne;
     61                        if (strpos($_ligne, _LANGONET_SIGNATURE) !== false) {
     62                                $signature_trouvee = true;
     63                                break;
     64                        }
     65                }
     66                if (!$signature_trouvee)
     67                        $bandeau = '';
     68        }
     69
     70        // On charge le fichier de langue cible si il existe dans l'arborescence $ou_langue
     71        $var_cible = "i18n_" . $module . "_" . $langue_cible;
    4872        if (empty($GLOBALS[$var_cible])) {
    49                 if (file_exists($cible = _DIR_RACINE.$ou_langue.$module.'_'.$langue_cible.'.php')) {
     73                if (file_exists($cible = _DIR_RACINE . $ou_langue . $module . '_' . $langue_cible . '.php')) {
    5074                        $GLOBALS['idx_lang'] = $var_cible;
    5175                        include($cible);
     
    5377        }
    5478
    55         $source = langonet_generer_couples($module, $var_source, $var_cible, $mode, $encodage, $oublis_inutiles);
    56 
     79        // Créer la liste des items du fichier cible sous la forme d'un tableau (raccourci, traduction)
     80        $source = langonet_generer_items_cible($module, $var_source, $var_cible, $mode, $encodage, $oublis_inutiles);
     81
     82        // Ecriture du fichier de langue à partir de la liste des items cible
    5783        $dir = sous_repertoire(_DIR_TMP,"langonet");
    5884        $dir = sous_repertoire($dir,"generation");
    59         $bandeau .= "// Produit automatiquement par le plugin LangOnet a partir de la langue source $langue_source";
     85        $bandeau .= "// Produit automatiquement par le plugin LangOnet à partir de la langue source $langue_source";
    6086        $ok = ecrire_fichier_langue_php($dir, $langue_cible, $module, $source, $bandeau);
    6187
    6288        if (!$ok) {
    63                 $resultats['message_erreur'] = _T('langonet:message_nok_ecriture_fichier', array('langue' => $langue_cible, 'module' => $module));
     89                $resultats['erreur'] = _T('langonet:message_nok_ecriture_fichier', array('langue' => $langue_cible, 'module' => $module));
    6490        }
    6591        else {
    6692                $resultats['fichier'] = $ok;
    67                 $resultats['message_ok'] = _T('langonet:message_ok_fichier_genere', array('langue' => $langue_cible, 'module' => $module, 'fichier' => $ok));
    68         }
     93        }
     94
    6995        return $resultats;
    7096}
    7197
    72 function langonet_generer_couples($module, $var_source, $var_cible, $mode='index', $encodage='utf8', $oublis_inutiles=array()) {
    73         if ($encodage == 'utf8') include_spip('inc/langonet_utils');
     98
     99/**
     100 * @param string $module
     101 * @param array $var_source
     102 * @param array $var_cible
     103 * @param string $mode
     104 * @param string $encodage
     105 * @param array $oublis_inutiles
     106 * @return array
     107 */
     108function langonet_generer_items_cible($module, $var_source, $var_cible, $mode='index', $encodage='utf8', $oublis_inutiles=array()) {
     109        if ($encodage == 'utf8')
     110                include_spip('inc/langonet_utils');
    74111
    75112        // On recupere les items du fichier de langue si celui ci n'est pas vide
    76113        $source = $GLOBALS[$var_source] ? $GLOBALS[$var_source] : array();
    77114
    78         // Si on demande de generer le fichier corrige
    79         // alors on fournit la liste des items a ajouter
     115        // Si on demande de generer le fichier corrige alors on fournit la liste des items à ajouter ou supprimer
    80116        $source = ($mode == 'oublie' OR $mode == 'fonction_l') ? array_merge($source, $oublis_inutiles) : $source;
    81         if ($mode != 'inutile') $oublis_inutiles = array();
     117        if ($mode != 'inutile')
     118                $oublis_inutiles = array();
     119
    82120        foreach ($source as $_item => $_valeur) {
    83121                $texte = @$GLOBALS[$var_cible][$_item];
    84122                if ($texte) {
    85                         $comm = in_array($_item, $oublis_inutiles);
     123                        $avec_commentaire = in_array($_item, $oublis_inutiles);
    86124                }
    87125                else {
    88                         $comm = false;
     126                        $avec_commentaire = false;
    89127                        if ($mode != 'pas_item') {
    90                                 if ($mode == 'new')
    91                                         $texte = '<NEW>';
    92                                 else if ($mode == 'new_index')
    93                                         $texte = '<NEW>'.$_item;
    94                                 else if ($mode == 'new_valeur')
    95                                         $texte = '<NEW>'.$_valeur;
    96                                 else if ($mode == 'valeur')
    97                                         $texte = $_valeur;
     128                                if ($mode == 'valeur')
     129                                        $texte = _LANGONET_TAG_NOUVEAU . $_valeur;
    98130                                else if ($mode == 'vide')
    99                                         $texte = '';
     131                                        $texte = _LANGONET_TAG_NOUVEAU;
    100132                                else if (($mode == 'fonction_l') OR (($mode == 'oublie') AND $_valeur))
    101133                                        $texte = array(_LANGONET_DEFINITION_L, preg_replace("/'[$](\w+)'/", '\'@\1@\'', $_valeur), $mode);
    102134                                else if ($mode !== 'oublie')
    103                                         $texte = $_item;
     135                                        $texte = _LANGONET_TAG_NOUVEAU . $_item;
    104136                                else if (preg_match('/^[a-z]+$/i', $_item))
    105137                                        $texte = $_item;
     
    107139                        }
    108140                }
    109                 if ($encodage == 'utf8') $texte = entite2utf($texte);
    110                 $source[$_item] = $comm ? array(_LANGONET_DEFINITION_OBSOLETE, $texte, $mode) : $texte;
    111         }
     141                if ($encodage == 'utf8')
     142                        $texte = entite2utf($texte);
     143                $source[$_item] = $avec_commentaire ? array(_LANGONET_DEFINITION_OBSOLETE, $texte, $mode) : $texte;
     144        }
     145
    112146        return $source;
    113147}
    114148
    115 // Produit un fichier de langue a partir d'un tableau (index => trad)
    116 // Si trad n'est pas une chaine mais un tableau, on le met en commentaire
    117 
    118 function produire_fichier_langue($langue, $module, $items, $producteur='')
    119 {
     149
     150/**
     151 * Produit un fichier de langue a partir d'un tableau (index => trad)
     152 * Si la traduction n'est pas une chaine mais un tableau, on inclut un commentaire
     153 *
     154 * @param $langue
     155 * @param $module
     156 * @param $items
     157 * @param string $producteur
     158 * @return string
     159 */
     160function produire_fichier_langue($langue, $module, $items, $producteur='') {
    120161        ksort($items);
    121162        $initiale = '';
    122163        $contenu = array();
    123         foreach($items as $k => $v) {
    124                 if ($initiale != strtoupper($k[0])) {
    125                         $initiale = strtoupper($k[0]);
     164        foreach($items as $_item => $_traduction) {
     165                if ($initiale != strtoupper($_item[0])) {
     166                        $initiale = strtoupper($_item[0]);
    126167                        $contenu[]= "\n// $initiale";
    127168                }
    128                 if (!is_string($v)) {
    129                         $t = str_replace("'", '\\\'', $v[1]);
    130                         if ($v[2] == 'inutile')
    131                                 $contenu[]= "/*\t" . $v[0] ."\n\t'$k' => '$t',*/";
     169                if (!is_string($_traduction)) {
     170                        $t = str_replace("'", '\\\'', $_traduction[1]);
     171                        if ($_traduction[2] == 'inutile')
     172                                $contenu[]= "/*\t" . $_traduction[0] ."\n\t'$_item' => '$t',*/";
    132173                        else {
    133                                 $com = !$v[0] ? '' : ("/*\t". $v[0] ." */\n");
    134                                 $contenu[]= "$com\t'$k' => '$t',";
     174                                $com = !$_traduction[0] ? '' : ("/*\t". $_traduction[0] ." */\n");
     175                                $contenu[]= "$com\t'$_item' => '$t',";
    135176                        }
    136                 } else {
    137                         $t = str_replace("'", '\\\'', $v);
     177                }
     178                else {
     179                        $t = str_replace("'", '\\\'', $_traduction);
    138180                        $t = str_replace('\\\\n', "' . \"\\n\" .'", $t);
    139                         $contenu[]= "\t'$k' => '$t',";
     181                        $t = str_replace(_LANGONET_TAG_NOUVEAU, '', $t, $c);
     182                        $contenu[]= "\t'$_item' => '$t'," . ($c>0 ? ' ' . _LANGONET_TAG_NOUVEAU : '');
    140183                }
    141184        }
     
    143186                $producteur = "\n" . _LANGONET_SIGNATURE . "\n" . preg_replace(",\\n[/#]*,", "\n/// ", $producteur);
    144187
    145         return '<'. "?php\n" . $producteur . '
     188        return '<'. "?php\n" .
     189$producteur . '
    146190// Module: ' . $module . '
    147191// Langue: ' . $langue . '
     
    157201}
    158202
    159 // Fonction aussi pour Plugonet
    160 function ecrire_fichier_langue_php($dir, $langue, $module, $items, $producteur='')
    161 {
    162         $nom = $dir . $module . "_" . $langue   . '.php';
     203
     204/**
     205 * Ecriture d'un fichier de langue à partir de la liste de ces couples (item, traduction)
     206 * et de son bandeau d'information
     207 * Cette fonction est aussi utilisée par PlugOnet
     208 *
     209 * @param $dir
     210 * @param $langue
     211 * @param $module
     212 * @param $items
     213 * @param string $producteur
     214 * @return bool|string
     215 */
     216function ecrire_fichier_langue_php($dir, $langue, $module, $items, $producteur='') {
     217        $nom_fichier = $dir . $module . "_" . $langue   . '.php';
    163218        $contenu = produire_fichier_langue($langue, $module, $items, $producteur);
    164         return ecrire_fichier($nom, $contenu) ? $nom : false;
     219
     220        return ecrire_fichier($nom_fichier, $contenu) ? $nom_fichier : false;
    165221}
    166222?>
Note: See TracChangeset for help on using the changeset viewer.