source: spip-zone/_plugins_/langonet/inc/langonet_verifier_definition.php @ 34329

Last change on this file since 34329 was 34329, checked in by denisb@…, 10 years ago

la fonction de vérification des définitions retourne plus d'informations.

  • Property svn:eol-style set to native
File size: 3.8 KB
Line 
1<?php
2/**
3 * Vérification de la definition des items de langue utilises
4 *
5 * @param string $rep
6 * @param string $module
7 * @param string $langue
8 * @param string $ou_langue
9 * @param string $ou_fichier
10 * @return array
11 */
12
13// $rep        => nom du repertoire parent de lang/
14// $module     => prefixe du fichier de langue
15// $langue     => index du nom de langue
16// $ou_lang    => chemin vers le fichier de langue a verifier
17// $ou_fichier => racine de l'arborescence a verifier
18function inc_langonet_verifier_definition($rep, $module, $langue, $ou_langue, $ou_fichier) {
19
20        // On charge le fichier de langue a verifier
21        // si il existe dans l'arborescence $ou_langue
22        // (evite le mecanisme standard de surcharge SPIP)
23        include_spip('inc/traduire');
24        $var_source = "i18n_".$module."_".$langue;
25        if (empty($GLOBALS[$var_source])) {
26                $GLOBALS['idx_lang'] = $var_source;
27                include(_DIR_RACINE.$ou_langue.$module.'_'.$langue.'.php');
28        }
29
30        // On cherche l'ensemble des items utilises dans l'arborescence $ou_fichier
31        $utilises_brut = array('items' => array(), 'suffixes' => array());
32        // On ne scanne pas dans les ultimes sous-repertoires charsets/ ,
33        // lang/ , req/ . On ne scanne que les fichiers php, html ou xml
34        // (voir le fichier regexp.txt).
35        foreach (preg_files(_DIR_RACINE.$ou_fichier, '(?<!/charsets|/lang|/req)(/[^/]*\.(html|php|xml))$') as $_fichier) {
36                foreach ($contenu = file($_fichier) as $ligne => $texte) {
37                        if (strpos($_fichier, '.xml')) {
38                                $trouver_item = _TROUVER_ITEM_X;
39                        }
40                        else {
41                                $trouver_item = _TROUVER_ITEM_HP;
42                        }
43                        if (preg_match_all($trouver_item, $texte, $matches)) {
44                                $utilises_brut['items'] = array_merge($utilises_brut['items'], $matches[2]);
45                                $utilises_brut['suffixes'] = array_merge($utilises_brut['suffixes'], $matches[3]);
46                                foreach ($matches[2] as $item_val) {
47                                        $item_tous[$item_val][$_fichier][$ligne][] = trim($texte);
48                                }
49                        }
50                }
51        }
52
53        // On affine le tableau resultant en supprimant les doublons
54        $utilises = array('items' => array(), 'suffixes' => array());
55        foreach ($utilises_brut['items'] as $_cle => $_valeur) {
56                if (!in_array($_valeur, $utilises['items'])) {
57                        $utilises['items'][] = $_valeur;
58                        $utilises['suffixes'][] = (!$utilises_brut['suffixes'][$_cle]) ? false : true;
59                }
60        }
61
62        // On construit la liste des items utilises mais non definis
63        $non_definis = array();
64        $a_priori_definis = array();
65        foreach ($utilises['items'] as $_cle => $_valeur) {
66                $defini = true;
67                $avec_certitude = true;
68                if (!$GLOBALS[$var_source][$_valeur]) {
69                        if (!$utilises['suffixes'][$_cle]) {
70                                // L'item est vraiment non defini et c'est une erreur
71                                $defini = false;
72                        }
73                        else {
74                                // L'item trouve est utilise dans un contexte variable (ie _T('meteo_'.$statut))
75                                // Il ne peut etre trouve directement dans le fichier de langue,
76                                // donc on verifie que des items de ce "type" existent dans
77                                // le fichier de langue
78                                $defini = false;
79                                foreach($GLOBALS[$var_source] as $_item => $_traduction) {
80                                        if (substr($_item, 0, strlen($_valeur)) == $_valeur) {
81                                                $defini = true;
82                                                $avec_certitude = false;
83                                        }
84                                }
85                        }
86                }
87                if (!$defini) {
88                        $non_definis[] = $_valeur;
89                        if (is_array($item_tous[$_valeur])) {
90                                $item_non[$_valeur] = $item_tous[$_valeur];
91                        }
92                }
93                if (!$avec_certitude) {
94                        $a_priori_definis[] = $_valeur;
95                        if (is_array($item_tous[$_valeur])) {
96                                $item_peut_etre[$_valeur] = $item_tous[$_valeur];
97                        }
98                }
99        }
100
101        // On prepare le tableau des resultats
102        $resultats['module'] = $module;
103        $resultats['ou_fichier'] = $ou_fichier;
104        $resultats['langue'] = $ou_langue.$module.'_'.$langue.'.php';
105        $resultats['non_definis'] = $non_definis;
106        $resultats['fichier_non'] = $item_non;
107        $resultats['a_priori_definis'] = $a_priori_definis;
108        $resultats['fichier_peut_etre'] = $item_peut_etre;
109        $resultats['statut'] = true;
110       
111        return $resultats;
112}
113?>
Note: See TracBrowser for help on using the repository browser.