source: spip-zone/_plugins_/trad-lang/trunk/inc/salvatore_lecteur.php @ 119838

Last change on this file since 119838 was 119838, checked in by Cerdic, 3 months ago

oubli renommage de fonction

  • Property svn:eol-style set to native
File size: 19.6 KB
Line 
1<?php
2
3/*
4    This file is part of Salvatore, the translation robot of Trad-lang (SPIP)
5
6    Salvatore is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10
11    Trad-Lang is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with Trad-Lang; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20    Copyright 2003-2020
21        Florent Jugla <florent.jugla@eledo.com>,
22        Philippe Riviere <fil@rezo.net>,
23        Chryjs <chryjs!@!free!.!fr>,
24        kent1 <kent1@arscenic.info>
25        Cerdic <cedric@yterium.com>
26*/
27
28
29include_spip('base/abstract_sql');
30include_spip('inc/charsets');
31include_spip('inc/filtres');
32include_spip('inc/texte');
33include_spip('inc/xml');
34include_spip('inc/lang_liste');
35include_spip('inc/session');
36
37/**
38 * @param array $liste_sources
39 * @param string $dir_modules
40 * @throws Exception
41 */
42function salvatore_lire($liste_sources, $dir_modules = null){
43        include_spip('inc/salvatore');
44        salvatore_init();
45
46        // on va modifier a la base, il faut qu'elle soit a jour
47        salvatore_verifier_base_upgradee();
48
49        if (is_null($dir_modules)){
50                $dir_modules = _DIR_SALVATORE_MODULES;
51        }
52        salvatore_check_dir($dir_modules);
53        $refresh_time = time()-_SALVATORE_LECTEUR_REFRESH_DELAY;
54
55        $tradlang_verifier_langue_base = charger_fonction('tradlang_verifier_langue_base', 'inc', true);
56        $tradlang_verifier_bilans = charger_fonction('tradlang_verifier_bilans', 'inc', true);
57        $invalider = false;
58
59        foreach ($liste_sources as $source){
60                salvatore_log("\n<info>--- Module " . $source['module'] . " | " . $source['dir_module'] . " | " . $source['url'] . "</info>");
61
62                $module = $source['module'];
63                $dir_module = $dir_modules . $source['dir_module'];
64
65                if ($autre_gestionnaire = salvatore_verifier_gestionnaire_traduction($dir_module, $module)){
66                        salvatore_fail("[Lecteur] Erreur sur $module", "Erreur : import impossible, le fichier est traduit autre part : $autre_gestionnaire\n");
67                }
68
69                /**
70                 * on doit absolument charger la langue principale en premier (a cause des MD5)
71                 */
72                $fichier_lang_principal = $dir_module . '/' . $module . '_' . $source['lang'] . '.php';
73                $liste_fichiers_lang = glob($dir_module . '/' . $module . '_*.php');
74                if (!in_array($fichier_lang_principal, $liste_fichiers_lang)){
75                        salvatore_fail("[Lecteur] Erreur sur $module", "|-- Pas de fichier lang principal $fichier_lang_principal : import impossible pour ce module");
76                }
77
78                // pour la suite, on enleve la langue principale de la liste des fichiers
79                $liste_fichiers_lang = array_diff($liste_fichiers_lang, [$fichier_lang_principal]);
80
81                /**
82                 * On regarde quelle est la date de dernière modification du fichier de langue principale
83                 */
84                $last_update = filemtime($fichier_lang_principal);
85
86                if ($row_module = salvatore_retrouver_tradlang_module($dir_module, $module)) {
87                        $id_tradlang_module = intval($row_module['id_tradlang_module']);
88                        salvatore_log("Module en base #$id_tradlang_module");
89                        /**
90                         * Si la langue mere a changée, on la modifie
91                         */
92                        if ($row_module['lang_mere']!==$source['lang']){
93                                sql_updateq('spip_tradlang_modules', array('lang_mere' => $source['lang']), 'id_tradlang_module=' . intval($id_tradlang_module));
94                                salvatore_log("lang_mere mise a jour : " . $row_module['lang_mere'] . " => " . $source['lang']);
95                                $last_update = time();
96                        }
97                        /**
98                         * Si le dir_module a change, on le met a jour
99                         */
100                        if ($row_module['dir_module']!==$source['dir_module']){
101                                sql_updateq('spip_tradlang_modules', array('dir_module' => $source['dir_module']), 'id_tradlang_module=' . intval($id_tradlang_module));
102                                salvatore_log("dir_module mis a jour : " . $row_module['dir_module'] . " => " . $source['dir_module']);
103                                $last_update = time();
104                        }
105                }
106
107                $langues_a_jour = array();
108
109                if (!$row_module or $last_update>$refresh_time){
110                        $priorite = '';
111                        $modifs = 0;
112                        if (defined('_TRAD_PRIORITE_DEFAUT')){
113                                $priorite = _TRAD_PRIORITE_DEFAUT;
114                        }
115
116                        /**
117                         * Si le module n'existe pas... on le crée
118                         */
119                        if (!$row_module or !$id_tradlang_module = intval($row_module['id_tradlang_module'])){
120                                $insert = [
121                                        'module' => $source['module'],
122                                        'dir_module' => $source['dir_module'],
123                                        'nom_mod' => $source['module'],
124                                        'lang_prefix' => $source['module'],
125                                        'lang_mere' => $source['lang'],
126                                        'priorite' => $priorite,
127                                ];
128                                $id_tradlang_module = sql_insertq('spip_tradlang_modules', $insert);
129                                /**
130                                 * Si insertion echoue on fail
131                                 */
132                                if (!intval($id_tradlang_module)){
133                                        salvatore_fail("[Lecteur] Erreur sur $module", "Echec insertion dans spip_tradlang_modules " . json_encode($insert));
134                                }
135                                else {
136                                        salvatore_log("Insertion en base #$id_tradlang_module");
137                                }
138                        }
139
140                }
141                // Pas de mise a jour recente du fichier maitre deja en base
142                else {
143                        salvatore_log("On ne modifie rien : fichier original $fichier_lang_principal inchangé depuis " . date("Y-m-d H:i:s", $last_update));
144                        $id_tradlang_module=intval($row_module['id_tradlang_module']);
145
146                        /**
147                         * Le fichier d'origine n'a pas été modifié
148                         * Mais on a peut être de nouvelles langues
149                         */
150                        $langues_en_base = sql_allfetsel('DISTINCT lang', 'spip_tradlangs', 'id_tradlang_module=' . intval($id_tradlang_module));
151                        $langues_en_base = array_column($langues_en_base, 'lang');
152
153                        $langues_a_ajouter = array();
154                        foreach ($liste_fichiers_lang as $fichier_lang){
155                                $lang = salvatore_get_lang_from($module, $fichier_lang);
156                                if (!in_array($lang, $langues_en_base)){
157                                        $langues_a_ajouter[] = array('lang' => $lang, 'fichier' => $fichier_lang);
158                                }
159                                else {
160                                        // inutile de regarder ce fichier
161                                        $langues_a_jour[] = $lang;
162                                }
163                        }
164
165                        $liste_fichiers_lang = array();
166                        if ($langues_a_ajouter){
167                                salvatore_log('On a ' . count($langues_a_ajouter) . " nouvelle(s) langue(s) à insérer (".count($langues_en_base). " langue(s) an base)");
168                                $liste_fichiers_lang = array_column($langues_a_ajouter, 'fichier');
169                        }
170                }
171
172                // traiter les fichiers lang
173                if (count($liste_fichiers_lang)) {
174
175                        // on commence par la langue mere
176                        $liste_md5_master = array();
177                        $modifs_master = salvatore_importer_module_langue($id_tradlang_module, $source, $fichier_lang_principal, true, $liste_md5_master);
178
179                        // et on fait les autres langues
180                        foreach ($liste_fichiers_lang as $fichier_lang){
181                                salvatore_importer_module_langue($id_tradlang_module, $source, $fichier_lang, false, $liste_md5_master);
182
183                                $lang = salvatore_get_lang_from($module, $fichier_lang);
184                                if ($modifs_master>0) {
185                                        if ($tradlang_verifier_langue_base) {
186                                                $tradlang_verifier_langue_base($id_tradlang_module, $lang);
187                                                salvatore_log('|-- Synchro de la langue ' . $lang . ' pour le module ' . $source['module']);
188                                        }
189                                        else {
190                                                salvatore_log("<error>|-- Pas de Fonction de synchro inexistante pour synchroniser lang $lang</error>");
191                                        }
192                                }
193                                $langues_a_jour[] = $lang;
194                        }
195
196                        /**
197                         * On s'occupe des langues en base sans fichier
198                         * s'il y a eu au moins une modif et que l'on peut faire la synchro
199                         */
200                        if ($modifs_master>0 and $tradlang_verifier_langue_base){
201                                $langues_en_base = sql_allfetsel('DISTINCT lang', 'spip_tradlangs', 'id_tradlang_module=' . intval($id_tradlang_module));
202                                $langues_en_base = array_column($langues_en_base, 'lang');
203
204                                if ($langues_pas_a_jour = array_diff($langues_en_base, $langues_a_jour)) {
205                                        foreach ($langues_pas_a_jour as $langue_todo){
206                                                $tradlang_verifier_langue_base($id_tradlang_module, $langue_todo);
207                                                salvatore_log("|-- Synchro de la langue non exportée en fichier $langue_todo pour le module $module");
208                                        }
209                                }
210                        }
211
212                        $invalider = true;
213                        salvatore_log("|");
214                        unset($langues_a_jour, $langues_pas_a_jour);
215                }
216
217                // Mise à jour des bilans
218                if ($tradlang_verifier_bilans){
219                        salvatore_log("Création ou MAJ des bilans du module #$id_tradlang_module $module");
220                        $tradlang_verifier_bilans($id_tradlang_module, $source['lang'], false);
221                        salvatore_log("-");
222                }
223        }
224
225        if ($invalider){
226                include_spip('inc/invalideur');
227                suivre_invalideur('1');
228        }
229}
230
231/**
232 * Import d'un fichier de langue dans la base
233 *
234 * @param int $id_tradlang_module
235 * @param array $source
236 *   tableau decrivant le module extrait du fichier traductions
237 * @param string $fichier_lang
238 *   chemin vers le fichier de langue
239 * @param bool $is_master
240 *   true signifie que c'est la langue originale
241 * @param array $liste_md5_master
242 * @return string
243 */
244function salvatore_importer_module_langue($id_tradlang_module, $source, $fichier_lang, $is_master, &$liste_md5_master){
245        salvatore_log("!\n+ Import de $fichier_lang\n");
246        $idx = $GLOBALS['idx_lang'] = 'i18n_' . crc32($fichier_lang) . '_tmp';
247
248        $lang = salvatore_get_lang_from($source['module'], $fichier_lang);
249        $module = $source['module'];
250
251        // charger le fichier et ses commentaires
252        $GLOBALS[$idx] = null;
253        $commentaires = salvatore_charger_commentaires_fichier_langue($fichier_lang);
254
255        include $fichier_lang;
256        $chaines = $GLOBALS[$idx];  // on a vu certains fichiers faire des betises et modifier idx_lang
257
258        if (is_null($chaines)){
259                $erreur = "Erreur, fichier $fichier_lang mal forme";
260                salvatore_log("<error>$erreur</error>");
261                salvatore_envoyer_mail("[Lecteur] Erreur sur $module", $erreur);
262                return false;
263        }
264
265        /**
266         * Nettoyer le contenu de ses <MODIF>,<NEW> et <PLUS_UTILISE>
267         * Ces chaines sont utilisées comme statut
268         */
269        $status = array();
270
271        foreach ($chaines as $id => $chaine){
272                if ($is_master){
273                        $status[$id] = 'OK';
274                } else {
275                        if (preg_match(',^<(MODIF|NEW|PLUS_UTILISE)>,US', $chaine, $r)){
276                                $chaines[$id] = preg_replace(',^(<(MODIF|NEW|PLUS_UTILISE)>)+,US', '', $chaine);
277                                $status[$id] = $r[1];
278                        } else {
279                                $status[$id] = 'OK';
280                        }
281                }
282        }
283
284        $ajoutees = $inchangees = $supprimees = $modifiees = $ignorees = $recuperees = 0;
285
286        if (array_key_exists($lang, $GLOBALS['codes_langues'])) {
287                $statut_exclus = ($is_master ? 'attic' : 'MODIF');
288                $res = sql_select("id, str, md5", "spip_tradlangs", "id_tradlang_module=" . intval($id_tradlang_module) . " AND lang=" . sql_quote($lang) . " AND statut!=" . sql_quote($statut_exclus));
289                $nb = sql_count($res);
290                if ($nb>0){
291                        salvatore_log("!-- Fichier de langue $lang du module $module deja inclus dans la base\n");
292                }
293
294                /**
295                 * Si la langue est deja dans la base, on ne l'ecrase que s'il s'agit
296                 * de la langue source
297                 */
298                if (!$nb or $is_master){
299                        // La liste de ce qui existe deja
300                        $existant = $str_existant = array();
301                        while ($row = sql_fetch($res)){
302                                $existant[$row['id']] = $row['md5'];
303                                $str_existant[$row['id']] = $row['str'];
304                        }
305
306                        $bigwhere = "id_tradlang_module=" . intval($id_tradlang_module) . ' AND lang=' . sql_quote($lang);
307
308                        include_spip('action/editer_tradlang');
309                        // Dans ce qui arrive, il y a 4 cas :
310                        $ids = array_unique(array_merge(array_keys($existant), array_keys($chaines)));
311                        foreach ($ids as $id){
312                                $comm = (isset($commentaires[$id])) ? $commentaires[$id] : '';
313
314                                /**
315                                 * 1. chaine neuve
316                                 */
317                                if (isset($chaines[$id]) and !isset($existant[$id])){
318                                        $md5 = null;
319                                        if ($is_master){
320                                                $md5 = md5($chaines[$id]);
321                                        } else {
322                                                if (!isset($liste_md5_master[$id])){
323                                                        salvatore_log("<info>!-- Chaine $id inconnue dans la langue principale</info>");
324                                                        $ignorees++;
325                                                } else {
326                                                        $md5 = $liste_md5_master[$id];
327                                                }
328                                        }
329
330                                        if ($md5){
331                                                $chaines[$id] = salvatore_nettoyer_chaine_langue($chaines[$id], $lang);
332
333                                                /**
334                                                 * Calcul du nouveau md5
335                                                 */
336                                                $md5 = md5($chaines[$id]);
337
338                                                /**
339                                                 * Si le commentaire est un statut et que l'on ne traite pas le fichier de langue mère
340                                                 * On vire le commentaire et met son contenu comme statut
341                                                 */
342                                                if (in_array($comm, array('NEW', 'OK', 'MODIF', 'MODI')) and !$is_master){
343                                                        if ($comm=='MODI'){
344                                                                $comm = 'MODIF';
345                                                        }
346                                                        $status[$id] = $comm;
347                                                        $comm = '';
348                                                } else {
349                                                        if ((strlen($comm)>1) && preg_match('/(.*?)(NEW|OK|MODIF)(.*?)/', $comm, $matches)){
350                                                                if (!$is_master){
351                                                                        $status[$id] = $matches[2];
352                                                                }
353                                                                $comm = preg_replace('/(NEW|OK|MODIF)/', '', $comm);
354                                                        }
355                                                }
356
357                                                /**
358                                                 * On génère un titre
359                                                 */
360                                                $titre = $id . ' : ' . $source['module'] . ' - ' . $lang;
361
362                                                $set = array(
363                                                        'id_tradlang_module' => $id_tradlang_module,
364                                                        'titre' => $titre,
365                                                        'module' => $source['module'],
366                                                        'lang' => $lang,
367                                                        'id' => $id,
368                                                        'str' => $chaines[$id],
369                                                        'comm' => $comm,
370                                                        'md5' => $md5,
371                                                        'statut' => $status[$id]
372                                                );
373                                                $id_tradlang = sql_insertq('spip_tradlangs', $set);
374
375                                                /**
376                                                 * L'identifiant de la chaîne de langue a peut être déjà été utilisé puis mis au grenier
377                                                 * On le récupère donc
378                                                 */
379                                                if (!$id_tradlang){
380                                                        // mais il serait bien de pouvoir piquer une chaine attic du meme module meme si pas id_tradlang_module identique
381                                                        $tradlang = sql_fetsel('*', 'spip_tradlangs', 'id=' . sql_quote($id) . ' AND id_tradlang_module=' . intval($id_tradlang_module) . ' AND lang=' . sql_quote($lang) . ' AND statut=' . sql_quote('attic'));
382                                                        if ($tradlang and $id_tradlang = intval($tradlang['id_tradlang'])){
383                                                                salvatore_log("<info>Recuperation chaine ".$source['module'].":{$id}[{$lang}] de statut ATTIC</info>");
384                                                                sql_updateq('spip_tradlangs', $set, 'id_tradlang=' . intval($id_tradlang));
385
386                                                                $trads = sql_allfetsel('id_tradlang', 'spip_tradlangs', 'id=' . sql_quote($id) . ' AND id_tradlang_module=' . intval($id_tradlang_module) . 'AND lang!=' . sql_quote($lang) . ' AND statut=' . sql_quote('attic'));
387                                                                $maj = array('statut' => 'MODIF');
388                                                                foreach ($trads as $trad){
389                                                                        salvatore_log("Changement de la trad #" . $trad['id_tradlang'] . " ATTIC => MODIF");
390                                                                        sql_updateq('spip_tradlangs', $maj, 'id_tradlang=' . intval($trad['id_tradlang']));
391                                                                }
392                                                                $recuperees++;
393                                                        }
394                                                        else {
395                                                                salvatore_fail("[Lecteur] Echec insertion", "Echec insertion en base : " . json_encode($set));
396                                                        }
397                                                }
398
399                                                /**
400                                                 * Vérifier si une autre chaîne de langue était identique (str == str)
401                                                 *
402                                                 * Si oui, on sélectionne toutes les occurences existantes dans les autres langues et on les duplique
403                                                 */
404                                                $where_identique = [
405                                                        'id_tradlang_module=' . intval($id_tradlang_module),
406                                                        'lang=' . sql_quote($lang),
407                                                        'id!=' . sql_quote($id),
408                                                        'str=' . sql_quote($chaines[$id]),
409                                                ];
410                                                $identique_meme_module = sql_getfetsel('id', 'spip_tradlangs', $where_identique);
411                                                if ($identique_meme_module){
412                                                        salvatore_log("La nouvelle chaine $id est une chaine dupliquée de " . $identique_meme_module);
413
414                                                        $deja_lang = sql_allfetsel('lang', 'spip_tradlangs', 'id=' . sql_quote($id) . ' AND id_tradlang_module=' . intval($id_tradlang_module));
415                                                        $deja_lang = array_column($deja_lang, 'lang');
416                                                        $chaines_a_dupliquer = sql_allfetsel('*', 'spip_tradlangs', 'id=' . sql_quote($identique_meme_module) . ' AND id_tradlang_module=' . intval($id_tradlang_module) . ' AND ' . sql_in('lang', $deja_lang, 'NOT'));
417                                                        foreach ($chaines_a_dupliquer as $chaine){
418                                                                unset($chaine['id_tradlang']);
419                                                                unset($chaine['maj']);
420                                                                $chaine['id'] = $id;
421                                                                $chaine['titre'] = $id . ' : ' . $source['module'] . ' - ' . $chaine['lang'];
422                                                                $chaine['md5'] = md5($chaine['str']);
423                                                                $chaine['date_modif'] = date('Y-m-d H:i:s');
424                                                                if ($chaine['statut']=='attic'){
425                                                                        $chaine['statut'] = 'NEW';
426                                                                }
427                                                                $id_tradlang_new = sql_insertq('spip_tradlangs', $chaine);
428                                                                if (!$id_tradlang_new) {
429                                                                        salvatore_fail("[Lecteur] Echec insertion", "Echec insertion en base : " . json_encode($chaine));
430                                                                }
431                                                                salvatore_log('Ajout de la version ' . $chaine['lang'] . ' - #' . $id_tradlang_new);
432                                                        }
433                                                }
434                                                $ajoutees++;
435                                        }
436                                }
437
438
439                                /**
440                                 * 2. chaine existante
441                                 *
442                                 */
443                                elseif (isset($chaines[$id]) and isset($existant[$id])) {
444                                        // * chaine existante
445                                        // * identique ? => NOOP
446                                        $chaines[$id] = salvatore_nettoyer_chaine_langue($chaines[$id], $lang);
447
448                                        /**
449                                         * Calcul du nouveau md5
450                                         */
451                                        $md5 = md5($chaines[$id]);
452                                        if ($md5 === $existant[$id]){
453                                                $inchangees++;
454                                        }
455                                        else {
456                                                // * modifiee ? => UPDATE
457                                                salvatore_log("Chaine $id modifiee $md5 != ".$existant[$id]);
458
459                                                // modifier la chaine
460                                                $modifs = array(
461                                                        'str' => $chaines[$id],
462                                                        'md5' => ($is_master ? $md5 : $existant[$id]),
463                                                        'statut' => ($is_master ? 'OK' : ''),
464                                                        'comm' => $comm,
465                                                );
466                                                $id_tradlang = sql_getfetsel('id_tradlang', 'spip_tradlangs', "$bigwhere AND id = " . sql_quote($id));
467                                                $test = tradlang_set($id_tradlang, $modifs);
468
469                                                /**
470                                                 * signaler le statut MODIF de ses traductions OK
471                                                 * update des str de ses traductions NEW
472                                                 */
473                                                if ($is_master){
474                                                        sql_updateq('spip_tradlangs', array('statut'=> 'MODIF'),
475                                                                'id_tradlang_module=' . intval($id_tradlang_module)
476                                                                . ' AND id=' . sql_quote($id)
477                                                                . ' AND md5!=' . sql_quote($md5)
478                                                                . ' AND lang!=' . sql_quote($lang)
479                                                                . ' AND statut!=' . sql_quote('NEW'));
480                                                }
481                                                sql_updateq('spip_tradlangs', array('str'=> $chaines[$id]),
482                                                        'id_tradlang_module=' . intval($id_tradlang_module)
483                                                        . ' AND id=' . sql_quote($id)
484                                                        . ' AND md5!=' . sql_quote($md5)
485                                                        . ' AND lang!=' . sql_quote($lang)
486                                                        . ' AND statut=' . sql_quote('NEW'));
487                                                $modifiees++;
488                                        }
489                                }
490
491                                /**
492                                 * 3. chaine supprimee
493                                 *
494                                 */
495                                elseif (!isset($chaines[$id]) and isset($existant[$id])) {
496                                        // * chaine supprimee
497                                        // mettre au grenier
498                                        sql_updateq('spip_tradlangs', array('statut' => 'attic'), 'id_tradlang_module=' . intval($id_tradlang_module) . ' AND id=' . sql_quote($id));
499                                        $supprimees++;
500                                }
501
502                                if ($is_master and isset($chaines[$id])){
503                                        $liste_md5_master[$id] = md5($chaines[$id]);
504                                }
505                        }
506                        salvatore_log('!-- module ' . $source['module'] . ", $lang : $modifiees modifiees, $ajoutees ajoutees, $supprimees supprimees, $recuperees recuperees, $ignorees ignorees, $inchangees inchangees");
507                }
508        }
509        else {
510                salvatore_log("<error>!-- Attention : La langue $lang n'existe pas dans les langues possibles - $module</error>");
511        }
512
513        // TODO : BUG ?
514        // unset $liste_md5_master alors qu'elle est repassee d'un appel a l'autre ?
515        unset($liste_md5_master, $chaines, $GLOBALS[$GLOBALS['idx_lang']]);
516
517        return $ajoutees + $supprimees + $modifiees;
518}
519
520
521/**
522 * Chargement des commentaires de fichier de langue
523 * Le fichier est chargé en mode texte pour récupérer les commentaires dans lesquels sont situés les statuts
524 *
525 * @param string $fichier_lang Le chemin du fichier de langue
526 * @return array $liste_trad Un tableau id/chaine
527 */
528function salvatore_charger_commentaires_fichier_langue($fichier_lang){
529
530        $contenu = file_get_contents($fichier_lang);
531
532        $tab = preg_split("/\r\n|\n\r|;\n|\n\/\/|\(\n|\n\);\n|\'\,\n|\n[\s\t]*(\')|\/\/[\s\t][0-9A-Z]\n[\s\t](\')/", $contenu, '-1', PREG_SPLIT_NO_EMPTY);
533
534        $liste_trad = array();
535        reset($tab);
536
537        while (list(, $ligne) = each($tab)){
538                $ligne = str_replace("\'", '', $ligne);
539                if (strlen($ligne)>0){
540                        if (preg_match("/(.*?)\'[\s\t]*=>[\s\t]*\'(.*?)\'[\s\t]*,{0,1}[\s\t]*(#.*)?/ms", $ligne, $matches)){
541                                if (isset($matches[1]) and isset($matches[3]) and strlen(trim($matches[3]))>0){
542                                        list(, $comm) = explode('#', $matches[3]);
543                                        $liste_trad[$matches[1]] = trim($comm);
544                                }
545                        }
546                }
547        }
548        reset($liste_trad);
549        return $liste_trad;
550}
551
Note: See TracBrowser for help on using the repository browser.