1 | <?php |
---|
2 | |
---|
3 | if (!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 | */ |
---|
17 | function 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 | |
---|
52 | function 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 = isset($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 | |
---|
97 | function 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 | |
---|
128 | if (!defined(\'_ECRIRE_INC_VERSION\')) return; |
---|
129 | |
---|
130 | $GLOBALS[$GLOBALS[\'idx_lang\']] = array( |
---|
131 | ' . |
---|
132 | join("\n", $contenu) . |
---|
133 | "\n);\n?".'>'; |
---|
134 | } |
---|
135 | |
---|
136 | function 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 | ?> |
---|