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

Last change on this file since 53926 was 53926, checked in by esj@…, 9 years ago

langonet version 0.7.0 : en plus de l'évacuation des _L par script Shell, on produit aussi un tel script pour les libellés présents dans un squelette non définis dans une module de langue. Par exemple, soit l'extrait de squelette:

<:Le @article@ sera publi&eacute; prochainement.{article=#ID_ARTICLE}:>
</BOUCLE1>
<div id="content"><h1><:Rien de publi&eacute; &agrave; ce num&eacute;ro.:></h1>
<//B1>

Langonet complétera automatiquement le fichier de langue avec

/*      <LANGONET_DEFINITION_L> */
        'article_sera_publie' => 'Le @article@ sera publi&eacute; prochainement.',
/*      <LANGONET_DEFINITION_L> */
        'rien_de_publie_a_ce_numero' => 'Rien de publi&eacute; &agrave; ce num&eacute;ro.'

et fournira un script Shell dont l'exécution transformera l'extrait ci-dessus en:

<:didacspip:article_sera_publie{article=#ID_ARTICLE}:>
</BOUCLE1>
<div id="content"><h1><:didacspip:rien_de_publie_a_ce_numero:></h1>
<//B1>

Pour ce faire, la RegExp? de Langonet reconnaissant les séquence {{{<:...:>}} a été un peu modifiée pour accepter autre chose que des minuscules et des soulignées (exigés par le compilateur de SPIP). On tient compte également de la présence d'un filtre.

  • 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        if ($encodage == 'utf8') include_spip('inc/langonet_utils');
54
55        // On recupere les items du fichier de langue si celui ci n'est pas vide
56        $source = $GLOBALS[$var_source] ? $GLOBALS[$var_source] : array();
57
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                if ($texte) {
65                        $comm = in_array($_item, $oublis_inutiles);
66                }
67                else {
68                        $comm = false;
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 == 'fonction_l') OR (($mode == 'oublie') AND $_valeur))
81                                        $texte = array('<LANGONET_DEFINITION_L>', $_valeur, $mode);
82                                else if ($mode == 'oublie')
83                                        $texte = '<LANGONET_DEFINITION_MANQUANTE>';
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                        $t = str_replace("'", '\\\'', $v[1]);
109                        if ($v[2] == 'inutile')
110                                $contenu[]= "/*\t" . $v[0] ."\n\t'$k' => '$t',*/"; 
111                        else
112                                $contenu[]= "/*\t" . $v[0] ." */\n\t'$k' => '$t',"; 
113                } else {
114                        $t = str_replace("'", '\\\'', $v);
115                        $t = str_replace('\\\\n', "' . \"\\n\" .'", $t);
116                        $contenu[]= "\t'$k' => '$t',";
117                }
118        }
119
120        return '<'.'?php' . "\n" . '
121// Ceci est un fichier langue de SPIP -- This is a SPIP language file' . '
122// ' . preg_replace(",\\n[/#]*,", "\n/// ", $producteur) . '
123// Module: ' . $module . '
124// Langue: ' . $langue . '
125// Date: ' . date('d-m-Y H:i:s') . '
126// Items: ' . count($items) . '
127
128if (!defined(\'_ECRIRE_INC_VERSION\')) return;
129
130$GLOBALS[$GLOBALS[\'idx_lang\']] = array(
131' .
132          join("\n", $contenu)  .
133          "\n);\n?".'>';
134}
135
136function ecrire_fichier_langue_php($dir, $langue, $module, $items, $producteur='')
137{
138        $nom = $dir . $module . "_" . $langue   . '.php';
139        $contenu = produire_fichier_langue($langue, $module, $items, $producteur);
140        return ecrire_fichier($nom, $contenu) ? $nom : false;
141}
142?>
Note: See TracBrowser for help on using the repository browser.