Changeset 54366 in spip-zone


Ignore:
Timestamp:
Nov 13, 2011, 10:19:55 AM (8 years ago)
Author:
esj@…
Message:

langonet lorsqu'on a été contraint de prendre un md5 comme index, donner la valeur rejetée pour aider à trouver l'homonyme qui a provoqué le rejet: c'est souvent une différence minime (par exemple un "s" final) qui mérite harmonisation pour éviter de multiplier les textes à traduire.

Location:
_plugins_/langonet
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/langonet/formulaires/langonet_verifier.php

    r54338 r54366  
    55 *
    66 */
     7
     8// Il est anormal que cette variable puisse etre indefinie
     9if (!isset($GLOBALS['spip_display'])) $GLOBALS['spip_display'] = 'large';
    710
    811function formulaires_langonet_verifier_charger() {
     
    8588
    8689        // Traitement des resultats
    87         if ($resultats['erreur']) {
     90        if (isset($resultats['erreur'])) {
    8891                $retour['message_erreur'] = $resultats['erreur'];
    8992        }
     
    337340 */
    338341
    339 /// $type               => le type de resultats (non, non_mais, non_mais_nok, peut_etre)
    340 /// $tableau    => [item][fichier utilisant][num ligne][] => extrait ligne
    341 /// $extra              => [item][] => fichier de langue ou item est defini
    342 ///                             ou [codage(item)] => item, ou l'item est l'argument de _L()
    343 /// $f_coloriser        => la fonction de colorisation ou NULL si le plugin coloration_code n'est pas actif 
     342/// $type       => le type de resultats (non, non_mais, non_mais_nok, peut_etre)
     343/// $tableau    => [item][fichier utilisant][num ligne][] => resultats des preg_match
     344/// $extra      => [item][] => fichier de langue ou item est defini
     345///             ou [codage(item)] => item, ou l'item est l'argument de _L()
     346/// $f_coloriser=> la fonction de colorisation ou NULL si le plugin coloration_code n'est pas actif 
     347
    344348function afficher_lignes($type, $tableau, $extra=array(), $f_coloriser) {
    345349
    346350        include_spip('inc/layer');
    347351
    348         // Detail des fichiers utilisant les items de langue
    349352        ksort($tableau);
     353        foreach ($tableau as $k => $v) {
     354                $occ = langonet_lister_occ($type, $k, $v, $extra, $f_coloriser);
     355                $brut = preg_match('/^(.*)[{].*[}]$/', $k, $m) ? $m[1]:$k;
     356                $tableau[$k] = bouton_block_depliable($brut, false) .
     357                        debut_block_depliable(false) .
     358                        $occ .
     359                        fin_block();
     360        }
     361        return join('', $tableau);
     362}
     363
     364/**
     365 * Formate les occurrences d'un item dans les fichiers
     366 *
     367 * @param string $type
     368 * @param string $item
     369 * @param array $detail
     370 * @param array $extra
     371 * @param string $f_coloriser
     372 * @return string
     373 */
     374
     375function langonet_lister_occ($type, $item, $detail, $extra, $f_coloriser)
     376{
    350377        $liste_lignes = '';
    351         foreach ($tableau as $item => $detail) {
    352                 $brut = preg_match('/^(.*)[{].*[}]$/', $item, $m) ? $m[1]:$item;
    353                 $liste_lignes .= bouton_block_depliable($brut, false) .
    354                                  debut_block_depliable(false) .
    355                                  "<p style=\"padding-left:2em;\">\n  ".
    356                                  _T('langonet:texte_item_utilise_ou')."\n<br />";       
    357                 foreach ($detail as $fichier => $lignes) {
    358                         $liste_lignes .= "\t<span style=\"font-weight:bold;padding-left:2em;\">" .$fichier. "</span><br />\n";
    359                         foreach ($lignes as $ligne_n => $ligne_t) {
    360                                 $L = sprintf("%04s", intval($ligne_n+1));
    361                                 $T = '... '.$ligne_t[0].' ...';
    362                                 if ($f_coloriser) {
    363                                         // Traitement de la coloration de l'extrait. C'est la fonction de coloration qui s'occupe des
    364                                         // entites html
    365                                         $infos = pathinfo($fichier);
    366                                         $extension = ($infos['extension'] == 'html') ? 'html4strict' : $infos['extension'];
    367                                         $T = $f_coloriser($T,  $extension, 'code', 'span');
    368                                 } else $T = htmlspecialchars($T);
    369 
    370                                 $liste_lignes .= "\t\t<code style='padding-left:4em;text-indent: -5em;'>L$L : $T</code><br />\n";
    371                         }
    372                 }
    373                 $liste_lignes .= "</p>";
    374 
    375                 if ($type != 'non' AND is_array($extra[$item])) {
    376                         $liste_lignes .= "<p style=\"padding-left:2em;\">  " . (($type=='non_mais_nok') ? _T('langonet:texte_item_mal_defini') : _T('langonet:texte_item_defini_ou')) . "\n<br />";
    377                         foreach ($extra[$item] as $fichier_def) {
    378                                 $liste_lignes .= "\t<span style=\"font-weight:bold;padding-left:2em;\">" .$fichier_def. "</span><br />\n";
    379                         }
    380                         $liste_lignes .= "</p>\n";
    381                 } elseif ($type == 'non_mais_nok') {
    382                                 $liste_lignes .= "<p style=\"padding-left:2em;\">  " . _T('langonet:texte_item_non_defini') . "</p>\n<br />\n";
    383                 }
    384                 $liste_lignes .= fin_block();
    385         }
    386 
     378
     379        foreach ($detail as $fichier => $lignes) {
     380                $liste_lignes .= "\t<span style=\"font-weight:bold;padding-left:2em;\">" .$fichier. "</span><br />\n";
     381                foreach ($lignes as $ligne_n => $ligne_t) {
     382                        $L = sprintf("%04s", intval($ligne_n+1));
     383                        // Il peut y en avoir plusieurs sur une meme ligne,
     384                        // on n'affiche que le premier
     385                        $match = $ligne_t[0];
     386                        $T = '... '.trim($match[0]).' ...';
     387                        if ($f_coloriser) {
     388                                // Traitement de la coloration de l'extrait.
     389                                // C'est la fonction de coloration qui s'occupe des entites html
     390                                $infos = pathinfo($fichier);
     391                                $extension = ($infos['extension'] == 'html') ? 'html4strict' : $infos['extension'];
     392                                $T = $f_coloriser($T,  $extension, 'code', 'span');
     393                        } else $T = htmlspecialchars($T);
     394
     395                        $liste_lignes .= "\t\t<code style='padding-left:4em;text-indent: -5em;'>L$L : $T</code><br />\n";
     396                }
     397        }
     398        // Qaund l'index ne correspond pas aux occurrences (on prend la derniere)
     399        // typiquement quand c'est un md5, donner l'index prevu pour aider a trouver l'homonyme
     400        // (mais ce serait encore mieux que Langonet le donne)
     401        if ($item !==  $match[2]) {
     402          $index = langonet_index_brut($match[2]);
     403          $v = ("(<b>" . $index . "</b>)<br />");
     404        } else $v = '';
     405
     406        $liste_lignes = "<p style=\"padding-left:2em;\">\n  ".
     407        $v .
     408        _T('langonet:texte_item_utilise_ou')."\n<br />" .
     409        $liste_lignes ."</p>";
     410
     411        if ($type != 'non' AND isset($extra[$item])) {
     412                $liste_lignes .= "<p style=\"padding-left:2em;\">  " . (($type=='non_mais_nok') ? _T('langonet:texte_item_mal_defini') : _T('langonet:texte_item_defini_ou')) . "\n<br />";
     413                foreach ($extra[$item] as $fichier_def) {
     414                        $liste_lignes .= "\t<span style=\"font-weight:bold;padding-left:2em;\">" .$fichier_def. "</span><br />\n";
     415                }
     416                $liste_lignes .= "</p>\n";
     417        } elseif ($type == 'non_mais_nok') {
     418                        $liste_lignes .= "<p style=\"padding-left:2em;\">  " . _T('langonet:texte_item_non_defini') . "</p>\n<br />\n";
     419        }
    387420        return $liste_lignes;
    388421}
     
    493526        if (is_array($all)) foreach ($all as $index => $val) {
    494527                foreach($val as $f => $l) $files[$f]= str_replace(_DIR_RACINE . $ou, '', $f);
    495                 $fichier = key($val);
    496                 $val = array_shift($val);
    497                 $val = array_shift($val);
    498                 $val = array_shift($val);
     528                $fichier = key($val);   
     529                $val = array_shift($val); // premier fichier
     530                $val = array_shift($val); // premiere ligne du dit
     531                $val = array_shift($val); // premier match dans la dite
     532                $val = array_shift($val); // index 0 du dit
    499533                if ($_l) {
    500534                        // gestion des backslash imparfaite, mais c'est deja ca
    501535                        if (preg_match(_LANGONET_FONCTION_L, $val, $m))
    502                                 $occ = str_replace('\\', '.', $m[1]);
     536                                $occ = str_replace('\\', '.', $m[2]);
    503537                        elseif (preg_match(_LANGONET_FONCTION_L2, $val, $m))
    504                                 $occ = $m[1];
     538                                $occ = $m[2];
    505539                        else continue;
    506540                } else {
     
    540574// Si plus que 32 caracteres, on elimine les mots de moins de 3 lettres.
    541575// Si toujours trop, on coupe au dernier mot complet avant 32 caracteres.
    542 // C'est donc le tableau des chaines de langues manquant;
    543 // toutefois, en cas d'homonymie d'index, on prend le md5, qui est illisible.
     576// C'est donc le tableau des chaines de langues manquant.
    544577
    545578// @param string $occ
    546 // @param array item_md5
    547579// @return string
    548580
    549 function langonet_index($occ, $item_md5)
     581function langonet_index_brut($occ)
    550582{
    551583        $index = textebrut($occ);
     
    560592                        // tant pis mais couper proprement si possible
    561593                        $index = substr($index, 0, 32);
    562                         if ($n = strrpos($index,' '))
     594                        if ($n = strrpos($index,' ') OR ($n = strrpos($index,'_')))
    563595                                $index = substr($index, 0, $n);
    564596                }
    565597        }
    566598        $index = str_replace(' ', '_', trim($index));
    567         if (isset($item_md5[$index]) AND strcasecmp($item_md5[$index], $occ)) {
    568 
    569                 $index = md5($occ);
    570         }
    571599        return $index;
     600}
     601
     602// comme la precedente, mais en cas d'homonymie,
     603// on prend le md5, qui est illisible.
     604
     605// @param string $occ
     606// @param array item_md5
     607// @return string
     608
     609function langonet_index($occ, $item_md5)
     610{
     611        $index = langonet_index_brut($occ);
     612        return (isset($item_md5[$index]) AND strcasecmp($item_md5[$index], $occ)) ? md5($occ) : $index;
    572613}
    573614
  • _plugins_/langonet/inc/langonet_verifier_items.php

    r54269 r54366  
    102102        $utilises['items'][$index] = $item;
    103103        $utilises['modules'][$index] = $occ[1];
    104         $utilises['item_tous'][$index][$_fichier][$ligne][] = trim($occ[0]);
     104        $utilises['item_tous'][$index][$_fichier][$ligne][] = $occ;
    105105        $utilises['suffixes'][$index] = (($occ[3] AND ($occ[3][0]==='.')) OR ($eval AND strpos($occ[2], '$')));
    106106}
     
    189189                                        // Item indefini alors que le module est explicite, c'est une erreur
    190190                                        $item_non[] = $_valeur;
    191                                                 $fichier_non[$_cle] = $utilises['item_tous'][$_cle];
     191                                        $fichier_non[$_cle] = $utilises['item_tous'][$_cle];
    192192                                } else {
    193193                                        // L'item peut etre defini dans un autre module. Le fait qu'il ne soit pas
     
    226226                        }
    227227                        else {
    228                                 // L'item est defini dynamiquement (i.e. a l'execution)
    229                                 // Il ne peut etre trouve directement dans le fichier de
    230                                 // langue, donc on verifie que des items ressemblant
    231                                 // existent dans le fichier de langue
     228                                // L'item est defini dynamiquement (i.e. a l'execution),
     229                                // il ne peut etre trouve dans un fichier de langue.
     230                                // On regarde s'il existe des items ressemblants.
    232231                                $item_trouve = false;
    233232                                foreach($init as $_item => $_traduction) {
  • _plugins_/langonet/inc/langonet_verifier_l.php

    r54338 r54366  
    77 *
    88 */
    9 // Les REGEXP de recherche de l'item de langue (voir le fichier regexp.txt)
    10 // -- pour les fichiers .php et la detection de _L
     9// Ces 2 REGEXP de recherche de _L
     10// doivent fournir les memes tableaux que les RegExp de recherche de <:... :>
    1111define("_LANGONET_FONCTION_L",
    1212#       "`_L\([\"'](.+)(?:[,\"']|[\"'][,].*)\)`iUm"); # old
    13         '#\b_L *[(] *"([^"]+)"[^)]*#');
     13        '#\b_L *[(] *(")([^"]+)"[^)]*#');
    1414
    1515define("_LANGONET_FONCTION_L2",
    16         "#\b_L *[(] *'([^']+)'[^)]*#");
     16        "#\b_L *[(] *(')([^']+)'[^)]*#");
    1717
    1818// Si une erreur se produit lors du deroulement de la fonction,
     
    3232// Les valeurs de ce tableau sont des sous-tableaux indexes par le nom du fichier
    3333// Chacun a pour valeur un sous-sous-tableau indexe par le numero de ligne,
    34 // pointant sur un sous-sous-sous-tableau des appels complets de _L
     34// pointant sur un sous-sous-sous-tableau des resultats des preg_match
     35// (donc encore des tableaux, indexe numeriquement)
    3536
    3637// @param string $module
     
    4748                        if (preg_match_all(_LANGONET_FONCTION_L, $texte, $m, PREG_SET_ORDER))
    4849                                foreach ($m as $occ) {
    49                                         $index = langonet_index($occ[1], $item_md5);
    50                                         $item_md5[$index] = $occ[1];
    51                                         $fichier_non[$index][$_fichier][$ligne][] = trim($occ[0]);
     50                                        $index = langonet_index($occ[2], $item_md5);
     51                                        $item_md5[$index] = $occ[2];
     52                                        $fichier_non[$index][$_fichier][$ligne][] = $occ;
    5253                                }
    5354                        if (preg_match_all(_LANGONET_FONCTION_L2, $texte, $m, PREG_SET_ORDER))
    5455                                foreach ($m as $occ) {
    55                                         $index = langonet_index($occ[1], $item_md5);
    56                                         $item_md5[$index] = $occ[1];
    57                                         $fichier_non[$index][$_fichier][$ligne][] = trim($occ[0]);
     56                                        $index = langonet_index($occ[2], $item_md5);
     57                                        $item_md5[$index] = $occ[2];
     58                                        $fichier_non[$index][$_fichier][$ligne][] = $occ;
    5859                                }
    5960                }
Note: See TracChangeset for help on using the changeset viewer.