source: spip-zone/_plugins_/langonet/inc/langonet_verifier_items.php @ 34337

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

on factorise les fonctions (plus simple à maintenir) dans un seul fichier.

File size: 5.2 KB
Line 
1<?php
2/**
3 * Vérification de l'utilisation des items de langue
4 *
5 * @param string $rep
6 * @param string $module
7 * @param string $langue
8 * @param string $ou_langue
9 * @param string $ou_fichier
10 * @param string $verification
11 * @return array
12 */
13
14// $rep          => nom du repertoire parent de lang/
15// $module       => prefixe du fichier de langue
16// $langue       => index du nom de langue
17// $ou_lang      => chemin vers le fichier de langue a verifier
18// $ou_fichier   => racine de l'arborescence a verifier
19// $verification => type de verification a effectuer
20function inc_langonet_verifier_items($rep, $module, $langue, $ou_langue, $ou_fichier, $verification) {
21
22        // On charge le fichier de langue a verifier
23        // si il existe dans l'arborescence $ou_langue
24        // (evite le mecanisme standard de surcharge SPIP)
25        include_spip('inc/traduire');
26        $var_source = "i18n_".$module."_".$langue;
27        if (empty($GLOBALS[$var_source])) {
28                $GLOBALS['idx_lang'] = $var_source;
29                include(_DIR_RACINE.$ou_langue.$module.'_'.$langue.'.php');
30        }
31
32        // On cherche l'ensemble des items utilises dans l'arborescence $ou_fichier
33        $utilises_brut = array('items' => array(), 'suffixes' => array());
34        // On ne scanne pas dans les ultimes sous-repertoires charsets/ ,
35        // lang/ , req/ . On ne scanne que les fichiers php, html ou xml
36        // (voir le fichier regexp.txt).
37        foreach (preg_files(_DIR_RACINE.$ou_fichier, '(?<!/charsets|/lang|/req)(/[^/]*\.(html|php|xml))$') as $_fichier) {
38                foreach ($contenu = file($_fichier) as $ligne => $texte) {
39                        if (strpos($_fichier, '.xml')) {
40                                $trouver_item = _TROUVER_ITEM_X;
41                        }
42                        else {
43                                $trouver_item = _TROUVER_ITEM_HP;
44                        }
45                        if (preg_match_all($trouver_item, $texte, $matches)) {
46                                $utilises_brut['items'] = array_merge($utilises_brut['items'], $matches[2]);
47                                $utilises_brut['suffixes'] = array_merge($utilises_brut['suffixes'], $matches[3]);
48                                foreach ($matches[2] as $item_val) {
49                                        $item_tous[$item_val][$_fichier][$ligne][] = trim($texte);
50                                }
51                        }
52                }
53        }
54
55        // On affine le tableau resultant en supprimant les doublons
56        $utilises = array('items' => array(), 'suffixes' => array());
57        foreach ($utilises_brut['items'] as $_cle => $_valeur) {
58                if (!in_array($_valeur, $utilises['items'])) {
59                        $utilises['items'][] = $_valeur;
60                        $utilises['suffixes'][] = (!$utilises_brut['suffixes'][$_cle]) ? false : true;
61                }
62        }
63
64        if ($verification == 'definition') {
65                // On construit la liste des items utilises mais non definis
66                $item_non = array();
67                $item_peut_etre = array();
68                foreach ($utilises['items'] as $_cle => $_valeur) {
69                        $defini = true;
70                        $avec_certitude = true;
71                        if (!$GLOBALS[$var_source][$_valeur]) {
72                                if (!$utilises['suffixes'][$_cle]) {
73                                        // L'item est vraiment non defini et c'est une erreur
74                                        $defini = false;
75                                }
76                                else {
77                                        // L'item trouve est utilise dans un contexte variable (ie _T('meteo_'.$statut))
78                                        // Il ne peut etre trouve directement dans le fichier de langue,
79                                        // donc on verifie que des items de ce "type" existent dans
80                                        // le fichier de langue
81                                        $defini = false;
82                                        foreach($GLOBALS[$var_source] as $_item => $_traduction) {
83                                                if (substr($_item, 0, strlen($_valeur)) == $_valeur) {
84                                                        $defini = true;
85                                                        $avec_certitude = false;
86                                                }
87                                        }
88                                }
89                        }
90                        if (!$defini) {
91                                $item_non[] = $_valeur;
92                                if (is_array($item_tous[$_valeur])) {
93                                        $fichier_non[$_valeur] = $item_tous[$_valeur];
94                                }
95                        }
96                        if (!$avec_certitude) {
97                                $item_peut_etre[] = $_valeur;
98                                if (is_array($item_tous[$_valeur])) {
99                                        $fichier_peut_etre[$_valeur] = $item_tous[$_valeur];
100                                }
101                        }
102                }
103        }
104        else {
105                // On construit la liste des items definis mais plus utilises
106                $item_non = array();
107                $item_peut_etre = array();
108                $fichier_non = array();
109                foreach ($GLOBALS[$var_source] as $_item => $_traduction) {
110                        $utilise = true;
111                        $avec_certitude = true;
112                        if (!in_array ($_item, $utilises['items'])) {
113                                // L'item est soit non utilise, soit utilise dans un contexte variable (ie _T('meteo_'.$statut))
114                                $contexte_variable = false;
115                                foreach($utilises['items'] as $_cle => $_valeur) {
116                                        if ($utilises['suffixes'][$_cle]) {
117                                                if (substr($_item, 0, strlen($_valeur)) == $_valeur) {
118                                                        $contexte_variable = true;
119                                                        break;
120                                                }
121                                        }
122                                }
123                                if (!$contexte_variable) {
124                                        // L'item est vraiment non utilise et c'est une erreur
125                                        $utilise = false;
126                                }
127                                else {
128                                        $avec_certitude = false;
129                                }
130                        }
131                        if (!$utilise) {
132                                $item_non[] = $_item;
133                        }
134                        if (!$avec_certitude) {
135                                $item_peut_etre[] = $_item;
136                                if (is_array($item_tous[$_valeur])) {
137                                        $fichier_peut_etre[$_item] = $item_tous[$_valeur];
138                                }
139                        }
140                }
141        }
142
143        // On prepare le tableau des resultats
144        $resultats['module'] = $module;
145        $resultats['ou_fichier'] = $ou_fichier;
146        $resultats['langue'] = $ou_langue.$module.'_'.$langue.'.php';
147        $resultats['item_non'] = $item_non;
148        $resultats['fichier_non'] = $fichier_non;
149        $resultats['item_peut_etre'] = $item_peut_etre;
150        $resultats['fichier_peut_etre'] = $fichier_peut_etre;
151        $resultats['statut'] = true;
152
153        return $resultats;
154}
155
156/*
157commentaire pour test (ne pas supprimer) :
158        _T('langonet:test_item_non_defini') TEST : Cet item de langue est bien utilise dans un fichier du repertoire scanne mais n'est pas defini dans le fichier de langue verifie.
159*/
160?>
Note: See TracBrowser for help on using the repository browser.