source: spip-zone/_plugins_/langonet/inc/langonet_generer_fichier.php @ 53545

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

Première étape de l'amélioration de la vérification des _L() :

  • renvoi d'un tableau cohérent avec les autres vérifications
  • choix d'un module de langue (limité à un fichier existant pour l'instant)
  • génération du fichier de langue corrigé
  • Property svn:eol-style set to native
File size: 4.8 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) return;
4
5/**
6 * Ecriture des fichiers de langue
7 *
8 * @param string $module
9 * @param string $langue_source
10 * @param string $ou_langue
11 * @param string $langue_cible [optional]
12 * @param string $mode [optional]
13 * @param string $encodage [optional]
14 * @param array $oublis_inutiles [optional]
15 * @return
16 */
17function inc_langonet_generer_fichier($module, $langue_source, $ou_langue, $langue_cible='en', $mode='index', $encodage='utf8', $oublis_inutiles=array()) {
18        include_spip('inc/traduire');
19        $var_source = "i18n_".$module."_".$langue_source;
20        if (empty($GLOBALS[$var_source])) {
21                if (!file_exists($source = _DIR_RACINE.$ou_langue.$module.'_'.$langue_source.'.php'))
22                        return array('message_erreur' =>  _T('langonet:message_nok_fichier_langue',  array('langue' => $langue_source, 'module' => $module, 'dossier' => $ou_langue)));
23                $GLOBALS['idx_lang'] = $var_source;     
24                include($source);
25        }
26
27        $var_cible = "i18n_".$module."_".$langue_cible;
28        if (empty($GLOBALS[$var_cible])) {
29                if (file_exists($cible = _DIR_RACINE.$ou_langue.$module.'_'.$langue_cible.'.php')) {
30                        $GLOBALS['idx_lang'] = $var_cible;
31                        include($cible);
32                }
33        }
34
35        $source = langonet_generer_couples($module, $var_source, $var_cible, $mode, $encodage, $oublis_inutiles);
36
37        $dir = sous_repertoire(_DIR_TMP,"langonet");
38        $dir = sous_repertoire($dir,"generation");
39        $producteur = "Produit automatiquement par le plugin LangOnet a partir de la langue source $langue_source";
40        $ok = ecrire_fichier_langue_php($dir, $langue_cible, $module, $source, $producteur);
41
42        if (!$ok) {
43                $resultats['message_erreur'] = _T('langonet:message_nok_ecriture_fichier', array('langue' => $langue_cible, 'module' => $module));
44        }
45        else {
46                $resultats['fichier'] = $ok;
47                $resultats['message_ok'] = _T('langonet:message_ok_fichier_genere', array('langue' => $langue_cible, 'module' => $module, 'fichier' => $ok));
48        }
49        return $resultats;
50}
51
52function langonet_generer_couples($module, $var_source, $var_cible, $mode='index', $encodage='utf8', $oublis_inutiles=array()) {
53
54        if ($encodage == 'utf8') include_spip('inc/langonet_utils');
55
56        // On recupere les items du fichier de langue si celui ci n'est pas vide
57        $source = $GLOBALS[$var_source] ? $GLOBALS[$var_source] : array();
58        // Si on demande de generer le fichier corrige
59        // alors on fournit la liste des items a ajouter
60        $source = ($mode == 'oublie' OR $mode == 'fonction_l') ? array_merge($source, $oublis_inutiles) : $source;
61        if ($mode != 'inutile') $oublis_inutiles = array();
62        foreach ($source as $_item => $_valeur) {
63                $texte = $GLOBALS[$var_cible][$_item];
64                $comm = false;
65                if ($GLOBALS[$var_cible][$_item]) {
66                        $comm = in_array($_item, $oublis_inutiles);
67                }
68                else {
69                        if ($mode != 'pas_item') {
70                                if ($mode == 'new')
71                                        $texte = '<NEW>';
72                                else if ($mode == 'new_index')
73                                        $texte = '<NEW>'.$_item;
74                                else if ($mode == 'new_valeur')
75                                        $texte = '<NEW>'.$_valeur;
76                                else if ($mode == 'valeur')
77                                        $texte = $_valeur;
78                                else if ($mode == 'vide')
79                                        $texte = '';
80                                else if ($mode == 'oublie')
81                                        $texte = '<LANGONET_DEFINITION_MANQUANTE>';
82                                else if ($mode == 'fonction_l')
83                                        $texte = array('<LANGONET_DEFINITION_L>', $_valeur, $mode);
84                                else
85                                        $texte = $_item;
86                        }
87                }
88                if ($encodage == 'utf8') $texte = entite2utf($texte);
89                $source[$_item] = $comm ? array('<LANGONET_DEFINITION_OBSOLETE>', $texte, $mode) : $texte;
90        }
91        return $source;
92}
93
94// Produit un fichier de langues a partir d'un tableau (index => trad)
95// Si trad n'est pas une chaine mais un tableau, on le met en commentaire
96
97function produire_fichier_langue($langue, $module, $items, $producteur='')
98{
99        ksort($items);
100        $initiale = '';
101        $contenu = array();
102        foreach($items as $k => $v) {
103                if ($initiale != strtoupper($k[0])) {
104                        $initiale = strtoupper($k[0]);
105                        $contenu[]= "\n// $initiale";
106                }
107                if (!is_string($v))
108                        if ($v[2] == 'inutile')
109                                $contenu[]= "/*\t" . $v[0] ."\n\t'" . $k . "' => '" . addslashes($v[1]) ."',*/"; 
110                        else
111                                $contenu[]= "/*\t" . $v[0] ." */\n\t'" . $k . "' => '" . addslashes($v[1]) ."',"; 
112                else {
113                        $v = addslashes($v);
114                        $v = str_replace('\\\\n', "' . \"\\n\" .'", $v);
115                        $contenu[]= "\t'" . $k . "' => '$v',";
116                }
117        }
118
119        return '<'.'?php' . "\n" . '
120// Ceci est un fichier langue de SPIP -- This is a SPIP language file' . '
121// ' . preg_replace(",\\n[/#]*,", "\n/// ", $producteur) . '
122// Module: ' . $module . '
123// Langue: ' . $langue . '
124// Date: ' . date('d-m-Y H:i:s') . '
125// Items: ' . count($items) . '
126
127if (!defined(\'_ECRIRE_INC_VERSION\')) return;
128
129$GLOBALS[$GLOBALS[\'idx_lang\']] = array(
130' .
131          join("\n", $contenu)  .
132          "\n);\n?".'>';
133}
134
135function ecrire_fichier_langue_php($dir, $langue, $module, $items, $producteur='')
136{
137        $nom = $dir . $module . "_" . $langue   . '.php';
138        $contenu = produire_fichier_langue($langue, $module, $items, $producteur);
139        return ecrire_fichier($nom, $contenu) ? $nom : false;
140}
141?>
Note: See TracBrowser for help on using the repository browser.