Completed
Push — master ( 647eb8...49aeea )
by cam
01:18 queued 13s
created
ecrire/inc/bandeau.php 2 patches
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
 			$_id = $e['id_table_objet'];
51 51
 			if (isset($contexte[$_id]) and $id = intval($contexte[$_id])) {
52 52
 				$table = $e['table_objet_sql'];
53
-				$row = sql_fetsel('*', $table, "$_id=" . intval($id));
53
+				$row = sql_fetsel('*', $table, "$_id=".intval($id));
54 54
 				if (isset($row['id_rubrique'])) {
55 55
 					$contexte['id_rubrique'] = $row['id_rubrique'];
56 56
 					if (isset($row['id_secteur'])) {
@@ -114,8 +114,8 @@  discard block
 block discarded – undo
114 114
 				$boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position)
115 115
 					+ [
116 116
 						$id => new Bouton(
117
-							($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '',  // icone
118
-							$infos['titre'],  // titre
117
+							($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '', // icone
118
+							$infos['titre'], // titre
119 119
 							(isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
120 120
 							(isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
121 121
 						)
@@ -132,8 +132,8 @@  discard block
 block discarded – undo
132 132
 				$boutons_admin = array_slice($boutons_admin, 0, $position)
133 133
 					+ [
134 134
 						$id => new Bouton(
135
-							($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '',  // icone
136
-							$infos['titre'],  // titre
135
+							($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', // icone
136
+							$infos['titre'], // titre
137 137
 							(isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
138 138
 							(isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
139 139
 						)
@@ -220,7 +220,7 @@  discard block
 block discarded – undo
220 220
 		$url = str_replace('&', '&', $url);
221 221
 		while (preg_match(',[&?]([a-z_]+)=@([a-z_]+)@,i', $url, $matches)) {
222 222
 			if ($matches[2] == 'id_secteur' and !isset($contexte['id_secteur']) and isset($contexte['id_rubrique'])) {
223
-				$contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($contexte['id_rubrique']));
223
+				$contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.intval($contexte['id_rubrique']));
224 224
 			}
225 225
 			$val = _request($matches[2], $contexte);
226 226
 			$url = parametre_url($url, $matches[1], $val ?: '', '&');
Please login to merge, or discard this patch.
Indentation   +149 added lines, -149 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('inc/boutons');
@@ -37,33 +37,33 @@  discard block
 block discarded – undo
37 37
  *     Contexte
38 38
  **/
39 39
 function definir_barre_contexte($contexte = null) {
40
-	if (is_null($contexte)) {
41
-		$contexte = $_GET;
42
-	} elseif (is_string($contexte)) {
43
-		$contexte = unserialize($contexte);
44
-	}
45
-	if (!isset($contexte['id_rubrique']) and isset($contexte['exec'])) {
46
-		if (!function_exists('trouver_objet_exec')) {
47
-			include_spip('inc/pipelines_ecrire');
48
-		}
49
-		if ($e = trouver_objet_exec($contexte['exec'])) {
50
-			$_id = $e['id_table_objet'];
51
-			if (isset($contexte[$_id]) and $id = intval($contexte[$_id])) {
52
-				$table = $e['table_objet_sql'];
53
-				$row = sql_fetsel('*', $table, "$_id=" . intval($id));
54
-				if (isset($row['id_rubrique'])) {
55
-					$contexte['id_rubrique'] = $row['id_rubrique'];
56
-					if (isset($row['id_secteur'])) {
57
-						$contexte['id_secteur'] = $row['id_secteur'];
58
-					}
59
-				} elseif (isset($row['id_groupe'])) {
60
-					// TODO supprimer ce bloc quand https://core.spip.net/issues/3844 sera réalisé
61
-					$contexte['id_groupe'] = $row['id_groupe'];
62
-				}
63
-			}
64
-		}
65
-	}
66
-	return $contexte;
40
+    if (is_null($contexte)) {
41
+        $contexte = $_GET;
42
+    } elseif (is_string($contexte)) {
43
+        $contexte = unserialize($contexte);
44
+    }
45
+    if (!isset($contexte['id_rubrique']) and isset($contexte['exec'])) {
46
+        if (!function_exists('trouver_objet_exec')) {
47
+            include_spip('inc/pipelines_ecrire');
48
+        }
49
+        if ($e = trouver_objet_exec($contexte['exec'])) {
50
+            $_id = $e['id_table_objet'];
51
+            if (isset($contexte[$_id]) and $id = intval($contexte[$_id])) {
52
+                $table = $e['table_objet_sql'];
53
+                $row = sql_fetsel('*', $table, "$_id=" . intval($id));
54
+                if (isset($row['id_rubrique'])) {
55
+                    $contexte['id_rubrique'] = $row['id_rubrique'];
56
+                    if (isset($row['id_secteur'])) {
57
+                        $contexte['id_secteur'] = $row['id_secteur'];
58
+                    }
59
+                } elseif (isset($row['id_groupe'])) {
60
+                    // TODO supprimer ce bloc quand https://core.spip.net/issues/3844 sera réalisé
61
+                    $contexte['id_groupe'] = $row['id_groupe'];
62
+                }
63
+            }
64
+        }
65
+    }
66
+    return $contexte;
67 67
 }
68 68
 
69 69
 /**
@@ -79,89 +79,89 @@  discard block
 block discarded – undo
79 79
  * @return array
80 80
  */
81 81
 function definir_barre_boutons($contexte = [], $icones = true, $autorise = true) {
82
-	include_spip('inc/autoriser');
83
-	$boutons_admin = [];
82
+    include_spip('inc/autoriser');
83
+    $boutons_admin = [];
84 84
 
85
-	// les boutons du core, issus de ecrire/paquet.xml
86
-	$liste_boutons = [];
85
+    // les boutons du core, issus de ecrire/paquet.xml
86
+    $liste_boutons = [];
87 87
 
88
-	// ajouter les boutons issus des plugin via paquet.xml
89
-	if (
90
-		function_exists('boutons_plugins')
91
-		and is_array($liste_boutons_plugins = boutons_plugins())
92
-	) {
93
-		$liste_boutons = &$liste_boutons_plugins;
94
-	}
88
+    // ajouter les boutons issus des plugin via paquet.xml
89
+    if (
90
+        function_exists('boutons_plugins')
91
+        and is_array($liste_boutons_plugins = boutons_plugins())
92
+    ) {
93
+        $liste_boutons = &$liste_boutons_plugins;
94
+    }
95 95
 
96
-	foreach ($liste_boutons as $id => $infos) {
97
-		$parent = '';
98
-		// les boutons principaux ne sont pas soumis a autorisation
99
-		if (
100
-			!isset($infos['parent'])
101
-			or !($parent = $infos['parent'])
102
-			or !$autorise
103
-			or autoriser('menu', "_$id", 0, null, ['contexte' => $contexte])
104
-		) {
105
-			if (
106
-				$parent
107
-				and $parent = preg_replace(',^bando_,', 'menu_', $parent)
108
-				and isset($boutons_admin[$parent])
109
-			) {
110
-				$position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
111
-				if ($position < 0) {
112
-					$position = count($boutons_admin[$parent]->sousmenu) + 1 + $position;
113
-				}
114
-				$boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position)
115
-					+ [
116
-						$id => new Bouton(
117
-							($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '',  // icone
118
-							$infos['titre'],  // titre
119
-							(isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
120
-							(isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
121
-						)
122
-					]
123
-					+ array_slice($boutons_admin[$parent]->sousmenu, $position, 100);
124
-			}
125
-			if (
126
-				!$parent
127
-				// provisoire, eviter les vieux boutons
128
-				and (!in_array($id, ['forum', 'statistiques_visites']))
129
-				and (!$autorise or autoriser('menugrandeentree', "_$id", 0, null, ['contexte' => $contexte]))
130
-			) {
131
-				$position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin);
132
-				$boutons_admin = array_slice($boutons_admin, 0, $position)
133
-					+ [
134
-						$id => new Bouton(
135
-							($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '',  // icone
136
-							$infos['titre'],  // titre
137
-							(isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
138
-							(isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
139
-						)
140
-					]
141
-					+ array_slice($boutons_admin, $position, 100);
142
-			}
143
-		}
144
-	}
145
-	$boutons_admin = pipeline('ajouter_menus', $boutons_admin);
96
+    foreach ($liste_boutons as $id => $infos) {
97
+        $parent = '';
98
+        // les boutons principaux ne sont pas soumis a autorisation
99
+        if (
100
+            !isset($infos['parent'])
101
+            or !($parent = $infos['parent'])
102
+            or !$autorise
103
+            or autoriser('menu', "_$id", 0, null, ['contexte' => $contexte])
104
+        ) {
105
+            if (
106
+                $parent
107
+                and $parent = preg_replace(',^bando_,', 'menu_', $parent)
108
+                and isset($boutons_admin[$parent])
109
+            ) {
110
+                $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
111
+                if ($position < 0) {
112
+                    $position = count($boutons_admin[$parent]->sousmenu) + 1 + $position;
113
+                }
114
+                $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position)
115
+                    + [
116
+                        $id => new Bouton(
117
+                            ($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '',  // icone
118
+                            $infos['titre'],  // titre
119
+                            (isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
120
+                            (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
121
+                        )
122
+                    ]
123
+                    + array_slice($boutons_admin[$parent]->sousmenu, $position, 100);
124
+            }
125
+            if (
126
+                !$parent
127
+                // provisoire, eviter les vieux boutons
128
+                and (!in_array($id, ['forum', 'statistiques_visites']))
129
+                and (!$autorise or autoriser('menugrandeentree', "_$id", 0, null, ['contexte' => $contexte]))
130
+            ) {
131
+                $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin);
132
+                $boutons_admin = array_slice($boutons_admin, 0, $position)
133
+                    + [
134
+                        $id => new Bouton(
135
+                            ($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '',  // icone
136
+                            $infos['titre'],  // titre
137
+                            (isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
138
+                            (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
139
+                        )
140
+                    ]
141
+                    + array_slice($boutons_admin, $position, 100);
142
+            }
143
+        }
144
+    }
145
+    $boutons_admin = pipeline('ajouter_menus', $boutons_admin);
146 146
 
147
-	// définir les favoris et positions d’origine
148
-	if ($boutons_admin) {
149
-		$menus_favoris = obtenir_menus_favoris();
150
-		$i = 1;
151
-		foreach ($boutons_admin as $key => $menu) {
152
-			$menu->favori = (int) table_valeur($menus_favoris, $key, false);
153
-			$menu->position = $i++;
154
-			if ($menu->sousmenu) {
155
-				$j = 1;
156
-				foreach ($menu->sousmenu as $key => $bouton) {
157
-					$bouton->favori = (int) table_valeur($menus_favoris, $key, false);
158
-					$bouton->position = $j++;
159
-				}
160
-			}
161
-		}
162
-	}
147
+    // définir les favoris et positions d’origine
148
+    if ($boutons_admin) {
149
+        $menus_favoris = obtenir_menus_favoris();
150
+        $i = 1;
151
+        foreach ($boutons_admin as $key => $menu) {
152
+            $menu->favori = (int) table_valeur($menus_favoris, $key, false);
153
+            $menu->position = $i++;
154
+            if ($menu->sousmenu) {
155
+                $j = 1;
156
+                foreach ($menu->sousmenu as $key => $bouton) {
157
+                    $bouton->favori = (int) table_valeur($menus_favoris, $key, false);
158
+                    $bouton->position = $j++;
159
+                }
160
+            }
161
+        }
162
+    }
163 163
 
164
-	return $boutons_admin;
164
+    return $boutons_admin;
165 165
 }
166 166
 
167 167
 /**
@@ -173,22 +173,22 @@  discard block
 block discarded – undo
173 173
  * @return Bouton[]
174 174
  */
175 175
 function trier_boutons_enfants_par_alpha($menus, $avec_favoris = false) {
176
-	foreach ($menus as $menu) {
177
-		if ($menu->sousmenu) {
178
-			$libelles = $isfavoris = $favoris = [];
179
-			foreach ($menu->sousmenu as $key => $item) {
180
-				$libelles[$key] = strtolower(translitteration(_T($item->libelle)));
181
-				$isfavoris[$key] = (bool) $item->favori;
182
-				$favoris[$key] = $item->favori;
183
-			}
184
-			if ($avec_favoris) {
185
-				array_multisort($isfavoris, SORT_DESC, $favoris, SORT_ASC, $libelles, SORT_ASC, $menu->sousmenu);
186
-			} else {
187
-				array_multisort($libelles, SORT_ASC, $menu->sousmenu);
188
-			}
189
-		}
190
-	}
191
-	return $menus;
176
+    foreach ($menus as $menu) {
177
+        if ($menu->sousmenu) {
178
+            $libelles = $isfavoris = $favoris = [];
179
+            foreach ($menu->sousmenu as $key => $item) {
180
+                $libelles[$key] = strtolower(translitteration(_T($item->libelle)));
181
+                $isfavoris[$key] = (bool) $item->favori;
182
+                $favoris[$key] = $item->favori;
183
+            }
184
+            if ($avec_favoris) {
185
+                array_multisort($isfavoris, SORT_DESC, $favoris, SORT_ASC, $libelles, SORT_ASC, $menu->sousmenu);
186
+            } else {
187
+                array_multisort($libelles, SORT_ASC, $menu->sousmenu);
188
+            }
189
+        }
190
+    }
191
+    return $menus;
192 192
 }
193 193
 
194 194
 /**
@@ -199,7 +199,7 @@  discard block
 block discarded – undo
199 199
  * @return Bouton[]
200 200
  */
201 201
 function trier_boutons_enfants_par_favoris_alpha($menus) {
202
-	return trier_boutons_enfants_par_alpha($menus, true);
202
+    return trier_boutons_enfants_par_alpha($menus, true);
203 203
 }
204 204
 
205 205
 
@@ -212,23 +212,23 @@  discard block
 block discarded – undo
212 212
  * @return string
213 213
  */
214 214
 function bandeau_creer_url($url, $args = '', $contexte = null) {
215
-	if (!preg_match(',[\/\?],', $url)) {
216
-		$url = generer_url_ecrire($url, $args, true);
217
-		// recuperer les parametres du contexte demande par l'url sous la forme
218
-		// &truc=@machin@
219
-		// @machin@ etant remplace par _request('machin')
220
-		$url = str_replace('&amp;', '&', $url);
221
-		while (preg_match(',[&?]([a-z_]+)=@([a-z_]+)@,i', $url, $matches)) {
222
-			if ($matches[2] == 'id_secteur' and !isset($contexte['id_secteur']) and isset($contexte['id_rubrique'])) {
223
-				$contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($contexte['id_rubrique']));
224
-			}
225
-			$val = _request($matches[2], $contexte);
226
-			$url = parametre_url($url, $matches[1], $val ?: '', '&');
227
-		}
228
-		$url = str_replace('&', '&amp;', $url);
229
-	}
215
+    if (!preg_match(',[\/\?],', $url)) {
216
+        $url = generer_url_ecrire($url, $args, true);
217
+        // recuperer les parametres du contexte demande par l'url sous la forme
218
+        // &truc=@machin@
219
+        // @machin@ etant remplace par _request('machin')
220
+        $url = str_replace('&amp;', '&', $url);
221
+        while (preg_match(',[&?]([a-z_]+)=@([a-z_]+)@,i', $url, $matches)) {
222
+            if ($matches[2] == 'id_secteur' and !isset($contexte['id_secteur']) and isset($contexte['id_rubrique'])) {
223
+                $contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($contexte['id_rubrique']));
224
+            }
225
+            $val = _request($matches[2], $contexte);
226
+            $url = parametre_url($url, $matches[1], $val ?: '', '&');
227
+        }
228
+        $url = str_replace('&', '&amp;', $url);
229
+    }
230 230
 
231
-	return $url;
231
+    return $url;
232 232
 }
233 233
 
234 234
 /**
@@ -238,7 +238,7 @@  discard block
 block discarded – undo
238 238
  *     Code HTML du bandeau
239 239
  */
240 240
 function inc_bandeau_dist() {
241
-	return recuperer_fond('prive/squelettes/inclure/barre-nav', $_GET);
241
+    return recuperer_fond('prive/squelettes/inclure/barre-nav', $_GET);
242 242
 }
243 243
 
244 244
 
@@ -247,13 +247,13 @@  discard block
 block discarded – undo
247 247
  * @return array
248 248
  */
249 249
 function obtenir_menus_favoris() {
250
-	if (
251
-		isset($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
252
-		and is_array($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
253
-		and $GLOBALS['visiteur_session']['prefs']['menus_favoris']
254
-	) {
255
-		return $GLOBALS['visiteur_session']['prefs']['menus_favoris'];
256
-	}
257
-	$definir_menus_favoris = charger_fonction('definir_menus_favoris', 'inc');
258
-	return $definir_menus_favoris();
250
+    if (
251
+        isset($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
252
+        and is_array($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
253
+        and $GLOBALS['visiteur_session']['prefs']['menus_favoris']
254
+    ) {
255
+        return $GLOBALS['visiteur_session']['prefs']['menus_favoris'];
256
+    }
257
+    $definir_menus_favoris = charger_fonction('definir_menus_favoris', 'inc');
258
+    return $definir_menus_favoris();
259 259
 }
Please login to merge, or discard this patch.
ecrire/inc/lang.php 2 patches
Spacing   +10 added lines, -12 removed lines patch added patch discarded remove patch
@@ -40,13 +40,13 @@  discard block
 block discarded – undo
40 40
 function changer_langue($lang, $liste_langues = null) {
41 41
 
42 42
 	if (is_null($liste_langues)) {
43
-		$liste_langues = ($GLOBALS['meta']['langues_proposees'] ?? '') . ',' . ($GLOBALS['meta']['langues_multilingue'] ?? '');
43
+		$liste_langues = ($GLOBALS['meta']['langues_proposees'] ?? '').','.($GLOBALS['meta']['langues_multilingue'] ?? '');
44 44
 	} else {
45 45
 		if (is_array($liste_langues)) {
46 46
 			$liste_langues = implode(',', $liste_langues);
47 47
 		}
48 48
 	}
49
-	$liste_langues = ',' . $liste_langues . ',';
49
+	$liste_langues = ','.$liste_langues.',';
50 50
 
51 51
 	// Si la langue demandee n'existe pas, on essaie d'autres variantes
52 52
 	// Exemple : 'pt-br' => 'pt_br' => 'pt'
@@ -192,7 +192,7 @@  discard block
 block discarded – undo
192 192
 	}
193 193
 	foreach ($langues as $l) {
194 194
 		$selected = ($l == $default) ? ' selected=\'selected\'' : '';
195
-		$ret .= "<option value='$l'$selected>[" . $l . '] ' . traduire_nom_langue($l) . "</option>\n";
195
+		$ret .= "<option value='$l'$selected>[".$l.'] '.traduire_nom_langue($l)."</option>\n";
196 196
 	}
197 197
 
198 198
 	if (!test_espace_prive()) {
@@ -210,23 +210,21 @@  discard block
 block discarded – undo
210 210
 		$base,
211 211
 		$cible,
212 212
 		(select_langues($nom_select, $change, $ret)
213
-			. "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
213
+			. "<noscript><div style='display:inline'><input type='submit' class='fondo' value='"._T('bouton_changer')."' /></div></noscript>"),
214 214
 		" method='post'"
215 215
 	);
216 216
 }
217 217
 
218 218
 function select_langues($nom_select, $change, $options, $label = '') {
219 219
 	static $cpt = 0;
220
-	$id = 'menu_langues' . $cpt++;
220
+	$id = 'menu_langues'.$cpt++;
221 221
 
222 222
 	return
223
-		"<label for='$id'>" . ($label ?: _T('info_langues')) . '</label> ' .
223
+		"<label for='$id'>".($label ?: _T('info_langues')).'</label> '.
224 224
 		"<select name='$nom_select' id='$id' "
225 225
 		. ((!test_espace_prive()) ?
226
-			("class='forml menu_langues'") :
227
-			(($nom_select == 'var_lang_ecrire') ?
228
-				("class='lang_ecrire'") :
229
-				"class='fondl'"))
226
+			("class='forml menu_langues'") : (($nom_select == 'var_lang_ecrire') ?
227
+				("class='lang_ecrire'") : "class='fondl'"))
230 228
 		. $change
231 229
 		. ">\n"
232 230
 		. $options
@@ -352,7 +350,7 @@  discard block
 block discarded – undo
352 350
 		and (!isset($GLOBALS['spip_lang'])
353 351
 			or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
354 352
 	) {
355
-		return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
353
+		return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues); //@:install
356 354
 	}
357 355
 	// en theorie là, la globale est définie, sinon c'est un problème.
358 356
 	if (!isset($GLOBALS['spip_lang'])) {
@@ -455,7 +453,7 @@  discard block
 block discarded – undo
455 453
 	if (!isset($GLOBALS['meta']['langue_site'])) {
456 454
 		// Initialisation : le francais si dispo, sinon la premiere langue trouvee
457 455
 		$GLOBALS['meta']['langue_site'] = $tout =
458
-			(!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', (string) ",$all_langs,") !== false))
456
+			(!$all_langs or (strpos(','._LANGUE_PAR_DEFAUT.',', (string) ",$all_langs,") !== false))
459 457
 				? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
460 458
 		ecrire_meta('langue_site', $tout);
461 459
 	}
Please login to merge, or discard this patch.
Indentation   +256 added lines, -256 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Langue
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 
@@ -39,35 +39,35 @@  discard block
 block discarded – undo
39 39
  **/
40 40
 function changer_langue($lang, $liste_langues = null) {
41 41
 
42
-	if (is_null($liste_langues)) {
43
-		$liste_langues = ($GLOBALS['meta']['langues_proposees'] ?? '') . ',' . ($GLOBALS['meta']['langues_multilingue'] ?? '');
44
-	} else {
45
-		if (is_array($liste_langues)) {
46
-			$liste_langues = implode(',', $liste_langues);
47
-		}
48
-	}
49
-	$liste_langues = ',' . $liste_langues . ',';
50
-
51
-	// Si la langue demandee n'existe pas, on essaie d'autres variantes
52
-	// Exemple : 'pt-br' => 'pt_br' => 'pt'
53
-	$lang = str_replace('-', '_', trim($lang));
54
-	if (!$lang) {
55
-		return false;
56
-	}
57
-
58
-	if (
59
-		strpos($liste_langues, (string) ",$lang,") !== false
60
-		or ($lang = preg_replace(',_.*,', '', $lang)
61
-			and strpos($liste_langues, (string) ",$lang,") !== false)
62
-	) {
63
-		$GLOBALS['spip_lang_rtl'] = lang_dir($lang, '', '_rtl');
64
-		$GLOBALS['spip_lang_right'] = $GLOBALS['spip_lang_rtl'] ? 'left' : 'right';
65
-		$GLOBALS['spip_lang_left'] = $GLOBALS['spip_lang_rtl'] ? 'right' : 'left';
66
-
67
-		return $GLOBALS['spip_lang'] = $lang;
68
-	} else {
69
-		return false;
70
-	}
42
+    if (is_null($liste_langues)) {
43
+        $liste_langues = ($GLOBALS['meta']['langues_proposees'] ?? '') . ',' . ($GLOBALS['meta']['langues_multilingue'] ?? '');
44
+    } else {
45
+        if (is_array($liste_langues)) {
46
+            $liste_langues = implode(',', $liste_langues);
47
+        }
48
+    }
49
+    $liste_langues = ',' . $liste_langues . ',';
50
+
51
+    // Si la langue demandee n'existe pas, on essaie d'autres variantes
52
+    // Exemple : 'pt-br' => 'pt_br' => 'pt'
53
+    $lang = str_replace('-', '_', trim($lang));
54
+    if (!$lang) {
55
+        return false;
56
+    }
57
+
58
+    if (
59
+        strpos($liste_langues, (string) ",$lang,") !== false
60
+        or ($lang = preg_replace(',_.*,', '', $lang)
61
+            and strpos($liste_langues, (string) ",$lang,") !== false)
62
+    ) {
63
+        $GLOBALS['spip_lang_rtl'] = lang_dir($lang, '', '_rtl');
64
+        $GLOBALS['spip_lang_right'] = $GLOBALS['spip_lang_rtl'] ? 'left' : 'right';
65
+        $GLOBALS['spip_lang_left'] = $GLOBALS['spip_lang_rtl'] ? 'right' : 'left';
66
+
67
+        return $GLOBALS['spip_lang'] = $lang;
68
+    } else {
69
+        return false;
70
+    }
71 71
 }
72 72
 
73 73
 //
@@ -80,9 +80,9 @@  discard block
 block discarded – undo
80 80
 // par exemple le francais pour l'espagnol, l'anglais pour l'allemand, etc.
81 81
 
82 82
 function choisir_traduction($trads, $lang = '') {
83
-	$k = approcher_langue($trads, $lang);
83
+    $k = approcher_langue($trads, $lang);
84 84
 
85
-	return $k ? $trads[$k] : array_shift($trads);
85
+    return $k ? $trads[$k] : array_shift($trads);
86 86
 }
87 87
 
88 88
 // retourne son 2e argument si c'est un index du premier
@@ -90,21 +90,21 @@  discard block
 block discarded – undo
90 90
 // la langue X etant consideree comme une approche de X_Y
91 91
 function approcher_langue($trads, $lang = '') {
92 92
 
93
-	if (!$lang) {
94
-		$lang = $GLOBALS['spip_lang'];
95
-	}
96
-
97
-	if (isset($trads[$lang])) {
98
-		return $lang;
99
-	} // cas des langues xx_yy
100
-	else {
101
-		$r = explode('_', $lang);
102
-		if (isset($trads[$r[0]])) {
103
-			return $r[0];
104
-		}
105
-	}
106
-
107
-	return '';
93
+    if (!$lang) {
94
+        $lang = $GLOBALS['spip_lang'];
95
+    }
96
+
97
+    if (isset($trads[$lang])) {
98
+        return $lang;
99
+    } // cas des langues xx_yy
100
+    else {
101
+        $r = explode('_', $lang);
102
+        if (isset($trads[$r[0]])) {
103
+            return $r[0];
104
+        }
105
+    }
106
+
107
+    return '';
108 108
 }
109 109
 
110 110
 /**
@@ -119,10 +119,10 @@  discard block
 block discarded – undo
119 119
  *     Nom de la langue, sinon son code.
120 120
  **/
121 121
 function traduire_nom_langue($lang) {
122
-	include_spip('inc/lang_liste');
123
-	include_spip('inc/charsets');
122
+    include_spip('inc/lang_liste');
123
+    include_spip('inc/charsets');
124 124
 
125
-	return html2unicode($GLOBALS['codes_langues'][$lang] ?? $lang);
125
+    return html2unicode($GLOBALS['codes_langues'][$lang] ?? $lang);
126 126
 }
127 127
 
128 128
 //
@@ -135,10 +135,10 @@  discard block
 block discarded – undo
135 135
 // hebreu a priori), 'droitier' sinon.
136 136
 // C'est utilise par #LANG_DIR, #LANG_LEFT, #LANG_RIGHT.
137 137
 function lang_dir($lang = '', $droitier = 'ltr', $gaucher = 'rtl') {
138
-	static $lang_rtl = ['ar', 'fa', 'ku', 'prs', 'ps', 'ur', 'he', 'heb', 'hbo', 'yi'];
138
+    static $lang_rtl = ['ar', 'fa', 'ku', 'prs', 'ps', 'ur', 'he', 'heb', 'hbo', 'yi'];
139 139
 
140
-	return in_array(($lang ?: $GLOBALS['spip_lang']), $lang_rtl) ?
141
-		$gaucher : $droitier;
140
+    return in_array(($lang ?: $GLOBALS['spip_lang']), $lang_rtl) ?
141
+        $gaucher : $droitier;
142 142
 }
143 143
 
144 144
 // typo francaise ou anglaise ?
@@ -147,29 +147,29 @@  discard block
 block discarded – undo
147 147
 // sinon determiner la typo en fonction de la langue courante
148 148
 
149 149
 function lang_typo($lang = '') {
150
-	if (!$lang) {
151
-		$lang = $GLOBALS['lang_objet'] ?? $GLOBALS['spip_lang'];
152
-	}
153
-	if (
154
-		$lang == 'eo'
155
-		or $lang == 'fr'
156
-		or strncmp($lang, 'fr_', 3) == 0
157
-		or $lang == 'cpf'
158
-	) {
159
-		return 'fr';
160
-	} else {
161
-		return 'en';
162
-	}
150
+    if (!$lang) {
151
+        $lang = $GLOBALS['lang_objet'] ?? $GLOBALS['spip_lang'];
152
+    }
153
+    if (
154
+        $lang == 'eo'
155
+        or $lang == 'fr'
156
+        or strncmp($lang, 'fr_', 3) == 0
157
+        or $lang == 'cpf'
158
+    ) {
159
+        return 'fr';
160
+    } else {
161
+        return 'en';
162
+    }
163 163
 }
164 164
 
165 165
 // gestion de la globale $lang_objet pour que les textes soient affiches
166 166
 // avec les memes typo et direction dans l'espace prive que dans le public
167 167
 function changer_typo($lang = '') {
168
-	if ($lang) {
169
-		$GLOBALS['lang_objet'] = $lang;
170
-	} else {
171
-		unset($GLOBALS['lang_objet']);
172
-	}
168
+    if ($lang) {
169
+        $GLOBALS['lang_objet'] = $lang;
170
+    } else {
171
+        unset($GLOBALS['lang_objet']);
172
+    }
173 173
 }
174 174
 
175 175
 //
@@ -179,58 +179,58 @@  discard block
 block discarded – undo
179 179
 // pour 'changer_lang' (langue de l'article, espace prive), c'est en Ajax
180 180
 //
181 181
 function menu_langues($nom_select, $default = '') {
182
-	include_spip('inc/actions');
183
-
184
-	$langues = liste_options_langues($nom_select);
185
-	$ret = '';
186
-	if (!count($langues)) {
187
-		return '';
188
-	}
189
-
190
-	if (!$default) {
191
-		$default = $GLOBALS['spip_lang'];
192
-	}
193
-	foreach ($langues as $l) {
194
-		$selected = ($l == $default) ? ' selected=\'selected\'' : '';
195
-		$ret .= "<option value='$l'$selected>[" . $l . '] ' . traduire_nom_langue($l) . "</option>\n";
196
-	}
197
-
198
-	if (!test_espace_prive()) {
199
-		$cible = self();
200
-		$base = '';
201
-	} else {
202
-		$cible = self();
203
-		$base = spip_connect() ? 'base' : '';
204
-	}
205
-
206
-	$change = ' onchange="this.parentNode.parentNode.submit()"';
207
-
208
-	return generer_action_auteur(
209
-		'converser',
210
-		$base,
211
-		$cible,
212
-		(select_langues($nom_select, $change, $ret)
213
-			. "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
214
-		" method='post'"
215
-	);
182
+    include_spip('inc/actions');
183
+
184
+    $langues = liste_options_langues($nom_select);
185
+    $ret = '';
186
+    if (!count($langues)) {
187
+        return '';
188
+    }
189
+
190
+    if (!$default) {
191
+        $default = $GLOBALS['spip_lang'];
192
+    }
193
+    foreach ($langues as $l) {
194
+        $selected = ($l == $default) ? ' selected=\'selected\'' : '';
195
+        $ret .= "<option value='$l'$selected>[" . $l . '] ' . traduire_nom_langue($l) . "</option>\n";
196
+    }
197
+
198
+    if (!test_espace_prive()) {
199
+        $cible = self();
200
+        $base = '';
201
+    } else {
202
+        $cible = self();
203
+        $base = spip_connect() ? 'base' : '';
204
+    }
205
+
206
+    $change = ' onchange="this.parentNode.parentNode.submit()"';
207
+
208
+    return generer_action_auteur(
209
+        'converser',
210
+        $base,
211
+        $cible,
212
+        (select_langues($nom_select, $change, $ret)
213
+            . "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
214
+        " method='post'"
215
+    );
216 216
 }
217 217
 
218 218
 function select_langues($nom_select, $change, $options, $label = '') {
219
-	static $cpt = 0;
220
-	$id = 'menu_langues' . $cpt++;
221
-
222
-	return
223
-		"<label for='$id'>" . ($label ?: _T('info_langues')) . '</label> ' .
224
-		"<select name='$nom_select' id='$id' "
225
-		. ((!test_espace_prive()) ?
226
-			("class='forml menu_langues'") :
227
-			(($nom_select == 'var_lang_ecrire') ?
228
-				("class='lang_ecrire'") :
229
-				"class='fondl'"))
230
-		. $change
231
-		. ">\n"
232
-		. $options
233
-		. '</select>';
219
+    static $cpt = 0;
220
+    $id = 'menu_langues' . $cpt++;
221
+
222
+    return
223
+        "<label for='$id'>" . ($label ?: _T('info_langues')) . '</label> ' .
224
+        "<select name='$nom_select' id='$id' "
225
+        . ((!test_espace_prive()) ?
226
+            ("class='forml menu_langues'") :
227
+            (($nom_select == 'var_lang_ecrire') ?
228
+                ("class='lang_ecrire'") :
229
+                "class='fondl'"))
230
+        . $change
231
+        . ">\n"
232
+        . $options
233
+        . '</select>';
234 234
 }
235 235
 
236 236
 /**
@@ -252,34 +252,34 @@  discard block
 block discarded – undo
252 252
  */
253 253
 function liste_options_langues($nom_select) {
254 254
 
255
-	switch ($nom_select) {
256
-		# #MENU_LANG
257
-		case 'var_lang':
258
-			# menu de changement de la langue d'un article
259
-			# les langues selectionnees dans la configuration "multilinguisme"
260
-		case 'changer_lang':
261
-			$langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
262
-			break;
263
-		# menu de l'interface (privee, installation et panneau de login)
264
-		# les langues presentes sous forme de fichiers de langue
265
-		# on force la relecture du repertoire des langues pour etre synchrone.
266
-		case 'var_lang_ecrire':
267
-		default:
268
-			$GLOBALS['meta']['langues_proposees'] = '';
269
-			init_langues();
270
-			$langues = explode(',', $GLOBALS['meta']['langues_proposees']);
271
-			break;
255
+    switch ($nom_select) {
256
+        # #MENU_LANG
257
+        case 'var_lang':
258
+            # menu de changement de la langue d'un article
259
+            # les langues selectionnees dans la configuration "multilinguisme"
260
+        case 'changer_lang':
261
+            $langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
262
+            break;
263
+        # menu de l'interface (privee, installation et panneau de login)
264
+        # les langues presentes sous forme de fichiers de langue
265
+        # on force la relecture du repertoire des langues pour etre synchrone.
266
+        case 'var_lang_ecrire':
267
+        default:
268
+            $GLOBALS['meta']['langues_proposees'] = '';
269
+            init_langues();
270
+            $langues = explode(',', $GLOBALS['meta']['langues_proposees']);
271
+            break;
272 272
 
273 273
 # dernier choix possible : toutes les langues = langues_proposees
274 274
 # + langues_multilingues ; mais, ne sert pas
275 275
 #			$langues = explode(',', $GLOBALS['all_langs']);
276
-	}
277
-	if (count($langues) <= 1) {
278
-		return [];
279
-	}
280
-	sort($langues);
276
+    }
277
+    if (count($langues) <= 1) {
278
+        return [];
279
+    }
280
+    sort($langues);
281 281
 
282
-	return $langues;
282
+    return $langues;
283 283
 }
284 284
 
285 285
 
@@ -294,39 +294,39 @@  discard block
 block discarded – undo
294 294
  **/
295 295
 function verifier_lang_url() {
296 296
 
297
-	// quelle langue est demandee ?
298
-	$lang_demandee = (test_espace_prive() ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']);
299
-	if (isset($_COOKIE['spip_lang_ecrire'])) {
300
-		$lang_demandee = $_COOKIE['spip_lang_ecrire'];
301
-	}
302
-	if (!test_espace_prive() and isset($_COOKIE['spip_lang'])) {
303
-		$lang_demandee = $_COOKIE['spip_lang'];
304
-	}
305
-	if (isset($_GET['lang'])) {
306
-		$lang_demandee = $_GET['lang'];
307
-	}
308
-
309
-	// Renvoyer si besoin (et si la langue demandee existe)
310
-	if (
311
-		$GLOBALS['spip_lang'] != $lang_demandee
312
-		and changer_langue($lang_demandee)
313
-		and $lang_demandee != @$_GET['lang']
314
-	) {
315
-		$destination = parametre_url(self(), 'lang', $lang_demandee, '&');
316
-		// ici on a besoin des var_truc
317
-		foreach ($_GET as $var => $val) {
318
-			if (!strncmp('var_', $var, 4)) {
319
-				$destination = parametre_url($destination, $var, $val, '&');
320
-			}
321
-		}
322
-		include_spip('inc/headers');
323
-		redirige_par_entete($destination);
324
-	}
325
-
326
-	// Subtilite : si la langue demandee par cookie est la bonne
327
-	// alors on fait comme si $lang etait passee dans l'URL
328
-	// (pour criteres {lang}).
329
-	$GLOBALS['lang'] = $_GET['lang'] = $GLOBALS['spip_lang'];
297
+    // quelle langue est demandee ?
298
+    $lang_demandee = (test_espace_prive() ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']);
299
+    if (isset($_COOKIE['spip_lang_ecrire'])) {
300
+        $lang_demandee = $_COOKIE['spip_lang_ecrire'];
301
+    }
302
+    if (!test_espace_prive() and isset($_COOKIE['spip_lang'])) {
303
+        $lang_demandee = $_COOKIE['spip_lang'];
304
+    }
305
+    if (isset($_GET['lang'])) {
306
+        $lang_demandee = $_GET['lang'];
307
+    }
308
+
309
+    // Renvoyer si besoin (et si la langue demandee existe)
310
+    if (
311
+        $GLOBALS['spip_lang'] != $lang_demandee
312
+        and changer_langue($lang_demandee)
313
+        and $lang_demandee != @$_GET['lang']
314
+    ) {
315
+        $destination = parametre_url(self(), 'lang', $lang_demandee, '&');
316
+        // ici on a besoin des var_truc
317
+        foreach ($_GET as $var => $val) {
318
+            if (!strncmp('var_', $var, 4)) {
319
+                $destination = parametre_url($destination, $var, $val, '&');
320
+            }
321
+        }
322
+        include_spip('inc/headers');
323
+        redirige_par_entete($destination);
324
+    }
325
+
326
+    // Subtilite : si la langue demandee par cookie est la bonne
327
+    // alors on fait comme si $lang etait passee dans l'URL
328
+    // (pour criteres {lang}).
329
+    $GLOBALS['lang'] = $_GET['lang'] = $GLOBALS['spip_lang'];
330 330
 }
331 331
 
332 332
 
@@ -344,22 +344,22 @@  discard block
 block discarded – undo
344 344
  *     La langue sélectionnée
345 345
  **/
346 346
 function utiliser_langue_site($liste_langues = null) {
347
-	// s'il existe une langue du site (en gros tout le temps en théorie)
348
-	if (
349
-		isset($GLOBALS['meta']['langue_site'])
350
-		// et si spip_langue est pas encore définie (ce que va faire changer_langue())
351
-		// ou qu'elle n'est pas identique à la langue du site
352
-		and (!isset($GLOBALS['spip_lang'])
353
-			or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
354
-	) {
355
-		return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
356
-	}
357
-	// en theorie là, la globale est définie, sinon c'est un problème.
358
-	if (!isset($GLOBALS['spip_lang'])) {
359
-		spip_log('La globale spip_lang est indéfinie dans utiliser_langue_site() !', _LOG_ERREUR);
360
-	}
361
-
362
-	return $GLOBALS['spip_lang'];
347
+    // s'il existe une langue du site (en gros tout le temps en théorie)
348
+    if (
349
+        isset($GLOBALS['meta']['langue_site'])
350
+        // et si spip_langue est pas encore définie (ce que va faire changer_langue())
351
+        // ou qu'elle n'est pas identique à la langue du site
352
+        and (!isset($GLOBALS['spip_lang'])
353
+            or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
354
+    ) {
355
+        return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
356
+    }
357
+    // en theorie là, la globale est définie, sinon c'est un problème.
358
+    if (!isset($GLOBALS['spip_lang'])) {
359
+        spip_log('La globale spip_lang est indéfinie dans utiliser_langue_site() !', _LOG_ERREUR);
360
+    }
361
+
362
+    return $GLOBALS['spip_lang'];
363 363
 }
364 364
 
365 365
 /**
@@ -378,35 +378,35 @@  discard block
 block discarded – undo
378 378
  **/
379 379
 function utiliser_langue_visiteur($liste_langues = null) {
380 380
 
381
-	// si on est dans l'espace public et pas de $liste_langues : se limiter a la config langues_multilingue si définie
382
-	if (is_null($liste_langues) and !test_espace_prive() and !empty($GLOBALS['meta']['langues_multilingue'])) {
383
-		$liste_langues = $GLOBALS['meta']['langues_multilingue'];
384
-	}
385
-
386
-	$l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire');
387
-	if (isset($_COOKIE[$l])) {
388
-		if (changer_langue($l = $_COOKIE[$l], $liste_langues)) {
389
-			return $l;
390
-		}
391
-	}
392
-
393
-	if (isset($GLOBALS['visiteur_session']['lang'])) {
394
-		if (changer_langue($l = $GLOBALS['visiteur_session']['lang'], $liste_langues)) {
395
-			return $l;
396
-		}
397
-	}
398
-
399
-	if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
400
-		foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) {
401
-			if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) {
402
-				if (changer_langue($l = strtolower($r[1]), $liste_langues)) {
403
-					return $l;
404
-				}
405
-			}
406
-		}
407
-	}
408
-
409
-	return utiliser_langue_site($liste_langues);
381
+    // si on est dans l'espace public et pas de $liste_langues : se limiter a la config langues_multilingue si définie
382
+    if (is_null($liste_langues) and !test_espace_prive() and !empty($GLOBALS['meta']['langues_multilingue'])) {
383
+        $liste_langues = $GLOBALS['meta']['langues_multilingue'];
384
+    }
385
+
386
+    $l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire');
387
+    if (isset($_COOKIE[$l])) {
388
+        if (changer_langue($l = $_COOKIE[$l], $liste_langues)) {
389
+            return $l;
390
+        }
391
+    }
392
+
393
+    if (isset($GLOBALS['visiteur_session']['lang'])) {
394
+        if (changer_langue($l = $GLOBALS['visiteur_session']['lang'], $liste_langues)) {
395
+            return $l;
396
+        }
397
+    }
398
+
399
+    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
400
+        foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) {
401
+            if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) {
402
+                if (changer_langue($l = strtolower($r[1]), $liste_langues)) {
403
+                    return $l;
404
+                }
405
+            }
406
+        }
407
+    }
408
+
409
+    return utiliser_langue_site($liste_langues);
410 410
 }
411 411
 
412 412
 
@@ -416,7 +416,7 @@  discard block
 block discarded – undo
416 416
  * @return int
417 417
  */
418 418
 function match_langue($chaine) {
419
-	return preg_match('/^[a-z]{2,3}(_[a-z]{2,3}){0,2}$/', $chaine);
419
+    return preg_match('/^[a-z]{2,3}(_[a-z]{2,3}){0,2}$/', $chaine);
420 420
 }
421 421
 
422 422
 /**
@@ -434,36 +434,36 @@  discard block
 block discarded – undo
434 434
  **/
435 435
 function init_langues() {
436 436
 
437
-	// liste des langues dans les meta, sauf a l'install
438
-	$all_langs = $GLOBALS['meta']['langues_proposees'] ?? '';
439
-
440
-	$tout = [];
441
-	if (!$all_langs) {
442
-		// trouver tous les modules lang/spip_xx.php
443
-		$modules = find_all_in_path('lang/', '/spip_([a-z_]+)\.php$');
444
-		foreach ($modules as $name => $path) {
445
-			if (preg_match(',^spip_([a-z_]+)\.php$,', $name, $regs)) {
446
-				if (match_langue($regs[1])) {
447
-					$tout[] = $regs[1];
448
-				}
449
-			}
450
-		}
451
-		sort($tout);
452
-		$tout = join(',', $tout);
453
-		// Si les langues n'ont pas change, ne rien faire
454
-		if ($tout != $all_langs) {
455
-			$GLOBALS['meta']['langues_proposees'] = $tout;
456
-			include_spip('inc/meta');
457
-			ecrire_meta('langues_proposees', $tout);
458
-		}
459
-	}
460
-	if (!isset($GLOBALS['meta']['langue_site'])) {
461
-		// Initialisation : le francais si dispo, sinon la premiere langue trouvee
462
-		$GLOBALS['meta']['langue_site'] = $tout =
463
-			(!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', (string) ",$all_langs,") !== false))
464
-				? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
465
-		ecrire_meta('langue_site', $tout);
466
-	}
437
+    // liste des langues dans les meta, sauf a l'install
438
+    $all_langs = $GLOBALS['meta']['langues_proposees'] ?? '';
439
+
440
+    $tout = [];
441
+    if (!$all_langs) {
442
+        // trouver tous les modules lang/spip_xx.php
443
+        $modules = find_all_in_path('lang/', '/spip_([a-z_]+)\.php$');
444
+        foreach ($modules as $name => $path) {
445
+            if (preg_match(',^spip_([a-z_]+)\.php$,', $name, $regs)) {
446
+                if (match_langue($regs[1])) {
447
+                    $tout[] = $regs[1];
448
+                }
449
+            }
450
+        }
451
+        sort($tout);
452
+        $tout = join(',', $tout);
453
+        // Si les langues n'ont pas change, ne rien faire
454
+        if ($tout != $all_langs) {
455
+            $GLOBALS['meta']['langues_proposees'] = $tout;
456
+            include_spip('inc/meta');
457
+            ecrire_meta('langues_proposees', $tout);
458
+        }
459
+    }
460
+    if (!isset($GLOBALS['meta']['langue_site'])) {
461
+        // Initialisation : le francais si dispo, sinon la premiere langue trouvee
462
+        $GLOBALS['meta']['langue_site'] = $tout =
463
+            (!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', (string) ",$all_langs,") !== false))
464
+                ? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
465
+        ecrire_meta('langue_site', $tout);
466
+    }
467 467
 }
468 468
 
469 469
 /**
@@ -477,10 +477,10 @@  discard block
 block discarded – undo
477 477
  *     Code html de la balise <html>
478 478
  **/
479 479
 function html_lang_attributes() {
480
-	$lang = $GLOBALS['spip_lang'];
481
-	$dir = ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr');
480
+    $lang = $GLOBALS['spip_lang'];
481
+    $dir = ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr');
482 482
 
483
-	return "<html class='$dir $lang no-js' xmlns='http://www.w3.org/1999/xhtml' lang='$lang' dir='$dir'>\n";
483
+    return "<html class='$dir $lang no-js' xmlns='http://www.w3.org/1999/xhtml' lang='$lang' dir='$dir'>\n";
484 484
 }
485 485
 
486 486
 
@@ -494,7 +494,7 @@  discard block
 block discarded – undo
494 494
  * @return string
495 495
  */
496 496
 function aide_lang_dir($spip_lang, $spip_lang_rtl) {
497
-	return ($spip_lang <> 'he') ? $spip_lang_rtl : '';
497
+    return ($spip_lang <> 'he') ? $spip_lang_rtl : '';
498 498
 }
499 499
 
500 500
 
Please login to merge, or discard this patch.
ecrire/inc/traduire.php 2 patches
Indentation   +206 added lines, -206 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -38,20 +38,20 @@  discard block
 block discarded – undo
38 38
  *     Liste des fichiers de langue trouvés, dans l'ordre des chemins
39 39
  */
40 40
 function find_langs_in_path($file, $dirname = 'lang') {
41
-	static $dirs = [];
42
-	$liste = [];
43
-	foreach (creer_chemin() as $dir) {
44
-		if (!isset($dirs[$a = $dir . $dirname])) {
45
-			$dirs[$a] = (is_dir($a) || !$a);
46
-		}
47
-		if ($dirs[$a]) {
48
-			if (is_readable($a .= $file)) {
49
-				$liste[] = $a;
50
-			}
51
-		}
52
-	}
41
+    static $dirs = [];
42
+    $liste = [];
43
+    foreach (creer_chemin() as $dir) {
44
+        if (!isset($dirs[$a = $dir . $dirname])) {
45
+            $dirs[$a] = (is_dir($a) || !$a);
46
+        }
47
+        if ($dirs[$a]) {
48
+            if (is_readable($a .= $file)) {
49
+                $liste[] = $a;
50
+            }
51
+        }
52
+    }
53 53
 
54
-	return array_reverse($liste);
54
+    return array_reverse($liste);
55 55
 }
56 56
 
57 57
 /**
@@ -66,23 +66,23 @@  discard block
 block discarded – undo
66 66
  *     Liste des fichiers touvés pour ce module et cette langue.
67 67
  **/
68 68
 function chercher_module_lang($module, $lang = '') {
69
-	if ($lang) {
70
-		$lang = '_' . $lang;
71
-	}
69
+    if ($lang) {
70
+        $lang = '_' . $lang;
71
+    }
72 72
 
73
-	// 1) dans un repertoire nomme lang/ se trouvant sur le chemin
74
-	if (
75
-		$f = ($module == 'local'
76
-		? find_in_path($module . $lang . '.php', 'lang/')
77
-		: find_langs_in_path($module . $lang . '.php', 'lang/'))
78
-	) {
79
-		return is_array($f) ? $f : [$f];
80
-	}
73
+    // 1) dans un repertoire nomme lang/ se trouvant sur le chemin
74
+    if (
75
+        $f = ($module == 'local'
76
+        ? find_in_path($module . $lang . '.php', 'lang/')
77
+        : find_langs_in_path($module . $lang . '.php', 'lang/'))
78
+    ) {
79
+        return is_array($f) ? $f : [$f];
80
+    }
81 81
 
82
-	// 2) directement dans le chemin (old style, uniquement pour local)
83
-	return (($module == 'local') or strpos($module, '/'))
84
-		? (($f = find_in_path($module . $lang . '.php')) ? [$f] : false)
85
-		: false;
82
+    // 2) directement dans le chemin (old style, uniquement pour local)
83
+    return (($module == 'local') or strpos($module, '/'))
84
+        ? (($f = find_in_path($module . $lang . '.php')) ? [$f] : false)
85
+        : false;
86 86
 }
87 87
 
88 88
 /**
@@ -104,33 +104,33 @@  discard block
 block discarded – undo
104 104
  * @return void
105 105
  **/
106 106
 function charger_langue($lang, $module = 'spip') {
107
-	static $langs = [];
108
-	$var = 'i18n_' . $module . '_' . $lang;
109
-	if (!isset($langs[$lang])) {
110
-		$langs[$lang] = [];
111
-		if ($lang) {
112
-			$langs[$lang][] = $lang;
113
-			if (strpos($lang, '_') !== false) {
114
-				$l = explode('_', $lang);
115
-				$langs[$lang][] = reset($l);
116
-			}
117
-		}
118
-		$langs[$lang][] = $GLOBALS['meta']['langue_site'];
119
-		$langs[$lang][] = _LANGUE_PAR_DEFAUT;
120
-	}
121
-	foreach ($langs[$lang] as $l) {
122
-		if ($fichiers_lang = chercher_module_lang($module, $l)) {
123
-			$GLOBALS['idx_lang'] = 'i18n_' . $module . '_' . $l;
124
-			$GLOBALS[$GLOBALS['idx_lang']] = lire_fichier_langue(array_shift($fichiers_lang));
125
-			surcharger_langue($fichiers_lang);
126
-			if ($l !== $lang) {
127
-				$GLOBALS[$var] = &$GLOBALS['i18n_' . $module . '_' . $l];
128
-			}
129
-			$GLOBALS['lang_' . $var] = $l;
130
-			#spip_log("module de langue : {$module}_$l.php", 'traduire');
131
-			break;
132
-		}
133
-	}
107
+    static $langs = [];
108
+    $var = 'i18n_' . $module . '_' . $lang;
109
+    if (!isset($langs[$lang])) {
110
+        $langs[$lang] = [];
111
+        if ($lang) {
112
+            $langs[$lang][] = $lang;
113
+            if (strpos($lang, '_') !== false) {
114
+                $l = explode('_', $lang);
115
+                $langs[$lang][] = reset($l);
116
+            }
117
+        }
118
+        $langs[$lang][] = $GLOBALS['meta']['langue_site'];
119
+        $langs[$lang][] = _LANGUE_PAR_DEFAUT;
120
+    }
121
+    foreach ($langs[$lang] as $l) {
122
+        if ($fichiers_lang = chercher_module_lang($module, $l)) {
123
+            $GLOBALS['idx_lang'] = 'i18n_' . $module . '_' . $l;
124
+            $GLOBALS[$GLOBALS['idx_lang']] = lire_fichier_langue(array_shift($fichiers_lang));
125
+            surcharger_langue($fichiers_lang);
126
+            if ($l !== $lang) {
127
+                $GLOBALS[$var] = &$GLOBALS['i18n_' . $module . '_' . $l];
128
+            }
129
+            $GLOBALS['lang_' . $var] = $l;
130
+            #spip_log("module de langue : {$module}_$l.php", 'traduire');
131
+            break;
132
+        }
133
+    }
134 134
 }
135 135
 
136 136
 /**
@@ -143,21 +143,21 @@  discard block
 block discarded – undo
143 143
  * @return array<string, string>
144 144
  */
145 145
 function lire_fichier_langue(string $fichier): array {
146
-	$idx_lang_before = $GLOBALS['idx_lang'] ?? null;
147
-	$idx_lang_tmp = ($GLOBALS['idx_lang'] ?? 'lang') . '@temporaire';
148
-	$GLOBALS['idx_lang'] = $idx_lang_tmp;
149
-	$idx_lang = include $fichier;
150
-	$GLOBALS['idx_lang'] = $idx_lang_before;
151
-	if (!is_array($idx_lang)) {
152
-		if (isset($GLOBALS[$idx_lang_tmp]) and is_array($GLOBALS[$idx_lang_tmp])) {
153
-			$idx_lang = $GLOBALS[$idx_lang_tmp];
154
-		} else {
155
-			$idx_lang = [];
156
-			spip_log(sprintf('Fichier de langue incorrect : %s', $fichier), _LOG_ERREUR);
157
-		}
158
-		unset($GLOBALS[$idx_lang_tmp]);
159
-	}
160
-	return $idx_lang;
146
+    $idx_lang_before = $GLOBALS['idx_lang'] ?? null;
147
+    $idx_lang_tmp = ($GLOBALS['idx_lang'] ?? 'lang') . '@temporaire';
148
+    $GLOBALS['idx_lang'] = $idx_lang_tmp;
149
+    $idx_lang = include $fichier;
150
+    $GLOBALS['idx_lang'] = $idx_lang_before;
151
+    if (!is_array($idx_lang)) {
152
+        if (isset($GLOBALS[$idx_lang_tmp]) and is_array($GLOBALS[$idx_lang_tmp])) {
153
+            $idx_lang = $GLOBALS[$idx_lang_tmp];
154
+        } else {
155
+            $idx_lang = [];
156
+            spip_log(sprintf('Fichier de langue incorrect : %s', $fichier), _LOG_ERREUR);
157
+        }
158
+        unset($GLOBALS[$idx_lang_tmp]);
159
+    }
160
+    return $idx_lang;
161 161
 }
162 162
 
163 163
 /**
@@ -177,46 +177,46 @@  discard block
 block discarded – undo
177 177
  *    Liste des chemins de fichiers de langue à surcharger.
178 178
  **/
179 179
 function surcharger_langue($fichiers) {
180
-	static $surcharges = [];
181
-	if (!isset($GLOBALS['idx_lang'])) {
182
-		return;
183
-	}
180
+    static $surcharges = [];
181
+    if (!isset($GLOBALS['idx_lang'])) {
182
+        return;
183
+    }
184 184
 
185
-	if (!is_array($fichiers)) {
186
-		$fichiers = [$fichiers];
187
-	}
188
-	if (!count($fichiers)) {
189
-		return;
190
-	}
191
-	foreach ($fichiers as $fichier) {
192
-		if (!isset($surcharges[$fichier])) {
193
-			$surcharges[$fichier] = lire_fichier_langue($fichier);
194
-		}
195
-		if (is_array($surcharges[$fichier])) {
196
-			$GLOBALS[$GLOBALS['idx_lang']] ??= [];
197
-			$GLOBALS[$GLOBALS['idx_lang']] = array_merge(
198
-				$GLOBALS[$GLOBALS['idx_lang']],
199
-				$surcharges[$fichier]
200
-			);
201
-		}
202
-	}
185
+    if (!is_array($fichiers)) {
186
+        $fichiers = [$fichiers];
187
+    }
188
+    if (!count($fichiers)) {
189
+        return;
190
+    }
191
+    foreach ($fichiers as $fichier) {
192
+        if (!isset($surcharges[$fichier])) {
193
+            $surcharges[$fichier] = lire_fichier_langue($fichier);
194
+        }
195
+        if (is_array($surcharges[$fichier])) {
196
+            $GLOBALS[$GLOBALS['idx_lang']] ??= [];
197
+            $GLOBALS[$GLOBALS['idx_lang']] = array_merge(
198
+                $GLOBALS[$GLOBALS['idx_lang']],
199
+                $surcharges[$fichier]
200
+            );
201
+        }
202
+    }
203 203
 }
204 204
 
205 205
 
206 206
 
207 207
 class SPIP_Traductions_Description {
208
-	/** @var string code de langue (hors module) */
209
-	public $code;
210
-	/** @var string nom du module de langue */
211
-	public $module;
212
-	/** @var string langue de la traduction */
213
-	public $langue;
214
-	/** @var string traduction */
215
-	public $texte;
216
-	/** @var string var mode particulier appliqué ? */
217
-	public $mode;
218
-	/** @var bool Corrections des textes appliqué ? */
219
-	public $corrections = false;
208
+    /** @var string code de langue (hors module) */
209
+    public $code;
210
+    /** @var string nom du module de langue */
211
+    public $module;
212
+    /** @var string langue de la traduction */
213
+    public $langue;
214
+    /** @var string traduction */
215
+    public $texte;
216
+    /** @var string var mode particulier appliqué ? */
217
+    public $mode;
218
+    /** @var bool Corrections des textes appliqué ? */
219
+    public $corrections = false;
220 220
 }
221 221
 
222 222
 
@@ -258,99 +258,99 @@  discard block
 block discarded – undo
258 258
  *     - SPIP_Traductions_Description : traduction et description (texte, module, langue)
259 259
  **/
260 260
 function inc_traduire_dist($ori, $lang, $raw = false) {
261
-	static $deja_vu = [];
262
-	static $local = [];
261
+    static $deja_vu = [];
262
+    static $local = [];
263 263
 
264
-	if (isset($deja_vu[$lang][$ori]) and (_request('var_mode') != 'traduction')) {
265
-		return $raw ? $deja_vu[$lang][$ori] : $deja_vu[$lang][$ori]->texte;
266
-	}
264
+    if (isset($deja_vu[$lang][$ori]) and (_request('var_mode') != 'traduction')) {
265
+        return $raw ? $deja_vu[$lang][$ori] : $deja_vu[$lang][$ori]->texte;
266
+    }
267 267
 
268
-	// modules demandes explicitement <xxx|yyy|zzz:code> cf MODULES_IDIOMES
269
-	if (strpos($ori, ':')) {
270
-		[$modules, $code] = explode(':', $ori, 2);
271
-		$modules = explode('|', $modules);
272
-		$ori_complet = $ori;
273
-	} else {
274
-		$modules = ['spip', 'ecrire'];
275
-		$code = $ori;
276
-		$ori_complet = implode('|', $modules) . ':' . $ori;
277
-	}
268
+    // modules demandes explicitement <xxx|yyy|zzz:code> cf MODULES_IDIOMES
269
+    if (strpos($ori, ':')) {
270
+        [$modules, $code] = explode(':', $ori, 2);
271
+        $modules = explode('|', $modules);
272
+        $ori_complet = $ori;
273
+    } else {
274
+        $modules = ['spip', 'ecrire'];
275
+        $code = $ori;
276
+        $ori_complet = implode('|', $modules) . ':' . $ori;
277
+    }
278 278
 
279
-	$desc = new SPIP_Traductions_Description();
279
+    $desc = new SPIP_Traductions_Description();
280 280
 
281
-	// parcourir tous les modules jusqu'a ce qu'on trouve
282
-	foreach ($modules as $module) {
283
-		$var = 'i18n_' . $module . '_' . $lang;
281
+    // parcourir tous les modules jusqu'a ce qu'on trouve
282
+    foreach ($modules as $module) {
283
+        $var = 'i18n_' . $module . '_' . $lang;
284 284
 
285
-		if (empty($GLOBALS[$var])) {
286
-			charger_langue($lang, $module);
287
-			// surcharges persos -- on cherche
288
-			// (lang/)local_xx.php et/ou (lang/)local.php ...
289
-			if (!isset($local['local_' . $lang])) {
290
-				// redéfinir la langue en cours pour les surcharges (chercher_langue a pu le changer)
291
-				$GLOBALS['idx_lang'] = $var;
292
-				// ... (lang/)local_xx.php
293
-				$local['local_' . $lang] = chercher_module_lang('local', $lang);
294
-			}
295
-			if ($local['local_' . $lang]) {
296
-				surcharger_langue($local['local_' . $lang]);
297
-			}
298
-			// ... puis (lang/)local.php
299
-			if (!isset($local['local'])) {
300
-				$local['local'] = chercher_module_lang('local');
301
-			}
302
-			if ($local['local']) {
303
-				surcharger_langue($local['local']);
304
-			}
305
-		}
285
+        if (empty($GLOBALS[$var])) {
286
+            charger_langue($lang, $module);
287
+            // surcharges persos -- on cherche
288
+            // (lang/)local_xx.php et/ou (lang/)local.php ...
289
+            if (!isset($local['local_' . $lang])) {
290
+                // redéfinir la langue en cours pour les surcharges (chercher_langue a pu le changer)
291
+                $GLOBALS['idx_lang'] = $var;
292
+                // ... (lang/)local_xx.php
293
+                $local['local_' . $lang] = chercher_module_lang('local', $lang);
294
+            }
295
+            if ($local['local_' . $lang]) {
296
+                surcharger_langue($local['local_' . $lang]);
297
+            }
298
+            // ... puis (lang/)local.php
299
+            if (!isset($local['local'])) {
300
+                $local['local'] = chercher_module_lang('local');
301
+            }
302
+            if ($local['local']) {
303
+                surcharger_langue($local['local']);
304
+            }
305
+        }
306 306
 
307
-		if (isset($GLOBALS[$var][$code])) {
308
-			$desc->code = $code;
309
-			$desc->module = $module;
310
-			$desc->langue = $GLOBALS['lang_' . $var] ?? $lang;
311
-			$desc->texte = $GLOBALS[$var][$code];
312
-			break;
313
-		}
314
-	}
307
+        if (isset($GLOBALS[$var][$code])) {
308
+            $desc->code = $code;
309
+            $desc->module = $module;
310
+            $desc->langue = $GLOBALS['lang_' . $var] ?? $lang;
311
+            $desc->texte = $GLOBALS[$var][$code];
312
+            break;
313
+        }
314
+    }
315 315
 
316
-	if (!$desc->corrections) {
317
-		$desc->corrections = true;
318
-		// Retour aux sources si la chaine est absente dans la langue cible ;
319
-		// on essaie d'abord la langue du site, puis a defaut la langue fr
320
-		if (
321
-			($desc->texte === null || !strlen($desc->texte))
322
-			and $lang !== _LANGUE_PAR_DEFAUT
323
-		) {
324
-			if ($lang !== $GLOBALS['meta']['langue_site']) {
325
-				$desc = inc_traduire_dist($ori, $GLOBALS['meta']['langue_site'], true);
326
-			} else {
327
-				$desc = inc_traduire_dist($ori, _LANGUE_PAR_DEFAUT, true);
328
-			}
329
-		}
316
+    if (!$desc->corrections) {
317
+        $desc->corrections = true;
318
+        // Retour aux sources si la chaine est absente dans la langue cible ;
319
+        // on essaie d'abord la langue du site, puis a defaut la langue fr
320
+        if (
321
+            ($desc->texte === null || !strlen($desc->texte))
322
+            and $lang !== _LANGUE_PAR_DEFAUT
323
+        ) {
324
+            if ($lang !== $GLOBALS['meta']['langue_site']) {
325
+                $desc = inc_traduire_dist($ori, $GLOBALS['meta']['langue_site'], true);
326
+            } else {
327
+                $desc = inc_traduire_dist($ori, _LANGUE_PAR_DEFAUT, true);
328
+            }
329
+        }
330 330
 
331
-		// Supprimer la mention <NEW> ou <MODIF>
332
-		if ($desc->texte && substr($desc->texte, 0, 1) === '<') {
333
-			$desc->texte = str_replace(['<NEW>', '<MODIF>'], [], $desc->texte);
334
-		}
331
+        // Supprimer la mention <NEW> ou <MODIF>
332
+        if ($desc->texte && substr($desc->texte, 0, 1) === '<') {
333
+            $desc->texte = str_replace(['<NEW>', '<MODIF>'], [], $desc->texte);
334
+        }
335 335
 
336
-		// Si on n'est pas en utf-8, la chaine peut l'etre...
337
-		// le cas echeant on la convertit en entites html &#xxx;
338
-		if (
339
-			(!isset($GLOBALS['meta']['charset']) or $GLOBALS['meta']['charset'] !== 'utf-8')
340
-			and preg_match(',[\x7f-\xff],S', $desc->texte)
341
-		) {
342
-			include_spip('inc/charsets');
343
-			$desc->texte = charset2unicode($desc->texte, 'utf-8');
344
-		}
345
-	}
336
+        // Si on n'est pas en utf-8, la chaine peut l'etre...
337
+        // le cas echeant on la convertit en entites html &#xxx;
338
+        if (
339
+            (!isset($GLOBALS['meta']['charset']) or $GLOBALS['meta']['charset'] !== 'utf-8')
340
+            and preg_match(',[\x7f-\xff],S', $desc->texte)
341
+        ) {
342
+            include_spip('inc/charsets');
343
+            $desc->texte = charset2unicode($desc->texte, 'utf-8');
344
+        }
345
+    }
346 346
 
347
-	if (_request('var_mode') == 'traduction') {
348
-		$desc = definir_details_traduction($desc, $ori_complet);
349
-	} else {
350
-		$deja_vu[$lang][$ori] = $desc;
351
-	}
347
+    if (_request('var_mode') == 'traduction') {
348
+        $desc = definir_details_traduction($desc, $ori_complet);
349
+    } else {
350
+        $deja_vu[$lang][$ori] = $desc;
351
+    }
352 352
 
353
-	return $raw ? $desc : $desc->texte;
353
+    return $raw ? $desc : $desc->texte;
354 354
 }
355 355
 
356 356
 /**
@@ -362,23 +362,23 @@  discard block
 block discarded – undo
362 362
  * @return SPIP_Traductions_Description
363 363
  */
364 364
 function definir_details_traduction($desc, $modules) {
365
-	if (!$desc->mode and $desc->texte) {
366
-		// ne pas modifier 2 fois l'affichage
367
-		$desc->mode = 'traduction';
368
-		$classe = 'debug-traduction' . ($desc->module == 'ecrire' ? '-prive' : '');
369
-		$desc->texte = '<span '
370
-			. 'lang=' . $desc->langue
371
-			. ' class=' . $classe
372
-			. ' data-module=' . $desc->module
373
-			. ' data-code=' . $desc->code
374
-			. ' title=' . $modules . '(' . $desc->langue . ')>'
375
-			. $desc->texte
376
-			. '</span>';
377
-		$desc->texte = str_replace(
378
-			["$desc->module:", "$desc->module|"],
379
-			["*$desc->module*:", "*$desc->module*|"],
380
-			$desc->texte
381
-		);
382
-	}
383
-	return $desc;
365
+    if (!$desc->mode and $desc->texte) {
366
+        // ne pas modifier 2 fois l'affichage
367
+        $desc->mode = 'traduction';
368
+        $classe = 'debug-traduction' . ($desc->module == 'ecrire' ? '-prive' : '');
369
+        $desc->texte = '<span '
370
+            . 'lang=' . $desc->langue
371
+            . ' class=' . $classe
372
+            . ' data-module=' . $desc->module
373
+            . ' data-code=' . $desc->code
374
+            . ' title=' . $modules . '(' . $desc->langue . ')>'
375
+            . $desc->texte
376
+            . '</span>';
377
+        $desc->texte = str_replace(
378
+            ["$desc->module:", "$desc->module|"],
379
+            ["*$desc->module*:", "*$desc->module*|"],
380
+            $desc->texte
381
+        );
382
+    }
383
+    return $desc;
384 384
 }
Please login to merge, or discard this patch.
Spacing   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -41,7 +41,7 @@  discard block
 block discarded – undo
41 41
 	static $dirs = [];
42 42
 	$liste = [];
43 43
 	foreach (creer_chemin() as $dir) {
44
-		if (!isset($dirs[$a = $dir . $dirname])) {
44
+		if (!isset($dirs[$a = $dir.$dirname])) {
45 45
 			$dirs[$a] = (is_dir($a) || !$a);
46 46
 		}
47 47
 		if ($dirs[$a]) {
@@ -67,21 +67,21 @@  discard block
 block discarded – undo
67 67
  **/
68 68
 function chercher_module_lang($module, $lang = '') {
69 69
 	if ($lang) {
70
-		$lang = '_' . $lang;
70
+		$lang = '_'.$lang;
71 71
 	}
72 72
 
73 73
 	// 1) dans un repertoire nomme lang/ se trouvant sur le chemin
74 74
 	if (
75 75
 		$f = ($module == 'local'
76
-		? find_in_path($module . $lang . '.php', 'lang/')
77
-		: find_langs_in_path($module . $lang . '.php', 'lang/'))
76
+		? find_in_path($module.$lang.'.php', 'lang/')
77
+		: find_langs_in_path($module.$lang.'.php', 'lang/'))
78 78
 	) {
79 79
 		return is_array($f) ? $f : [$f];
80 80
 	}
81 81
 
82 82
 	// 2) directement dans le chemin (old style, uniquement pour local)
83 83
 	return (($module == 'local') or strpos($module, '/'))
84
-		? (($f = find_in_path($module . $lang . '.php')) ? [$f] : false)
84
+		? (($f = find_in_path($module.$lang.'.php')) ? [$f] : false)
85 85
 		: false;
86 86
 }
87 87
 
@@ -105,7 +105,7 @@  discard block
 block discarded – undo
105 105
  **/
106 106
 function charger_langue($lang, $module = 'spip') {
107 107
 	static $langs = [];
108
-	$var = 'i18n_' . $module . '_' . $lang;
108
+	$var = 'i18n_'.$module.'_'.$lang;
109 109
 	if (!isset($langs[$lang])) {
110 110
 		$langs[$lang] = [];
111 111
 		if ($lang) {
@@ -120,13 +120,13 @@  discard block
 block discarded – undo
120 120
 	}
121 121
 	foreach ($langs[$lang] as $l) {
122 122
 		if ($fichiers_lang = chercher_module_lang($module, $l)) {
123
-			$GLOBALS['idx_lang'] = 'i18n_' . $module . '_' . $l;
123
+			$GLOBALS['idx_lang'] = 'i18n_'.$module.'_'.$l;
124 124
 			$GLOBALS[$GLOBALS['idx_lang']] = lire_fichier_langue(array_shift($fichiers_lang));
125 125
 			surcharger_langue($fichiers_lang);
126 126
 			if ($l !== $lang) {
127
-				$GLOBALS[$var] = &$GLOBALS['i18n_' . $module . '_' . $l];
127
+				$GLOBALS[$var] = &$GLOBALS['i18n_'.$module.'_'.$l];
128 128
 			}
129
-			$GLOBALS['lang_' . $var] = $l;
129
+			$GLOBALS['lang_'.$var] = $l;
130 130
 			#spip_log("module de langue : {$module}_$l.php", 'traduire');
131 131
 			break;
132 132
 		}
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
  */
145 145
 function lire_fichier_langue(string $fichier): array {
146 146
 	$idx_lang_before = $GLOBALS['idx_lang'] ?? null;
147
-	$idx_lang_tmp = ($GLOBALS['idx_lang'] ?? 'lang') . '@temporaire';
147
+	$idx_lang_tmp = ($GLOBALS['idx_lang'] ?? 'lang').'@temporaire';
148 148
 	$GLOBALS['idx_lang'] = $idx_lang_tmp;
149 149
 	$idx_lang = include $fichier;
150 150
 	$GLOBALS['idx_lang'] = $idx_lang_before;
@@ -273,27 +273,27 @@  discard block
 block discarded – undo
273 273
 	} else {
274 274
 		$modules = ['spip', 'ecrire'];
275 275
 		$code = $ori;
276
-		$ori_complet = implode('|', $modules) . ':' . $ori;
276
+		$ori_complet = implode('|', $modules).':'.$ori;
277 277
 	}
278 278
 
279 279
 	$desc = new SPIP_Traductions_Description();
280 280
 
281 281
 	// parcourir tous les modules jusqu'a ce qu'on trouve
282 282
 	foreach ($modules as $module) {
283
-		$var = 'i18n_' . $module . '_' . $lang;
283
+		$var = 'i18n_'.$module.'_'.$lang;
284 284
 
285 285
 		if (empty($GLOBALS[$var])) {
286 286
 			charger_langue($lang, $module);
287 287
 			// surcharges persos -- on cherche
288 288
 			// (lang/)local_xx.php et/ou (lang/)local.php ...
289
-			if (!isset($local['local_' . $lang])) {
289
+			if (!isset($local['local_'.$lang])) {
290 290
 				// redéfinir la langue en cours pour les surcharges (chercher_langue a pu le changer)
291 291
 				$GLOBALS['idx_lang'] = $var;
292 292
 				// ... (lang/)local_xx.php
293
-				$local['local_' . $lang] = chercher_module_lang('local', $lang);
293
+				$local['local_'.$lang] = chercher_module_lang('local', $lang);
294 294
 			}
295
-			if ($local['local_' . $lang]) {
296
-				surcharger_langue($local['local_' . $lang]);
295
+			if ($local['local_'.$lang]) {
296
+				surcharger_langue($local['local_'.$lang]);
297 297
 			}
298 298
 			// ... puis (lang/)local.php
299 299
 			if (!isset($local['local'])) {
@@ -307,7 +307,7 @@  discard block
 block discarded – undo
307 307
 		if (isset($GLOBALS[$var][$code])) {
308 308
 			$desc->code = $code;
309 309
 			$desc->module = $module;
310
-			$desc->langue = $GLOBALS['lang_' . $var] ?? $lang;
310
+			$desc->langue = $GLOBALS['lang_'.$var] ?? $lang;
311 311
 			$desc->texte = $GLOBALS[$var][$code];
312 312
 			break;
313 313
 		}
@@ -365,13 +365,13 @@  discard block
 block discarded – undo
365 365
 	if (!$desc->mode and $desc->texte) {
366 366
 		// ne pas modifier 2 fois l'affichage
367 367
 		$desc->mode = 'traduction';
368
-		$classe = 'debug-traduction' . ($desc->module == 'ecrire' ? '-prive' : '');
368
+		$classe = 'debug-traduction'.($desc->module == 'ecrire' ? '-prive' : '');
369 369
 		$desc->texte = '<span '
370
-			. 'lang=' . $desc->langue
371
-			. ' class=' . $classe
372
-			. ' data-module=' . $desc->module
373
-			. ' data-code=' . $desc->code
374
-			. ' title=' . $modules . '(' . $desc->langue . ')>'
370
+			. 'lang='.$desc->langue
371
+			. ' class='.$classe
372
+			. ' data-module='.$desc->module
373
+			. ' data-code='.$desc->code
374
+			. ' title='.$modules.'('.$desc->langue.')>'
375 375
 			. $desc->texte
376 376
 			. '</span>';
377 377
 		$desc->texte = str_replace(
Please login to merge, or discard this patch.
ecrire/iterateur/sql.php 1 patch
Indentation   +209 added lines, -209 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -27,215 +27,215 @@  discard block
 block discarded – undo
27 27
  * Permet d'itérer sur des données en base de données
28 28
  */
29 29
 class IterateurSQL implements Iterator {
30
-	/**
31
-	 * Ressource sql
32
-	 *
33
-	 * @var Object|bool
34
-	 */
35
-	protected $sqlresult = false;
36
-
37
-	/**
38
-	 * row sql courante
39
-	 *
40
-	 * @var array|null
41
-	 */
42
-	protected $row = null;
43
-
44
-	protected bool $firstseek = false;
45
-
46
-	protected int $pos = -1;
47
-
48
-	protected string $type = 'SQL';
49
-
50
-	protected array $command = [];
51
-
52
-	protected array $info = [];
53
-
54
-
55
-	/** Erreur presente ? **/
56
-	public bool $err = false;
57
-
58
-	/**
59
-	 * Calcul du total des elements
60
-	 *
61
-	 * @var int|null
62
-	 **/
63
-	public $total = null;
64
-
65
-	/**
66
-	 * selectionner les donnees, ie faire la requete SQL
67
-	 *
68
-	 * @return void
69
-	 */
70
-	protected function select() {
71
-		$this->row = null;
72
-		$v = &$this->command;
73
-		$this->sqlresult = calculer_select(
74
-			$v['select'],
75
-			$v['from'],
76
-			$v['type'],
77
-			$v['where'],
78
-			$v['join'],
79
-			$v['groupby'],
80
-			$v['orderby'],
81
-			$v['limit'],
82
-			$v['having'],
83
-			$v['table'],
84
-			$v['id'],
85
-			$v['connect'],
86
-			$this->info
87
-		);
88
-		$this->err = !$this->sqlresult;
89
-		$this->firstseek = false;
90
-		$this->pos = -1;
91
-
92
-		// pas d'init a priori, le calcul ne sera fait qu'en cas de besoin (provoque une double requete souvent inutile en sqlite)
93
-		//$this->total = $this->count();
94
-	}
95
-
96
-	/*
30
+    /**
31
+     * Ressource sql
32
+     *
33
+     * @var Object|bool
34
+     */
35
+    protected $sqlresult = false;
36
+
37
+    /**
38
+     * row sql courante
39
+     *
40
+     * @var array|null
41
+     */
42
+    protected $row = null;
43
+
44
+    protected bool $firstseek = false;
45
+
46
+    protected int $pos = -1;
47
+
48
+    protected string $type = 'SQL';
49
+
50
+    protected array $command = [];
51
+
52
+    protected array $info = [];
53
+
54
+
55
+    /** Erreur presente ? **/
56
+    public bool $err = false;
57
+
58
+    /**
59
+     * Calcul du total des elements
60
+     *
61
+     * @var int|null
62
+     **/
63
+    public $total = null;
64
+
65
+    /**
66
+     * selectionner les donnees, ie faire la requete SQL
67
+     *
68
+     * @return void
69
+     */
70
+    protected function select() {
71
+        $this->row = null;
72
+        $v = &$this->command;
73
+        $this->sqlresult = calculer_select(
74
+            $v['select'],
75
+            $v['from'],
76
+            $v['type'],
77
+            $v['where'],
78
+            $v['join'],
79
+            $v['groupby'],
80
+            $v['orderby'],
81
+            $v['limit'],
82
+            $v['having'],
83
+            $v['table'],
84
+            $v['id'],
85
+            $v['connect'],
86
+            $this->info
87
+        );
88
+        $this->err = !$this->sqlresult;
89
+        $this->firstseek = false;
90
+        $this->pos = -1;
91
+
92
+        // pas d'init a priori, le calcul ne sera fait qu'en cas de besoin (provoque une double requete souvent inutile en sqlite)
93
+        //$this->total = $this->count();
94
+    }
95
+
96
+    /*
97 97
 	 * array command: les commandes d'initialisation
98 98
 	 * array info: les infos sur le squelette
99 99
 	 */
100
-	public function __construct($command, $info = []) {
101
-		$this->type = 'SQL';
102
-		$this->command = $command;
103
-		$this->info = $info;
104
-		$this->select();
105
-	}
106
-
107
-	/**
108
-	 * Rembobiner
109
-	 *
110
-	 * @return bool
111
-	 */
112
-	public function rewind(): void {
113
-		if ($this->pos > 0) {
114
-			$this->seek(0);
115
-		}
116
-	}
117
-
118
-	/**
119
-	 * Verifier l'etat de l'iterateur
120
-	 *
121
-	 * @return bool
122
-	 */
123
-	public function valid(): bool {
124
-		if ($this->err) {
125
-			return false;
126
-		}
127
-		if (!$this->firstseek) {
128
-			$this->next();
129
-		}
130
-
131
-		return is_array($this->row);
132
-	}
133
-
134
-	/**
135
-	 * Valeurs sur la position courante
136
-	 *
137
-	 * @return array
138
-	 */
139
-	#[\ReturnTypeWillChange]
140
-	public function current() {
141
-		return $this->row;
142
-	}
143
-
144
-	#[\ReturnTypeWillChange]
145
-	public function key() {
146
-		return $this->pos;
147
-	}
148
-
149
-	/**
150
-	 * Sauter a une position absolue
151
-	 *
152
-	 * @param int $n
153
-	 * @param null|string $continue
154
-	 * @return bool
155
-	 */
156
-	public function seek($n = 0, $continue = null) {
157
-		if (!sql_seek($this->sqlresult, $n, $this->command['connect'], $continue)) {
158
-			// SQLite ne sait pas seek(), il faut relancer la query
159
-			// si la position courante est apres la position visee
160
-			// il faut relancer la requete
161
-			if ($this->pos > $n) {
162
-				$this->free();
163
-				$this->select();
164
-				$this->valid();
165
-			}
166
-			// et utiliser la methode par defaut pour se deplacer au bon endroit
167
-			// (sera fait en cas d'echec de cette fonction)
168
-			return false;
169
-		}
170
-		$this->row = sql_fetch($this->sqlresult, $this->command['connect']);
171
-		$this->pos = min($n, $this->count());
172
-
173
-		return true;
174
-	}
175
-
176
-	/**
177
-	 * Avancer d'un cran
178
-	 *
179
-	 * @return void
180
-	 */
181
-	public function next(): void {
182
-		$this->row = sql_fetch($this->sqlresult, $this->command['connect']);
183
-		$this->pos++;
184
-		$this->firstseek |= true;
185
-	}
186
-
187
-	/**
188
-	 * Avancer et retourner les donnees pour le nouvel element
189
-	 *
190
-	 * @return array|bool|null
191
-	 */
192
-	public function fetch() {
193
-		if ($this->valid()) {
194
-			$r = $this->current();
195
-			$this->next();
196
-		} else {
197
-			$r = false;
198
-		}
199
-
200
-		return $r;
201
-	}
202
-
203
-	/**
204
-	 * liberer les ressources
205
-	 *
206
-	 * @return bool
207
-	 */
208
-	public function free() {
209
-		if (!$this->sqlresult) {
210
-			return true;
211
-		}
212
-		$a = sql_free($this->sqlresult, $this->command['connect']);
213
-		$this->sqlresult = null;
214
-
215
-		return $a;
216
-	}
217
-
218
-	/**
219
-	 * Compter le nombre de resultats
220
-	 *
221
-	 * @return int
222
-	 */
223
-	public function count() {
224
-		if (is_null($this->total)) {
225
-			if (!$this->sqlresult) {
226
-				$this->total = 0;
227
-			} else {
228
-				# cas count(*)
229
-				if (in_array('count(*)', $this->command['select'])) {
230
-					$this->valid();
231
-					$s = $this->current();
232
-					$this->total = $s['count(*)'];
233
-				} else {
234
-					$this->total = sql_count($this->sqlresult, $this->command['connect']);
235
-				}
236
-			}
237
-		}
238
-
239
-		return $this->total;
240
-	}
100
+    public function __construct($command, $info = []) {
101
+        $this->type = 'SQL';
102
+        $this->command = $command;
103
+        $this->info = $info;
104
+        $this->select();
105
+    }
106
+
107
+    /**
108
+     * Rembobiner
109
+     *
110
+     * @return bool
111
+     */
112
+    public function rewind(): void {
113
+        if ($this->pos > 0) {
114
+            $this->seek(0);
115
+        }
116
+    }
117
+
118
+    /**
119
+     * Verifier l'etat de l'iterateur
120
+     *
121
+     * @return bool
122
+     */
123
+    public function valid(): bool {
124
+        if ($this->err) {
125
+            return false;
126
+        }
127
+        if (!$this->firstseek) {
128
+            $this->next();
129
+        }
130
+
131
+        return is_array($this->row);
132
+    }
133
+
134
+    /**
135
+     * Valeurs sur la position courante
136
+     *
137
+     * @return array
138
+     */
139
+    #[\ReturnTypeWillChange]
140
+    public function current() {
141
+        return $this->row;
142
+    }
143
+
144
+    #[\ReturnTypeWillChange]
145
+    public function key() {
146
+        return $this->pos;
147
+    }
148
+
149
+    /**
150
+     * Sauter a une position absolue
151
+     *
152
+     * @param int $n
153
+     * @param null|string $continue
154
+     * @return bool
155
+     */
156
+    public function seek($n = 0, $continue = null) {
157
+        if (!sql_seek($this->sqlresult, $n, $this->command['connect'], $continue)) {
158
+            // SQLite ne sait pas seek(), il faut relancer la query
159
+            // si la position courante est apres la position visee
160
+            // il faut relancer la requete
161
+            if ($this->pos > $n) {
162
+                $this->free();
163
+                $this->select();
164
+                $this->valid();
165
+            }
166
+            // et utiliser la methode par defaut pour se deplacer au bon endroit
167
+            // (sera fait en cas d'echec de cette fonction)
168
+            return false;
169
+        }
170
+        $this->row = sql_fetch($this->sqlresult, $this->command['connect']);
171
+        $this->pos = min($n, $this->count());
172
+
173
+        return true;
174
+    }
175
+
176
+    /**
177
+     * Avancer d'un cran
178
+     *
179
+     * @return void
180
+     */
181
+    public function next(): void {
182
+        $this->row = sql_fetch($this->sqlresult, $this->command['connect']);
183
+        $this->pos++;
184
+        $this->firstseek |= true;
185
+    }
186
+
187
+    /**
188
+     * Avancer et retourner les donnees pour le nouvel element
189
+     *
190
+     * @return array|bool|null
191
+     */
192
+    public function fetch() {
193
+        if ($this->valid()) {
194
+            $r = $this->current();
195
+            $this->next();
196
+        } else {
197
+            $r = false;
198
+        }
199
+
200
+        return $r;
201
+    }
202
+
203
+    /**
204
+     * liberer les ressources
205
+     *
206
+     * @return bool
207
+     */
208
+    public function free() {
209
+        if (!$this->sqlresult) {
210
+            return true;
211
+        }
212
+        $a = sql_free($this->sqlresult, $this->command['connect']);
213
+        $this->sqlresult = null;
214
+
215
+        return $a;
216
+    }
217
+
218
+    /**
219
+     * Compter le nombre de resultats
220
+     *
221
+     * @return int
222
+     */
223
+    public function count() {
224
+        if (is_null($this->total)) {
225
+            if (!$this->sqlresult) {
226
+                $this->total = 0;
227
+            } else {
228
+                # cas count(*)
229
+                if (in_array('count(*)', $this->command['select'])) {
230
+                    $this->valid();
231
+                    $s = $this->current();
232
+                    $this->total = $s['count(*)'];
233
+                } else {
234
+                    $this->total = sql_count($this->sqlresult, $this->command['connect']);
235
+                }
236
+            }
237
+        }
238
+
239
+        return $this->total;
240
+    }
241 241
 }
Please login to merge, or discard this patch.
ecrire/public/composer.php 3 patches
Indentation   +768 added lines, -768 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  **/
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 include_spip('inc/texte');
@@ -42,234 +42,234 @@  discard block
 block discarded – undo
42 42
 
43 43
 function public_composer_dist($squelette, $mime_type, $gram, $source, string $connect = '') {
44 44
 
45
-	$skel = null;
46
-	$boucle = null;
47
-	$nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
48
-
49
-	//  si deja en memoire (INCLURE  a repetition) c'est bon.
50
-	if (function_exists($nom)) {
51
-		return $nom;
52
-	}
53
-
54
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
55
-		$GLOBALS['debug_objets']['courant'] = $nom;
56
-	}
57
-
58
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
59
-
60
-	// si squelette est deja compile et perenne, le charger
61
-	if (!squelette_obsolete($phpfile, $source)) {
62
-		include_once $phpfile;
63
-		#if (!squelette_obsolete($phpfile, $source)
64
-		#  AND lire_fichier ($phpfile, $skel_code,
65
-		#  array('critique' => 'oui', 'phpcheck' => 'oui'))){
66
-		## eval('?'.'>'.$skel_code);
67
-		#	 spip_log($skel_code, 'comp')
68
-		#}
69
-	}
70
-
71
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
72
-		include_once $lib;
73
-	}
74
-
75
-	// tester si le eval ci-dessus a mis le squelette en memoire
76
-
77
-	if (function_exists($nom)) {
78
-		return $nom;
79
-	}
80
-
81
-	// charger le source, si possible, et compiler
82
-	$skel_code = '';
83
-	if (lire_fichier($source, $skel)) {
84
-		$compiler = charger_fonction('compiler', 'public');
85
-		$skel_code = $compiler($skel, $nom, $gram, $source, $connect);
86
-	}
87
-
88
-	// Ne plus rien faire si le compilateur n'a pas pu operer.
89
-	if (!$skel_code) {
90
-		return false;
91
-	}
92
-
93
-	foreach ($skel_code as $id => $boucle) {
94
-		$f = $boucle->return;
95
-		try {
96
-			eval("return true; $f ;");
97
-		} catch (\ParseError $e) {
98
-			// Code syntaxiquement faux (critere etc mal programme')
99
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
100
-			erreur_squelette($msg, $boucle);
101
-			// continuer pour trouver d'autres fautes eventuelles
102
-			// mais prevenir que c'est mort
103
-			$nom = '';
104
-		}
105
-
106
-		// Contexte de compil inutile a present
107
-		// (mais la derniere valeur de $boucle est utilisee ci-dessous)
108
-		$skel_code[$id] = $f;
109
-	}
110
-
111
-	$code = '';
112
-	if ($nom) {
113
-		// Si le code est bon, concatener et mettre en cache
114
-		if (function_exists($nom)) {
115
-			$code = squelette_traduit($skel, $source, $phpfile, $skel_code);
116
-		} else {
117
-			// code semantiquement faux: bug du compilateur
118
-			// $boucle est en fait ici la fct principale du squelette
119
-			$msg = _T('zbug_erreur_compilation');
120
-			erreur_squelette($msg, $boucle);
121
-			$nom = '';
122
-		}
123
-	}
124
-
125
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
126
-		// Tracer ce qui vient d'etre compile
127
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
128
-
129
-		// si c'est ce que demande le debusqueur, lui passer la main
130
-		if (
131
-			$GLOBALS['debug_objets']['sourcefile']
132
-			and (_request('var_mode_objet') == $nom)
133
-			and (_request('var_mode_affiche') == 'code')
134
-		) {
135
-			erreur_squelette();
136
-		}
137
-	}
138
-
139
-	return $nom ?: false;
45
+    $skel = null;
46
+    $boucle = null;
47
+    $nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
48
+
49
+    //  si deja en memoire (INCLURE  a repetition) c'est bon.
50
+    if (function_exists($nom)) {
51
+        return $nom;
52
+    }
53
+
54
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
55
+        $GLOBALS['debug_objets']['courant'] = $nom;
56
+    }
57
+
58
+    $phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
59
+
60
+    // si squelette est deja compile et perenne, le charger
61
+    if (!squelette_obsolete($phpfile, $source)) {
62
+        include_once $phpfile;
63
+        #if (!squelette_obsolete($phpfile, $source)
64
+        #  AND lire_fichier ($phpfile, $skel_code,
65
+        #  array('critique' => 'oui', 'phpcheck' => 'oui'))){
66
+        ## eval('?'.'>'.$skel_code);
67
+        #	 spip_log($skel_code, 'comp')
68
+        #}
69
+    }
70
+
71
+    if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
72
+        include_once $lib;
73
+    }
74
+
75
+    // tester si le eval ci-dessus a mis le squelette en memoire
76
+
77
+    if (function_exists($nom)) {
78
+        return $nom;
79
+    }
80
+
81
+    // charger le source, si possible, et compiler
82
+    $skel_code = '';
83
+    if (lire_fichier($source, $skel)) {
84
+        $compiler = charger_fonction('compiler', 'public');
85
+        $skel_code = $compiler($skel, $nom, $gram, $source, $connect);
86
+    }
87
+
88
+    // Ne plus rien faire si le compilateur n'a pas pu operer.
89
+    if (!$skel_code) {
90
+        return false;
91
+    }
92
+
93
+    foreach ($skel_code as $id => $boucle) {
94
+        $f = $boucle->return;
95
+        try {
96
+            eval("return true; $f ;");
97
+        } catch (\ParseError $e) {
98
+            // Code syntaxiquement faux (critere etc mal programme')
99
+            $msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
100
+            erreur_squelette($msg, $boucle);
101
+            // continuer pour trouver d'autres fautes eventuelles
102
+            // mais prevenir que c'est mort
103
+            $nom = '';
104
+        }
105
+
106
+        // Contexte de compil inutile a present
107
+        // (mais la derniere valeur de $boucle est utilisee ci-dessous)
108
+        $skel_code[$id] = $f;
109
+    }
110
+
111
+    $code = '';
112
+    if ($nom) {
113
+        // Si le code est bon, concatener et mettre en cache
114
+        if (function_exists($nom)) {
115
+            $code = squelette_traduit($skel, $source, $phpfile, $skel_code);
116
+        } else {
117
+            // code semantiquement faux: bug du compilateur
118
+            // $boucle est en fait ici la fct principale du squelette
119
+            $msg = _T('zbug_erreur_compilation');
120
+            erreur_squelette($msg, $boucle);
121
+            $nom = '';
122
+        }
123
+    }
124
+
125
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
126
+        // Tracer ce qui vient d'etre compile
127
+        $GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
128
+
129
+        // si c'est ce que demande le debusqueur, lui passer la main
130
+        if (
131
+            $GLOBALS['debug_objets']['sourcefile']
132
+            and (_request('var_mode_objet') == $nom)
133
+            and (_request('var_mode_affiche') == 'code')
134
+        ) {
135
+            erreur_squelette();
136
+        }
137
+    }
138
+
139
+    return $nom ?: false;
140 140
 }
141 141
 
142 142
 function squelette_traduit($squelette, $sourcefile, $phpfile, $boucles) {
143 143
 
144
-	$code = null;
145
-	// Le dernier index est '' (fonction principale)
146
-	$noms = substr(join(', ', array_keys($boucles)), 0, -2);
147
-	if (CODE_COMMENTE) {
148
-		$code = "
144
+    $code = null;
145
+    // Le dernier index est '' (fonction principale)
146
+    $noms = substr(join(', ', array_keys($boucles)), 0, -2);
147
+    if (CODE_COMMENTE) {
148
+        $code = "
149 149
 /*
150 150
  * Squelette : $sourcefile
151 151
  * Date :      " . gmdate('D, d M Y H:i:s', @filemtime($sourcefile)) . ' GMT
152 152
  * Compile :   ' . gmdate('D, d M Y H:i:s', time()) . ' GMT
153 153
  * ' . (!$boucles ? 'Pas de boucle' : ('Boucles :   ' . $noms)) . '
154 154
  */ ';
155
-	}
155
+    }
156 156
 
157
-	$code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
158
-	if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
159
-		ecrire_fichier($phpfile, $code);
160
-	}
157
+    $code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
158
+    if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
159
+        ecrire_fichier($phpfile, $code);
160
+    }
161 161
 
162
-	return $code;
162
+    return $code;
163 163
 }
164 164
 
165 165
 // Le squelette compile est-il trop vieux ?
166 166
 function squelette_obsolete($skel, $squelette) {
167
-	static $date_change = null;
168
-	// ne verifier la date de mes_fonctions et mes_options qu'une seule fois
169
-	// par hit
170
-	if (is_null($date_change)) {
171
-		if (@file_exists($fonc = 'mes_fonctions.php')) {
172
-			$date_change = @filemtime($fonc);
173
-		} # compatibilite
174
-		if (defined('_FILE_OPTIONS')) {
175
-			$date_change = max($date_change, @filemtime(_FILE_OPTIONS));
176
-		}
177
-	}
178
-
179
-	return (
180
-		(defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug']))
181
-		or !@file_exists($skel)
182
-		or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
183
-			> ($date = @filemtime($skel)))
184
-		or ($date_change > $date)
185
-	);
167
+    static $date_change = null;
168
+    // ne verifier la date de mes_fonctions et mes_options qu'une seule fois
169
+    // par hit
170
+    if (is_null($date_change)) {
171
+        if (@file_exists($fonc = 'mes_fonctions.php')) {
172
+            $date_change = @filemtime($fonc);
173
+        } # compatibilite
174
+        if (defined('_FILE_OPTIONS')) {
175
+            $date_change = max($date_change, @filemtime(_FILE_OPTIONS));
176
+        }
177
+    }
178
+
179
+    return (
180
+        (defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug']))
181
+        or !@file_exists($skel)
182
+        or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
183
+            > ($date = @filemtime($skel)))
184
+        or ($date_change > $date)
185
+    );
186 186
 }
187 187
 
188 188
 // Activer l'invalideur de session
189 189
 function invalideur_session(&$Cache, $code = null) {
190
-	$Cache['session'] = spip_session();
190
+    $Cache['session'] = spip_session();
191 191
 
192
-	return $code;
192
+    return $code;
193 193
 }
194 194
 
195 195
 
196 196
 function analyse_resultat_skel($nom, $cache, $corps, $source = '') {
197
-	static $filtres = [];
198
-	$headers = [];
199
-	$corps ??= '';
200
-
201
-	// Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
202
-	// note: on essaie d'attrapper aussi certains de ces entetes codes
203
-	// "a la main" dans les squelettes, mais evidemment sans exhaustivite
204
-	if (
205
-		stripos($corps, 'header') !== false
206
-		and preg_match_all(
207
-			'/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
208
-			$corps,
209
-			$regs,
210
-			PREG_SET_ORDER
211
-		)
212
-	) {
213
-		foreach ($regs as $r) {
214
-			$corps = str_replace($r[0], '', $corps);
215
-			# $j = Content-Type, et pas content-TYPE.
216
-			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
217
-
218
-			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
219
-				$headers[$j] .= '|' . $r[3];
220
-			} else {
221
-				$headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
222
-			}
223
-		}
224
-	}
225
-	// S'agit-il d'un resultat constant ou contenant du code php
226
-	$process_ins = (
227
-		strpos($corps, '<' . '?') === false
228
-		or
229
-		(strpos($corps, '<' . '?xml') !== false and
230
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
231
-	)
232
-		? 'html'
233
-		: 'php';
234
-
235
-	$skel = [
236
-		'squelette' => $nom,
237
-		'source' => $source,
238
-		'process_ins' => $process_ins,
239
-		'invalideurs' => $cache,
240
-		'entetes' => $headers,
241
-		'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
242
-	];
243
-
244
-	// traiter #FILTRE{} et filtres
245
-	if (!isset($filtres[$nom])) {
246
-		$filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
247
-	}
248
-	$filtres_headers = [];
249
-	if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
250
-		$filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
251
-		unset($headers['X-Spip-Filtre']);
252
-	}
253
-	if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) {
254
-		include_spip('public/sandbox');
255
-		$corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
256
-
257
-		if ($process_ins == 'html') {
258
-			$skel['process_ins'] = (
259
-				strpos($corps, '<' . '?') === false
260
-				or
261
-				(strpos($corps, '<' . '?xml') !== false and
262
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
263
-			)
264
-				? 'html'
265
-				: 'php';
266
-		}
267
-	}
268
-
269
-	$skel['entetes'] = $headers;
270
-	$skel['texte'] = $corps;
271
-
272
-	return $skel;
197
+    static $filtres = [];
198
+    $headers = [];
199
+    $corps ??= '';
200
+
201
+    // Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
202
+    // note: on essaie d'attrapper aussi certains de ces entetes codes
203
+    // "a la main" dans les squelettes, mais evidemment sans exhaustivite
204
+    if (
205
+        stripos($corps, 'header') !== false
206
+        and preg_match_all(
207
+            '/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
208
+            $corps,
209
+            $regs,
210
+            PREG_SET_ORDER
211
+        )
212
+    ) {
213
+        foreach ($regs as $r) {
214
+            $corps = str_replace($r[0], '', $corps);
215
+            # $j = Content-Type, et pas content-TYPE.
216
+            $j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
217
+
218
+            if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
219
+                $headers[$j] .= '|' . $r[3];
220
+            } else {
221
+                $headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
222
+            }
223
+        }
224
+    }
225
+    // S'agit-il d'un resultat constant ou contenant du code php
226
+    $process_ins = (
227
+        strpos($corps, '<' . '?') === false
228
+        or
229
+        (strpos($corps, '<' . '?xml') !== false and
230
+            strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
231
+    )
232
+        ? 'html'
233
+        : 'php';
234
+
235
+    $skel = [
236
+        'squelette' => $nom,
237
+        'source' => $source,
238
+        'process_ins' => $process_ins,
239
+        'invalideurs' => $cache,
240
+        'entetes' => $headers,
241
+        'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
242
+    ];
243
+
244
+    // traiter #FILTRE{} et filtres
245
+    if (!isset($filtres[$nom])) {
246
+        $filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
247
+    }
248
+    $filtres_headers = [];
249
+    if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
250
+        $filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
251
+        unset($headers['X-Spip-Filtre']);
252
+    }
253
+    if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) {
254
+        include_spip('public/sandbox');
255
+        $corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
256
+
257
+        if ($process_ins == 'html') {
258
+            $skel['process_ins'] = (
259
+                strpos($corps, '<' . '?') === false
260
+                or
261
+                (strpos($corps, '<' . '?xml') !== false and
262
+                    strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
263
+            )
264
+                ? 'html'
265
+                : 'php';
266
+        }
267
+    }
268
+
269
+    $skel['entetes'] = $headers;
270
+    $skel['texte'] = $corps;
271
+
272
+    return $skel;
273 273
 }
274 274
 
275 275
 //
@@ -283,7 +283,7 @@  discard block
 block discarded – undo
283 283
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
284 284
 if ($lang_select) lang_select();
285 285
 ?'
286
-	. '>');
286
+    . '>');
287 287
 
288 288
 /**
289 289
  * Synthétise une balise dynamique : crée l'appel à l'inclusion
@@ -303,35 +303,35 @@  discard block
 block discarded – undo
303 303
  *     Code PHP pour inclure le squelette de la balise dynamique
304 304
  **/
305 305
 function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) {
306
-	if (
307
-		strncmp($file, '/', 1) !== 0
308
-		// pas de lien symbolique sous Windows
309
-		and !(stristr(PHP_OS, 'WIN') and strpos($file, ':') !== false)
310
-	) {
311
-		$file = './" . _DIR_RACINE . "' . $file;
312
-	}
313
-
314
-	$lang = $context_compil[4];
315
-	if (preg_match(',\W,', $lang)) {
316
-		$lang = '';
317
-	}
318
-
319
-	$args = array_map('argumenter_squelette', $args);
320
-	if (!empty($context_compil['appel_php_depuis_modele'])) {
321
-		$args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
322
-	}
323
-	$args = join(', ', $args);
324
-
325
-	$r = sprintf(
326
-		CODE_INCLURE_BALISE,
327
-		$file,
328
-		$lang,
329
-		$nom,
330
-		$args,
331
-		join(', ', array_map('_q', $context_compil))
332
-	);
333
-
334
-	return $r;
306
+    if (
307
+        strncmp($file, '/', 1) !== 0
308
+        // pas de lien symbolique sous Windows
309
+        and !(stristr(PHP_OS, 'WIN') and strpos($file, ':') !== false)
310
+    ) {
311
+        $file = './" . _DIR_RACINE . "' . $file;
312
+    }
313
+
314
+    $lang = $context_compil[4];
315
+    if (preg_match(',\W,', $lang)) {
316
+        $lang = '';
317
+    }
318
+
319
+    $args = array_map('argumenter_squelette', $args);
320
+    if (!empty($context_compil['appel_php_depuis_modele'])) {
321
+        $args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
322
+    }
323
+    $args = join(', ', $args);
324
+
325
+    $r = sprintf(
326
+        CODE_INCLURE_BALISE,
327
+        $file,
328
+        $lang,
329
+        $nom,
330
+        $args,
331
+        join(', ', array_map('_q', $context_compil))
332
+    );
333
+
334
+    return $r;
335 335
 }
336 336
 
337 337
 /**
@@ -349,18 +349,18 @@  discard block
 block discarded – undo
349 349
  **/
350 350
 function argumenter_squelette($v) {
351 351
 
352
-	if (is_object($v)) {
353
-		return var_export($v, true);
354
-	} elseif (!is_array($v)) {
355
-		return "'" . texte_script((string) $v) . "'";
356
-	} else {
357
-		$out = [];
358
-		foreach ($v as $k => $val) {
359
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
360
-		}
361
-
362
-		return 'array(' . join(', ', $out) . ')';
363
-	}
352
+    if (is_object($v)) {
353
+        return var_export($v, true);
354
+    } elseif (!is_array($v)) {
355
+        return "'" . texte_script((string) $v) . "'";
356
+    } else {
357
+        $out = [];
358
+        foreach ($v as $k => $val) {
359
+            $out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
360
+        }
361
+
362
+        return 'array(' . join(', ', $out) . ')';
363
+    }
364 364
 }
365 365
 
366 366
 /**
@@ -379,13 +379,13 @@  discard block
 block discarded – undo
379 379
  * @return string
380 380
  */
381 381
 function executer_balise_dynamique_dans_un_modele(...$args) {
382
-	if (test_espace_prive()) {
383
-		return executer_balise_dynamique(...$args);
384
-	}
385
-	else {
386
-		$str_args = base64_encode(serialize($args));
387
-		return "<?" . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
388
-	}
382
+    if (test_espace_prive()) {
383
+        return executer_balise_dynamique(...$args);
384
+    }
385
+    else {
386
+        $str_args = base64_encode(serialize($args));
387
+        return "<?" . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
388
+    }
389 389
 }
390 390
 
391 391
 
@@ -416,87 +416,87 @@  discard block
 block discarded – undo
416 416
  *     Code PHP d'exécutant l'inclusion du squelette (ou texte) de la balise dynamique
417 417
  **/
418 418
 function executer_balise_dynamique($nom, $args, $context_compil) {
419
-	/** @var string Nom de la balise à charger (balise demandée ou balise générique) */
420
-	$nom_balise = $nom;
421
-	/** @var string Nom de la balise générique (si utilisée) */
422
-	$nom_balise_generique = '';
423
-
424
-	$appel_php_depuis_modele = false;
425
-	if (
426
-		is_array($context_compil)
427
-		and !is_numeric($context_compil[3])
428
-		and empty($context_compil[0])
429
-		and empty($context_compil[1])
430
-		and empty($context_compil[2])
431
-		and empty($context_compil[3])
432
-	) {
433
-		$appel_php_depuis_modele = true;
434
-	}
435
-
436
-	if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
437
-		// Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
438
-		if ($balise_generique = chercher_balise_generique($nom)) {
439
-			// injecter en premier arg le nom de la balise
440
-			array_unshift($args, $nom);
441
-			$nom_balise_generique = $balise_generique['nom_generique'];
442
-			$fonction_balise = $balise_generique['fonction_generique'];
443
-			$nom_balise = $nom_balise_generique;
444
-		}
445
-		unset($balise_generique);
446
-	}
447
-
448
-	if (!$fonction_balise) {
449
-		$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
450
-		erreur_squelette($msg, $context_compil);
451
-
452
-		return '';
453
-	}
454
-
455
-	// retrouver le fichier qui a déclaré la fonction
456
-	// même si la fonction dynamique est déclarée dans un fichier de fonctions.
457
-	// Attention sous windows, getFileName() retourne un antislash.
458
-	$reflector = new ReflectionFunction($fonction_balise);
459
-	$file = str_replace('\\', '/', $reflector->getFileName());
460
-	if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
461
-		$file = substr($file, strlen(_ROOT_RACINE));
462
-	}
463
-
464
-	// Y a-t-il une fonction de traitement des arguments ?
465
-	$f = 'balise_' . $nom_balise . '_stat';
466
-
467
-	$r = !function_exists($f) ? $args : $f($args, $context_compil);
468
-
469
-	if (!is_array($r)) {
470
-		return $r;
471
-	}
472
-
473
-	// verifier que la fonction dyn est la,
474
-	// sinon se replier sur la generique si elle existe
475
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
476
-		if (
477
-			$balise_generique = chercher_balise_generique($nom)
478
-			and $nom_balise_generique = $balise_generique['nom_generique']
479
-			and $file = include_spip('balise/' . strtolower($nom_balise_generique))
480
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
481
-		) {
482
-			// et lui injecter en premier arg le nom de la balise
483
-			array_unshift($r, $nom);
484
-			$nom_balise = $nom_balise_generique;
485
-			if (!_DIR_RESTREINT) {
486
-				$file = _DIR_RESTREINT_ABS . $file;
487
-			}
488
-		} else {
489
-			$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
490
-			erreur_squelette($msg, $context_compil);
491
-
492
-			return '';
493
-		}
494
-	}
495
-
496
-	if ($appel_php_depuis_modele) {
497
-		$context_compil['appel_php_depuis_modele'] = true;
498
-	}
499
-	return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
419
+    /** @var string Nom de la balise à charger (balise demandée ou balise générique) */
420
+    $nom_balise = $nom;
421
+    /** @var string Nom de la balise générique (si utilisée) */
422
+    $nom_balise_generique = '';
423
+
424
+    $appel_php_depuis_modele = false;
425
+    if (
426
+        is_array($context_compil)
427
+        and !is_numeric($context_compil[3])
428
+        and empty($context_compil[0])
429
+        and empty($context_compil[1])
430
+        and empty($context_compil[2])
431
+        and empty($context_compil[3])
432
+    ) {
433
+        $appel_php_depuis_modele = true;
434
+    }
435
+
436
+    if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
437
+        // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
438
+        if ($balise_generique = chercher_balise_generique($nom)) {
439
+            // injecter en premier arg le nom de la balise
440
+            array_unshift($args, $nom);
441
+            $nom_balise_generique = $balise_generique['nom_generique'];
442
+            $fonction_balise = $balise_generique['fonction_generique'];
443
+            $nom_balise = $nom_balise_generique;
444
+        }
445
+        unset($balise_generique);
446
+    }
447
+
448
+    if (!$fonction_balise) {
449
+        $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
450
+        erreur_squelette($msg, $context_compil);
451
+
452
+        return '';
453
+    }
454
+
455
+    // retrouver le fichier qui a déclaré la fonction
456
+    // même si la fonction dynamique est déclarée dans un fichier de fonctions.
457
+    // Attention sous windows, getFileName() retourne un antislash.
458
+    $reflector = new ReflectionFunction($fonction_balise);
459
+    $file = str_replace('\\', '/', $reflector->getFileName());
460
+    if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
461
+        $file = substr($file, strlen(_ROOT_RACINE));
462
+    }
463
+
464
+    // Y a-t-il une fonction de traitement des arguments ?
465
+    $f = 'balise_' . $nom_balise . '_stat';
466
+
467
+    $r = !function_exists($f) ? $args : $f($args, $context_compil);
468
+
469
+    if (!is_array($r)) {
470
+        return $r;
471
+    }
472
+
473
+    // verifier que la fonction dyn est la,
474
+    // sinon se replier sur la generique si elle existe
475
+    if (!function_exists('balise_' . $nom_balise . '_dyn')) {
476
+        if (
477
+            $balise_generique = chercher_balise_generique($nom)
478
+            and $nom_balise_generique = $balise_generique['nom_generique']
479
+            and $file = include_spip('balise/' . strtolower($nom_balise_generique))
480
+            and function_exists('balise_' . $nom_balise_generique . '_dyn')
481
+        ) {
482
+            // et lui injecter en premier arg le nom de la balise
483
+            array_unshift($r, $nom);
484
+            $nom_balise = $nom_balise_generique;
485
+            if (!_DIR_RESTREINT) {
486
+                $file = _DIR_RESTREINT_ABS . $file;
487
+            }
488
+        } else {
489
+            $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
490
+            erreur_squelette($msg, $context_compil);
491
+
492
+            return '';
493
+        }
494
+    }
495
+
496
+    if ($appel_php_depuis_modele) {
497
+        $context_compil['appel_php_depuis_modele'] = true;
498
+    }
499
+    return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
500 500
 }
501 501
 
502 502
 /**
@@ -511,23 +511,23 @@  discard block
 block discarded – undo
511 511
  * @return array|null
512 512
  */
513 513
 function chercher_balise_generique($nom) {
514
-	if (false === strpos($nom, '_')) {
515
-		return null;
516
-	}
517
-	$nom_generique = $nom;
518
-	while (false !== ($p = strrpos($nom_generique, '_'))) {
519
-		$nom_generique = substr($nom_generique, 0, $p + 1);
520
-		$fonction_generique = charger_fonction($nom_generique, 'balise', true);
521
-		if ($fonction_generique) {
522
-			return [
523
-				'nom' => $nom,
524
-				'nom_generique' => $nom_generique,
525
-				'fonction_generique' => $fonction_generique,
526
-			];
527
-		}
528
-		$nom_generique = substr($nom_generique, 0, -1);
529
-	}
530
-	return null;
514
+    if (false === strpos($nom, '_')) {
515
+        return null;
516
+    }
517
+    $nom_generique = $nom;
518
+    while (false !== ($p = strrpos($nom_generique, '_'))) {
519
+        $nom_generique = substr($nom_generique, 0, $p + 1);
520
+        $fonction_generique = charger_fonction($nom_generique, 'balise', true);
521
+        if ($fonction_generique) {
522
+            return [
523
+                'nom' => $nom,
524
+                'nom_generique' => $nom_generique,
525
+                'fonction_generique' => $fonction_generique,
526
+            ];
527
+        }
528
+        $nom_generique = substr($nom_generique, 0, -1);
529
+    }
530
+    return null;
531 531
 }
532 532
 
533 533
 
@@ -551,50 +551,50 @@  discard block
 block discarded – undo
551 551
  * @return null;
552 552
  **/
553 553
 function lang_select_public($lang, $lang_select, $titre = null) {
554
-	// Cas 1. forcer_lang = true et pas de critere {lang_select}
555
-	if (
556
-		isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
557
-		and $lang_select !== 'oui'
558
-	) {
559
-		$lang = $GLOBALS['spip_lang'];
560
-	} // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
561
-	elseif (!strlen($lang)) {
562
-		$lang = $GLOBALS['spip_lang'];
563
-	} // Cas 3. l'objet est multilingue !
564
-	elseif (
565
-		$lang_select !== 'oui'
566
-		and strlen($titre) > 10
567
-		and strpos($titre, '<multi>') !== false
568
-		and strpos(echappe_html($titre), '<multi>') !== false
569
-	) {
570
-		$lang = $GLOBALS['spip_lang'];
571
-	}
572
-
573
-	// faire un lang_select() eventuellement sur la langue inchangee
574
-	lang_select($lang);
575
-
576
-	return;
554
+    // Cas 1. forcer_lang = true et pas de critere {lang_select}
555
+    if (
556
+        isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
557
+        and $lang_select !== 'oui'
558
+    ) {
559
+        $lang = $GLOBALS['spip_lang'];
560
+    } // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
561
+    elseif (!strlen($lang)) {
562
+        $lang = $GLOBALS['spip_lang'];
563
+    } // Cas 3. l'objet est multilingue !
564
+    elseif (
565
+        $lang_select !== 'oui'
566
+        and strlen($titre) > 10
567
+        and strpos($titre, '<multi>') !== false
568
+        and strpos(echappe_html($titre), '<multi>') !== false
569
+    ) {
570
+        $lang = $GLOBALS['spip_lang'];
571
+    }
572
+
573
+    // faire un lang_select() eventuellement sur la langue inchangee
574
+    lang_select($lang);
575
+
576
+    return;
577 577
 }
578 578
 
579 579
 
580 580
 // Si un tableau &doublons[articles] est passe en parametre,
581 581
 // il faut le nettoyer car il pourrait etre injecte en SQL
582 582
 function nettoyer_env_doublons($envd) {
583
-	foreach ($envd as $table => $liste) {
584
-		$n = '';
585
-		foreach (explode(',', $liste) as $val) {
586
-			if ($a = intval($val) and $val === strval($a)) {
587
-				$n .= ',' . $val;
588
-			}
589
-		}
590
-		if (strlen($n)) {
591
-			$envd[$table] = $n;
592
-		} else {
593
-			unset($envd[$table]);
594
-		}
595
-	}
596
-
597
-	return $envd;
583
+    foreach ($envd as $table => $liste) {
584
+        $n = '';
585
+        foreach (explode(',', $liste) as $val) {
586
+            if ($a = intval($val) and $val === strval($a)) {
587
+                $n .= ',' . $val;
588
+            }
589
+        }
590
+        if (strlen($n)) {
591
+            $envd[$table] = $n;
592
+        } else {
593
+            unset($envd[$table]);
594
+        }
595
+    }
596
+
597
+    return $envd;
598 598
 }
599 599
 
600 600
 /**
@@ -613,21 +613,21 @@  discard block
 block discarded – undo
613 613
  *     Opérateur trouvé (SELF ou SUBSELECT) sinon false.
614 614
  **/
615 615
 function match_self($w) {
616
-	if (is_string($w)) {
617
-		return false;
618
-	}
619
-	if (is_array($w)) {
620
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
621
-			return $w;
622
-		}
623
-		foreach (array_filter($w, 'is_array') as $sw) {
624
-			if ($m = match_self($sw)) {
625
-				return $m;
626
-			}
627
-		}
628
-	}
629
-
630
-	return false;
616
+    if (is_string($w)) {
617
+        return false;
618
+    }
619
+    if (is_array($w)) {
620
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
621
+            return $w;
622
+        }
623
+        foreach (array_filter($w, 'is_array') as $sw) {
624
+            if ($m = match_self($sw)) {
625
+                return $m;
626
+            }
627
+        }
628
+    }
629
+
630
+    return false;
631 631
 }
632 632
 
633 633
 /**
@@ -643,16 +643,16 @@  discard block
 block discarded – undo
643 643
  *     est remplacée par son code.
644 644
  **/
645 645
 function remplace_sous_requete($w, $sousrequete) {
646
-	if (is_array($w)) {
647
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
648
-			return $sousrequete;
649
-		}
650
-		foreach ($w as $k => $sw) {
651
-			$w[$k] = remplace_sous_requete($sw, $sousrequete);
652
-		}
653
-	}
654
-
655
-	return $w;
646
+    if (is_array($w)) {
647
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
648
+            return $sousrequete;
649
+        }
650
+        foreach ($w as $k => $sw) {
651
+            $w[$k] = remplace_sous_requete($sw, $sousrequete);
652
+        }
653
+    }
654
+
655
+    return $w;
656 656
 }
657 657
 
658 658
 /**
@@ -666,17 +666,17 @@  discard block
 block discarded – undo
666 666
  *     - Conditions avec des sous requêtes
667 667
  **/
668 668
 function trouver_sous_requetes($where) {
669
-	$where_simples = [];
670
-	$where_sous = [];
671
-	foreach ($where as $k => $w) {
672
-		if (match_self($w)) {
673
-			$where_sous[$k] = $w;
674
-		} else {
675
-			$where_simples[$k] = $w;
676
-		}
677
-	}
678
-
679
-	return [$where_simples, $where_sous];
669
+    $where_simples = [];
670
+    $where_sous = [];
671
+    foreach ($where as $k => $w) {
672
+        if (match_self($w)) {
673
+            $where_sous[$k] = $w;
674
+        } else {
675
+            $where_simples[$k] = $w;
676
+        }
677
+    }
678
+
679
+    return [$where_simples, $where_sous];
680 680
 }
681 681
 
682 682
 
@@ -702,292 +702,292 @@  discard block
 block discarded – undo
702 702
  * @return resource
703 703
  */
704 704
 function calculer_select(
705
-	$select = [],
706
-	$from = [],
707
-	$from_type = [],
708
-	$where = [],
709
-	$join = [],
710
-	$groupby = [],
711
-	$orderby = [],
712
-	$limit = '',
713
-	$having = [],
714
-	$table = '',
715
-	$id = '',
716
-	$serveur = '',
717
-	$requeter = true
705
+    $select = [],
706
+    $from = [],
707
+    $from_type = [],
708
+    $where = [],
709
+    $join = [],
710
+    $groupby = [],
711
+    $orderby = [],
712
+    $limit = '',
713
+    $having = [],
714
+    $table = '',
715
+    $id = '',
716
+    $serveur = '',
717
+    $requeter = true
718 718
 ) {
719 719
 
720
-	// retirer les criteres vides:
721
-	// {X ?} avec X absent de l'URL
722
-	// {par #ENV{X}} avec X absent de l'URL
723
-	// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
724
-	$menage = false;
725
-	foreach ($where as $k => $v) {
726
-		if (is_array($v) and count($v)) {
727
-			if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
728
-				$op = false;
729
-			} elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
730
-				$op = false;
731
-			} else {
732
-				$op = $v[0] ?: $v;
733
-			}
734
-		} else {
735
-			$op = $v;
736
-		}
737
-		if ((!$op) or ($op == 1) or ($op == '0=0')) {
738
-			unset($where[$k]);
739
-			$menage = true;
740
-		}
741
-	}
742
-
743
-	// evacuer les eventuels groupby vide issus d'un calcul dynamique
744
-	$groupby = array_diff($groupby, ['']);
745
-
746
-	// remplacer les sous requetes recursives au calcul
747
-	[$where_simples, $where_sous] = trouver_sous_requetes($where);
748
-	foreach ($where_sous as $k => $w) {
749
-		$menage = true;
750
-		// on recupere la sous requete
751
-		$sous = match_self($w);
752
-		if ($sous[0] == 'SELF') {
753
-			// c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
754
-			array_push($where_simples, $sous[2]);
755
-			$wheresub = [
756
-				$sous[2],
757
-				'0=0'
758
-			]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
759
-			$jsub = $join;
760
-			// trouver les jointures utiles a
761
-			// reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
762
-			// ie L1.objet='article'
763
-			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
764
-			$i = 0;
765
-			do {
766
-				$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
767
-					[$sous[1] . ' AS id'],
768
-					$from,
769
-					$from_type,
770
-					$wheresub,
771
-					$jsub,
772
-					[],
773
-					[],
774
-					'',
775
-					$having,
776
-					$table,
777
-					$id,
778
-					$serveur,
779
-					false
780
-				) . ')');
781
-				if (!$i) {
782
-					$i = 1;
783
-					$wherestring = calculer_where_to_string($where[$k]);
784
-					foreach ($join as $cle => $wj) {
785
-						if (
786
-							(is_countable($wj) ? count($wj) : 0) == 4
787
-							and strpos($wherestring, (string) "{$cle}.") !== false
788
-						) {
789
-							$i = 0;
790
-							$wheresub[] = $wj[3];
791
-							unset($jsub[$cle][3]);
792
-						}
793
-					}
794
-				}
795
-			} while ($i++ < 1);
796
-		}
797
-		if ($sous[0] == 'SUBSELECT') {
798
-			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
799
-			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
800
-			$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
801
-				$sous[1], # select
802
-				$sous[2], #from
803
-				[], #from_type
804
-				$sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
805
-				#where, qui peut etre de la forme string comme dans sql_select
806
-					[], #join
807
-				$sous[4] ?: [], #groupby
808
-				$sous[5] ?: [], #orderby
809
-				$sous[6], #limit
810
-				$sous[7] ?: [], #having
811
-				$table,
812
-				$id,
813
-				$serveur,
814
-				false
815
-			) . ')');
816
-		}
817
-		array_pop($where_simples);
818
-	}
819
-
820
-	foreach ($having as $k => $v) {
821
-		if ((!$v) or ($v == 1) or ($v == '0=0')) {
822
-			unset($having[$k]);
823
-		}
824
-	}
825
-
826
-	// Installer les jointures.
827
-	// Retirer celles seulement utiles aux criteres finalement absents mais
828
-	// parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
829
-	// si elle est seulement utile a Ln+1 elle meme inutile
830
-
831
-	$afrom = [];
832
-	$equiv = [];
833
-	$k = count($join);
834
-	foreach (array_reverse($join, true) as $cledef => $j) {
835
-		$cle = $cledef;
836
-		// le format de join est :
837
-		// array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
838
-		$join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
839
-		if (count($join[$cle]) == 2) {
840
-			$join[$cle][] = $join[$cle][1];
841
-		}
842
-		if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) {
843
-			$join[$cle][] = '';
844
-		}
845
-		[$t, $c, $carr, $and] = $join[$cle];
846
-		// si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
847
-		// pour compat avec ancienne convention
848
-		if (is_numeric($cle)) {
849
-			$cle = "L$k";
850
-		}
851
-		$cle_where_lie = "JOIN-$cle";
852
-		if (
853
-			!$menage
854
-			or isset($afrom[$cle])
855
-			or calculer_jointnul($cle, $select)
856
-			or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
857
-			or calculer_jointnul($cle, $having)
858
-			or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
859
-		) {
860
-			// corriger les references non explicites dans select
861
-			// ou groupby
862
-			foreach ($select as $i => $s) {
863
-				if ($s == $c) {
864
-					$select[$i] = "$cle.$c AS $c";
865
-					break;
866
-				}
867
-			}
868
-			foreach ($groupby as $i => $g) {
869
-				if ($g == $c) {
870
-					$groupby[$i] = "$cle.$c";
871
-					break;
872
-				}
873
-			}
874
-			// on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
875
-			// sans recours a preg_match
876
-			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
877
-			$afrom[$t][$cle] = [
878
-				"\n" .
879
-				($from_type[$cle] ?? 'INNER') . ' JOIN',
880
-				$from[$cle],
881
-				"AS $cle",
882
-				'ON (',
883
-				"$cle.$c",
884
-				'=',
885
-				"$t.$carr",
886
-				($and ? 'AND ' . $and : '') .
887
-				')'
888
-			];
889
-			if (isset($afrom[$cle])) {
890
-				$afrom[$t] = $afrom[$t] + $afrom[$cle];
891
-				unset($afrom[$cle]);
892
-			}
893
-			$equiv[] = $carr;
894
-		} else {
895
-			unset($join[$cledef]);
896
-			if (isset($where_simples[$cle_where_lie])) {
897
-				unset($where_simples[$cle_where_lie]);
898
-				unset($where[$cle_where_lie]);
899
-			}
900
-		}
901
-		unset($from[$cle]);
902
-		$k--;
903
-	}
904
-
905
-	if (count($afrom)) {
906
-		// Regarder si la table principale ne sert finalement a rien comme dans
907
-		//<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
908
-		//<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
909
-		//<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
910
-		// ou dans
911
-		//<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
912
-		// qui comporte plusieurs jointures
913
-		// ou dans
914
-		// <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
915
-		// <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
916
-		// penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
917
-		// <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
918
-		// penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
919
-		// <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
920
-
921
-		$t = key($from);
922
-		$c = current($from);
923
-		reset($from);
924
-		$e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
925
-		if (
926
-			!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
927
-				calculer_jointnul($t, $select, $e) or
928
-				calculer_jointnul($t, $join, $e) or
929
-				calculer_jointnul($t, $where, $e) or
930
-				calculer_jointnul($t, $orderby, $e) or
931
-				calculer_jointnul($t, $groupby, $e) or
932
-				calculer_jointnul($t, $having, $e))
933
-			&& count($afrom[$t])
934
-		) {
935
-			$nfrom = reset($afrom[$t]);
936
-			$nt = array_key_first($afrom[$t]);
937
-			unset($from[$t]);
938
-			$from[$nt] = $nfrom[1];
939
-			unset($afrom[$t][$nt]);
940
-			$afrom[$nt] = $afrom[$t];
941
-			unset($afrom[$t]);
942
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
943
-			$t = $nfrom[4];
944
-			$alias = '';
945
-			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
946
-			$oldcle = explode('.', $nfrom[6]);
947
-			$oldcle = end($oldcle);
948
-			$newcle = explode('.', $nfrom[4]);
949
-			$newcle = end($newcle);
950
-			if ($newcle != $oldcle) {
951
-				// si l'ancienne cle etait deja dans le select avec un AS
952
-				// reprendre simplement ce AS
953
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
954
-				if (preg_match($as, implode(',', $select), $m)) {
955
-					$alias = '';
956
-				} else {
957
-					$alias = ', ' . $nfrom[4] . " AS $oldcle";
958
-				}
959
-			}
960
-			$select = remplacer_jointnul($t . $alias, $select, $e);
961
-			$join = remplacer_jointnul($t, $join, $e);
962
-			$where = remplacer_jointnul($t, $where, $e);
963
-			$having = remplacer_jointnul($t, $having, $e);
964
-			$groupby = remplacer_jointnul($t, $groupby, $e);
965
-			$orderby = remplacer_jointnul($t, $orderby, $e);
966
-		}
967
-		$from = reinjecte_joint($afrom, $from);
968
-	}
969
-	if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
970
-		$wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
971
-		$GLOBALS['debug'] = [];
972
-		if ($wasdebug) {
973
-			$GLOBALS['debug']['debug'] = true;
974
-		}
975
-	}
976
-	$GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
977
-	$r = sql_select(
978
-		$select,
979
-		$from,
980
-		$where,
981
-		$groupby,
982
-		array_filter($orderby),
983
-		$limit,
984
-		$having,
985
-		$serveur,
986
-		$requeter
987
-	);
988
-	unset($GLOBALS['debug']['aucasou']);
989
-
990
-	return $r;
720
+    // retirer les criteres vides:
721
+    // {X ?} avec X absent de l'URL
722
+    // {par #ENV{X}} avec X absent de l'URL
723
+    // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
724
+    $menage = false;
725
+    foreach ($where as $k => $v) {
726
+        if (is_array($v) and count($v)) {
727
+            if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
728
+                $op = false;
729
+            } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
730
+                $op = false;
731
+            } else {
732
+                $op = $v[0] ?: $v;
733
+            }
734
+        } else {
735
+            $op = $v;
736
+        }
737
+        if ((!$op) or ($op == 1) or ($op == '0=0')) {
738
+            unset($where[$k]);
739
+            $menage = true;
740
+        }
741
+    }
742
+
743
+    // evacuer les eventuels groupby vide issus d'un calcul dynamique
744
+    $groupby = array_diff($groupby, ['']);
745
+
746
+    // remplacer les sous requetes recursives au calcul
747
+    [$where_simples, $where_sous] = trouver_sous_requetes($where);
748
+    foreach ($where_sous as $k => $w) {
749
+        $menage = true;
750
+        // on recupere la sous requete
751
+        $sous = match_self($w);
752
+        if ($sous[0] == 'SELF') {
753
+            // c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
754
+            array_push($where_simples, $sous[2]);
755
+            $wheresub = [
756
+                $sous[2],
757
+                '0=0'
758
+            ]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
759
+            $jsub = $join;
760
+            // trouver les jointures utiles a
761
+            // reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
762
+            // ie L1.objet='article'
763
+            // on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
764
+            $i = 0;
765
+            do {
766
+                $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
767
+                    [$sous[1] . ' AS id'],
768
+                    $from,
769
+                    $from_type,
770
+                    $wheresub,
771
+                    $jsub,
772
+                    [],
773
+                    [],
774
+                    '',
775
+                    $having,
776
+                    $table,
777
+                    $id,
778
+                    $serveur,
779
+                    false
780
+                ) . ')');
781
+                if (!$i) {
782
+                    $i = 1;
783
+                    $wherestring = calculer_where_to_string($where[$k]);
784
+                    foreach ($join as $cle => $wj) {
785
+                        if (
786
+                            (is_countable($wj) ? count($wj) : 0) == 4
787
+                            and strpos($wherestring, (string) "{$cle}.") !== false
788
+                        ) {
789
+                            $i = 0;
790
+                            $wheresub[] = $wj[3];
791
+                            unset($jsub[$cle][3]);
792
+                        }
793
+                    }
794
+                }
795
+            } while ($i++ < 1);
796
+        }
797
+        if ($sous[0] == 'SUBSELECT') {
798
+            // c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
799
+            array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
800
+            $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
801
+                $sous[1], # select
802
+                $sous[2], #from
803
+                [], #from_type
804
+                $sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
805
+                #where, qui peut etre de la forme string comme dans sql_select
806
+                    [], #join
807
+                $sous[4] ?: [], #groupby
808
+                $sous[5] ?: [], #orderby
809
+                $sous[6], #limit
810
+                $sous[7] ?: [], #having
811
+                $table,
812
+                $id,
813
+                $serveur,
814
+                false
815
+            ) . ')');
816
+        }
817
+        array_pop($where_simples);
818
+    }
819
+
820
+    foreach ($having as $k => $v) {
821
+        if ((!$v) or ($v == 1) or ($v == '0=0')) {
822
+            unset($having[$k]);
823
+        }
824
+    }
825
+
826
+    // Installer les jointures.
827
+    // Retirer celles seulement utiles aux criteres finalement absents mais
828
+    // parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
829
+    // si elle est seulement utile a Ln+1 elle meme inutile
830
+
831
+    $afrom = [];
832
+    $equiv = [];
833
+    $k = count($join);
834
+    foreach (array_reverse($join, true) as $cledef => $j) {
835
+        $cle = $cledef;
836
+        // le format de join est :
837
+        // array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
838
+        $join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
839
+        if (count($join[$cle]) == 2) {
840
+            $join[$cle][] = $join[$cle][1];
841
+        }
842
+        if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) {
843
+            $join[$cle][] = '';
844
+        }
845
+        [$t, $c, $carr, $and] = $join[$cle];
846
+        // si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
847
+        // pour compat avec ancienne convention
848
+        if (is_numeric($cle)) {
849
+            $cle = "L$k";
850
+        }
851
+        $cle_where_lie = "JOIN-$cle";
852
+        if (
853
+            !$menage
854
+            or isset($afrom[$cle])
855
+            or calculer_jointnul($cle, $select)
856
+            or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
857
+            or calculer_jointnul($cle, $having)
858
+            or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
859
+        ) {
860
+            // corriger les references non explicites dans select
861
+            // ou groupby
862
+            foreach ($select as $i => $s) {
863
+                if ($s == $c) {
864
+                    $select[$i] = "$cle.$c AS $c";
865
+                    break;
866
+                }
867
+            }
868
+            foreach ($groupby as $i => $g) {
869
+                if ($g == $c) {
870
+                    $groupby[$i] = "$cle.$c";
871
+                    break;
872
+                }
873
+            }
874
+            // on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
875
+            // sans recours a preg_match
876
+            // un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
877
+            $afrom[$t][$cle] = [
878
+                "\n" .
879
+                ($from_type[$cle] ?? 'INNER') . ' JOIN',
880
+                $from[$cle],
881
+                "AS $cle",
882
+                'ON (',
883
+                "$cle.$c",
884
+                '=',
885
+                "$t.$carr",
886
+                ($and ? 'AND ' . $and : '') .
887
+                ')'
888
+            ];
889
+            if (isset($afrom[$cle])) {
890
+                $afrom[$t] = $afrom[$t] + $afrom[$cle];
891
+                unset($afrom[$cle]);
892
+            }
893
+            $equiv[] = $carr;
894
+        } else {
895
+            unset($join[$cledef]);
896
+            if (isset($where_simples[$cle_where_lie])) {
897
+                unset($where_simples[$cle_where_lie]);
898
+                unset($where[$cle_where_lie]);
899
+            }
900
+        }
901
+        unset($from[$cle]);
902
+        $k--;
903
+    }
904
+
905
+    if (count($afrom)) {
906
+        // Regarder si la table principale ne sert finalement a rien comme dans
907
+        //<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
908
+        //<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
909
+        //<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
910
+        // ou dans
911
+        //<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
912
+        // qui comporte plusieurs jointures
913
+        // ou dans
914
+        // <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
915
+        // <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
916
+        // penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
917
+        // <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
918
+        // penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
919
+        // <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
920
+
921
+        $t = key($from);
922
+        $c = current($from);
923
+        reset($from);
924
+        $e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
925
+        if (
926
+            !(strpos($t, ' ') or // jointure des le depart cf boucle_doc
927
+                calculer_jointnul($t, $select, $e) or
928
+                calculer_jointnul($t, $join, $e) or
929
+                calculer_jointnul($t, $where, $e) or
930
+                calculer_jointnul($t, $orderby, $e) or
931
+                calculer_jointnul($t, $groupby, $e) or
932
+                calculer_jointnul($t, $having, $e))
933
+            && count($afrom[$t])
934
+        ) {
935
+            $nfrom = reset($afrom[$t]);
936
+            $nt = array_key_first($afrom[$t]);
937
+            unset($from[$t]);
938
+            $from[$nt] = $nfrom[1];
939
+            unset($afrom[$t][$nt]);
940
+            $afrom[$nt] = $afrom[$t];
941
+            unset($afrom[$t]);
942
+            $e = '/\b' . preg_quote($nfrom[6]) . '\b/';
943
+            $t = $nfrom[4];
944
+            $alias = '';
945
+            // verifier que les deux cles sont homonymes, sinon installer un alias dans le select
946
+            $oldcle = explode('.', $nfrom[6]);
947
+            $oldcle = end($oldcle);
948
+            $newcle = explode('.', $nfrom[4]);
949
+            $newcle = end($newcle);
950
+            if ($newcle != $oldcle) {
951
+                // si l'ancienne cle etait deja dans le select avec un AS
952
+                // reprendre simplement ce AS
953
+                $as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
954
+                if (preg_match($as, implode(',', $select), $m)) {
955
+                    $alias = '';
956
+                } else {
957
+                    $alias = ', ' . $nfrom[4] . " AS $oldcle";
958
+                }
959
+            }
960
+            $select = remplacer_jointnul($t . $alias, $select, $e);
961
+            $join = remplacer_jointnul($t, $join, $e);
962
+            $where = remplacer_jointnul($t, $where, $e);
963
+            $having = remplacer_jointnul($t, $having, $e);
964
+            $groupby = remplacer_jointnul($t, $groupby, $e);
965
+            $orderby = remplacer_jointnul($t, $orderby, $e);
966
+        }
967
+        $from = reinjecte_joint($afrom, $from);
968
+    }
969
+    if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
970
+        $wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
971
+        $GLOBALS['debug'] = [];
972
+        if ($wasdebug) {
973
+            $GLOBALS['debug']['debug'] = true;
974
+        }
975
+    }
976
+    $GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
977
+    $r = sql_select(
978
+        $select,
979
+        $from,
980
+        $where,
981
+        $groupby,
982
+        array_filter($orderby),
983
+        $limit,
984
+        $having,
985
+        $serveur,
986
+        $requeter
987
+    );
988
+    unset($GLOBALS['debug']['aucasou']);
989
+
990
+    return $r;
991 991
 }
992 992
 
993 993
 /**
@@ -998,79 +998,79 @@  discard block
 block discarded – undo
998 998
  * @return string
999 999
  */
1000 1000
 function calculer_where_to_string($v, $join = 'AND') {
1001
-	if (empty($v)) {
1002
-		return '';
1003
-	}
1004
-
1005
-	if (!is_array($v)) {
1006
-		return $v;
1007
-	} else {
1008
-		$exp = '';
1009
-		if (strtoupper($join) === 'AND') {
1010
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1011
-		} else {
1012
-			return $exp . join($join, $v);
1013
-		}
1014
-	}
1001
+    if (empty($v)) {
1002
+        return '';
1003
+    }
1004
+
1005
+    if (!is_array($v)) {
1006
+        return $v;
1007
+    } else {
1008
+        $exp = '';
1009
+        if (strtoupper($join) === 'AND') {
1010
+            return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1011
+        } else {
1012
+            return $exp . join($join, $v);
1013
+        }
1014
+    }
1015 1015
 }
1016 1016
 
1017 1017
 
1018 1018
 //condition suffisante (mais non necessaire) pour qu'une table soit utile
1019 1019
 
1020 1020
 function calculer_jointnul($cle, $exp, $equiv = '') {
1021
-	if (!is_array($exp)) {
1022
-		if ($equiv) {
1023
-			$exp = preg_replace($equiv, '', $exp);
1024
-		}
1025
-
1026
-		return preg_match("/\\b$cle\\./", $exp);
1027
-	} else {
1028
-		foreach ($exp as $v) {
1029
-			if (calculer_jointnul($cle, $v, $equiv)) {
1030
-				return true;
1031
-			}
1032
-		}
1033
-
1034
-		return false;
1035
-	}
1021
+    if (!is_array($exp)) {
1022
+        if ($equiv) {
1023
+            $exp = preg_replace($equiv, '', $exp);
1024
+        }
1025
+
1026
+        return preg_match("/\\b$cle\\./", $exp);
1027
+    } else {
1028
+        foreach ($exp as $v) {
1029
+            if (calculer_jointnul($cle, $v, $equiv)) {
1030
+                return true;
1031
+            }
1032
+        }
1033
+
1034
+        return false;
1035
+    }
1036 1036
 }
1037 1037
 
1038 1038
 function reinjecte_joint($afrom, $from) {
1039
-	$from_synth = [];
1040
-	foreach ($from as $k => $v) {
1041
-		$from_synth[$k] = $from[$k];
1042
-		if (isset($afrom[$k])) {
1043
-			foreach ($afrom[$k] as $kk => $vv) {
1044
-				$afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1045
-			}
1046
-			$from_synth["$k@"] = implode(' ', $afrom[$k]);
1047
-			unset($afrom[$k]);
1048
-		}
1049
-	}
1050
-
1051
-	return $from_synth;
1039
+    $from_synth = [];
1040
+    foreach ($from as $k => $v) {
1041
+        $from_synth[$k] = $from[$k];
1042
+        if (isset($afrom[$k])) {
1043
+            foreach ($afrom[$k] as $kk => $vv) {
1044
+                $afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1045
+            }
1046
+            $from_synth["$k@"] = implode(' ', $afrom[$k]);
1047
+            unset($afrom[$k]);
1048
+        }
1049
+    }
1050
+
1051
+    return $from_synth;
1052 1052
 }
1053 1053
 
1054 1054
 function remplacer_jointnul($cle, $exp, $equiv = '') {
1055
-	if (!is_array($exp)) {
1056
-		return preg_replace($equiv, $cle, $exp);
1057
-	} else {
1058
-		foreach ($exp as $k => $v) {
1059
-			$exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1060
-		}
1061
-
1062
-		return $exp;
1063
-	}
1055
+    if (!is_array($exp)) {
1056
+        return preg_replace($equiv, $cle, $exp);
1057
+    } else {
1058
+        foreach ($exp as $k => $v) {
1059
+            $exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1060
+        }
1061
+
1062
+        return $exp;
1063
+    }
1064 1064
 }
1065 1065
 
1066 1066
 // calcul du nom du squelette
1067 1067
 function calculer_nom_fonction_squel($skel, $mime_type = 'html', string $connect = '') {
1068
-	// ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1069
-	if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1070
-		$skel = substr($skel, strlen(_DIR_RACINE));
1071
-	}
1072
-
1073
-	return $mime_type
1074
-	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1075
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1068
+    // ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1069
+    if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1070
+        $skel = substr($skel, strlen(_DIR_RACINE));
1071
+    }
1072
+
1073
+    return $mime_type
1074
+    . (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1075
+    . md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1076 1076
 }
Please login to merge, or discard this patch.
Spacing   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
 		$GLOBALS['debug_objets']['courant'] = $nom;
56 56
 	}
57 57
 
58
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
58
+	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true).$nom.'.php';
59 59
 
60 60
 	// si squelette est deja compile et perenne, le charger
61 61
 	if (!squelette_obsolete($phpfile, $source)) {
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
 		#}
69 69
 	}
70 70
 
71
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
71
+	if (file_exists($lib = $squelette.'_fonctions'.'.php')) {
72 72
 		include_once $lib;
73 73
 	}
74 74
 
@@ -96,7 +96,7 @@  discard block
 block discarded – undo
96 96
 			eval("return true; $f ;");
97 97
 		} catch (\ParseError $e) {
98 98
 			// Code syntaxiquement faux (critere etc mal programme')
99
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
99
+			$msg = _T('zbug_erreur_compilation').' | Line '.$e->getLine().' : '.$e->getMessage();
100 100
 			erreur_squelette($msg, $boucle);
101 101
 			// continuer pour trouver d'autres fautes eventuelles
102 102
 			// mais prevenir que c'est mort
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
 
125 125
 	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
126 126
 		// Tracer ce qui vient d'etre compile
127
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
127
+		$GLOBALS['debug_objets']['code'][$nom.'tout'] = $code;
128 128
 
129 129
 		// si c'est ce que demande le debusqueur, lui passer la main
130 130
 		if (
@@ -148,13 +148,13 @@  discard block
 block discarded – undo
148 148
 		$code = "
149 149
 /*
150 150
  * Squelette : $sourcefile
151
- * Date :      " . gmdate('D, d M Y H:i:s', @filemtime($sourcefile)) . ' GMT
152
- * Compile :   ' . gmdate('D, d M Y H:i:s', time()) . ' GMT
153
- * ' . (!$boucles ? 'Pas de boucle' : ('Boucles :   ' . $noms)) . '
151
+ * Date :      ".gmdate('D, d M Y H:i:s', @filemtime($sourcefile)).' GMT
152
+ * Compile :   ' . gmdate('D, d M Y H:i:s', time()).' GMT
153
+ * ' . (!$boucles ? 'Pas de boucle' : ('Boucles :   '.$noms)).'
154 154
  */ ';
155 155
 	}
156 156
 
157
-	$code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
157
+	$code = '<'."?php\n".$code.join('', $boucles)."\n";
158 158
 	if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
159 159
 		ecrire_fichier($phpfile, $code);
160 160
 	}
@@ -216,18 +216,18 @@  discard block
 block discarded – undo
216 216
 			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
217 217
 
218 218
 			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
219
-				$headers[$j] .= '|' . $r[3];
219
+				$headers[$j] .= '|'.$r[3];
220 220
 			} else {
221
-				$headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
221
+				$headers[$j] = str_replace(['\\\\', "\\'", '\\"'], ['\\', "'", '"'], $r[3]);
222 222
 			}
223 223
 		}
224 224
 	}
225 225
 	// S'agit-il d'un resultat constant ou contenant du code php
226 226
 	$process_ins = (
227
-		strpos($corps, '<' . '?') === false
227
+		strpos($corps, '<'.'?') === false
228 228
 		or
229
-		(strpos($corps, '<' . '?xml') !== false and
230
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
229
+		(strpos($corps, '<'.'?xml') !== false and
230
+			strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
231 231
 	)
232 232
 		? 'html'
233 233
 		: 'php';
@@ -256,10 +256,10 @@  discard block
 block discarded – undo
256 256
 
257 257
 		if ($process_ins == 'html') {
258 258
 			$skel['process_ins'] = (
259
-				strpos($corps, '<' . '?') === false
259
+				strpos($corps, '<'.'?') === false
260 260
 				or
261
-				(strpos($corps, '<' . '?xml') !== false and
262
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
261
+				(strpos($corps, '<'.'?xml') !== false and
262
+					strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
263 263
 			)
264 264
 				? 'html'
265 265
 				: 'php';
@@ -277,7 +277,7 @@  discard block
 block discarded – undo
277 277
 //
278 278
 
279 279
 /** Code PHP pour inclure une balise dynamique à l'exécution d'une page */
280
-define('CODE_INCLURE_BALISE', '<' . '?php
280
+define('CODE_INCLURE_BALISE', '<'.'?php
281 281
 include_once("%s");
282 282
 if ($lang_select = "%s") $lang_select = lang_select($lang_select);
283 283
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
@@ -308,7 +308,7 @@  discard block
 block discarded – undo
308 308
 		// pas de lien symbolique sous Windows
309 309
 		and !(stristr(PHP_OS, 'WIN') and strpos($file, ':') !== false)
310 310
 	) {
311
-		$file = './" . _DIR_RACINE . "' . $file;
311
+		$file = './" . _DIR_RACINE . "'.$file;
312 312
 	}
313 313
 
314 314
 	$lang = $context_compil[4];
@@ -318,7 +318,7 @@  discard block
 block discarded – undo
318 318
 
319 319
 	$args = array_map('argumenter_squelette', $args);
320 320
 	if (!empty($context_compil['appel_php_depuis_modele'])) {
321
-		$args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
321
+		$args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')';
322 322
 	}
323 323
 	$args = join(', ', $args);
324 324
 
@@ -352,14 +352,14 @@  discard block
 block discarded – undo
352 352
 	if (is_object($v)) {
353 353
 		return var_export($v, true);
354 354
 	} elseif (!is_array($v)) {
355
-		return "'" . texte_script((string) $v) . "'";
355
+		return "'".texte_script((string) $v)."'";
356 356
 	} else {
357 357
 		$out = [];
358 358
 		foreach ($v as $k => $val) {
359
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
359
+			$out [] = argumenter_squelette($k).'=>'.argumenter_squelette($val);
360 360
 		}
361 361
 
362
-		return 'array(' . join(', ', $out) . ')';
362
+		return 'array('.join(', ', $out).')';
363 363
 	}
364 364
 }
365 365
 
@@ -384,7 +384,7 @@  discard block
 block discarded – undo
384 384
 	}
385 385
 	else {
386 386
 		$str_args = base64_encode(serialize($args));
387
-		return "<?" . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
387
+		return "<?"."php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
388 388
 	}
389 389
 }
390 390
 
@@ -462,7 +462,7 @@  discard block
 block discarded – undo
462 462
 	}
463 463
 
464 464
 	// Y a-t-il une fonction de traitement des arguments ?
465
-	$f = 'balise_' . $nom_balise . '_stat';
465
+	$f = 'balise_'.$nom_balise.'_stat';
466 466
 
467 467
 	$r = !function_exists($f) ? $args : $f($args, $context_compil);
468 468
 
@@ -472,18 +472,18 @@  discard block
 block discarded – undo
472 472
 
473 473
 	// verifier que la fonction dyn est la,
474 474
 	// sinon se replier sur la generique si elle existe
475
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
475
+	if (!function_exists('balise_'.$nom_balise.'_dyn')) {
476 476
 		if (
477 477
 			$balise_generique = chercher_balise_generique($nom)
478 478
 			and $nom_balise_generique = $balise_generique['nom_generique']
479
-			and $file = include_spip('balise/' . strtolower($nom_balise_generique))
480
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
479
+			and $file = include_spip('balise/'.strtolower($nom_balise_generique))
480
+			and function_exists('balise_'.$nom_balise_generique.'_dyn')
481 481
 		) {
482 482
 			// et lui injecter en premier arg le nom de la balise
483 483
 			array_unshift($r, $nom);
484 484
 			$nom_balise = $nom_balise_generique;
485 485
 			if (!_DIR_RESTREINT) {
486
-				$file = _DIR_RESTREINT_ABS . $file;
486
+				$file = _DIR_RESTREINT_ABS.$file;
487 487
 			}
488 488
 		} else {
489 489
 			$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
@@ -584,7 +584,7 @@  discard block
 block discarded – undo
584 584
 		$n = '';
585 585
 		foreach (explode(',', $liste) as $val) {
586 586
 			if ($a = intval($val) and $val === strval($a)) {
587
-				$n .= ',' . $val;
587
+				$n .= ','.$val;
588 588
 			}
589 589
 		}
590 590
 		if (strlen($n)) {
@@ -763,8 +763,8 @@  discard block
 block discarded – undo
763 763
 			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
764 764
 			$i = 0;
765 765
 			do {
766
-				$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
767
-					[$sous[1] . ' AS id'],
766
+				$where[$k] = remplace_sous_requete($w, '('.calculer_select(
767
+					[$sous[1].' AS id'],
768 768
 					$from,
769 769
 					$from_type,
770 770
 					$wheresub,
@@ -777,7 +777,7 @@  discard block
 block discarded – undo
777 777
 					$id,
778 778
 					$serveur,
779 779
 					false
780
-				) . ')');
780
+				).')');
781 781
 				if (!$i) {
782 782
 					$i = 1;
783 783
 					$wherestring = calculer_where_to_string($where[$k]);
@@ -797,7 +797,7 @@  discard block
 block discarded – undo
797 797
 		if ($sous[0] == 'SUBSELECT') {
798 798
 			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
799 799
 			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
800
-			$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
800
+			$where[$k] = remplace_sous_requete($w, '('.calculer_select(
801 801
 				$sous[1], # select
802 802
 				$sous[2], #from
803 803
 				[], #from_type
@@ -812,7 +812,7 @@  discard block
 block discarded – undo
812 812
 				$id,
813 813
 				$serveur,
814 814
 				false
815
-			) . ')');
815
+			).')');
816 816
 		}
817 817
 		array_pop($where_simples);
818 818
 	}
@@ -875,15 +875,15 @@  discard block
 block discarded – undo
875 875
 			// sans recours a preg_match
876 876
 			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
877 877
 			$afrom[$t][$cle] = [
878
-				"\n" .
879
-				($from_type[$cle] ?? 'INNER') . ' JOIN',
878
+				"\n".
879
+				($from_type[$cle] ?? 'INNER').' JOIN',
880 880
 				$from[$cle],
881 881
 				"AS $cle",
882 882
 				'ON (',
883 883
 				"$cle.$c",
884 884
 				'=',
885 885
 				"$t.$carr",
886
-				($and ? 'AND ' . $and : '') .
886
+				($and ? 'AND '.$and : '').
887 887
 				')'
888 888
 			];
889 889
 			if (isset($afrom[$cle])) {
@@ -921,7 +921,7 @@  discard block
 block discarded – undo
921 921
 		$t = key($from);
922 922
 		$c = current($from);
923 923
 		reset($from);
924
-		$e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
924
+		$e = '/\b('."$t\\.".join('|'.$t.'\.', $equiv).')\b/';
925 925
 		if (
926 926
 			!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
927 927
 				calculer_jointnul($t, $select, $e) or
@@ -939,7 +939,7 @@  discard block
 block discarded – undo
939 939
 			unset($afrom[$t][$nt]);
940 940
 			$afrom[$nt] = $afrom[$t];
941 941
 			unset($afrom[$t]);
942
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
942
+			$e = '/\b'.preg_quote($nfrom[6]).'\b/';
943 943
 			$t = $nfrom[4];
944 944
 			$alias = '';
945 945
 			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
@@ -950,14 +950,14 @@  discard block
 block discarded – undo
950 950
 			if ($newcle != $oldcle) {
951 951
 				// si l'ancienne cle etait deja dans le select avec un AS
952 952
 				// reprendre simplement ce AS
953
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
953
+				$as = '/\b'.preg_quote($nfrom[6]).'\s+(AS\s+\w+)\b/';
954 954
 				if (preg_match($as, implode(',', $select), $m)) {
955 955
 					$alias = '';
956 956
 				} else {
957
-					$alias = ', ' . $nfrom[4] . " AS $oldcle";
957
+					$alias = ', '.$nfrom[4]." AS $oldcle";
958 958
 				}
959 959
 			}
960
-			$select = remplacer_jointnul($t . $alias, $select, $e);
960
+			$select = remplacer_jointnul($t.$alias, $select, $e);
961 961
 			$join = remplacer_jointnul($t, $join, $e);
962 962
 			$where = remplacer_jointnul($t, $where, $e);
963 963
 			$having = remplacer_jointnul($t, $having, $e);
@@ -1007,9 +1007,9 @@  discard block
 block discarded – undo
1007 1007
 	} else {
1008 1008
 		$exp = '';
1009 1009
 		if (strtoupper($join) === 'AND') {
1010
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1010
+			return $exp.join(" $join ", array_map('calculer_where_to_string', $v));
1011 1011
 		} else {
1012
-			return $exp . join($join, $v);
1012
+			return $exp.join($join, $v);
1013 1013
 		}
1014 1014
 	}
1015 1015
 }
@@ -1071,6 +1071,6 @@  discard block
 block discarded – undo
1071 1071
 	}
1072 1072
 
1073 1073
 	return $mime_type
1074
-	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1075
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1074
+	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)).'_'
1075
+	. md5($GLOBALS['spip_version_code'].' * '.$skel.(isset($GLOBALS['marqueur_skel']) ? '*'.$GLOBALS['marqueur_skel'] : ''));
1076 1076
 }
Please login to merge, or discard this patch.
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -381,8 +381,7 @@
 block discarded – undo
381 381
 function executer_balise_dynamique_dans_un_modele(...$args) {
382 382
 	if (test_espace_prive()) {
383 383
 		return executer_balise_dynamique(...$args);
384
-	}
385
-	else {
384
+	} else {
386 385
 		$str_args = base64_encode(serialize($args));
387 386
 		return "<?" . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
388 387
 	}
Please login to merge, or discard this patch.
ecrire/public/debusquer.php 2 patches
Indentation   +695 added lines, -695 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('public/decompiler');
@@ -68,133 +68,133 @@  discard block
 block discarded – undo
68 68
  *     - true si $opt 'erreurs' = 'reset'
69 69
  **/
70 70
 function public_debusquer_dist($message = '', $lieu = '', $opt = []) {
71
-	static $should_log;
72
-	static $tableau_des_erreurs = [];
73
-
74
-	// Pour des tests unitaires, pouvoir récupérer les erreurs générées
75
-	if (isset($opt['erreurs'])) {
76
-		if ($opt['erreurs'] == 'get') {
77
-			return $tableau_des_erreurs;
78
-		}
79
-		if ($opt['erreurs'] == 'reset') {
80
-			$tableau_des_erreurs = [];
81
-
82
-			return true;
83
-		}
84
-	}
85
-
86
-	if (is_null($should_log)) {
87
-		$should_log = (empty($GLOBALS['visiteur_session']) || !include_spip('inc/autoriser') || !autoriser('debug'));
88
-	}
89
-
90
-	// Erreur ou appel final ?
91
-	if ($message) {
92
-		$message = debusquer_compose_message($message);
93
-		$tableau_des_erreurs[] = [$message, $lieu];
94
-		set_request('var_mode', 'debug');
95
-		$GLOBALS['bouton_admin_debug'] = true;
96
-		// Permettre a la compil de continuer
97
-		if (is_object($lieu) and (!isset($lieu->code) or !$lieu->code)) {
98
-			$lieu->code = "''";
99
-		}
100
-		// loger si personne ne verra l'erreur
101
-		if ($should_log) {
102
-			debusquer_loger_erreur($message, $lieu);
103
-		}
104
-		// forcer l'appel au debusqueur en cas de boucles infernales
105
-		$urgence = (_DEBUG_MAX_SQUELETTE_ERREURS and (is_countable($tableau_des_erreurs) ? count($tableau_des_erreurs) : 0) > _DEBUG_MAX_SQUELETTE_ERREURS);
106
-		if (!$urgence) {
107
-			return;
108
-		}
109
-	}
110
-	if (empty($GLOBALS['debug_objets']['principal'])) {
111
-		// espace public ?
112
-		if (isset($GLOBALS['fond'])) {
113
-			$GLOBALS['debug_objets']['principal'] = $GLOBALS['fond'];
114
-		}
115
-	}
116
-
117
-	include_spip('inc/autoriser');
118
-	if (!autoriser('debug')) {
119
-		return;
120
-	}
121
-	include_spip('inc/headers');
122
-	include_spip('inc/filtres');
123
-
124
-	lang_select($GLOBALS['visiteur_session']['lang']);
125
-	$fonc = preg_replace(',\W,', '_', _request('var_mode_objet') ?? '');
126
-	$mode = preg_replace(',\W,', '_', _request('var_mode_affiche') ?? '');
127
-
128
-	$self = str_replace("\\'", '&#39;', self());
129
-	$self = parametre_url($self, 'var_mode', 'debug');
130
-
131
-	$res = debusquer_bandeau($tableau_des_erreurs)
132
-		. '<br />'
133
-		. debusquer_squelette($fonc, $mode, $self);
134
-
135
-	if (!_DIR_RESTREINT or headers_sent()) {
136
-		return $res;
137
-	}
138
-	if ($tableau_des_erreurs) {
139
-		http_response_code(503);
140
-	}
141
-
142
-	http_no_cache();
143
-	if (isset($_GET['var_profile'])) {
144
-		$titre = parametre_url($GLOBALS['REQUEST_URI'], 'var_profile', '');
145
-		$titre = parametre_url($titre, 'var_mode', '');
146
-	} else {
147
-		if (!$fonc) {
148
-			$fonc = $GLOBALS['debug_objets']['principal'];
149
-		}
150
-		$titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
151
-	}
152
-	if ($message === false) {
153
-		lang_select();
154
-
155
-		return debusquer_entete($titre, $res);
156
-	} else {
157
-		echo debusquer_entete($titre, $res);
158
-	}
159
-	exit;
71
+    static $should_log;
72
+    static $tableau_des_erreurs = [];
73
+
74
+    // Pour des tests unitaires, pouvoir récupérer les erreurs générées
75
+    if (isset($opt['erreurs'])) {
76
+        if ($opt['erreurs'] == 'get') {
77
+            return $tableau_des_erreurs;
78
+        }
79
+        if ($opt['erreurs'] == 'reset') {
80
+            $tableau_des_erreurs = [];
81
+
82
+            return true;
83
+        }
84
+    }
85
+
86
+    if (is_null($should_log)) {
87
+        $should_log = (empty($GLOBALS['visiteur_session']) || !include_spip('inc/autoriser') || !autoriser('debug'));
88
+    }
89
+
90
+    // Erreur ou appel final ?
91
+    if ($message) {
92
+        $message = debusquer_compose_message($message);
93
+        $tableau_des_erreurs[] = [$message, $lieu];
94
+        set_request('var_mode', 'debug');
95
+        $GLOBALS['bouton_admin_debug'] = true;
96
+        // Permettre a la compil de continuer
97
+        if (is_object($lieu) and (!isset($lieu->code) or !$lieu->code)) {
98
+            $lieu->code = "''";
99
+        }
100
+        // loger si personne ne verra l'erreur
101
+        if ($should_log) {
102
+            debusquer_loger_erreur($message, $lieu);
103
+        }
104
+        // forcer l'appel au debusqueur en cas de boucles infernales
105
+        $urgence = (_DEBUG_MAX_SQUELETTE_ERREURS and (is_countable($tableau_des_erreurs) ? count($tableau_des_erreurs) : 0) > _DEBUG_MAX_SQUELETTE_ERREURS);
106
+        if (!$urgence) {
107
+            return;
108
+        }
109
+    }
110
+    if (empty($GLOBALS['debug_objets']['principal'])) {
111
+        // espace public ?
112
+        if (isset($GLOBALS['fond'])) {
113
+            $GLOBALS['debug_objets']['principal'] = $GLOBALS['fond'];
114
+        }
115
+    }
116
+
117
+    include_spip('inc/autoriser');
118
+    if (!autoriser('debug')) {
119
+        return;
120
+    }
121
+    include_spip('inc/headers');
122
+    include_spip('inc/filtres');
123
+
124
+    lang_select($GLOBALS['visiteur_session']['lang']);
125
+    $fonc = preg_replace(',\W,', '_', _request('var_mode_objet') ?? '');
126
+    $mode = preg_replace(',\W,', '_', _request('var_mode_affiche') ?? '');
127
+
128
+    $self = str_replace("\\'", '&#39;', self());
129
+    $self = parametre_url($self, 'var_mode', 'debug');
130
+
131
+    $res = debusquer_bandeau($tableau_des_erreurs)
132
+        . '<br />'
133
+        . debusquer_squelette($fonc, $mode, $self);
134
+
135
+    if (!_DIR_RESTREINT or headers_sent()) {
136
+        return $res;
137
+    }
138
+    if ($tableau_des_erreurs) {
139
+        http_response_code(503);
140
+    }
141
+
142
+    http_no_cache();
143
+    if (isset($_GET['var_profile'])) {
144
+        $titre = parametre_url($GLOBALS['REQUEST_URI'], 'var_profile', '');
145
+        $titre = parametre_url($titre, 'var_mode', '');
146
+    } else {
147
+        if (!$fonc) {
148
+            $fonc = $GLOBALS['debug_objets']['principal'];
149
+        }
150
+        $titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
151
+    }
152
+    if ($message === false) {
153
+        lang_select();
154
+
155
+        return debusquer_entete($titre, $res);
156
+    } else {
157
+        echo debusquer_entete($titre, $res);
158
+    }
159
+    exit;
160 160
 }
161 161
 
162 162
 function debusquer_compose_message($msg) {
163
-	if (is_array($msg)) {
164
-		// si c'est un texte, c'est une traduction a faire, mais
165
-		// sqlite renvoit aussi des erreurs alpha num (mais avec 3 arguments)
166
-		if (!is_numeric($msg[0]) and count($msg) == 2) {
167
-			// message avec argument: instancier
168
-			$msg = _T($msg[0], $msg[1], 'spip-debug-arg');
169
-		} else {
170
-			// message SQL: interpreter
171
-			$msg = debusquer_requete($msg);
172
-		}
173
-	}
174
-	// FIXME: le fond n'est pas la si on n'est pas dans un squelette
175
-	// cela dit, ca serait bien d'indiquer tout de meme d'ou vient l'erreur
176
-	$fond = $GLOBALS['fond'] ?? '';
177
-	// une erreur critique sort $message en array
178
-	$debug = is_array($msg) ? $msg[1] : $msg;
179
-	spip_log('Debug: ' . $debug . ' (' . $fond . ')');
180
-
181
-	return $msg;
163
+    if (is_array($msg)) {
164
+        // si c'est un texte, c'est une traduction a faire, mais
165
+        // sqlite renvoit aussi des erreurs alpha num (mais avec 3 arguments)
166
+        if (!is_numeric($msg[0]) and count($msg) == 2) {
167
+            // message avec argument: instancier
168
+            $msg = _T($msg[0], $msg[1], 'spip-debug-arg');
169
+        } else {
170
+            // message SQL: interpreter
171
+            $msg = debusquer_requete($msg);
172
+        }
173
+    }
174
+    // FIXME: le fond n'est pas la si on n'est pas dans un squelette
175
+    // cela dit, ca serait bien d'indiquer tout de meme d'ou vient l'erreur
176
+    $fond = $GLOBALS['fond'] ?? '';
177
+    // une erreur critique sort $message en array
178
+    $debug = is_array($msg) ? $msg[1] : $msg;
179
+    spip_log('Debug: ' . $debug . ' (' . $fond . ')');
180
+
181
+    return $msg;
182 182
 }
183 183
 
184 184
 function debusquer_bandeau($erreurs) {
185 185
 
186
-	if (!empty($erreurs)) {
187
-		$n = [(is_countable($erreurs) ? count($erreurs) : 0) . ' ' . _T('zbug_erreur_squelette')];
186
+    if (!empty($erreurs)) {
187
+        $n = [(is_countable($erreurs) ? count($erreurs) : 0) . ' ' . _T('zbug_erreur_squelette')];
188 188
 
189
-		return debusquer_navigation($erreurs, $n);
190
-	} elseif (!empty($GLOBALS['tableau_des_temps'])) {
191
-		include_spip('public/tracer');
192
-		[$temps, $nav] = chrono_requete($GLOBALS['tableau_des_temps']);
189
+        return debusquer_navigation($erreurs, $n);
190
+    } elseif (!empty($GLOBALS['tableau_des_temps'])) {
191
+        include_spip('public/tracer');
192
+        [$temps, $nav] = chrono_requete($GLOBALS['tableau_des_temps']);
193 193
 
194
-		return debusquer_navigation($temps, $nav, 'debug-profile');
195
-	} else {
196
-		return '';
197
-	}
194
+        return debusquer_navigation($temps, $nav, 'debug-profile');
195
+    } else {
196
+        return '';
197
+    }
198 198
 }
199 199
 
200 200
 /**
@@ -204,63 +204,63 @@  discard block
 block discarded – undo
204 204
  * @return string Code HTML
205 205
  **/
206 206
 function debusquer_contexte($env) {
207
-	if (is_string($env) and is_array($env_tab = @unserialize($env))) {
208
-		$env = $env_tab;
209
-	}
210
-
211
-	if (!$env) {
212
-		return '';
213
-	}
214
-	$res = '';
215
-	foreach ($env as $nom => $valeur) {
216
-		if (is_array($valeur)) {
217
-			$valeur_simple = [];
218
-			foreach ($valeur as $v) {
219
-				if (is_array($v)) {
220
-					$valeur_simple[] = 'array:' . count($v);
221
-				} elseif (is_object($v)) {
222
-					$valeur_simple[] = get_class($v);
223
-				} elseif (is_string($v)) {
224
-					$valeur_simple[] = "'" . $v . "'";
225
-				} else {
226
-					$valeur_simple[] = $v;
227
-				}
228
-			}
229
-			$n = count($valeur);
230
-			$valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
231
-			$valeur .= '[' . join(', ', $valeur_simple) . ']';
232
-		} elseif (is_object($valeur)) {
233
-			$valeur = get_class($valeur);
234
-		} elseif (is_string($valeur)) {
235
-			$valeur = "'" . $valeur . "'";
236
-		}
237
-		$res .= "\n<tr><td><strong>" . nl2br((string) entites_html($nom))
238
-			. '</strong></td><td>:&nbsp;' . nl2br((string) entites_html($valeur))
239
-			. "</td></tr>\n";
240
-	}
241
-
242
-	return "<div class='spip-env'><fieldset><legend onclick=\"this.parentElement.classList.toggle('expanded');\">#ENV</legend>\n<div><table>$res</table></div></fieldset></div>\n";
207
+    if (is_string($env) and is_array($env_tab = @unserialize($env))) {
208
+        $env = $env_tab;
209
+    }
210
+
211
+    if (!$env) {
212
+        return '';
213
+    }
214
+    $res = '';
215
+    foreach ($env as $nom => $valeur) {
216
+        if (is_array($valeur)) {
217
+            $valeur_simple = [];
218
+            foreach ($valeur as $v) {
219
+                if (is_array($v)) {
220
+                    $valeur_simple[] = 'array:' . count($v);
221
+                } elseif (is_object($v)) {
222
+                    $valeur_simple[] = get_class($v);
223
+                } elseif (is_string($v)) {
224
+                    $valeur_simple[] = "'" . $v . "'";
225
+                } else {
226
+                    $valeur_simple[] = $v;
227
+                }
228
+            }
229
+            $n = count($valeur);
230
+            $valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
231
+            $valeur .= '[' . join(', ', $valeur_simple) . ']';
232
+        } elseif (is_object($valeur)) {
233
+            $valeur = get_class($valeur);
234
+        } elseif (is_string($valeur)) {
235
+            $valeur = "'" . $valeur . "'";
236
+        }
237
+        $res .= "\n<tr><td><strong>" . nl2br((string) entites_html($nom))
238
+            . '</strong></td><td>:&nbsp;' . nl2br((string) entites_html($valeur))
239
+            . "</td></tr>\n";
240
+    }
241
+
242
+    return "<div class='spip-env'><fieldset><legend onclick=\"this.parentElement.classList.toggle('expanded');\">#ENV</legend>\n<div><table>$res</table></div></fieldset></div>\n";
243 243
 }
244 244
 
245 245
 
246 246
 function debusquer_loger_erreur($msg, $lieu) {
247
-	$boucle = $ligne = $skel = '';
248
-	if (is_object($lieu)) {
249
-		$ligne = ($lieu->ligne ?? '');
250
-		$boucle = ($lieu->id_boucle ?? '');
251
-		$skel = ($lieu->descr['sourcefile'] ?? '');
252
-	}
253
-	$msg = (is_array($msg) ? implode('', $msg) : $msg);
254
-	if ($skel) {
255
-		$msg .= " Squelette $skel";
256
-	}
257
-	if ($boucle) {
258
-		$msg .= " Boucle $boucle";
259
-	}
260
-	if ($ligne) {
261
-		$msg .= " L$ligne";
262
-	}
263
-	spip_log($msg, "debusquer" . _LOG_ERREUR);
247
+    $boucle = $ligne = $skel = '';
248
+    if (is_object($lieu)) {
249
+        $ligne = ($lieu->ligne ?? '');
250
+        $boucle = ($lieu->id_boucle ?? '');
251
+        $skel = ($lieu->descr['sourcefile'] ?? '');
252
+    }
253
+    $msg = (is_array($msg) ? implode('', $msg) : $msg);
254
+    if ($skel) {
255
+        $msg .= " Squelette $skel";
256
+    }
257
+    if ($boucle) {
258
+        $msg .= " Boucle $boucle";
259
+    }
260
+    if ($ligne) {
261
+        $msg .= " L$ligne";
262
+    }
263
+    spip_log($msg, "debusquer" . _LOG_ERREUR);
264 264
 }
265 265
 
266 266
 
@@ -269,66 +269,66 @@  discard block
 block discarded – undo
269 269
 
270 270
 function debusquer_navigation($tableau, $caption = [], $id = 'debug-nav') {
271 271
 
272
-	if (_request('exec') == 'valider_xml') {
273
-		return '';
274
-	}
275
-	$GLOBALS['bouton_admin_debug'] = true;
276
-	$res = '';
277
-	$href = quote_amp(parametre_url($GLOBALS['REQUEST_URI'], 'var_mode', 'debug'));
278
-	foreach ($tableau as $i => $err) {
279
-		$boucle = $ligne = $skel = '';
280
-		[$msg, $lieu] = $err;
281
-		if (is_object($lieu)) {
282
-			$ligne = $lieu->ligne;
283
-			$boucle = !empty($lieu->id_boucle) ? $lieu->id_boucle : '';
284
-			if (isset($lieu->descr['nom'])) {
285
-				$nom_code = $lieu->descr['nom'];
286
-				$skel = $lieu->descr['sourcefile'];
287
-				$h2 = parametre_url($href, 'var_mode_objet', $nom_code);
288
-				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
289
-				$skel = "<a href='$h3'><b>$skel</b></a>";
290
-				if ($boucle) {
291
-					$h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
292
-					$boucle = "<a href='$h3'><b>$boucle</b></a>";
293
-				}
294
-			}
295
-		}
296
-
297
-		$j = ($i + 1);
298
-		$res .= "<tr id='req$j'><td style='text-align: right'>"
299
-			. $j
300
-			. "&nbsp;</td><td style='text-align: left'>"
301
-			. (is_array($msg) ? implode('', $msg) : $msg)
302
-			. "</td><td style='text-align: left'>"
303
-			. ($skel ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
304
-			. "</td><td class='spip-debug-arg' style='text-align: left'>"
305
-			. ($boucle ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
306
-			. "</td><td style='text-align: right'>"
307
-			. $ligne
308
-			. "</td></tr>\n";
309
-	}
310
-
311
-	return "\n<table id='$id'>"
312
-	. "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
313
-	. $caption[0]
272
+    if (_request('exec') == 'valider_xml') {
273
+        return '';
274
+    }
275
+    $GLOBALS['bouton_admin_debug'] = true;
276
+    $res = '';
277
+    $href = quote_amp(parametre_url($GLOBALS['REQUEST_URI'], 'var_mode', 'debug'));
278
+    foreach ($tableau as $i => $err) {
279
+        $boucle = $ligne = $skel = '';
280
+        [$msg, $lieu] = $err;
281
+        if (is_object($lieu)) {
282
+            $ligne = $lieu->ligne;
283
+            $boucle = !empty($lieu->id_boucle) ? $lieu->id_boucle : '';
284
+            if (isset($lieu->descr['nom'])) {
285
+                $nom_code = $lieu->descr['nom'];
286
+                $skel = $lieu->descr['sourcefile'];
287
+                $h2 = parametre_url($href, 'var_mode_objet', $nom_code);
288
+                $h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
289
+                $skel = "<a href='$h3'><b>$skel</b></a>";
290
+                if ($boucle) {
291
+                    $h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
292
+                    $boucle = "<a href='$h3'><b>$boucle</b></a>";
293
+                }
294
+            }
295
+        }
296
+
297
+        $j = ($i + 1);
298
+        $res .= "<tr id='req$j'><td style='text-align: right'>"
299
+            . $j
300
+            . "&nbsp;</td><td style='text-align: left'>"
301
+            . (is_array($msg) ? implode('', $msg) : $msg)
302
+            . "</td><td style='text-align: left'>"
303
+            . ($skel ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
304
+            . "</td><td class='spip-debug-arg' style='text-align: left'>"
305
+            . ($boucle ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
306
+            . "</td><td style='text-align: right'>"
307
+            . $ligne
308
+            . "</td></tr>\n";
309
+    }
310
+
311
+    return "\n<table id='$id'>"
312
+    . "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
313
+    . $caption[0]
314 314
 ## aide locale courte a ecrire, avec lien vers une grosse page de documentation
315 315
 #		aider('erreur_compilation'),
316
-	. '</caption>'
317
-	//  fausse caption du chrono (mais vraie nav)
318
-	. (!empty($caption[1]) ? $caption[1] : '')
319
-	. '<tr><th>'
320
-	. _T('numero')
321
-	. '</th><th>'
322
-	. _T('public:message')
323
-	. '</th><th>'
324
-	. _T('squelette')
325
-	. '</th><th>'
326
-	. _T('zbug_boucle')
327
-	. '</th><th>'
328
-	. _T('ligne')
329
-	. '</th></tr>'
330
-	. $res
331
-	. '</table>';
316
+    . '</caption>'
317
+    //  fausse caption du chrono (mais vraie nav)
318
+    . (!empty($caption[1]) ? $caption[1] : '')
319
+    . '<tr><th>'
320
+    . _T('numero')
321
+    . '</th><th>'
322
+    . _T('public:message')
323
+    . '</th><th>'
324
+    . _T('squelette')
325
+    . '</th><th>'
326
+    . _T('zbug_boucle')
327
+    . '</th><th>'
328
+    . _T('ligne')
329
+    . '</th></tr>'
330
+    . $res
331
+    . '</table>';
332 332
 }
333 333
 
334 334
 
@@ -348,514 +348,514 @@  discard block
 block discarded – undo
348 348
  *    ou un tableau si l'erreur est critique
349 349
  **/
350 350
 function debusquer_requete($message) {
351
-	[$errno, $msg, $query] = $message;
352
-
353
-	// FIXME: ces écritures mélangent divers syntaxe des moteurs SQL
354
-	// il serait plus prudent certainement d'avoir une fonction d'analyse par moteur
355
-	if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)) {
356
-		$errno = $regs[2];
357
-	} elseif (
358
-		is_numeric($errno) and ($errno == 1030 or $errno <= 1026)
359
-		and preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
360
-	) {
361
-		$errno = $regs[1];
362
-	}
363
-
364
-	// Erreur systeme
365
-	if (is_numeric($errno) and $errno > 0 and $errno < 200) {
366
-		$retour = '<tt><br /><br /><blink>'
367
-			. _T('info_erreur_systeme', ['errsys' => $errno])
368
-			. "</blink><br />\n<b>"
369
-			. _T(
370
-				'info_erreur_systeme2',
371
-				['script' => generer_url_ecrire('base_repair')]
372
-			)
373
-			. '</b><br />';
374
-		spip_log("Erreur systeme $errno");
375
-
376
-		return [$retour, ''];
377
-	}
378
-
379
-	// Requete erronee
380
-	$err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
381
-		. spip_htmlspecialchars($msg)
382
-		. "\n<br /><span style='color: red'><b>"
383
-		. spip_htmlspecialchars($query)
384
-		. '</b></span></tt><br />';
385
-
386
-	//. aider('erreur_mysql');
387
-
388
-	return $err;
351
+    [$errno, $msg, $query] = $message;
352
+
353
+    // FIXME: ces écritures mélangent divers syntaxe des moteurs SQL
354
+    // il serait plus prudent certainement d'avoir une fonction d'analyse par moteur
355
+    if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)) {
356
+        $errno = $regs[2];
357
+    } elseif (
358
+        is_numeric($errno) and ($errno == 1030 or $errno <= 1026)
359
+        and preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
360
+    ) {
361
+        $errno = $regs[1];
362
+    }
363
+
364
+    // Erreur systeme
365
+    if (is_numeric($errno) and $errno > 0 and $errno < 200) {
366
+        $retour = '<tt><br /><br /><blink>'
367
+            . _T('info_erreur_systeme', ['errsys' => $errno])
368
+            . "</blink><br />\n<b>"
369
+            . _T(
370
+                'info_erreur_systeme2',
371
+                ['script' => generer_url_ecrire('base_repair')]
372
+            )
373
+            . '</b><br />';
374
+        spip_log("Erreur systeme $errno");
375
+
376
+        return [$retour, ''];
377
+    }
378
+
379
+    // Requete erronee
380
+    $err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
381
+        . spip_htmlspecialchars($msg)
382
+        . "\n<br /><span style='color: red'><b>"
383
+        . spip_htmlspecialchars($query)
384
+        . '</b></span></tt><br />';
385
+
386
+    //. aider('erreur_mysql');
387
+
388
+    return $err;
389 389
 }
390 390
 
391 391
 
392 392
 function trouve_boucle_debug($n, $nom, $debut = 0, $boucle = '') {
393 393
 
394
-	$id = $nom . $boucle;
395
-	if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
396
-		foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
397
-			if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
398
-				$y = substr_count($v[0], "\n");
399
-			} else {
400
-				if ($v[1][0] == '#') { // balise dynamique
401
-				$incl = $GLOBALS['debug_objets']['resultat'][$v[2]];
402
-				} else // inclusion
403
-				{
404
-					$incl = $GLOBALS['debug_objets']['squelette'][trouve_squelette_inclus($v[0])];
405
-				}
406
-				$y = substr_count($incl, "\n")
407
-					+ substr_count($r[1], "\n")
408
-					+ substr_count($r[3], "\n");
409
-			}
410
-			if ($n <= ($y + $debut)) {
411
-				if ($v[1][0] == '?') {
412
-					return trouve_boucle_debug($n, $nom, $debut, substr($v[1], 1));
413
-				} elseif ($v[1][0] == '!') {
414
-					if ($incl = trouve_squelette_inclus($v[1])) {
415
-						return trouve_boucle_debug($n, $incl, $debut);
416
-					}
417
-				}
418
-
419
-				return [$nom, $boucle, $v[2] - 1 + $n - $debut];
420
-			}
421
-			$debut += $y;
422
-		}
423
-	}
424
-
425
-	return [$nom, $boucle, $n - $debut];
394
+    $id = $nom . $boucle;
395
+    if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
396
+        foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
397
+            if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
398
+                $y = substr_count($v[0], "\n");
399
+            } else {
400
+                if ($v[1][0] == '#') { // balise dynamique
401
+                $incl = $GLOBALS['debug_objets']['resultat'][$v[2]];
402
+                } else // inclusion
403
+                {
404
+                    $incl = $GLOBALS['debug_objets']['squelette'][trouve_squelette_inclus($v[0])];
405
+                }
406
+                $y = substr_count($incl, "\n")
407
+                    + substr_count($r[1], "\n")
408
+                    + substr_count($r[3], "\n");
409
+            }
410
+            if ($n <= ($y + $debut)) {
411
+                if ($v[1][0] == '?') {
412
+                    return trouve_boucle_debug($n, $nom, $debut, substr($v[1], 1));
413
+                } elseif ($v[1][0] == '!') {
414
+                    if ($incl = trouve_squelette_inclus($v[1])) {
415
+                        return trouve_boucle_debug($n, $incl, $debut);
416
+                    }
417
+                }
418
+
419
+                return [$nom, $boucle, $v[2] - 1 + $n - $debut];
420
+            }
421
+            $debut += $y;
422
+        }
423
+    }
424
+
425
+    return [$nom, $boucle, $n - $debut];
426 426
 }
427 427
 
428 428
 function trouve_squelette_inclus($script) {
429 429
 
430
-	preg_match('/include\(.(.*).php3?.\);/', $script, $reg);
431
-	// si le script X.php n'est pas ecrire/public.php
432
-	// on suppose qu'il prend le squelette X.html (pas sur, mais y a pas mieux)
433
-	if ($reg[1] == 'ecrire/public') { // si c'est bien ecrire/public on cherche le param 'fond'
434
-	if (!preg_match("/'fond' => '([^']*)'/", $script, $reg)) { // a defaut on cherche le param 'page'
435
-		if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) {
436
-				$reg[1] = 'inconnu';
437
-		}
438
-	}
439
-	}
440
-	$incl = ',' . $reg[1] . '[.]\w$,';
441
-
442
-	foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
443
-		if (preg_match($incl, $v)) {
444
-			return $k;
445
-		}
446
-	}
447
-
448
-	return '';
430
+    preg_match('/include\(.(.*).php3?.\);/', $script, $reg);
431
+    // si le script X.php n'est pas ecrire/public.php
432
+    // on suppose qu'il prend le squelette X.html (pas sur, mais y a pas mieux)
433
+    if ($reg[1] == 'ecrire/public') { // si c'est bien ecrire/public on cherche le param 'fond'
434
+    if (!preg_match("/'fond' => '([^']*)'/", $script, $reg)) { // a defaut on cherche le param 'page'
435
+        if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) {
436
+                $reg[1] = 'inconnu';
437
+        }
438
+    }
439
+    }
440
+    $incl = ',' . $reg[1] . '[.]\w$,';
441
+
442
+    foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
443
+        if (preg_match($incl, $v)) {
444
+            return $k;
445
+        }
446
+    }
447
+
448
+    return '';
449 449
 }
450 450
 
451 451
 function reference_boucle_debug($n, $nom, $self) {
452
-	[$skel, $boucle, $ligne] = trouve_boucle_debug($n, $nom);
453
-
454
-	if (!$boucle) {
455
-		return !$ligne ? '' :
456
-			(' (' .
457
-				(($nom != $skel) ? _T('squelette_inclus_ligne') :
458
-					_T('squelette_ligne')) .
459
-				" <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
460
-	} else {
461
-		$self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
462
-
463
-		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
464
-			" (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
465
-	}
452
+    [$skel, $boucle, $ligne] = trouve_boucle_debug($n, $nom);
453
+
454
+    if (!$boucle) {
455
+        return !$ligne ? '' :
456
+            (' (' .
457
+                (($nom != $skel) ? _T('squelette_inclus_ligne') :
458
+                    _T('squelette_ligne')) .
459
+                " <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
460
+    } else {
461
+        $self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
462
+
463
+        return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
464
+            " (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
465
+    }
466 466
 }
467 467
 
468 468
 // affiche un texte avec numero de ligne et ancre.
469 469
 
470 470
 function ancre_texte($texte, $fautifs = [], $nocpt = false) {
471 471
 
472
-	$var_mode_ligne = _request('var_mode_ligne');
473
-	if ($var_mode_ligne) {
474
-		$fautifs[] = [$var_mode_ligne];
475
-	}
476
-	$res = '';
477
-
478
-	$s = highlight_string($texte, true);
479
-	if (substr($s, 0, 6) == '<code>') {
480
-		$s = substr($s, 6);
481
-		$res = '<code>';
482
-	}
483
-
484
-	$s = preg_replace(
485
-		',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
486
-		'<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
487
-		$s
488
-	);
489
-
490
-
491
-	$tableau = explode('<br />', $s);
492
-
493
-	$format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: " . ($nocpt ? 'hidden' : 'visible') . ";%s' href='#T%s' title=\"%s\">%0" . strval(@strlen(count($tableau))) . "d</a></span> %s<br />\n";
494
-
495
-	$format10 = str_replace('white', 'lightgrey', $format);
496
-	$formaterr = 'color: red;';
497
-	$i = 1;
498
-	$flignes = [];
499
-	$loc = [0, 0];
500
-	foreach ($fautifs as $lc) {
501
-		if (is_array($lc)) {
502
-			$l = array_shift($lc);
503
-			$flignes[$l] = $lc;
504
-		} else {
505
-			$flignes[$lc] = $loc;
506
-		}
507
-	}
508
-
509
-	$ancre = md5($texte);
510
-	foreach ($tableau as $ligne) {
511
-		if (isset($flignes[$i])) {
512
-			$ligne = str_replace('&nbsp;', ' ', $ligne);
513
-			$indexmesg = $flignes[$i][1];
514
-			$err = textebrut($flignes[$i][2]);
515
-			// tentative de pointer sur la colonne fautive;
516
-			// marche pas car highlight_string rajoute des entites. A revoir.
517
-			// $m = $flignes[$i][0];
518
-			// $ligne = substr($ligne, 0, $m-1) .
519
-			// sprintf($formaterr, substr($ligne,$m));
520
-			$bg = $formaterr;
521
-		} else {
522
-			$indexmesg = $ancre;
523
-			$err = $bg = '';
524
-		}
525
-		$res .= sprintf((($i % 10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
526
-		$i++;
527
-	}
528
-
529
-	return "<div id='T$ancre'>"
530
-	. '<div onclick="'
531
-	. "jQuery(this).parent().find('a').toggle();"
532
-	. '" title="'
533
-	. _T('masquer_colonne')
534
-	. '" style="cursor: pointer;">'
535
-	. ($nocpt ? '' : _T('info_numero_abbreviation'))
536
-	. '</div>
472
+    $var_mode_ligne = _request('var_mode_ligne');
473
+    if ($var_mode_ligne) {
474
+        $fautifs[] = [$var_mode_ligne];
475
+    }
476
+    $res = '';
477
+
478
+    $s = highlight_string($texte, true);
479
+    if (substr($s, 0, 6) == '<code>') {
480
+        $s = substr($s, 6);
481
+        $res = '<code>';
482
+    }
483
+
484
+    $s = preg_replace(
485
+        ',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
486
+        '<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
487
+        $s
488
+    );
489
+
490
+
491
+    $tableau = explode('<br />', $s);
492
+
493
+    $format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: " . ($nocpt ? 'hidden' : 'visible') . ";%s' href='#T%s' title=\"%s\">%0" . strval(@strlen(count($tableau))) . "d</a></span> %s<br />\n";
494
+
495
+    $format10 = str_replace('white', 'lightgrey', $format);
496
+    $formaterr = 'color: red;';
497
+    $i = 1;
498
+    $flignes = [];
499
+    $loc = [0, 0];
500
+    foreach ($fautifs as $lc) {
501
+        if (is_array($lc)) {
502
+            $l = array_shift($lc);
503
+            $flignes[$l] = $lc;
504
+        } else {
505
+            $flignes[$lc] = $loc;
506
+        }
507
+    }
508
+
509
+    $ancre = md5($texte);
510
+    foreach ($tableau as $ligne) {
511
+        if (isset($flignes[$i])) {
512
+            $ligne = str_replace('&nbsp;', ' ', $ligne);
513
+            $indexmesg = $flignes[$i][1];
514
+            $err = textebrut($flignes[$i][2]);
515
+            // tentative de pointer sur la colonne fautive;
516
+            // marche pas car highlight_string rajoute des entites. A revoir.
517
+            // $m = $flignes[$i][0];
518
+            // $ligne = substr($ligne, 0, $m-1) .
519
+            // sprintf($formaterr, substr($ligne,$m));
520
+            $bg = $formaterr;
521
+        } else {
522
+            $indexmesg = $ancre;
523
+            $err = $bg = '';
524
+        }
525
+        $res .= sprintf((($i % 10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
526
+        $i++;
527
+    }
528
+
529
+    return "<div id='T$ancre'>"
530
+    . '<div onclick="'
531
+    . "jQuery(this).parent().find('a').toggle();"
532
+    . '" title="'
533
+    . _T('masquer_colonne')
534
+    . '" style="cursor: pointer;">'
535
+    . ($nocpt ? '' : _T('info_numero_abbreviation'))
536
+    . '</div>
537 537
 	' . $res . "</div>\n";
538 538
 }
539 539
 
540 540
 // l'environnement graphique du debuggueur
541 541
 
542 542
 function debusquer_squelette($fonc, $mode, $self) {
543
-	$legend = null;
544
-	$texte = '';
545
-
546
-	if ($mode !== 'validation') {
547
-		if (isset($GLOBALS['debug_objets']['sourcefile']) and $GLOBALS['debug_objets']['sourcefile']) {
548
-			$res = "<div id='spip-boucles'>\n"
549
-				. debusquer_navigation_squelettes($self)
550
-				. '</div>';
551
-		} else {
552
-			$res = '';
553
-		}
554
-		if ($fonc) {
555
-			$id = " id='$fonc'";
556
-			if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
557
-				[$legend, $texte, $res2] = debusquer_source($fonc, $mode);
558
-				$texte .= $res2;
559
-			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
560
-				$legend = _T('zbug_' . $mode);
561
-				$texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
562
-				$texte = ancre_texte($texte, ['', '']);
563
-			}
564
-		} else {
565
-			if (strlen(trim($res))) {
566
-				return "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
567
-			} else {
568
-				// cas de l'appel sur erreur: montre la page
569
-				return $GLOBALS['debug_objets']['resultat']['tout'] ?? '';
570
-			}
571
-		}
572
-	} else {
573
-		$valider = charger_fonction('valider', 'xml');
574
-		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
575
-		// Si erreur, signaler leur nombre dans le formulaire admin
576
-		$GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
577
-		[$texte, $err] = emboite_texte($val, $fonc, $self);
578
-		if ($err === false) {
579
-			$err = _T('impossible');
580
-		} elseif ($err === true) {
581
-			$err = _T('correcte');
582
-		} else {
583
-			$err = ": $err";
584
-		}
585
-		$legend = _T('validation') . ' ' . $err;
586
-		$res = $id = '';
587
-	}
588
-
589
-	return !trim($texte) ? '' : (
590
-		"<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
591
-		. "<div id='debug_boucle'><fieldset$id><legend>"
592
-		. "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
593
-		. ($legend ?: $mode)
594
-		. '</a></legend>'
595
-		. $texte
596
-		. '</fieldset></div>'
597
-		. '</div>');
543
+    $legend = null;
544
+    $texte = '';
545
+
546
+    if ($mode !== 'validation') {
547
+        if (isset($GLOBALS['debug_objets']['sourcefile']) and $GLOBALS['debug_objets']['sourcefile']) {
548
+            $res = "<div id='spip-boucles'>\n"
549
+                . debusquer_navigation_squelettes($self)
550
+                . '</div>';
551
+        } else {
552
+            $res = '';
553
+        }
554
+        if ($fonc) {
555
+            $id = " id='$fonc'";
556
+            if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
557
+                [$legend, $texte, $res2] = debusquer_source($fonc, $mode);
558
+                $texte .= $res2;
559
+            } elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
560
+                $legend = _T('zbug_' . $mode);
561
+                $texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
562
+                $texte = ancre_texte($texte, ['', '']);
563
+            }
564
+        } else {
565
+            if (strlen(trim($res))) {
566
+                return "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
567
+            } else {
568
+                // cas de l'appel sur erreur: montre la page
569
+                return $GLOBALS['debug_objets']['resultat']['tout'] ?? '';
570
+            }
571
+        }
572
+    } else {
573
+        $valider = charger_fonction('valider', 'xml');
574
+        $val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
575
+        // Si erreur, signaler leur nombre dans le formulaire admin
576
+        $GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
577
+        [$texte, $err] = emboite_texte($val, $fonc, $self);
578
+        if ($err === false) {
579
+            $err = _T('impossible');
580
+        } elseif ($err === true) {
581
+            $err = _T('correcte');
582
+        } else {
583
+            $err = ": $err";
584
+        }
585
+        $legend = _T('validation') . ' ' . $err;
586
+        $res = $id = '';
587
+    }
588
+
589
+    return !trim($texte) ? '' : (
590
+        "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
591
+        . "<div id='debug_boucle'><fieldset$id><legend>"
592
+        . "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
593
+        . ($legend ?: $mode)
594
+        . '</a></legend>'
595
+        . $texte
596
+        . '</fieldset></div>'
597
+        . '</div>');
598 598
 }
599 599
 
600 600
 
601 601
 function emboite_texte($res, $fonc = '', $self = '') {
602
-	$errs = $res->err;
603
-	$texte = $res->entete . ($errs ? '' : $res->page);
604
-
605
-	if (!$texte and !$errs) {
606
-		return [ancre_texte('', ['', '']), false];
607
-	}
608
-	if (!$errs) {
609
-		return [ancre_texte($texte, ['', '']), true];
610
-	}
611
-
612
-	if (!isset($GLOBALS['debug_objets'])) {
613
-		$colors = ['#e0e0f0', '#f8f8ff'];
614
-		$encore = count_occ($errs);
615
-		$encore2 = [];
616
-		$fautifs = [];
617
-
618
-		$err = '<tr><th>'
619
-			. _T('numero')
620
-			. '</th><th>'
621
-			. _T('occurence')
622
-			. '</th><th>'
623
-			. _T('ligne')
624
-			. '</th><th>'
625
-			. _T('colonne')
626
-			. '</th><th>'
627
-			. _T('erreur')
628
-			. '</th></tr>';
629
-
630
-		$i = 0;
631
-		$style = "style='text-align: right; padding-right: 5px'";
632
-		foreach ($errs as $r) {
633
-			$i++;
634
-			[$msg, $ligne, $col] = $r;
635
-			#spip_log("$r = list($msg, $ligne, $col");
636
-			if (isset($encore2[$msg])) {
637
-				$ref = ++$encore2[$msg];
638
-			} else {
639
-				$encore2[$msg] = $ref = 1;
640
-			}
641
-			$err .= "<tr  style='background-color: "
642
-				. $colors[$i % 2]
643
-				. "'><td $style><a href='#debut_err'>"
644
-				. $i
645
-				. "</a></td><td $style>"
646
-				. "$ref/$encore[$msg]</td>"
647
-				. "<td $style><a href='#L"
648
-				. $ligne
649
-				. "' id='T$i'>"
650
-				. $ligne
651
-				. "</a></td><td $style>"
652
-				. $col
653
-				. "</td><td>$msg</td></tr>\n";
654
-			$fautifs[] = [$ligne, $col, $i, $msg];
655
-		}
656
-		$err = "<h2 style='text-align: center'>"
657
-			. $i
658
-			. "<a href='#fin_err'>"
659
-			. ' ' . _T('erreur_texte')
660
-			. "</a></h2><table id='debut_err' style='width: 100%'>"
661
-			. $err
662
-			. " </table><a id='fin_err'></a>";
663
-
664
-		return [ancre_texte($texte, $fautifs), $err];
665
-	} else {
666
-		[$msg, $fermant, $ouvrant] = $errs[0];
667
-		$rf = reference_boucle_debug($fermant, $fonc, $self);
668
-		$ro = reference_boucle_debug($ouvrant, $fonc, $self);
669
-		$err = $msg .
670
-			"<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
671
-			"<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
672
-
673
-		return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
674
-	}
602
+    $errs = $res->err;
603
+    $texte = $res->entete . ($errs ? '' : $res->page);
604
+
605
+    if (!$texte and !$errs) {
606
+        return [ancre_texte('', ['', '']), false];
607
+    }
608
+    if (!$errs) {
609
+        return [ancre_texte($texte, ['', '']), true];
610
+    }
611
+
612
+    if (!isset($GLOBALS['debug_objets'])) {
613
+        $colors = ['#e0e0f0', '#f8f8ff'];
614
+        $encore = count_occ($errs);
615
+        $encore2 = [];
616
+        $fautifs = [];
617
+
618
+        $err = '<tr><th>'
619
+            . _T('numero')
620
+            . '</th><th>'
621
+            . _T('occurence')
622
+            . '</th><th>'
623
+            . _T('ligne')
624
+            . '</th><th>'
625
+            . _T('colonne')
626
+            . '</th><th>'
627
+            . _T('erreur')
628
+            . '</th></tr>';
629
+
630
+        $i = 0;
631
+        $style = "style='text-align: right; padding-right: 5px'";
632
+        foreach ($errs as $r) {
633
+            $i++;
634
+            [$msg, $ligne, $col] = $r;
635
+            #spip_log("$r = list($msg, $ligne, $col");
636
+            if (isset($encore2[$msg])) {
637
+                $ref = ++$encore2[$msg];
638
+            } else {
639
+                $encore2[$msg] = $ref = 1;
640
+            }
641
+            $err .= "<tr  style='background-color: "
642
+                . $colors[$i % 2]
643
+                . "'><td $style><a href='#debut_err'>"
644
+                . $i
645
+                . "</a></td><td $style>"
646
+                . "$ref/$encore[$msg]</td>"
647
+                . "<td $style><a href='#L"
648
+                . $ligne
649
+                . "' id='T$i'>"
650
+                . $ligne
651
+                . "</a></td><td $style>"
652
+                . $col
653
+                . "</td><td>$msg</td></tr>\n";
654
+            $fautifs[] = [$ligne, $col, $i, $msg];
655
+        }
656
+        $err = "<h2 style='text-align: center'>"
657
+            . $i
658
+            . "<a href='#fin_err'>"
659
+            . ' ' . _T('erreur_texte')
660
+            . "</a></h2><table id='debut_err' style='width: 100%'>"
661
+            . $err
662
+            . " </table><a id='fin_err'></a>";
663
+
664
+        return [ancre_texte($texte, $fautifs), $err];
665
+    } else {
666
+        [$msg, $fermant, $ouvrant] = $errs[0];
667
+        $rf = reference_boucle_debug($fermant, $fonc, $self);
668
+        $ro = reference_boucle_debug($ouvrant, $fonc, $self);
669
+        $err = $msg .
670
+            "<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
671
+            "<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
672
+
673
+        return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
674
+    }
675 675
 }
676 676
 
677 677
 function count_occ($regs) {
678
-	$encore = [];
679
-	foreach ($regs as $r) {
680
-		if (isset($encore[$r[0]])) {
681
-			$encore[$r[0]]++;
682
-		} else {
683
-			$encore[$r[0]] = 1;
684
-		}
685
-	}
686
-
687
-	return $encore;
678
+    $encore = [];
679
+    foreach ($regs as $r) {
680
+        if (isset($encore[$r[0]])) {
681
+            $encore[$r[0]]++;
682
+        } else {
683
+            $encore[$r[0]] = 1;
684
+        }
685
+    }
686
+
687
+    return $encore;
688 688
 }
689 689
 
690 690
 function debusquer_navigation_squelettes($self) {
691 691
 
692
-	$res = '';
693
-	$boucles = !empty($GLOBALS['debug_objets']['boucle']) ? $GLOBALS['debug_objets']['boucle'] : '';
694
-	$contexte = $GLOBALS['debug_objets']['contexte'];
695
-	$t_skel = _T('squelette');
696
-	foreach ($GLOBALS['debug_objets']['sourcefile'] as $nom => $sourcefile) {
697
-		$self2 = parametre_url($self, 'var_mode_objet', $nom);
698
-		$nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
699
-		$temps = !isset($GLOBALS['debug_objets']['profile'][$sourcefile]) ? '' : _T(
700
-			'zbug_profile',
701
-			['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
702
-		);
703
-
704
-		$res .= "<fieldset id='f_" . $nom . "'><legend>"
705
-			. $t_skel
706
-			. ' '
707
-			. $sourcefile
708
-			. "&nbsp;:\n<a href='$self2&amp;var_mode_affiche=squelette#f_$nom'>"
709
-			. $t_skel
710
-			. "</a>\n<a href='$self2&amp;var_mode_affiche=resultat#f_$nom'>"
711
-			. _T('zbug_resultat')
712
-			. "</a>\n<a href='$self2&amp;var_mode_affiche=code#f_$nom'>"
713
-			. _T('zbug_code')
714
-			. "</a>\n<a href='"
715
-			. str_replace('var_mode=debug', 'var_profile=1&amp;var_mode=recalcul', $self)
716
-			. "'>"
717
-			. _T('zbug_calcul')
718
-			. '</a></legend>'
719
-			. (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
720
-			. debusquer_contexte($contexte[$sourcefile])
721
-		. (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
722
-		. "</fieldset>\n";
723
-	}
724
-
725
-	return $res;
692
+    $res = '';
693
+    $boucles = !empty($GLOBALS['debug_objets']['boucle']) ? $GLOBALS['debug_objets']['boucle'] : '';
694
+    $contexte = $GLOBALS['debug_objets']['contexte'];
695
+    $t_skel = _T('squelette');
696
+    foreach ($GLOBALS['debug_objets']['sourcefile'] as $nom => $sourcefile) {
697
+        $self2 = parametre_url($self, 'var_mode_objet', $nom);
698
+        $nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
699
+        $temps = !isset($GLOBALS['debug_objets']['profile'][$sourcefile]) ? '' : _T(
700
+            'zbug_profile',
701
+            ['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
702
+        );
703
+
704
+        $res .= "<fieldset id='f_" . $nom . "'><legend>"
705
+            . $t_skel
706
+            . ' '
707
+            . $sourcefile
708
+            . "&nbsp;:\n<a href='$self2&amp;var_mode_affiche=squelette#f_$nom'>"
709
+            . $t_skel
710
+            . "</a>\n<a href='$self2&amp;var_mode_affiche=resultat#f_$nom'>"
711
+            . _T('zbug_resultat')
712
+            . "</a>\n<a href='$self2&amp;var_mode_affiche=code#f_$nom'>"
713
+            . _T('zbug_code')
714
+            . "</a>\n<a href='"
715
+            . str_replace('var_mode=debug', 'var_profile=1&amp;var_mode=recalcul', $self)
716
+            . "'>"
717
+            . _T('zbug_calcul')
718
+            . '</a></legend>'
719
+            . (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
720
+            . debusquer_contexte($contexte[$sourcefile])
721
+        . (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
722
+        . "</fieldset>\n";
723
+    }
724
+
725
+    return $res;
726 726
 }
727 727
 
728 728
 function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source) {
729
-	$i = 0;
730
-	$res = '';
731
-	$var_mode_objet = _request('var_mode_objet');
732
-	$gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
733
-
734
-	foreach ($boucles as $objet => $boucle) {
735
-		if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
736
-			$i++;
737
-			$nom = $boucle->id_boucle;
738
-			$req = $boucle->type_requete;
739
-			$crit = public_decompiler($boucle, $gram, 0, 'criteres');
740
-			$self2 = $self . '&amp;var_mode_objet=' . $objet;
741
-
742
-			$res .= "\n<tr style='background-color: " .
743
-				($i % 2 ? '#e0e0f0' : '#f8f8ff') .
744
-				"'><td  align='right'>$i</td><td>\n" .
745
-				"<a  class='debug_link_boucle' href='" .
746
-				$self2 .
747
-				"&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
748
-				_T('zbug_boucle') .
749
-				"</a></td><td>\n<a class='debug_link_boucle' href='" .
750
-				$self2 .
751
-				"&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
752
-				_T('zbug_resultat') .
753
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
754
-				$self2 .
755
-				"&amp;var_mode_affiche=code#f_$nom_skel'>" .
756
-				_T('zbug_code') .
757
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
758
-				str_replace('var_mode=', 'var_profile=', $self2) .
759
-				"'>" .
760
-				_T('zbug_calcul') .
761
-				"</a></td><td>\n" .
762
-				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
763
-				"</td><td>\n" .
764
-				$req .
765
-				"</td><td>\n" .
766
-				spip_htmlspecialchars($crit) .
767
-				'</td></tr>';
768
-		}
769
-	}
770
-
771
-	return $res;
729
+    $i = 0;
730
+    $res = '';
731
+    $var_mode_objet = _request('var_mode_objet');
732
+    $gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
733
+
734
+    foreach ($boucles as $objet => $boucle) {
735
+        if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
736
+            $i++;
737
+            $nom = $boucle->id_boucle;
738
+            $req = $boucle->type_requete;
739
+            $crit = public_decompiler($boucle, $gram, 0, 'criteres');
740
+            $self2 = $self . '&amp;var_mode_objet=' . $objet;
741
+
742
+            $res .= "\n<tr style='background-color: " .
743
+                ($i % 2 ? '#e0e0f0' : '#f8f8ff') .
744
+                "'><td  align='right'>$i</td><td>\n" .
745
+                "<a  class='debug_link_boucle' href='" .
746
+                $self2 .
747
+                "&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
748
+                _T('zbug_boucle') .
749
+                "</a></td><td>\n<a class='debug_link_boucle' href='" .
750
+                $self2 .
751
+                "&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
752
+                _T('zbug_resultat') .
753
+                "</a></td><td>\n<a class='debug_link_resultat' href='" .
754
+                $self2 .
755
+                "&amp;var_mode_affiche=code#f_$nom_skel'>" .
756
+                _T('zbug_code') .
757
+                "</a></td><td>\n<a class='debug_link_resultat' href='" .
758
+                str_replace('var_mode=', 'var_profile=', $self2) .
759
+                "'>" .
760
+                _T('zbug_calcul') .
761
+                "</a></td><td>\n" .
762
+                (($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
763
+                "</td><td>\n" .
764
+                $req .
765
+                "</td><td>\n" .
766
+                spip_htmlspecialchars($crit) .
767
+                '</td></tr>';
768
+        }
769
+    }
770
+
771
+    return $res;
772 772
 }
773 773
 
774 774
 function debusquer_source($objet, $affiche) {
775
-	$quoi = $GLOBALS['debug_objets'][$affiche][$objet];
776
-	if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
777
-		$nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
778
-	} else {
779
-		$nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
780
-	}
781
-	$res2 = '';
782
-
783
-	if ($affiche == 'resultat') {
784
-		$legend = $nom;
785
-		$req = $GLOBALS['debug_objets']['requete'][$objet];
786
-		if (function_exists('_mysql_traite_query')) {
787
-			$c = strtolower(_request('connect') ?? '');
788
-			$c = $GLOBALS['connexions'][$c ?: 0]['prefixe'];
789
-			$req = _mysql_traite_query($req, '', $c);
790
-		}
791
-		//  permettre le copier/coller facile
792
-		// $res = ancre_texte($req, array(), true);
793
-		$res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
794
-		//  formatage et affichage des resultats bruts de la requete
795
-		$ress_req = spip_query($req);
796
-		$brut_sql = '';
797
-		$num = 1;
798
-		//  eviter l'affichage de milliers de lignes
799
-		//  personnalisation possible dans mes_options
800
-		$max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
801
-		while ($retours_sql = sql_fetch($ress_req)) {
802
-			if ($num <= $max_aff) {
803
-				$brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
804
-				$brut_sql .= '<p>';
805
-				foreach ($retours_sql as $key => $val) {
806
-					$brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
807
-				}
808
-				$brut_sql .= '</p>';
809
-			}
810
-			$num++;
811
-		}
812
-		$res2 = interdire_scripts($brut_sql);
813
-		foreach ($quoi as $view) {
814
-			//  ne pas afficher les $contexte_inclus
815
-			$view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
816
-			if ($view) {
817
-				$res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
818
-			}
819
-		}
820
-	} elseif ($affiche == 'code') {
821
-		$legend = $nom;
822
-		$res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
823
-	} elseif ($affiche == 'boucle') {
824
-		$legend = _T('zbug_boucle') . ' ' . $nom;
825
-		// Le compilateur prefixe le nom des boucles par l'extension du fichier source.
826
-		$gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
827
-		$res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
828
-	} elseif ($affiche == 'squelette') {
829
-		$legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
830
-		$res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
831
-	}
832
-
833
-	return [$legend, $res, $res2];
775
+    $quoi = $GLOBALS['debug_objets'][$affiche][$objet];
776
+    if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
777
+        $nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
778
+    } else {
779
+        $nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
780
+    }
781
+    $res2 = '';
782
+
783
+    if ($affiche == 'resultat') {
784
+        $legend = $nom;
785
+        $req = $GLOBALS['debug_objets']['requete'][$objet];
786
+        if (function_exists('_mysql_traite_query')) {
787
+            $c = strtolower(_request('connect') ?? '');
788
+            $c = $GLOBALS['connexions'][$c ?: 0]['prefixe'];
789
+            $req = _mysql_traite_query($req, '', $c);
790
+        }
791
+        //  permettre le copier/coller facile
792
+        // $res = ancre_texte($req, array(), true);
793
+        $res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
794
+        //  formatage et affichage des resultats bruts de la requete
795
+        $ress_req = spip_query($req);
796
+        $brut_sql = '';
797
+        $num = 1;
798
+        //  eviter l'affichage de milliers de lignes
799
+        //  personnalisation possible dans mes_options
800
+        $max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
801
+        while ($retours_sql = sql_fetch($ress_req)) {
802
+            if ($num <= $max_aff) {
803
+                $brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
804
+                $brut_sql .= '<p>';
805
+                foreach ($retours_sql as $key => $val) {
806
+                    $brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
807
+                }
808
+                $brut_sql .= '</p>';
809
+            }
810
+            $num++;
811
+        }
812
+        $res2 = interdire_scripts($brut_sql);
813
+        foreach ($quoi as $view) {
814
+            //  ne pas afficher les $contexte_inclus
815
+            $view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
816
+            if ($view) {
817
+                $res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
818
+            }
819
+        }
820
+    } elseif ($affiche == 'code') {
821
+        $legend = $nom;
822
+        $res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
823
+    } elseif ($affiche == 'boucle') {
824
+        $legend = _T('zbug_boucle') . ' ' . $nom;
825
+        // Le compilateur prefixe le nom des boucles par l'extension du fichier source.
826
+        $gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
827
+        $res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
828
+    } elseif ($affiche == 'squelette') {
829
+        $legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
830
+        $res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
831
+    }
832
+
833
+    return [$legend, $res, $res2];
834 834
 }
835 835
 
836 836
 function debusquer_entete($titre, $corps) {
837 837
 
838
-	include_spip('balise/formulaire_admin');
839
-	include_spip('public/assembler'); // pour inclure_balise_dynamique
840
-	include_spip('inc/texte'); // pour corriger_typo
841
-
842
-	return _DOCTYPE_ECRIRE .
843
-	html_lang_attributes() .
844
-	"<head>\n<title>" .
845
-	('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
846
-		_T('admin_debug') . ' ' . spip_htmlspecialchars($titre) . ' (' .
847
-		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
848
-	")</title>\n" .
849
-	"<meta http-equiv='Content-Type' content='text/html" .
850
-	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
851
-	"' />\n" .
852
-	http_script('', 'jquery.js')
853
-	. "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
854
-	. "' type='text/css' />" .
855
-	"</head>\n" .
856
-	"<body style='margin:0 10px;'>\n" .
857
-	"<div id='spip-debug-header'>" .
858
-	$corps .
859
-	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
860
-	'</div></body></html>';
838
+    include_spip('balise/formulaire_admin');
839
+    include_spip('public/assembler'); // pour inclure_balise_dynamique
840
+    include_spip('inc/texte'); // pour corriger_typo
841
+
842
+    return _DOCTYPE_ECRIRE .
843
+    html_lang_attributes() .
844
+    "<head>\n<title>" .
845
+    ('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
846
+        _T('admin_debug') . ' ' . spip_htmlspecialchars($titre) . ' (' .
847
+        supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
848
+    ")</title>\n" .
849
+    "<meta http-equiv='Content-Type' content='text/html" .
850
+    (($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
851
+    "' />\n" .
852
+    http_script('', 'jquery.js')
853
+    . "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
854
+    . "' type='text/css' />" .
855
+    "</head>\n" .
856
+    "<body style='margin:0 10px;'>\n" .
857
+    "<div id='spip-debug-header'>" .
858
+    $corps .
859
+    inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
860
+    '</div></body></html>';
861 861
 }
Please login to merge, or discard this patch.
Spacing   +87 added lines, -90 removed lines patch added patch discarded remove patch
@@ -147,7 +147,7 @@  discard block
 block discarded – undo
147 147
 		if (!$fonc) {
148 148
 			$fonc = $GLOBALS['debug_objets']['principal'];
149 149
 		}
150
-		$titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
150
+		$titre = !$mode ? $fonc : ($mode.(isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' '.$GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
151 151
 	}
152 152
 	if ($message === false) {
153 153
 		lang_select();
@@ -176,7 +176,7 @@  discard block
 block discarded – undo
176 176
 	$fond = $GLOBALS['fond'] ?? '';
177 177
 	// une erreur critique sort $message en array
178 178
 	$debug = is_array($msg) ? $msg[1] : $msg;
179
-	spip_log('Debug: ' . $debug . ' (' . $fond . ')');
179
+	spip_log('Debug: '.$debug.' ('.$fond.')');
180 180
 
181 181
 	return $msg;
182 182
 }
@@ -184,7 +184,7 @@  discard block
 block discarded – undo
184 184
 function debusquer_bandeau($erreurs) {
185 185
 
186 186
 	if (!empty($erreurs)) {
187
-		$n = [(is_countable($erreurs) ? count($erreurs) : 0) . ' ' . _T('zbug_erreur_squelette')];
187
+		$n = [(is_countable($erreurs) ? count($erreurs) : 0).' '._T('zbug_erreur_squelette')];
188 188
 
189 189
 		return debusquer_navigation($erreurs, $n);
190 190
 	} elseif (!empty($GLOBALS['tableau_des_temps'])) {
@@ -217,25 +217,25 @@  discard block
 block discarded – undo
217 217
 			$valeur_simple = [];
218 218
 			foreach ($valeur as $v) {
219 219
 				if (is_array($v)) {
220
-					$valeur_simple[] = 'array:' . count($v);
220
+					$valeur_simple[] = 'array:'.count($v);
221 221
 				} elseif (is_object($v)) {
222 222
 					$valeur_simple[] = get_class($v);
223 223
 				} elseif (is_string($v)) {
224
-					$valeur_simple[] = "'" . $v . "'";
224
+					$valeur_simple[] = "'".$v."'";
225 225
 				} else {
226 226
 					$valeur_simple[] = $v;
227 227
 				}
228 228
 			}
229 229
 			$n = count($valeur);
230
-			$valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
231
-			$valeur .= '[' . join(', ', $valeur_simple) . ']';
230
+			$valeur = (($n > 3) ? 'array:'.$n.' ' : '');
231
+			$valeur .= '['.join(', ', $valeur_simple).']';
232 232
 		} elseif (is_object($valeur)) {
233 233
 			$valeur = get_class($valeur);
234 234
 		} elseif (is_string($valeur)) {
235
-			$valeur = "'" . $valeur . "'";
235
+			$valeur = "'".$valeur."'";
236 236
 		}
237
-		$res .= "\n<tr><td><strong>" . nl2br((string) entites_html($nom))
238
-			. '</strong></td><td>:&nbsp;' . nl2br((string) entites_html($valeur))
237
+		$res .= "\n<tr><td><strong>".nl2br((string) entites_html($nom))
238
+			. '</strong></td><td>:&nbsp;'.nl2br((string) entites_html($valeur))
239 239
 			. "</td></tr>\n";
240 240
 	}
241 241
 
@@ -260,7 +260,7 @@  discard block
 block discarded – undo
260 260
 	if ($ligne) {
261 261
 		$msg .= " L$ligne";
262 262
 	}
263
-	spip_log($msg, "debusquer" . _LOG_ERREUR);
263
+	spip_log($msg, "debusquer"._LOG_ERREUR);
264 264
 }
265 265
 
266 266
 
@@ -285,10 +285,10 @@  discard block
 block discarded – undo
285 285
 				$nom_code = $lieu->descr['nom'];
286 286
 				$skel = $lieu->descr['sourcefile'];
287 287
 				$h2 = parametre_url($href, 'var_mode_objet', $nom_code);
288
-				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
288
+				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette').'#L'.$ligne;
289 289
 				$skel = "<a href='$h3'><b>$skel</b></a>";
290 290
 				if ($boucle) {
291
-					$h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
291
+					$h3 = parametre_url($h2.$boucle, 'var_mode_affiche', 'boucle');
292 292
 					$boucle = "<a href='$h3'><b>$boucle</b></a>";
293 293
 				}
294 294
 			}
@@ -377,7 +377,7 @@  discard block
 block discarded – undo
377 377
 	}
378 378
 
379 379
 	// Requete erronee
380
-	$err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
380
+	$err = '<b>'._T('avis_erreur_mysql')." $errno</b><br /><tt>\n"
381 381
 		. spip_htmlspecialchars($msg)
382 382
 		. "\n<br /><span style='color: red'><b>"
383 383
 		. spip_htmlspecialchars($query)
@@ -391,7 +391,7 @@  discard block
 block discarded – undo
391 391
 
392 392
 function trouve_boucle_debug($n, $nom, $debut = 0, $boucle = '') {
393 393
 
394
-	$id = $nom . $boucle;
394
+	$id = $nom.$boucle;
395 395
 	if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
396 396
 		foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
397 397
 			if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
@@ -437,7 +437,7 @@  discard block
 block discarded – undo
437 437
 		}
438 438
 	}
439 439
 	}
440
-	$incl = ',' . $reg[1] . '[.]\w$,';
440
+	$incl = ','.$reg[1].'[.]\w$,';
441 441
 
442 442
 	foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
443 443
 		if (preg_match($incl, $v)) {
@@ -452,16 +452,13 @@  discard block
 block discarded – undo
452 452
 	[$skel, $boucle, $ligne] = trouve_boucle_debug($n, $nom);
453 453
 
454 454
 	if (!$boucle) {
455
-		return !$ligne ? '' :
456
-			(' (' .
457
-				(($nom != $skel) ? _T('squelette_inclus_ligne') :
458
-					_T('squelette_ligne')) .
455
+		return !$ligne ? '' : (' ('.
456
+				(($nom != $skel) ? _T('squelette_inclus_ligne') : _T('squelette_ligne')).
459 457
 				" <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
460 458
 	} else {
461 459
 		$self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
462 460
 
463
-		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
464
-			" (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
461
+		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" : " (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
465 462
 	}
466 463
 }
467 464
 
@@ -483,14 +480,14 @@  discard block
 block discarded – undo
483 480
 
484 481
 	$s = preg_replace(
485 482
 		',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
486
-		'<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
483
+		'<\1>\2</\1><br />'."\n".'<\1>\3</\1>',
487 484
 		$s
488 485
 	);
489 486
 
490 487
 
491 488
 	$tableau = explode('<br />', $s);
492 489
 
493
-	$format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: " . ($nocpt ? 'hidden' : 'visible') . ";%s' href='#T%s' title=\"%s\">%0" . strval(@strlen(count($tableau))) . "d</a></span> %s<br />\n";
490
+	$format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: ".($nocpt ? 'hidden' : 'visible').";%s' href='#T%s' title=\"%s\">%0".strval(@strlen(count($tableau)))."d</a></span> %s<br />\n";
494 491
 
495 492
 	$format10 = str_replace('white', 'lightgrey', $format);
496 493
 	$formaterr = 'color: red;';
@@ -534,7 +531,7 @@  discard block
 block discarded – undo
534 531
 	. '" style="cursor: pointer;">'
535 532
 	. ($nocpt ? '' : _T('info_numero_abbreviation'))
536 533
 	. '</div>
537
-	' . $res . "</div>\n";
534
+	' . $res."</div>\n";
538 535
 }
539 536
 
540 537
 // l'environnement graphique du debuggueur
@@ -556,14 +553,14 @@  discard block
 block discarded – undo
556 553
 			if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
557 554
 				[$legend, $texte, $res2] = debusquer_source($fonc, $mode);
558 555
 				$texte .= $res2;
559
-			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
560
-				$legend = _T('zbug_' . $mode);
561
-				$texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
556
+			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc.'tout'])) {
557
+				$legend = _T('zbug_'.$mode);
558
+				$texte = $GLOBALS['debug_objets'][$mode][$fonc.'tout'];
562 559
 				$texte = ancre_texte($texte, ['', '']);
563 560
 			}
564 561
 		} else {
565 562
 			if (strlen(trim($res))) {
566
-				return "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
563
+				return "<img src='".chemin_image('debug-xx.svg')."' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
567 564
 			} else {
568 565
 				// cas de l'appel sur erreur: montre la page
569 566
 				return $GLOBALS['debug_objets']['resultat']['tout'] ?? '';
@@ -571,7 +568,7 @@  discard block
 block discarded – undo
571 568
 		}
572 569
 	} else {
573 570
 		$valider = charger_fonction('valider', 'xml');
574
-		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
571
+		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc.'tout']);
575 572
 		// Si erreur, signaler leur nombre dans le formulaire admin
576 573
 		$GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
577 574
 		[$texte, $err] = emboite_texte($val, $fonc, $self);
@@ -582,14 +579,14 @@  discard block
 block discarded – undo
582 579
 		} else {
583 580
 			$err = ": $err";
584 581
 		}
585
-		$legend = _T('validation') . ' ' . $err;
582
+		$legend = _T('validation').' '.$err;
586 583
 		$res = $id = '';
587 584
 	}
588 585
 
589 586
 	return !trim($texte) ? '' : (
590
-		"<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
587
+		"<img src='".chemin_image('debug-xx.svg')."' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
591 588
 		. "<div id='debug_boucle'><fieldset$id><legend>"
592
-		. "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
589
+		. "<a href='".$self.'#f_'.substr($fonc, 0, 37)."'> &#8593; "
593 590
 		. ($legend ?: $mode)
594 591
 		. '</a></legend>'
595 592
 		. $texte
@@ -600,7 +597,7 @@  discard block
 block discarded – undo
600 597
 
601 598
 function emboite_texte($res, $fonc = '', $self = '') {
602 599
 	$errs = $res->err;
603
-	$texte = $res->entete . ($errs ? '' : $res->page);
600
+	$texte = $res->entete.($errs ? '' : $res->page);
604 601
 
605 602
 	if (!$texte and !$errs) {
606 603
 		return [ancre_texte('', ['', '']), false];
@@ -656,7 +653,7 @@  discard block
 block discarded – undo
656 653
 		$err = "<h2 style='text-align: center'>"
657 654
 			. $i
658 655
 			. "<a href='#fin_err'>"
659
-			. ' ' . _T('erreur_texte')
656
+			. ' '._T('erreur_texte')
660 657
 			. "</a></h2><table id='debut_err' style='width: 100%'>"
661 658
 			. $err
662 659
 			. " </table><a id='fin_err'></a>";
@@ -666,9 +663,9 @@  discard block
 block discarded – undo
666 663
 		[$msg, $fermant, $ouvrant] = $errs[0];
667 664
 		$rf = reference_boucle_debug($fermant, $fonc, $self);
668 665
 		$ro = reference_boucle_debug($ouvrant, $fonc, $self);
669
-		$err = $msg .
670
-			"<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
671
-			"<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
666
+		$err = $msg.
667
+			"<a href='#L".$fermant."'>$fermant</a>$rf<br />".
668
+			"<a href='#L".$ouvrant."'>$ouvrant</a>$ro";
672 669
 
673 670
 		return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
674 671
 	}
@@ -701,7 +698,7 @@  discard block
 block discarded – undo
701 698
 			['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
702 699
 		);
703 700
 
704
-		$res .= "<fieldset id='f_" . $nom . "'><legend>"
701
+		$res .= "<fieldset id='f_".$nom."'><legend>"
705 702
 			. $t_skel
706 703
 			. ' '
707 704
 			. $sourcefile
@@ -716,7 +713,7 @@  discard block
 block discarded – undo
716 713
 			. "'>"
717 714
 			. _T('zbug_calcul')
718 715
 			. '</a></legend>'
719
-			. (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
716
+			. (!$temps ? '' : ("\n<span style='display:block;float:".$GLOBALS['spip_lang_right']."'>$temps</span><br />"))
720 717
 			. debusquer_contexte($contexte[$sourcefile])
721 718
 		. (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
722 719
 		. "</fieldset>\n";
@@ -737,33 +734,33 @@  discard block
 block discarded – undo
737 734
 			$nom = $boucle->id_boucle;
738 735
 			$req = $boucle->type_requete;
739 736
 			$crit = public_decompiler($boucle, $gram, 0, 'criteres');
740
-			$self2 = $self . '&amp;var_mode_objet=' . $objet;
741
-
742
-			$res .= "\n<tr style='background-color: " .
743
-				($i % 2 ? '#e0e0f0' : '#f8f8ff') .
744
-				"'><td  align='right'>$i</td><td>\n" .
745
-				"<a  class='debug_link_boucle' href='" .
746
-				$self2 .
747
-				"&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
748
-				_T('zbug_boucle') .
749
-				"</a></td><td>\n<a class='debug_link_boucle' href='" .
750
-				$self2 .
751
-				"&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
752
-				_T('zbug_resultat') .
753
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
754
-				$self2 .
755
-				"&amp;var_mode_affiche=code#f_$nom_skel'>" .
756
-				_T('zbug_code') .
757
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
758
-				str_replace('var_mode=', 'var_profile=', $self2) .
759
-				"'>" .
760
-				_T('zbug_calcul') .
761
-				"</a></td><td>\n" .
762
-				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
763
-				"</td><td>\n" .
764
-				$req .
765
-				"</td><td>\n" .
766
-				spip_htmlspecialchars($crit) .
737
+			$self2 = $self.'&amp;var_mode_objet='.$objet;
738
+
739
+			$res .= "\n<tr style='background-color: ".
740
+				($i % 2 ? '#e0e0f0' : '#f8f8ff').
741
+				"'><td  align='right'>$i</td><td>\n".
742
+				"<a  class='debug_link_boucle' href='".
743
+				$self2.
744
+				"&amp;var_mode_affiche=boucle#f_$nom_skel'>".
745
+				_T('zbug_boucle').
746
+				"</a></td><td>\n<a class='debug_link_boucle' href='".
747
+				$self2.
748
+				"&amp;var_mode_affiche=resultat#f_$nom_skel'>".
749
+				_T('zbug_resultat').
750
+				"</a></td><td>\n<a class='debug_link_resultat' href='".
751
+				$self2.
752
+				"&amp;var_mode_affiche=code#f_$nom_skel'>".
753
+				_T('zbug_code').
754
+				"</a></td><td>\n<a class='debug_link_resultat' href='".
755
+				str_replace('var_mode=', 'var_profile=', $self2).
756
+				"'>".
757
+				_T('zbug_calcul').
758
+				"</a></td><td>\n".
759
+				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom).
760
+				"</td><td>\n".
761
+				$req.
762
+				"</td><td>\n".
763
+				spip_htmlspecialchars($crit).
767 764
 				'</td></tr>';
768 765
 		}
769 766
 	}
@@ -790,7 +787,7 @@  discard block
 block discarded – undo
790 787
 		}
791 788
 		//  permettre le copier/coller facile
792 789
 		// $res = ancre_texte($req, array(), true);
793
-		$res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
790
+		$res = "<div id='T".md5($req)."'>\n<pre>\n".$req."</pre>\n</div>\n";
794 791
 		//  formatage et affichage des resultats bruts de la requete
795 792
 		$ress_req = spip_query($req);
796 793
 		$brut_sql = '';
@@ -800,10 +797,10 @@  discard block
 block discarded – undo
800 797
 		$max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
801 798
 		while ($retours_sql = sql_fetch($ress_req)) {
802 799
 			if ($num <= $max_aff) {
803
-				$brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
800
+				$brut_sql .= '<h3>'.($num == 1 ? $num.' sur '.sql_count($ress_req) : $num).'</h3>';
804 801
 				$brut_sql .= '<p>';
805 802
 				foreach ($retours_sql as $key => $val) {
806
-					$brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
803
+					$brut_sql .= '<strong>'.$key.'</strong> => '.spip_htmlspecialchars(couper($val, 150))."<br />\n";
807 804
 				}
808 805
 				$brut_sql .= '</p>';
809 806
 			}
@@ -814,14 +811,14 @@  discard block
 block discarded – undo
814 811
 			//  ne pas afficher les $contexte_inclus
815 812
 			$view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
816 813
 			if ($view) {
817
-				$res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
814
+				$res2 .= "\n<br /><fieldset>".interdire_scripts($view).'</fieldset>';
818 815
 			}
819 816
 		}
820 817
 	} elseif ($affiche == 'code') {
821 818
 		$legend = $nom;
822
-		$res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
819
+		$res = ancre_texte('<'."?php\n".$quoi."\n?".'>');
823 820
 	} elseif ($affiche == 'boucle') {
824
-		$legend = _T('zbug_boucle') . ' ' . $nom;
821
+		$legend = _T('zbug_boucle').' '.$nom;
825 822
 		// Le compilateur prefixe le nom des boucles par l'extension du fichier source.
826 823
 		$gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
827 824
 		$res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
@@ -839,23 +836,23 @@  discard block
 block discarded – undo
839 836
 	include_spip('public/assembler'); // pour inclure_balise_dynamique
840 837
 	include_spip('inc/texte'); // pour corriger_typo
841 838
 
842
-	return _DOCTYPE_ECRIRE .
843
-	html_lang_attributes() .
844
-	"<head>\n<title>" .
845
-	('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
846
-		_T('admin_debug') . ' ' . spip_htmlspecialchars($titre) . ' (' .
847
-		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
848
-	")</title>\n" .
849
-	"<meta http-equiv='Content-Type' content='text/html" .
850
-	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
851
-	"' />\n" .
839
+	return _DOCTYPE_ECRIRE.
840
+	html_lang_attributes().
841
+	"<head>\n<title>".
842
+	('SPIP '.$GLOBALS['spip_version_affichee'].' '.
843
+		_T('admin_debug').' '.spip_htmlspecialchars($titre).' ('.
844
+		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))).
845
+	")</title>\n".
846
+	"<meta http-equiv='Content-Type' content='text/html".
847
+	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '').
848
+	"' />\n".
852 849
 	http_script('', 'jquery.js')
853
-	. "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
854
-	. "' type='text/css' />" .
855
-	"</head>\n" .
856
-	"<body style='margin:0 10px;'>\n" .
857
-	"<div id='spip-debug-header'>" .
858
-	$corps .
859
-	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
850
+	. "<link rel='stylesheet' href='".url_absolue(find_in_path('spip_admin.css'))
851
+	. "' type='text/css' />".
852
+	"</head>\n".
853
+	"<body style='margin:0 10px;'>\n".
854
+	"<div id='spip-debug-header'>".
855
+	$corps.
856
+	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false).
860 857
 	'</div></body></html>';
861 858
 }
Please login to merge, or discard this patch.
ecrire/lang/ecrire_sv.php 1 patch
Indentation   +539 added lines, -539 removed lines patch added patch discarded remove patch
@@ -4,585 +4,585 @@
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'activer_plugin' => 'Aktivera insticksmodulen',
14
-	'affichage' => 'Visa',
15
-	'aide_non_disponible' => 'Den här delen av direkthjälpen finns inte i det aktuella språket',
16
-	'auteur' => 'Redaktör',
17
-	'avis_acces_interdit' => 'Tillträde förbjudet.',
18
-	'avis_article_modifie' => 'Varning, @nom_auteur_modif@ har arbetat på den här artikeln för @date_diff@ minuter sen',
19
-	'avis_aucun_resultat' => 'Hittade inga resultat',
20
-	'avis_chemin_invalide_1' => 'Sökvägen du har angett',
21
-	'avis_chemin_invalide_2' => 'är ogiltig. Återgå till den föregående sidan och kontrollera den angivna informationen',
22
-	'avis_connexion_echec_1' => 'Anslutningen till SQL-servern misslyckades.',
23
-	'avis_connexion_echec_2' => 'Återgå till den föregående sidan och kontrollera informationen du angivit.',
24
-	'avis_connexion_echec_3' => '<b>OBS</b> På många servrar måste du  <b>begära</b> aktivering av din databas innan du kan använda den. Om du inte lyckas med uppkopplingen, se till att den är aktiverad.',
25
-	'avis_connexion_ldap_echec_1' => 'Anslutning till LDAP-server misslyckades.',
26
-	'avis_connexion_ldap_echec_2' => 'Återgå till den föregående sidan och kontrollera informationen du angivit.',
27
-	'avis_connexion_ldap_echec_3' => 'Alternativt kan du välja att inte använda LDAP stöd för att importera användare.',
28
-	'avis_deplacement_rubrique' => 'Varning! Den här avdelningen innehåller @contient_breves@ notiser@scb@: om du flyttar den, markera i kryssrutan för att bekräfta.',
29
-	'avis_erreur_connexion_mysql' => 'Fel på SQL-förbindelsen',
30
-	'avis_espace_interdit' => '<b>Förbjudet område</b><p>SPIP är redan installerat.', # MODIF
31
-	'avis_lecture_noms_bases_1' => 'Installerings-scriptet kunde inte läsa namnen på de installerade databaserna.',
32
-	'avis_lecture_noms_bases_2' => 'Antingen finns det ingen tillgänglig databas eller så är funktionen som listar
12
+    // A
13
+    'activer_plugin' => 'Aktivera insticksmodulen',
14
+    'affichage' => 'Visa',
15
+    'aide_non_disponible' => 'Den här delen av direkthjälpen finns inte i det aktuella språket',
16
+    'auteur' => 'Redaktör',
17
+    'avis_acces_interdit' => 'Tillträde förbjudet.',
18
+    'avis_article_modifie' => 'Varning, @nom_auteur_modif@ har arbetat på den här artikeln för @date_diff@ minuter sen',
19
+    'avis_aucun_resultat' => 'Hittade inga resultat',
20
+    'avis_chemin_invalide_1' => 'Sökvägen du har angett',
21
+    'avis_chemin_invalide_2' => 'är ogiltig. Återgå till den föregående sidan och kontrollera den angivna informationen',
22
+    'avis_connexion_echec_1' => 'Anslutningen till SQL-servern misslyckades.',
23
+    'avis_connexion_echec_2' => 'Återgå till den föregående sidan och kontrollera informationen du angivit.',
24
+    'avis_connexion_echec_3' => '<b>OBS</b> På många servrar måste du  <b>begära</b> aktivering av din databas innan du kan använda den. Om du inte lyckas med uppkopplingen, se till att den är aktiverad.',
25
+    'avis_connexion_ldap_echec_1' => 'Anslutning till LDAP-server misslyckades.',
26
+    'avis_connexion_ldap_echec_2' => 'Återgå till den föregående sidan och kontrollera informationen du angivit.',
27
+    'avis_connexion_ldap_echec_3' => 'Alternativt kan du välja att inte använda LDAP stöd för att importera användare.',
28
+    'avis_deplacement_rubrique' => 'Varning! Den här avdelningen innehåller @contient_breves@ notiser@scb@: om du flyttar den, markera i kryssrutan för att bekräfta.',
29
+    'avis_erreur_connexion_mysql' => 'Fel på SQL-förbindelsen',
30
+    'avis_espace_interdit' => '<b>Förbjudet område</b><p>SPIP är redan installerat.', # MODIF
31
+    'avis_lecture_noms_bases_1' => 'Installerings-scriptet kunde inte läsa namnen på de installerade databaserna.',
32
+    'avis_lecture_noms_bases_2' => 'Antingen finns det ingen tillgänglig databas eller så är funktionen som listar
33 33
  databaser inaktiverad av säkerhetsskäl (det är fallet hos många webbvärdar).',
34
-	'avis_lecture_noms_bases_3' => 'I fråga om det andra alternativet är det möjligt att en databas med ditt användarnamn kan användas:',
35
-	'avis_non_acces_page' => 'Du har inte tillgång till den här sidan.',
36
-	'avis_operation_echec' => 'Operationen misslyckades.',
37
-	'avis_operation_impossible' => 'Operationen omöjlig att genomföra',
38
-	'avis_suppression_base' => 'OBS! Radering av data är permanent och kan inte göras ogjord.',
34
+    'avis_lecture_noms_bases_3' => 'I fråga om det andra alternativet är det möjligt att en databas med ditt användarnamn kan användas:',
35
+    'avis_non_acces_page' => 'Du har inte tillgång till den här sidan.',
36
+    'avis_operation_echec' => 'Operationen misslyckades.',
37
+    'avis_operation_impossible' => 'Operationen omöjlig att genomföra',
38
+    'avis_suppression_base' => 'OBS! Radering av data är permanent och kan inte göras ogjord.',
39 39
 
40
-	// B
41
-	'bouton_acces_ldap' => 'Lägg till en LDAP-katalog >>',
42
-	'bouton_ajouter' => 'Lägg till',
43
-	'bouton_annuler' => 'Avbryt',
44
-	'bouton_demande_publication' => 'Begär att den här artikeln ska publiceras',
45
-	'bouton_desactive_tout' => 'Avaktivera alla',
46
-	'bouton_desinstaller' => 'Avinstallera',
47
-	'bouton_effacer_tout' => 'Radera ALLA',
48
-	'bouton_envoyer_message' => 'Färdigt meddelande: skicka',
49
-	'bouton_modifier' => 'Ändra',
50
-	'bouton_radio_afficher' => 'Visa',
51
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Synas i listan över anslutna redaktörere',
52
-	'bouton_radio_envoi_annonces_adresse' => 'Skicka meddelanden till adressen:',
53
-	'bouton_radio_envoi_liste_nouveautes' => 'Skicka lista över senaste notiser',
54
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Inte synas i listan över anslutna redaktörere',
55
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Skicka inga redaktionella meddelanden',
56
-	'bouton_redirection' => 'OMPEKA',
57
-	'bouton_relancer_installation' => 'Kör installationen igen',
58
-	'bouton_suivant' => 'Nästa',
59
-	'bouton_tenter_recuperation' => 'Försök till reparation',
60
-	'bouton_test_proxy' => 'Testa proxyn',
61
-	'bouton_vider_cache' => 'Töm cachen',
40
+    // B
41
+    'bouton_acces_ldap' => 'Lägg till en LDAP-katalog >>',
42
+    'bouton_ajouter' => 'Lägg till',
43
+    'bouton_annuler' => 'Avbryt',
44
+    'bouton_demande_publication' => 'Begär att den här artikeln ska publiceras',
45
+    'bouton_desactive_tout' => 'Avaktivera alla',
46
+    'bouton_desinstaller' => 'Avinstallera',
47
+    'bouton_effacer_tout' => 'Radera ALLA',
48
+    'bouton_envoyer_message' => 'Färdigt meddelande: skicka',
49
+    'bouton_modifier' => 'Ändra',
50
+    'bouton_radio_afficher' => 'Visa',
51
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Synas i listan över anslutna redaktörere',
52
+    'bouton_radio_envoi_annonces_adresse' => 'Skicka meddelanden till adressen:',
53
+    'bouton_radio_envoi_liste_nouveautes' => 'Skicka lista över senaste notiser',
54
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Inte synas i listan över anslutna redaktörere',
55
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Skicka inga redaktionella meddelanden',
56
+    'bouton_redirection' => 'OMPEKA',
57
+    'bouton_relancer_installation' => 'Kör installationen igen',
58
+    'bouton_suivant' => 'Nästa',
59
+    'bouton_tenter_recuperation' => 'Försök till reparation',
60
+    'bouton_test_proxy' => 'Testa proxyn',
61
+    'bouton_vider_cache' => 'Töm cachen',
62 62
 
63
-	// C
64
-	'cache_modifiable_webmestre' => 'Den här parametern kan ändras av den webbansvariga.',
65
-	'calendrier_synchro' => 'Om du använder ett kalenderprogram som är kompatibelt med <b>iCal</b> kan du synkronisera det med informationen på den här webbplatsen.',
66
-	'config_activer_champs' => 'Aktivera följande fält',
67
-	'config_choix_base_sup' => 'Ge namnet på en databas på servern',
68
-	'config_erreur_base_sup' => 'SPIP har inte tillgång till de existerande databaserna',
69
-	'config_info_base_sup_disponibles' => 'Ytterligare databaser dit databasfrågor kan skickas:',
70
-	'config_info_logos' => 'Alla objekt på sajten kan kan ha sin egen logotype och dessutom en "mouseover" logotype',
71
-	'config_info_logos_utiliser' => 'Använd logotyper',
72
-	'config_info_logos_utiliser_non' => 'Använd inte logotyper',
73
-	'config_info_logos_utiliser_survol' => 'Använd "mouseover" logotyper',
74
-	'config_info_logos_utiliser_survol_non' => 'Använd inte "mouseover" logotyper',
75
-	'config_info_redirection' => 'Genom att aktivera det här valet kan du skapa virtuella artiklar, som enbart är länkar till artiklar som publicerats på andra sajter oavsett om det är SPIP-sajter eller ej.',
76
-	'config_redirection' => 'Virtuella artiklar',
77
-	'config_titre_base_sup' => 'Konfigurera ytterligare en databas',
78
-	'config_titre_base_sup_choix' => 'Välj ytterligare en databas',
79
-	'connexion_ldap' => 'ldapuppkoppling:',
63
+    // C
64
+    'cache_modifiable_webmestre' => 'Den här parametern kan ändras av den webbansvariga.',
65
+    'calendrier_synchro' => 'Om du använder ett kalenderprogram som är kompatibelt med <b>iCal</b> kan du synkronisera det med informationen på den här webbplatsen.',
66
+    'config_activer_champs' => 'Aktivera följande fält',
67
+    'config_choix_base_sup' => 'Ge namnet på en databas på servern',
68
+    'config_erreur_base_sup' => 'SPIP har inte tillgång till de existerande databaserna',
69
+    'config_info_base_sup_disponibles' => 'Ytterligare databaser dit databasfrågor kan skickas:',
70
+    'config_info_logos' => 'Alla objekt på sajten kan kan ha sin egen logotype och dessutom en "mouseover" logotype',
71
+    'config_info_logos_utiliser' => 'Använd logotyper',
72
+    'config_info_logos_utiliser_non' => 'Använd inte logotyper',
73
+    'config_info_logos_utiliser_survol' => 'Använd "mouseover" logotyper',
74
+    'config_info_logos_utiliser_survol_non' => 'Använd inte "mouseover" logotyper',
75
+    'config_info_redirection' => 'Genom att aktivera det här valet kan du skapa virtuella artiklar, som enbart är länkar till artiklar som publicerats på andra sajter oavsett om det är SPIP-sajter eller ej.',
76
+    'config_redirection' => 'Virtuella artiklar',
77
+    'config_titre_base_sup' => 'Konfigurera ytterligare en databas',
78
+    'config_titre_base_sup_choix' => 'Välj ytterligare en databas',
79
+    'connexion_ldap' => 'ldapuppkoppling:',
80 80
 
81
-	// D
82
-	'date_mot_heures' => 'h',
81
+    // D
82
+    'date_mot_heures' => 'h',
83 83
 
84
-	// E
85
-	'email' => 'e-post',
86
-	'email_2' => 'e-post:',
87
-	'entree_adresse_annuaire' => 'Katalogens adress',
88
-	'entree_adresse_email' => 'Din e-postadress',
89
-	'entree_base_donnee_1' => 'Adress till databasen',
90
-	'entree_base_donnee_2' => '(Ofta är det samma adress som till din webbplats, ibland är det "localhost" och ibland lämnas det helt tomt.)',
91
-	'entree_biographie' => 'Kort biografi med några få ord.',
92
-	'entree_chemin_acces' => '<b>Fyll i</b> sökvägen:',
93
-	'entree_cle_pgp' => 'Din PGP-nyckel',
94
-	'entree_contenu_rubrique' => '(Några få ord som beskriver innehållet i avdelningen)',
95
-	'entree_identifiants_connexion' => 'Dina anslutningsuppgifter',
96
-	'entree_informations_connexion_ldap' => 'Fyll i det här formuläret med uppgifter om din anslutning till LDAP. Din system eller nätverks administratör kan ge dig dessa.',
97
-	'entree_infos_perso' => 'Vem är du?',
98
-	'entree_interieur_rubrique' => 'I avdelning:',
99
-	'entree_liens_sites' => '<b>Hyperlänk</b> (referens, sajt att besöka...)',
100
-	'entree_login' => 'Dina användaruppgifter',
101
-	'entree_login_connexion_1' => 'Användarupgifter för anslutningen',
102
-	'entree_login_connexion_2' => '(Är ibland samma som lösenordet för FTP-åtkomst och ibland kan det lämnas tomt)',
103
-	'entree_mot_passe' => 'Ditt lösenord',
104
-	'entree_mot_passe_1' => 'Lösenord för anslutningen',
105
-	'entree_mot_passe_2' => '(Är ibland samma som lösenordet för FTP-åtkomst och ibland kan det lämnas tomt)',
106
-	'entree_nom_fichier' => 'Skriv in filnamnet @texte_compresse@',
107
-	'entree_nom_pseudo' => 'Ditt namn eller alias',
108
-	'entree_nom_pseudo_1' => '(Ditt namn eller alias)',
109
-	'entree_nom_site' => 'Din webbplats namn',
110
-	'entree_nouveau_passe' => 'Nytt lösenord',
111
-	'entree_passe_ldap' => 'Lösenord',
112
-	'entree_port_annuaire' => 'Katalogens portnummer',
113
-	'entree_signature' => 'Signatur',
114
-	'entree_titre_obligatoire' => '<b>Title</b> [Krävs]<br />',
115
-	'entree_url' => 'Din webbplats URL',
116
-	'erreur_plugin_fichier_absent' => 'Filen saknas',
117
-	'erreur_plugin_fichier_def_absent' => 'Definitionsfilen saknas',
118
-	'erreur_plugin_nom_fonction_interdit' => 'Förbjudet namn för funktionen',
119
-	'erreur_plugin_nom_manquant' => 'plugin-namnet saknas',
120
-	'erreur_plugin_prefix_manquant' => 'Pluginens prefix odefinierad',
121
-	'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; saknas i definitionsfilen',
122
-	'erreur_plugin_version_manquant' => 'Denna plugin saknar version.',
84
+    // E
85
+    'email' => 'e-post',
86
+    'email_2' => 'e-post:',
87
+    'entree_adresse_annuaire' => 'Katalogens adress',
88
+    'entree_adresse_email' => 'Din e-postadress',
89
+    'entree_base_donnee_1' => 'Adress till databasen',
90
+    'entree_base_donnee_2' => '(Ofta är det samma adress som till din webbplats, ibland är det "localhost" och ibland lämnas det helt tomt.)',
91
+    'entree_biographie' => 'Kort biografi med några få ord.',
92
+    'entree_chemin_acces' => '<b>Fyll i</b> sökvägen:',
93
+    'entree_cle_pgp' => 'Din PGP-nyckel',
94
+    'entree_contenu_rubrique' => '(Några få ord som beskriver innehållet i avdelningen)',
95
+    'entree_identifiants_connexion' => 'Dina anslutningsuppgifter',
96
+    'entree_informations_connexion_ldap' => 'Fyll i det här formuläret med uppgifter om din anslutning till LDAP. Din system eller nätverks administratör kan ge dig dessa.',
97
+    'entree_infos_perso' => 'Vem är du?',
98
+    'entree_interieur_rubrique' => 'I avdelning:',
99
+    'entree_liens_sites' => '<b>Hyperlänk</b> (referens, sajt att besöka...)',
100
+    'entree_login' => 'Dina användaruppgifter',
101
+    'entree_login_connexion_1' => 'Användarupgifter för anslutningen',
102
+    'entree_login_connexion_2' => '(Är ibland samma som lösenordet för FTP-åtkomst och ibland kan det lämnas tomt)',
103
+    'entree_mot_passe' => 'Ditt lösenord',
104
+    'entree_mot_passe_1' => 'Lösenord för anslutningen',
105
+    'entree_mot_passe_2' => '(Är ibland samma som lösenordet för FTP-åtkomst och ibland kan det lämnas tomt)',
106
+    'entree_nom_fichier' => 'Skriv in filnamnet @texte_compresse@',
107
+    'entree_nom_pseudo' => 'Ditt namn eller alias',
108
+    'entree_nom_pseudo_1' => '(Ditt namn eller alias)',
109
+    'entree_nom_site' => 'Din webbplats namn',
110
+    'entree_nouveau_passe' => 'Nytt lösenord',
111
+    'entree_passe_ldap' => 'Lösenord',
112
+    'entree_port_annuaire' => 'Katalogens portnummer',
113
+    'entree_signature' => 'Signatur',
114
+    'entree_titre_obligatoire' => '<b>Title</b> [Krävs]<br />',
115
+    'entree_url' => 'Din webbplats URL',
116
+    'erreur_plugin_fichier_absent' => 'Filen saknas',
117
+    'erreur_plugin_fichier_def_absent' => 'Definitionsfilen saknas',
118
+    'erreur_plugin_nom_fonction_interdit' => 'Förbjudet namn för funktionen',
119
+    'erreur_plugin_nom_manquant' => 'plugin-namnet saknas',
120
+    'erreur_plugin_prefix_manquant' => 'Pluginens prefix odefinierad',
121
+    'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; saknas i definitionsfilen',
122
+    'erreur_plugin_version_manquant' => 'Denna plugin saknar version.',
123 123
 
124
-	// I
125
-	'ical_info1' => 'Denna sida visar flera metoder att hålla dig informerad om aktiviteter på sajten.',
126
-	'ical_info2' => 'För mer information, tveka inte om att besöka <a href="@spipnet@">SPIP’s dokumentation</a>.', # MODIF
127
-	'ical_info_calendrier' => 'Du kan använda två kalendrar. En är en sajtkarta med alla publicerade artiklar. Den andra innehåller redaktionella meddelanden och dina senaste privata meddelanden: Den är personlig, tack vare en genererad nyckel som du kan förändra när som helst genom att byta lösenord.',
128
-	'ical_methode_http' => 'Nerladdning',
129
-	'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF
130
-	'ical_texte_prive' => 'Den här kalendern som är personlig, innnehåller dina egna redaktionella händelser på den här sajten (uppgifter, egna möten, inlämnade artiklar och nyheter...).',
131
-	'ical_texte_public' => 'Den här kalendern låter dig följa den publika aktiviteten på sajten (publicerade artiklar och nyheter).',
132
-	'ical_texte_rss' => 'Du kan syndikerar de senaste nyheterna på den är sajten i vilken XML/RSS-läsare som helst. Det är samma format som gör det möjligt att läsa de senaste nyheterna på andra sajter som använder ett kompatibelt format. (syndikerade sajter).',
133
-	'ical_titre_js' => 'Javascript',
134
-	'ical_titre_mailing' => 'E-postlista',
135
-	'ical_titre_rss' => 'Syndikeringsfiler',
136
-	'icone_activer_cookie' => 'Sätt en cookie',
137
-	'icone_admin_plugin' => 'Hantera plugin’s',
138
-	'icone_afficher_auteurs' => 'Visa redaktörer',
139
-	'icone_afficher_visiteurs' => 'Visa besökare',
140
-	'icone_arret_discussion' => 'Avsluta diskussionen',
141
-	'icone_calendrier' => 'Kalender',
142
-	'icone_creer_auteur' => 'Skapa en ny redaktör och koppla honom (henne) till den här artikeln',
143
-	'icone_creer_mot_cle' => 'Skapa ett nytt nyckelord och länka det till artikeln',
144
-	'icone_creer_rubrique_2' => 'Skapa en ny avdelning',
145
-	'icone_modifier_article' => 'Editera artikeln',
146
-	'icone_modifier_rubrique' => 'Editera avdelningen',
147
-	'icone_relancer_signataire' => 'Kontakta personen igen',
148
-	'icone_retour' => 'Tillbaka',
149
-	'icone_retour_article' => 'Tillbaka till artikeln',
150
-	'icone_supprimer_cookie' => 'Radera cookien',
151
-	'icone_supprimer_rubrique' => 'Radera den här avdelningen',
152
-	'icone_supprimer_signature' => 'Radera den här signaturen',
153
-	'icone_valider_signature' => 'Validera signaturen',
154
-	'image_administrer_rubrique' => 'Du kan hantera den här avdelningen',
155
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
156
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
157
-	'info_1_article' => '1 artikel',
158
-	'info_activer_cookie' => 'Du kan aktivera en <b>administrationscookie</b>, som tillåter dig
124
+    // I
125
+    'ical_info1' => 'Denna sida visar flera metoder att hålla dig informerad om aktiviteter på sajten.',
126
+    'ical_info2' => 'För mer information, tveka inte om att besöka <a href="@spipnet@">SPIP’s dokumentation</a>.', # MODIF
127
+    'ical_info_calendrier' => 'Du kan använda två kalendrar. En är en sajtkarta med alla publicerade artiklar. Den andra innehåller redaktionella meddelanden och dina senaste privata meddelanden: Den är personlig, tack vare en genererad nyckel som du kan förändra när som helst genom att byta lösenord.',
128
+    'ical_methode_http' => 'Nerladdning',
129
+    'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF
130
+    'ical_texte_prive' => 'Den här kalendern som är personlig, innnehåller dina egna redaktionella händelser på den här sajten (uppgifter, egna möten, inlämnade artiklar och nyheter...).',
131
+    'ical_texte_public' => 'Den här kalendern låter dig följa den publika aktiviteten på sajten (publicerade artiklar och nyheter).',
132
+    'ical_texte_rss' => 'Du kan syndikerar de senaste nyheterna på den är sajten i vilken XML/RSS-läsare som helst. Det är samma format som gör det möjligt att läsa de senaste nyheterna på andra sajter som använder ett kompatibelt format. (syndikerade sajter).',
133
+    'ical_titre_js' => 'Javascript',
134
+    'ical_titre_mailing' => 'E-postlista',
135
+    'ical_titre_rss' => 'Syndikeringsfiler',
136
+    'icone_activer_cookie' => 'Sätt en cookie',
137
+    'icone_admin_plugin' => 'Hantera plugin’s',
138
+    'icone_afficher_auteurs' => 'Visa redaktörer',
139
+    'icone_afficher_visiteurs' => 'Visa besökare',
140
+    'icone_arret_discussion' => 'Avsluta diskussionen',
141
+    'icone_calendrier' => 'Kalender',
142
+    'icone_creer_auteur' => 'Skapa en ny redaktör och koppla honom (henne) till den här artikeln',
143
+    'icone_creer_mot_cle' => 'Skapa ett nytt nyckelord och länka det till artikeln',
144
+    'icone_creer_rubrique_2' => 'Skapa en ny avdelning',
145
+    'icone_modifier_article' => 'Editera artikeln',
146
+    'icone_modifier_rubrique' => 'Editera avdelningen',
147
+    'icone_relancer_signataire' => 'Kontakta personen igen',
148
+    'icone_retour' => 'Tillbaka',
149
+    'icone_retour_article' => 'Tillbaka till artikeln',
150
+    'icone_supprimer_cookie' => 'Radera cookien',
151
+    'icone_supprimer_rubrique' => 'Radera den här avdelningen',
152
+    'icone_supprimer_signature' => 'Radera den här signaturen',
153
+    'icone_valider_signature' => 'Validera signaturen',
154
+    'image_administrer_rubrique' => 'Du kan hantera den här avdelningen',
155
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
156
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
157
+    'info_1_article' => '1 artikel',
158
+    'info_activer_cookie' => 'Du kan aktivera en <b>administrationscookie</b>, som tillåter dig
159 159
  att enkelt växla mellan den publika och den privata delen.',
160
-	'info_administrateur' => 'Administratör',
161
-	'info_administrateur_1' => 'Administratör',
162
-	'info_administrateur_2' => 'på sajten (<i>använd med försiktighet</i>)',
163
-	'info_administrateur_site_01' => 'Om du är en sajt-administratör, var vänlig',
164
-	'info_administrateur_site_02' => 'klicka på den här länken',
165
-	'info_administrateurs' => 'Administratörer',
166
-	'info_administrer_rubrique' => 'Du kan hantera den här avdelningen',
167
-	'info_adresse' => 'till adressen:',
168
-	'info_adresse_url' => 'Din sajts publika URL',
169
-	'info_aide_en_ligne' => 'SPIP Online Hjälp',
170
-	'info_ajout_image' => 'När du lägget till filer som bifogade dokument till en artikel,
160
+    'info_administrateur' => 'Administratör',
161
+    'info_administrateur_1' => 'Administratör',
162
+    'info_administrateur_2' => 'på sajten (<i>använd med försiktighet</i>)',
163
+    'info_administrateur_site_01' => 'Om du är en sajt-administratör, var vänlig',
164
+    'info_administrateur_site_02' => 'klicka på den här länken',
165
+    'info_administrateurs' => 'Administratörer',
166
+    'info_administrer_rubrique' => 'Du kan hantera den här avdelningen',
167
+    'info_adresse' => 'till adressen:',
168
+    'info_adresse_url' => 'Din sajts publika URL',
169
+    'info_aide_en_ligne' => 'SPIP Online Hjälp',
170
+    'info_ajout_image' => 'När du lägget till filer som bifogade dokument till en artikel,
171 171
   kan SPIP automatiskt skapa miniatyrer av de
172 172
   inlagda bilderna. Det tillåter till exempel
173 173
   att man automatiskt skapar ett galleri eller en portfolio.',
174
-	'info_ajouter_rubrique' => 'lägg till en annan avdelning:',
175
-	'info_annonce_nouveautes' => 'Senaste nyheterna',
176
-	'info_article' => 'artikel',
177
-	'info_article_2' => 'artiklar',
178
-	'info_article_a_paraitre' => 'Fördaterade artiklar som kommer att publiceras',
179
-	'info_articles_02' => 'artiklar',
180
-	'info_articles_2' => 'Artiklar',
181
-	'info_articles_auteur' => 'Den här redaktörens artiklar',
182
-	'info_articles_trouves' => 'Artiklar hittade',
183
-	'info_attente_validation' => 'Dina artiklar som väntar på validering',
184
-	'info_aujourdhui' => 'idag:',
185
-	'info_auteurs' => 'Redaktörer',
186
-	'info_auteurs_par_tri' => 'Redaktörer@partri@',
187
-	'info_auteurs_trouves' => 'Redaktörer funna',
188
-	'info_authentification_externe' => 'Extern autentifiering',
189
-	'info_avertissement' => 'Varning',
190
-	'info_barre_outils' => 'med dess verktygsfält?',
191
-	'info_base_installee' => 'Databasen är skapad',
192
-	'info_chapeau' => 'Ingress',
193
-	'info_chapeau_2' => 'Introduktion:',
194
-	'info_chemin_acces_1' => 'inställningar: <b>sökväg i katalogen</b>',
195
-	'info_chemin_acces_2' => 'Från och med nu måste du konfigurera sökvägen till katalogen information. Det är nödvändigt för att kunna läsa användarprofilerna som är sparade i katalogen.',
196
-	'info_chemin_acces_annuaire' => 'Inställningar: <b>Sökväg i katalogen</b>',
197
-	'info_choix_base' => 'Tredje steget:',
198
-	'info_code_acces' => 'Glöm inte ditt eget lösenord!',
199
-	'info_config_suivi' => 'Om den här adressen är en mailing lista, kan du under adressen visa var man kan registrera sig. Det kan vara en URL (till exempel en webbsida där man kan registrera sig), eller en e-postadress med en speciell ärenderad (till exempel: <tt>@adresse_suivi@?subject=subscribe</tt>):',
200
-	'info_config_suivi_explication' => 'Du kan anmäla dig till sajtens nyhetsbrev. Du kommer då att automatiskt få meddelanden om artiklar och nyheter som laddats upp för publicering.',
201
-	'info_confirmer_passe' => 'Bekräfta ditt nya lösenord:',
202
-	'info_connexion_base' => 'Försöker att ansluta till databasen',
203
-	'info_connexion_ldap_ok' => 'Din förbindelse till LDAP-servern lyckades.</b><p> Du kan gå vidare till nästa steg.</p>', # MODIF
204
-	'info_connexion_mysql' => 'Din databasförbindelse',
205
-	'info_connexion_ok' => 'Förbindelsen lyckades.',
206
-	'info_contact' => 'Kontakt',
207
-	'info_contenu_articles' => 'Innehåll i artiklarna',
208
-	'info_creation_paragraphe' => '(För att skapa stycken, räcker det att lämna tomma rader.)', # MODIF
209
-	'info_creation_rubrique' => 'Innan du kan skriva artiklar,<br /> måste du skapa åtminstone en avdelning.<br />',
210
-	'info_creation_tables' => 'Skapar databastabeller',
211
-	'info_creer_base' => '<b>Skapa</b> en ny databas:',
212
-	'info_dans_rubrique' => 'I avdelningen:',
213
-	'info_date_publication_anterieure' => 'Datum för tidigare publicering:',
214
-	'info_date_referencement' => 'DATUM DÅ SAJTEN LÄNKADES:',
215
-	'info_derniere_etape' => 'Klart!',
216
-	'info_descriptif' => 'Beskrivning:',
217
-	'info_desinstaller_plugin' => 'raderar data och avaktiverar tillägget',
218
-	'info_discussion_cours' => 'Pågående diskussion',
219
-	'info_ecrire_article' => 'Innan du kan skriva artiklar, ymåste du skapa minst en avdelning.',
220
-	'info_email_envoi' => 'Avsändaren mailadress (frivilligt)',
221
-	'info_email_envoi_txt' => 'Skriv in avsändarens e-postadress som används när man sänder mejlen (som default används mottagarens adress som avsändaradress) :',
222
-	'info_email_webmestre' => 'Webmasterns mejladress (frivillig)', # MODIF
223
-	'info_envoi_email_automatique' => 'Automatisk e-post',
224
-	'info_envoyer_maintenant' => 'Skicka nu',
225
-	'info_etape_suivante' => 'Gå till nästa steg',
226
-	'info_etape_suivante_1' => 'Du kan fortsätta till nästa steg.',
227
-	'info_etape_suivante_2' => 'Du kan fortsätta till nästa steg.',
228
-	'info_exportation_base' => 'Exportera databasen till @archive@',
229
-	'info_facilite_suivi_activite' => 'För att underlätta att följa de redaktionella;
174
+    'info_ajouter_rubrique' => 'lägg till en annan avdelning:',
175
+    'info_annonce_nouveautes' => 'Senaste nyheterna',
176
+    'info_article' => 'artikel',
177
+    'info_article_2' => 'artiklar',
178
+    'info_article_a_paraitre' => 'Fördaterade artiklar som kommer att publiceras',
179
+    'info_articles_02' => 'artiklar',
180
+    'info_articles_2' => 'Artiklar',
181
+    'info_articles_auteur' => 'Den här redaktörens artiklar',
182
+    'info_articles_trouves' => 'Artiklar hittade',
183
+    'info_attente_validation' => 'Dina artiklar som väntar på validering',
184
+    'info_aujourdhui' => 'idag:',
185
+    'info_auteurs' => 'Redaktörer',
186
+    'info_auteurs_par_tri' => 'Redaktörer@partri@',
187
+    'info_auteurs_trouves' => 'Redaktörer funna',
188
+    'info_authentification_externe' => 'Extern autentifiering',
189
+    'info_avertissement' => 'Varning',
190
+    'info_barre_outils' => 'med dess verktygsfält?',
191
+    'info_base_installee' => 'Databasen är skapad',
192
+    'info_chapeau' => 'Ingress',
193
+    'info_chapeau_2' => 'Introduktion:',
194
+    'info_chemin_acces_1' => 'inställningar: <b>sökväg i katalogen</b>',
195
+    'info_chemin_acces_2' => 'Från och med nu måste du konfigurera sökvägen till katalogen information. Det är nödvändigt för att kunna läsa användarprofilerna som är sparade i katalogen.',
196
+    'info_chemin_acces_annuaire' => 'Inställningar: <b>Sökväg i katalogen</b>',
197
+    'info_choix_base' => 'Tredje steget:',
198
+    'info_code_acces' => 'Glöm inte ditt eget lösenord!',
199
+    'info_config_suivi' => 'Om den här adressen är en mailing lista, kan du under adressen visa var man kan registrera sig. Det kan vara en URL (till exempel en webbsida där man kan registrera sig), eller en e-postadress med en speciell ärenderad (till exempel: <tt>@adresse_suivi@?subject=subscribe</tt>):',
200
+    'info_config_suivi_explication' => 'Du kan anmäla dig till sajtens nyhetsbrev. Du kommer då att automatiskt få meddelanden om artiklar och nyheter som laddats upp för publicering.',
201
+    'info_confirmer_passe' => 'Bekräfta ditt nya lösenord:',
202
+    'info_connexion_base' => 'Försöker att ansluta till databasen',
203
+    'info_connexion_ldap_ok' => 'Din förbindelse till LDAP-servern lyckades.</b><p> Du kan gå vidare till nästa steg.</p>', # MODIF
204
+    'info_connexion_mysql' => 'Din databasförbindelse',
205
+    'info_connexion_ok' => 'Förbindelsen lyckades.',
206
+    'info_contact' => 'Kontakt',
207
+    'info_contenu_articles' => 'Innehåll i artiklarna',
208
+    'info_creation_paragraphe' => '(För att skapa stycken, räcker det att lämna tomma rader.)', # MODIF
209
+    'info_creation_rubrique' => 'Innan du kan skriva artiklar,<br /> måste du skapa åtminstone en avdelning.<br />',
210
+    'info_creation_tables' => 'Skapar databastabeller',
211
+    'info_creer_base' => '<b>Skapa</b> en ny databas:',
212
+    'info_dans_rubrique' => 'I avdelningen:',
213
+    'info_date_publication_anterieure' => 'Datum för tidigare publicering:',
214
+    'info_date_referencement' => 'DATUM DÅ SAJTEN LÄNKADES:',
215
+    'info_derniere_etape' => 'Klart!',
216
+    'info_descriptif' => 'Beskrivning:',
217
+    'info_desinstaller_plugin' => 'raderar data och avaktiverar tillägget',
218
+    'info_discussion_cours' => 'Pågående diskussion',
219
+    'info_ecrire_article' => 'Innan du kan skriva artiklar, ymåste du skapa minst en avdelning.',
220
+    'info_email_envoi' => 'Avsändaren mailadress (frivilligt)',
221
+    'info_email_envoi_txt' => 'Skriv in avsändarens e-postadress som används när man sänder mejlen (som default används mottagarens adress som avsändaradress) :',
222
+    'info_email_webmestre' => 'Webmasterns mejladress (frivillig)', # MODIF
223
+    'info_envoi_email_automatique' => 'Automatisk e-post',
224
+    'info_envoyer_maintenant' => 'Skicka nu',
225
+    'info_etape_suivante' => 'Gå till nästa steg',
226
+    'info_etape_suivante_1' => 'Du kan fortsätta till nästa steg.',
227
+    'info_etape_suivante_2' => 'Du kan fortsätta till nästa steg.',
228
+    'info_exportation_base' => 'Exportera databasen till @archive@',
229
+    'info_facilite_suivi_activite' => 'För att underlätta att följa de redaktionella;
230 230
   aktiviteterna, kan SPIP skicka medddelanden via e-post, exempelvis till en maillista för redaktörer,
231 231
   angående publiceringar och godkännanden.', # MODIF
232
-	'info_fichiers_authent' => 'Lösenordsfil ".htpasswd"',
233
-	'info_gauche_auteurs' => 'Här hittar du alla redaktörer på sajten.
232
+    'info_fichiers_authent' => 'Lösenordsfil ".htpasswd"',
233
+    'info_gauche_auteurs' => 'Här hittar du alla redaktörer på sajten.
234 234
  Status på var och en av dem visas av färgen på ikonen (administratör = grön; redaktör = gul).',
235
-	'info_gauche_auteurs_exterieurs' => 'Externa redaktörer utan behörighet på sajten, visas med en blå ikon; raderade redaktörer med en soptunna.', # MODIF
236
-	'info_generation_miniatures_images' => 'Skapande av tumnagelbilder.',
237
-	'info_hebergeur_desactiver_envoi_email' => 'Vissa webhotell avaktiverar automatisk mejl
235
+    'info_gauche_auteurs_exterieurs' => 'Externa redaktörer utan behörighet på sajten, visas med en blå ikon; raderade redaktörer med en soptunna.', # MODIF
236
+    'info_generation_miniatures_images' => 'Skapande av tumnagelbilder.',
237
+    'info_hebergeur_desactiver_envoi_email' => 'Vissa webhotell avaktiverar automatisk mejl
238 238
 på deras servrar. Om så är fallet kan följande
239 239
 funktioner hos SPIP inte användas.',
240
-	'info_hier' => 'I går:',
241
-	'info_identification_publique' => 'Din publika identitet...',
242
-	'info_image_process' => 'Välj den bästa metoden för att skapa miniatyrer genom att klicka på motsvarande bild.',
243
-	'info_image_process2' => '<b>OBS!.</b> <i>Om du inte kan se någon bild, så är din server inte konfigurerad för att använda sådana verktyg. Om du vill använda dessa finesser så kontakta din leverantörs tekniska support och be dem installera utökningarna för «GD» eller «Imagick».</i>', # MODIF
244
-	'info_informations_personnelles' => 'Personlig information',
245
-	'info_inscription_automatique' => 'Automatisk registreing av nya redaktörer',
246
-	'info_jeu_caractere' => 'Sajtens teckenuppsättning',
247
-	'info_jours' => 'dagar',
248
-	'info_laisser_champs_vides' => 'Lämna dessa fält tomma)',
249
-	'info_langues' => 'Sajtens språk',
250
-	'info_lien_hypertexte' => 'Hyperlänk:',
251
-	'info_liste_redacteurs_connectes' => 'Inlogggade redaktörer',
252
-	'info_login_existant' => 'Användarnamnet finns redan.',
253
-	'info_login_trop_court' => 'Användarnamnet är för kort.',
254
-	'info_logos' => 'Logotyperna',
255
-	'info_maximum' => 'maximum:',
256
-	'info_meme_rubrique' => 'I samma avdelning',
257
-	'info_message_en_redaction' => 'utkorg',
258
-	'info_message_technique' => 'Tekniskt meddelande:',
259
-	'info_messagerie_interne' => 'Internmeddelande',
260
-	'info_mise_a_niveau_base' => 'SQL database upgradering',
261
-	'info_mise_a_niveau_base_2' => '{{Warning!}} Du har installerat {äldre} 
240
+    'info_hier' => 'I går:',
241
+    'info_identification_publique' => 'Din publika identitet...',
242
+    'info_image_process' => 'Välj den bästa metoden för att skapa miniatyrer genom att klicka på motsvarande bild.',
243
+    'info_image_process2' => '<b>OBS!.</b> <i>Om du inte kan se någon bild, så är din server inte konfigurerad för att använda sådana verktyg. Om du vill använda dessa finesser så kontakta din leverantörs tekniska support och be dem installera utökningarna för «GD» eller «Imagick».</i>', # MODIF
244
+    'info_informations_personnelles' => 'Personlig information',
245
+    'info_inscription_automatique' => 'Automatisk registreing av nya redaktörer',
246
+    'info_jeu_caractere' => 'Sajtens teckenuppsättning',
247
+    'info_jours' => 'dagar',
248
+    'info_laisser_champs_vides' => 'Lämna dessa fält tomma)',
249
+    'info_langues' => 'Sajtens språk',
250
+    'info_lien_hypertexte' => 'Hyperlänk:',
251
+    'info_liste_redacteurs_connectes' => 'Inlogggade redaktörer',
252
+    'info_login_existant' => 'Användarnamnet finns redan.',
253
+    'info_login_trop_court' => 'Användarnamnet är för kort.',
254
+    'info_logos' => 'Logotyperna',
255
+    'info_maximum' => 'maximum:',
256
+    'info_meme_rubrique' => 'I samma avdelning',
257
+    'info_message_en_redaction' => 'utkorg',
258
+    'info_message_technique' => 'Tekniskt meddelande:',
259
+    'info_messagerie_interne' => 'Internmeddelande',
260
+    'info_mise_a_niveau_base' => 'SQL database upgradering',
261
+    'info_mise_a_niveau_base_2' => '{{Warning!}} Du har installerat {äldre} 
262 262
   SPIP filer än de som redan
263 263
   varit installerade på sajten: Du riskerar att förlora databasen
264 264
   och ha en sajt som inte längre fungerar.<br />{{återinstallera
265 265
   SPIP filerna.}}',
266
-	'info_modifier_auteur' => 'Editera detaljer för redaktören:',
267
-	'info_modifier_rubrique' => 'Editera avdelningen:',
268
-	'info_modifier_titre' => 'Editera: @titre@',
269
-	'info_mon_site_spip' => 'Min SPIP-sajt',
270
-	'info_moyenne' => 'genomsnitt:',
271
-	'info_multi_cet_article' => 'Den här artikelns språk:',
272
-	'info_multi_langues_choisies' => 'Var vänlig, välj tillgängliga språk för redaktörerna bland språken nedan.
266
+    'info_modifier_auteur' => 'Editera detaljer för redaktören:',
267
+    'info_modifier_rubrique' => 'Editera avdelningen:',
268
+    'info_modifier_titre' => 'Editera: @titre@',
269
+    'info_mon_site_spip' => 'Min SPIP-sajt',
270
+    'info_moyenne' => 'genomsnitt:',
271
+    'info_multi_cet_article' => 'Den här artikelns språk:',
272
+    'info_multi_langues_choisies' => 'Var vänlig, välj tillgängliga språk för redaktörerna bland språken nedan.
273 273
   Språk som redan används på din sajt (högst upp på listan) kan inte avaktiveras.',
274
-	'info_multi_secteurs' => '... bara för avdelningarna i roten?',
275
-	'info_nom' => 'Namn',
276
-	'info_nom_destinataire' => 'Mottagarens namn',
277
-	'info_nom_site' => 'Din sajts namn',
278
-	'info_nombre_articles' => '@nb_articles@ artiklar,',
279
-	'info_nombre_rubriques' => '@nb_rubriques@ avdelningar,',
280
-	'info_nombre_sites' => '@nb_sites@ sajter,',
281
-	'info_non_deplacer' => 'Flytta inte...',
282
-	'info_non_envoi_liste_nouveautes' => 'Skicka inte listan med senaste nyheterna',
283
-	'info_non_modifiable' => 'kan inte förändras',
284
-	'info_non_suppression_mot_cle' => 'Jag vill inte radera nyckelordet.',
285
-	'info_notes' => 'Fotnoter',
286
-	'info_nouvel_article' => 'Ny artikel',
287
-	'info_nouvelle_traduction' => 'Ny översättning:',
288
-	'info_numero_article' => 'ARTIKEL NUMMER:',
289
-	'info_obligatoire_02' => '[Krävs]', # MODIF
290
-	'info_option_accepter_visiteurs' => 'Tillåt besökare registrera sig på den publika delen',
291
-	'info_option_ne_pas_accepter_visiteurs' => 'Avvisa besökarregistrering',
292
-	'info_options_avancees' => 'AVANCERADE INSTÄLLNINGAR',
293
-	'info_ou' => 'eller...',
294
-	'info_page_interdite' => 'Förbjuden sida',
295
-	'info_par_nom' => 'efter namn',
296
-	'info_par_nombre_article' => 'efter antal artiklar',
297
-	'info_par_statut' => 'efter status',
298
-	'info_par_tri' => '’(efter @tri@)’',
299
-	'info_passe_trop_court' => 'lösenordet är för kort.',
300
-	'info_passes_identiques' => 'De två lösenorden är inte identiska.',
301
-	'info_plus_cinq_car' => 'mer än 5 tecken',
302
-	'info_plus_cinq_car_2' => '(Mer än 5 tecken)',
303
-	'info_plus_trois_car' => '(Mer än 3 tecken)',
304
-	'info_popularite' => 'popularitet: @popularite@; besök: @visites@',
305
-	'info_post_scriptum' => 'Postscript',
306
-	'info_post_scriptum_2' => 'PS:',
307
-	'info_pour' => 'för',
308
-	'info_procedez_par_etape' => 'Var vänlig, fortsätt steg för steg',
309
-	'info_procedure_maj_version' => 'Uppdateringsproceduren skall köras för att
274
+    'info_multi_secteurs' => '... bara för avdelningarna i roten?',
275
+    'info_nom' => 'Namn',
276
+    'info_nom_destinataire' => 'Mottagarens namn',
277
+    'info_nom_site' => 'Din sajts namn',
278
+    'info_nombre_articles' => '@nb_articles@ artiklar,',
279
+    'info_nombre_rubriques' => '@nb_rubriques@ avdelningar,',
280
+    'info_nombre_sites' => '@nb_sites@ sajter,',
281
+    'info_non_deplacer' => 'Flytta inte...',
282
+    'info_non_envoi_liste_nouveautes' => 'Skicka inte listan med senaste nyheterna',
283
+    'info_non_modifiable' => 'kan inte förändras',
284
+    'info_non_suppression_mot_cle' => 'Jag vill inte radera nyckelordet.',
285
+    'info_notes' => 'Fotnoter',
286
+    'info_nouvel_article' => 'Ny artikel',
287
+    'info_nouvelle_traduction' => 'Ny översättning:',
288
+    'info_numero_article' => 'ARTIKEL NUMMER:',
289
+    'info_obligatoire_02' => '[Krävs]', # MODIF
290
+    'info_option_accepter_visiteurs' => 'Tillåt besökare registrera sig på den publika delen',
291
+    'info_option_ne_pas_accepter_visiteurs' => 'Avvisa besökarregistrering',
292
+    'info_options_avancees' => 'AVANCERADE INSTÄLLNINGAR',
293
+    'info_ou' => 'eller...',
294
+    'info_page_interdite' => 'Förbjuden sida',
295
+    'info_par_nom' => 'efter namn',
296
+    'info_par_nombre_article' => 'efter antal artiklar',
297
+    'info_par_statut' => 'efter status',
298
+    'info_par_tri' => '’(efter @tri@)’',
299
+    'info_passe_trop_court' => 'lösenordet är för kort.',
300
+    'info_passes_identiques' => 'De två lösenorden är inte identiska.',
301
+    'info_plus_cinq_car' => 'mer än 5 tecken',
302
+    'info_plus_cinq_car_2' => '(Mer än 5 tecken)',
303
+    'info_plus_trois_car' => '(Mer än 3 tecken)',
304
+    'info_popularite' => 'popularitet: @popularite@; besök: @visites@',
305
+    'info_post_scriptum' => 'Postscript',
306
+    'info_post_scriptum_2' => 'PS:',
307
+    'info_pour' => 'för',
308
+    'info_procedez_par_etape' => 'Var vänlig, fortsätt steg för steg',
309
+    'info_procedure_maj_version' => 'Uppdateringsproceduren skall köras för att
310 310
  anpassa databasen till den nya versionen av SPIP.',
311
-	'info_proxy_ok' => 'Testen av proxy lyckades.',
312
-	'info_ps' => 'P.S.',
313
-	'info_publier' => 'publicera',
314
-	'info_publies' => 'Dina onlinepublicerade artiklar',
315
-	'info_question_accepter_visiteurs' => 'Om sajtens template tillåter besökare att registrera sig utan att gå in i den privata delen, var vänlig och aktivera följande option:',
316
-	'info_racine_site' => 'Sajtens bas',
317
-	'info_recharger_page' => 'Var vänlig och uppdatera sidan om en liten stund.',
318
-	'info_recherche_auteur_zero' => 'Inga resultat hittades för "@cherche_auteur@".',
319
-	'info_recommencer' => 'Var vänlig och försök igen.',
320
-	'info_redacteur_1' => 'Redaktör',
321
-	'info_redacteur_2' => 'för tillgång till den privata delen (<i>rekommenderas</i>)',
322
-	'info_redacteurs' => 'Redaktörer',
323
-	'info_redaction_en_cours' => 'UNDER ARBETE',
324
-	'info_redirection' => 'Ompekning',
325
-	'info_refuses' => 'Refuserade artiklar',
326
-	'info_reglage_ldap' => 'inställningar: <b>anpassar LDAP import</b>',
327
-	'info_renvoi_article' => '<b>Ompekning.</b> Den här artikeln pekar om till:',
328
-	'info_reserve_admin' => 'Enbart administratörer kan förändra adressen.',
329
-	'info_restreindre_rubrique' => 'Begränsa administrationen till avdelningen:',
330
-	'info_resultat_recherche' => 'Sökresultat:',
331
-	'info_rubriques' => 'Avdelningar',
332
-	'info_rubriques_02' => 'avdelningar',
333
-	'info_rubriques_trouvees' => 'Hittade avdelningar',
334
-	'info_sans_titre' => 'Utan titel',
335
-	'info_selection_chemin_acces' => '<b>Välj</b> åtkomstväg i katalogen:',
336
-	'info_signatures' => 'underskrifter',
337
-	'info_site' => 'Sajt',
338
-	'info_site_2' => 'sajt:',
339
-	'info_site_min' => 'sajt',
340
-	'info_site_reference_2' => 'Länkad sajt',
341
-	'info_site_web' => 'WEBBSAJT:', # MODIF
342
-	'info_sites' => 'sajter',
343
-	'info_sites_lies_mot' => 'Länkade sajter knutna till detta nyckelord',
344
-	'info_sites_proxy' => 'Använder en proxy',
345
-	'info_sites_trouves' => 'Hittade sajter',
346
-	'info_sous_titre' => 'Undertitel:',
347
-	'info_statut_administrateur' => 'Administratör',
348
-	'info_statut_auteur' => 'Redaktörens status:', # MODIF
349
-	'info_statut_auteur_a_confirmer' => 'Registreringar som skall godkännas',
350
-	'info_statut_auteur_autre' => 'Annan status:',
351
-	'info_statut_redacteur' => 'Redaktör',
352
-	'info_statut_utilisateurs_1' => 'Startinställningar för importerade användare',
353
-	'info_suivi_activite' => 'Följ upp aktiviteten på sajten',
354
-	'info_surtitre' => 'Övertitel:',
355
-	'info_syndication_integrale_1' => 'Din sajt publiceras RSS-filer för syndikering (Se “<a href="@url@">@titre@</a>”).',
356
-	'info_syndication_integrale_2' => 'Vill du skicka hela artiklar eller bara en sammanfattning på ett par hundra tecken?',
357
-	'info_table_prefix' => 'Det är möjligt att byta prefix i databastabellernas namn. (Du behöver göra det om di installerar flera sajter i samma databas). Prefixet måste skrivas utan accenter, med versaler utan mellanslag.',
358
-	'info_taille_maximale_vignette' => 'Maximal storlek på miniatyrer som skapats av systemet:',
359
-	'info_terminer_installation' => 'Du kan nu avsluta installationsprocessen.',
360
-	'info_texte' => 'Text',
361
-	'info_texte_explicatif' => 'Förklarande text',
362
-	'info_texte_long' => '(Texten är lång: Den kommer att synas i flera delar som sedan sammanfogas efter validering.)',
363
-	'info_texte_message' => 'Texten i ditt meddelande:', # MODIF
364
-	'info_texte_message_02' => 'Texten i ditt meddelande',
365
-	'info_titre' => 'Titel:',
366
-	'info_total' => 'total:',
367
-	'info_tous_articles_en_redaction' => 'Alla artiklar under arbete',
368
-	'info_tous_articles_presents' => 'Alla artiklar som publicerats i den här avdelningen',
369
-	'info_tous_les' => 'alla:',
370
-	'info_tout_site' => 'Hela sajten',
371
-	'info_tout_site2' => 'Artikeln har inte blivit översatt till det här språket.',
372
-	'info_tout_site3' => 'Artikeln har blivit översatt till det hör språket men vissa förändringar har gjorts senare i orginalartikeln. Översättningen behöver uppdateras.',
373
-	'info_tout_site4' => 'Artikeln har blivit översatt till det här språket och översättningen är aktuell.',
374
-	'info_tout_site5' => 'Orginalartikeln.',
375
-	'info_tout_site6' => '<b>OBS:</b> bara orginalartiklarna visas.
311
+    'info_proxy_ok' => 'Testen av proxy lyckades.',
312
+    'info_ps' => 'P.S.',
313
+    'info_publier' => 'publicera',
314
+    'info_publies' => 'Dina onlinepublicerade artiklar',
315
+    'info_question_accepter_visiteurs' => 'Om sajtens template tillåter besökare att registrera sig utan att gå in i den privata delen, var vänlig och aktivera följande option:',
316
+    'info_racine_site' => 'Sajtens bas',
317
+    'info_recharger_page' => 'Var vänlig och uppdatera sidan om en liten stund.',
318
+    'info_recherche_auteur_zero' => 'Inga resultat hittades för "@cherche_auteur@".',
319
+    'info_recommencer' => 'Var vänlig och försök igen.',
320
+    'info_redacteur_1' => 'Redaktör',
321
+    'info_redacteur_2' => 'för tillgång till den privata delen (<i>rekommenderas</i>)',
322
+    'info_redacteurs' => 'Redaktörer',
323
+    'info_redaction_en_cours' => 'UNDER ARBETE',
324
+    'info_redirection' => 'Ompekning',
325
+    'info_refuses' => 'Refuserade artiklar',
326
+    'info_reglage_ldap' => 'inställningar: <b>anpassar LDAP import</b>',
327
+    'info_renvoi_article' => '<b>Ompekning.</b> Den här artikeln pekar om till:',
328
+    'info_reserve_admin' => 'Enbart administratörer kan förändra adressen.',
329
+    'info_restreindre_rubrique' => 'Begränsa administrationen till avdelningen:',
330
+    'info_resultat_recherche' => 'Sökresultat:',
331
+    'info_rubriques' => 'Avdelningar',
332
+    'info_rubriques_02' => 'avdelningar',
333
+    'info_rubriques_trouvees' => 'Hittade avdelningar',
334
+    'info_sans_titre' => 'Utan titel',
335
+    'info_selection_chemin_acces' => '<b>Välj</b> åtkomstväg i katalogen:',
336
+    'info_signatures' => 'underskrifter',
337
+    'info_site' => 'Sajt',
338
+    'info_site_2' => 'sajt:',
339
+    'info_site_min' => 'sajt',
340
+    'info_site_reference_2' => 'Länkad sajt',
341
+    'info_site_web' => 'WEBBSAJT:', # MODIF
342
+    'info_sites' => 'sajter',
343
+    'info_sites_lies_mot' => 'Länkade sajter knutna till detta nyckelord',
344
+    'info_sites_proxy' => 'Använder en proxy',
345
+    'info_sites_trouves' => 'Hittade sajter',
346
+    'info_sous_titre' => 'Undertitel:',
347
+    'info_statut_administrateur' => 'Administratör',
348
+    'info_statut_auteur' => 'Redaktörens status:', # MODIF
349
+    'info_statut_auteur_a_confirmer' => 'Registreringar som skall godkännas',
350
+    'info_statut_auteur_autre' => 'Annan status:',
351
+    'info_statut_redacteur' => 'Redaktör',
352
+    'info_statut_utilisateurs_1' => 'Startinställningar för importerade användare',
353
+    'info_suivi_activite' => 'Följ upp aktiviteten på sajten',
354
+    'info_surtitre' => 'Övertitel:',
355
+    'info_syndication_integrale_1' => 'Din sajt publiceras RSS-filer för syndikering (Se “<a href="@url@">@titre@</a>”).',
356
+    'info_syndication_integrale_2' => 'Vill du skicka hela artiklar eller bara en sammanfattning på ett par hundra tecken?',
357
+    'info_table_prefix' => 'Det är möjligt att byta prefix i databastabellernas namn. (Du behöver göra det om di installerar flera sajter i samma databas). Prefixet måste skrivas utan accenter, med versaler utan mellanslag.',
358
+    'info_taille_maximale_vignette' => 'Maximal storlek på miniatyrer som skapats av systemet:',
359
+    'info_terminer_installation' => 'Du kan nu avsluta installationsprocessen.',
360
+    'info_texte' => 'Text',
361
+    'info_texte_explicatif' => 'Förklarande text',
362
+    'info_texte_long' => '(Texten är lång: Den kommer att synas i flera delar som sedan sammanfogas efter validering.)',
363
+    'info_texte_message' => 'Texten i ditt meddelande:', # MODIF
364
+    'info_texte_message_02' => 'Texten i ditt meddelande',
365
+    'info_titre' => 'Titel:',
366
+    'info_total' => 'total:',
367
+    'info_tous_articles_en_redaction' => 'Alla artiklar under arbete',
368
+    'info_tous_articles_presents' => 'Alla artiklar som publicerats i den här avdelningen',
369
+    'info_tous_les' => 'alla:',
370
+    'info_tout_site' => 'Hela sajten',
371
+    'info_tout_site2' => 'Artikeln har inte blivit översatt till det här språket.',
372
+    'info_tout_site3' => 'Artikeln har blivit översatt till det hör språket men vissa förändringar har gjorts senare i orginalartikeln. Översättningen behöver uppdateras.',
373
+    'info_tout_site4' => 'Artikeln har blivit översatt till det här språket och översättningen är aktuell.',
374
+    'info_tout_site5' => 'Orginalartikeln.',
375
+    'info_tout_site6' => '<b>OBS:</b> bara orginalartiklarna visas.
376 376
 Översättningarna är länkade till orginalet
377 377
 med en färg som visar deras status:',
378
-	'info_travail_colaboratif' => 'Gemensamt arbete på artiklar',
379
-	'info_un_article' => 'en artikel,',
380
-	'info_un_site' => 'En sajt,',
381
-	'info_une_rubrique' => 'en avdelning,',
382
-	'info_une_rubrique_02' => '1 avdelning',
383
-	'info_url' => 'URL:',
384
-	'info_urlref' => 'Hyperlänk:',
385
-	'info_utilisation_spip' => 'SPIP är nu färdig att användas..',
386
-	'info_visites_par_mois' => 'Besökare per månad:',
387
-	'info_visiteur_1' => 'Besökare',
388
-	'info_visiteur_2' => 'på den publika delen',
389
-	'info_visiteurs' => 'Besökare',
390
-	'info_visiteurs_02' => 'Beökare på den publika delen',
391
-	'install_adresse_base_hebergeur' => 'Databasadress tillhandahållen av webbhotellet',
392
-	'install_echec_annonce' => 'Den här installationen kommer förmodligen inte att fungera, alternativt resulterar den i en sajt med reducerad funktionalitet ...',
393
-	'install_extension_mbstring' => 'SPIP fungerar inte med:',
394
-	'install_extension_php_obligatoire' => 'SPIP kräver ett tillägg till php:',
395
-	'install_login_base_hebergeur' => 'Login tilldelat av leverantören',
396
-	'install_nom_base_hebergeur' => 'Databasnamn tilldelat av leverantören:',
397
-	'install_pas_table' => 'Databasen har inga tabeller',
398
-	'install_pass_base_hebergeur' => 'Lösenord till databasen tilldelat av leverantören',
399
-	'install_php_version' => 'Versionen av PHP, @version@ är för gammal (minimum = @minimum@)',
400
-	'install_select_langue' => 'Välj ett språk, klicka sedan på knappen "fortsätt" för att starta installationen.',
401
-	'install_select_type_db' => 'Välj typ av databas :',
402
-	'install_select_type_mysql' => 'MySQL',
403
-	'install_select_type_sqlite2' => 'SQLite 2',
404
-	'install_select_type_sqlite3' => 'SQLite 3',
405
-	'install_tables_base' => 'Databasens tabeller',
406
-	'intem_redacteur' => 'redaktör',
407
-	'intitule_licence' => 'Licens',
408
-	'item_accepter_inscriptions' => 'Tillåt registreringar',
409
-	'item_activer_messages_avertissement' => 'Aktivera varningsmeddelanden',
410
-	'item_administrateur_2' => 'administratör',
411
-	'item_afficher_calendrier' => 'Visa i kalendern',
412
-	'item_autoriser_syndication_integrale' => 'Inkludera hela artiklar i syndikeringsfilerna',
413
-	'item_choix_administrateurs' => 'administratörer',
414
-	'item_choix_generation_miniature' => 'Generera miniatyrer automatiskt.',
415
-	'item_choix_non_generation_miniature' => 'Generera inte miniatyrer.',
416
-	'item_choix_redacteurs' => 'redaktörer',
417
-	'item_choix_visiteurs' => 'besökare till den publika delen',
418
-	'item_creer_fichiers_authent' => 'Skapa .htpasswd filer',
419
-	'item_login' => 'Login',
420
-	'item_messagerie_agenda' => 'Aktivera meddelandesystemet och kalendern',
421
-	'item_mots_cles_association_articles' => 'artiklar',
422
-	'item_mots_cles_association_rubriques' => 'avdelningar',
423
-	'item_mots_cles_association_sites' => 'länkade eller syndikerade sajter.',
424
-	'item_non' => 'Nej',
425
-	'item_non_accepter_inscriptions' => 'Tillåt inte registreringar',
426
-	'item_non_activer_messages_avertissement' => 'Inga varningsmeddelanden',
427
-	'item_non_afficher_calendrier' => 'Visa inte i kalendern',
428
-	'item_non_autoriser_syndication_integrale' => 'Skicka bara en sammanfattning',
429
-	'item_non_creer_fichiers_authent' => 'Skapa inte dessa filer',
430
-	'item_non_messagerie_agenda' => 'Avaktivera meddelandesystemet och kalendern',
431
-	'item_non_publier_articles' => 'Publicera inte artiklar innan deras publiceringsdatum.',
432
-	'item_nouvel_auteur' => 'Ny redaktör',
433
-	'item_nouvelle_rubrique' => 'Ny avdelning',
434
-	'item_oui' => 'Ja',
435
-	'item_publier_articles' => 'Publicera artiklarna utan att ta hänsyn till publiceringsdatum.',
436
-	'item_reponse_article' => 'Svara på artikeln',
437
-	'item_visiteur' => 'besökare',
378
+    'info_travail_colaboratif' => 'Gemensamt arbete på artiklar',
379
+    'info_un_article' => 'en artikel,',
380
+    'info_un_site' => 'En sajt,',
381
+    'info_une_rubrique' => 'en avdelning,',
382
+    'info_une_rubrique_02' => '1 avdelning',
383
+    'info_url' => 'URL:',
384
+    'info_urlref' => 'Hyperlänk:',
385
+    'info_utilisation_spip' => 'SPIP är nu färdig att användas..',
386
+    'info_visites_par_mois' => 'Besökare per månad:',
387
+    'info_visiteur_1' => 'Besökare',
388
+    'info_visiteur_2' => 'på den publika delen',
389
+    'info_visiteurs' => 'Besökare',
390
+    'info_visiteurs_02' => 'Beökare på den publika delen',
391
+    'install_adresse_base_hebergeur' => 'Databasadress tillhandahållen av webbhotellet',
392
+    'install_echec_annonce' => 'Den här installationen kommer förmodligen inte att fungera, alternativt resulterar den i en sajt med reducerad funktionalitet ...',
393
+    'install_extension_mbstring' => 'SPIP fungerar inte med:',
394
+    'install_extension_php_obligatoire' => 'SPIP kräver ett tillägg till php:',
395
+    'install_login_base_hebergeur' => 'Login tilldelat av leverantören',
396
+    'install_nom_base_hebergeur' => 'Databasnamn tilldelat av leverantören:',
397
+    'install_pas_table' => 'Databasen har inga tabeller',
398
+    'install_pass_base_hebergeur' => 'Lösenord till databasen tilldelat av leverantören',
399
+    'install_php_version' => 'Versionen av PHP, @version@ är för gammal (minimum = @minimum@)',
400
+    'install_select_langue' => 'Välj ett språk, klicka sedan på knappen "fortsätt" för att starta installationen.',
401
+    'install_select_type_db' => 'Välj typ av databas :',
402
+    'install_select_type_mysql' => 'MySQL',
403
+    'install_select_type_sqlite2' => 'SQLite 2',
404
+    'install_select_type_sqlite3' => 'SQLite 3',
405
+    'install_tables_base' => 'Databasens tabeller',
406
+    'intem_redacteur' => 'redaktör',
407
+    'intitule_licence' => 'Licens',
408
+    'item_accepter_inscriptions' => 'Tillåt registreringar',
409
+    'item_activer_messages_avertissement' => 'Aktivera varningsmeddelanden',
410
+    'item_administrateur_2' => 'administratör',
411
+    'item_afficher_calendrier' => 'Visa i kalendern',
412
+    'item_autoriser_syndication_integrale' => 'Inkludera hela artiklar i syndikeringsfilerna',
413
+    'item_choix_administrateurs' => 'administratörer',
414
+    'item_choix_generation_miniature' => 'Generera miniatyrer automatiskt.',
415
+    'item_choix_non_generation_miniature' => 'Generera inte miniatyrer.',
416
+    'item_choix_redacteurs' => 'redaktörer',
417
+    'item_choix_visiteurs' => 'besökare till den publika delen',
418
+    'item_creer_fichiers_authent' => 'Skapa .htpasswd filer',
419
+    'item_login' => 'Login',
420
+    'item_messagerie_agenda' => 'Aktivera meddelandesystemet och kalendern',
421
+    'item_mots_cles_association_articles' => 'artiklar',
422
+    'item_mots_cles_association_rubriques' => 'avdelningar',
423
+    'item_mots_cles_association_sites' => 'länkade eller syndikerade sajter.',
424
+    'item_non' => 'Nej',
425
+    'item_non_accepter_inscriptions' => 'Tillåt inte registreringar',
426
+    'item_non_activer_messages_avertissement' => 'Inga varningsmeddelanden',
427
+    'item_non_afficher_calendrier' => 'Visa inte i kalendern',
428
+    'item_non_autoriser_syndication_integrale' => 'Skicka bara en sammanfattning',
429
+    'item_non_creer_fichiers_authent' => 'Skapa inte dessa filer',
430
+    'item_non_messagerie_agenda' => 'Avaktivera meddelandesystemet och kalendern',
431
+    'item_non_publier_articles' => 'Publicera inte artiklar innan deras publiceringsdatum.',
432
+    'item_nouvel_auteur' => 'Ny redaktör',
433
+    'item_nouvelle_rubrique' => 'Ny avdelning',
434
+    'item_oui' => 'Ja',
435
+    'item_publier_articles' => 'Publicera artiklarna utan att ta hänsyn till publiceringsdatum.',
436
+    'item_reponse_article' => 'Svara på artikeln',
437
+    'item_visiteur' => 'besökare',
438 438
 
439
-	// J
440
-	'jour_non_connu_nc' => 'okänd',
439
+    // J
440
+    'jour_non_connu_nc' => 'okänd',
441 441
 
442
-	// L
443
-	'lien_ajouter_auteur' => 'Lätt till redaktören',
444
-	'lien_email' => 'e-post',
445
-	'lien_nom_site' => 'SAJTENS NAMN:',
446
-	'lien_retirer_auteur' => 'Ta bort redaktören',
447
-	'lien_site' => 'sajt',
448
-	'lien_tout_deplier' => 'Expandera alla',
449
-	'lien_tout_replier' => 'Kollapsa alla',
450
-	'lien_tout_supprimer' => 'Radera alla',
451
-	'lien_trier_nom' => 'Sortera efter namn',
452
-	'lien_trier_nombre_articles' => 'Sortera efter artikelnummer',
453
-	'lien_trier_statut' => 'Sortera efter status',
454
-	'lien_voir_en_ligne' => 'SE ONLINE:',
455
-	'logo_article' => 'ARTIKELNS LOGOTYPE', # MODIF
456
-	'logo_auteur' => 'REDAKTÖRENS LOGOTYPE', # MODIF
457
-	'logo_rubrique' => 'Avdelningens logotype', # MODIF
458
-	'logo_site' => 'SAJTENS LOGOTYPE', # MODIF
459
-	'logo_standard_rubrique' => 'STANDARDLOGOTYPE FÖR AVDELNINGAR', # MODIF
460
-	'logo_survol' => 'LOGOTYPE FÖR MUS-ÖVER', # MODIF
442
+    // L
443
+    'lien_ajouter_auteur' => 'Lätt till redaktören',
444
+    'lien_email' => 'e-post',
445
+    'lien_nom_site' => 'SAJTENS NAMN:',
446
+    'lien_retirer_auteur' => 'Ta bort redaktören',
447
+    'lien_site' => 'sajt',
448
+    'lien_tout_deplier' => 'Expandera alla',
449
+    'lien_tout_replier' => 'Kollapsa alla',
450
+    'lien_tout_supprimer' => 'Radera alla',
451
+    'lien_trier_nom' => 'Sortera efter namn',
452
+    'lien_trier_nombre_articles' => 'Sortera efter artikelnummer',
453
+    'lien_trier_statut' => 'Sortera efter status',
454
+    'lien_voir_en_ligne' => 'SE ONLINE:',
455
+    'logo_article' => 'ARTIKELNS LOGOTYPE', # MODIF
456
+    'logo_auteur' => 'REDAKTÖRENS LOGOTYPE', # MODIF
457
+    'logo_rubrique' => 'Avdelningens logotype', # MODIF
458
+    'logo_site' => 'SAJTENS LOGOTYPE', # MODIF
459
+    'logo_standard_rubrique' => 'STANDARDLOGOTYPE FÖR AVDELNINGAR', # MODIF
460
+    'logo_survol' => 'LOGOTYPE FÖR MUS-ÖVER', # MODIF
461 461
 
462
-	// M
463
-	'menu_aide_installation_choix_base' => 'Välj din databas',
464
-	'module_fichier_langue' => 'Språkfiler',
465
-	'module_raccourci' => 'Genväg',
466
-	'module_texte_affiche' => 'Visad text',
467
-	'module_texte_traduction' => 'Språkfilen « @module@ » finns i:',
462
+    // M
463
+    'menu_aide_installation_choix_base' => 'Välj din databas',
464
+    'module_fichier_langue' => 'Språkfiler',
465
+    'module_raccourci' => 'Genväg',
466
+    'module_texte_affiche' => 'Visad text',
467
+    'module_texte_traduction' => 'Språkfilen « @module@ » finns i:',
468 468
 
469
-	// O
470
-	'onglet_contenu' => 'Innehåll',
471
-	'onglet_declarer_une_autre_base' => 'Ange en annan databas',
472
-	'onglet_discuter' => 'Diskutera',
473
-	'onglet_interactivite' => 'Interaktivitet',
474
-	'onglet_proprietes' => 'Egenskaper',
475
-	'onglet_repartition_actuelle' => 'nu',
469
+    // O
470
+    'onglet_contenu' => 'Innehåll',
471
+    'onglet_declarer_une_autre_base' => 'Ange en annan databas',
472
+    'onglet_discuter' => 'Diskutera',
473
+    'onglet_interactivite' => 'Interaktivitet',
474
+    'onglet_proprietes' => 'Egenskaper',
475
+    'onglet_repartition_actuelle' => 'nu',
476 476
 
477
-	// P
478
-	'plugin_etat_developpement' => 'Under utveckling',
479
-	'plugin_etat_experimental' => 'exprimentell',
480
-	'plugin_etat_stable' => 'Stabil',
481
-	'plugin_etat_test' => 'under test',
482
-	'plugin_impossible_activer' => 'Omöjligt att aktivera pluginen @plugin@',
483
-	'plugin_necessite_plugin' => 'Version @version@ eller nyare av pluginen @plugin@ krävs.', # MODIF
484
-	'plugin_zip_active' => 'Fortsätt för att aktivera',
485
-	'plugin_zip_installe_finie' => 'Filen @zip@ har packats upp och installerats.',
486
-	'plugin_zip_installe_rep_finie' => 'Filen @zip@ har packats upp och installerats i katalogen @rep@',
487
-	'plugin_zip_installer' => 'Du kan installera nu.',
488
-	'plugins_actifs' => '@count@ aktiva plugins.',
489
-	'plugins_compte' => '@count@ plugins',
490
-	'plugins_disponibles' => '@count@ tillgängliga plugins.',
491
-	'plugins_erreur' => 'Fel i följande plugin: @plugins@',
492
-	'plugins_liste' => 'Lista över plugins',
477
+    // P
478
+    'plugin_etat_developpement' => 'Under utveckling',
479
+    'plugin_etat_experimental' => 'exprimentell',
480
+    'plugin_etat_stable' => 'Stabil',
481
+    'plugin_etat_test' => 'under test',
482
+    'plugin_impossible_activer' => 'Omöjligt att aktivera pluginen @plugin@',
483
+    'plugin_necessite_plugin' => 'Version @version@ eller nyare av pluginen @plugin@ krävs.', # MODIF
484
+    'plugin_zip_active' => 'Fortsätt för att aktivera',
485
+    'plugin_zip_installe_finie' => 'Filen @zip@ har packats upp och installerats.',
486
+    'plugin_zip_installe_rep_finie' => 'Filen @zip@ har packats upp och installerats i katalogen @rep@',
487
+    'plugin_zip_installer' => 'Du kan installera nu.',
488
+    'plugins_actifs' => '@count@ aktiva plugins.',
489
+    'plugins_compte' => '@count@ plugins',
490
+    'plugins_disponibles' => '@count@ tillgängliga plugins.',
491
+    'plugins_erreur' => 'Fel i följande plugin: @plugins@',
492
+    'plugins_liste' => 'Lista över plugins',
493 493
 
494
-	// R
495
-	'required' => '[Krävs]', # MODIF
494
+    // R
495
+    'required' => '[Krävs]', # MODIF
496 496
 
497
-	// T
498
-	'taille_cache_vide' => 'Cachen är tom.',
499
-	'text_article_propose_publication' => 'Artikel inlämnad för publicering. tveka inte att säga din mening i forumet längst ned på sidan.', # MODIF
500
-	'texte_admin_effacer_01' => 'Detta kommando raderar <i>all</i> information i databasen,
497
+    // T
498
+    'taille_cache_vide' => 'Cachen är tom.',
499
+    'text_article_propose_publication' => 'Artikel inlämnad för publicering. tveka inte att säga din mening i forumet längst ned på sidan.', # MODIF
500
+    'texte_admin_effacer_01' => 'Detta kommando raderar <i>all</i> information i databasen,
501 501
 inklusive <i>alla</i> uppgifter om användare. Efter att du använt det, måste du 
502 502
 installera om SPIP för att skapa en ny databas och den första administratören.',
503
-	'texte_adresse_annuaire_1' => '( Om din katalog är installerad på samma dator som din websajt, är det troligen «localhost».)',
504
-	'texte_ajout_auteur' => 'Följande redaktör lades till artikeln:',
505
-	'texte_annuaire_ldap_1' => 'Om du har tillgång till en LDAP-katalog kan du använda den för att importera användare till SPIP.',
506
-	'texte_article_statut' => 'Artikelns status:',
507
-	'texte_article_virtuel' => 'Virtuell artikel',
508
-	'texte_article_virtuel_reference' => '<b>Virtuell Artikel:</b> länkad artikel i din SPIP site, men ompekad till en annan URL. För att ta bort ompekningen, radera denna URL.',
509
-	'texte_aucun_resultat_auteur' => 'Inga resultat för "@cherche_auteur@".',
510
-	'texte_auteurs' => 'REDAKTÖRERNA',
511
-	'texte_choix_base_1' => 'Välj din databas:',
512
-	'texte_choix_base_2' => 'Databasservern innehåller flera databaser.',
513
-	'texte_choix_base_3' => '<b>Välj</b> den som din leverantör har gett dig:',
514
-	'texte_choix_table_prefix' => 'Prefix för tabeller:',
515
-	'texte_compte_element' => '@count@ objekt',
516
-	'texte_compte_elements' => '@count@ element',
517
-	'texte_jeu_caractere_3' => 'Din sajt använder följande teckenuppsättning:',
518
-	'texte_mise_a_niveau_base_1' => 'Du har just uppdaterat filerna i SPIP.
503
+    'texte_adresse_annuaire_1' => '( Om din katalog är installerad på samma dator som din websajt, är det troligen «localhost».)',
504
+    'texte_ajout_auteur' => 'Följande redaktör lades till artikeln:',
505
+    'texte_annuaire_ldap_1' => 'Om du har tillgång till en LDAP-katalog kan du använda den för att importera användare till SPIP.',
506
+    'texte_article_statut' => 'Artikelns status:',
507
+    'texte_article_virtuel' => 'Virtuell artikel',
508
+    'texte_article_virtuel_reference' => '<b>Virtuell Artikel:</b> länkad artikel i din SPIP site, men ompekad till en annan URL. För att ta bort ompekningen, radera denna URL.',
509
+    'texte_aucun_resultat_auteur' => 'Inga resultat för "@cherche_auteur@".',
510
+    'texte_auteurs' => 'REDAKTÖRERNA',
511
+    'texte_choix_base_1' => 'Välj din databas:',
512
+    'texte_choix_base_2' => 'Databasservern innehåller flera databaser.',
513
+    'texte_choix_base_3' => '<b>Välj</b> den som din leverantör har gett dig:',
514
+    'texte_choix_table_prefix' => 'Prefix för tabeller:',
515
+    'texte_compte_element' => '@count@ objekt',
516
+    'texte_compte_elements' => '@count@ element',
517
+    'texte_jeu_caractere_3' => 'Din sajt använder följande teckenuppsättning:',
518
+    'texte_mise_a_niveau_base_1' => 'Du har just uppdaterat filerna i SPIP.
519 519
  Nu måste du uppgradera sajtens databas.',
520
-	'texte_modifier_article' => 'Redigera artikeln:',
521
-	'texte_multilinguisme' => 'Om du vill hantera artiklar på flera språk, med en avancerad navigering, kan du lägga till en option för språkval i artiklar och avdelningar, i enlighet med sajtens struktur.', # MODIF
522
-	'texte_multilinguisme_trad' => 'Dessutom kan du aktivera ett system för länkhantering av de olika översättningarna av en artikel.', # MODIF
523
-	'texte_non_compresse' => '<i>okomprimerad</i> (din server stöder inte denna funktion)',
524
-	'texte_nouvelle_version_spip_1' => 'Du har installerat en ny version av SPIP.',
525
-	'texte_plus_trois_car' => 'mer än tre tecken',
526
-	'texte_plusieurs_articles' => 'Flera redaktörer hittades för  "@cherche_auteur@":',
527
-	'texte_recalcul_page' => 'Om du vill uppdatera
520
+    'texte_modifier_article' => 'Redigera artikeln:',
521
+    'texte_multilinguisme' => 'Om du vill hantera artiklar på flera språk, med en avancerad navigering, kan du lägga till en option för språkval i artiklar och avdelningar, i enlighet med sajtens struktur.', # MODIF
522
+    'texte_multilinguisme_trad' => 'Dessutom kan du aktivera ett system för länkhantering av de olika översättningarna av en artikel.', # MODIF
523
+    'texte_non_compresse' => '<i>okomprimerad</i> (din server stöder inte denna funktion)',
524
+    'texte_nouvelle_version_spip_1' => 'Du har installerat en ny version av SPIP.',
525
+    'texte_plus_trois_car' => 'mer än tre tecken',
526
+    'texte_plusieurs_articles' => 'Flera redaktörer hittades för  "@cherche_auteur@":',
527
+    'texte_recalcul_page' => 'Om du vill uppdatera
528 528
 enbart en sida, är det bäst att göra det från den publika delen genom att klicka på « Ladda om sidan ».',
529
-	'texte_recuperer_base' => 'Reparera databasen',
530
-	'texte_sous_titre' => 'Undertitel',
531
-	'texte_statistiques_visites' => '(mörka staplar:  Söndag / mörk linje: genomsnittlig nivå)',
532
-	'texte_statut_attente_validation' => 'väntar på godkännande',
533
-	'texte_statut_publies' => 'publicerad online',
534
-	'texte_statut_refuses' => 'avvisad',
535
-	'texte_suppression_fichiers' => 'Använd detta kommando för att radera alla filer
529
+    'texte_recuperer_base' => 'Reparera databasen',
530
+    'texte_sous_titre' => 'Undertitel',
531
+    'texte_statistiques_visites' => '(mörka staplar:  Söndag / mörk linje: genomsnittlig nivå)',
532
+    'texte_statut_attente_validation' => 'väntar på godkännande',
533
+    'texte_statut_publies' => 'publicerad online',
534
+    'texte_statut_refuses' => 'avvisad',
535
+    'texte_suppression_fichiers' => 'Använd detta kommando för att radera alla filer
536 536
 i SPIP’s cache. Det gör det möjligt att tvinga fram en uppdatering av alla sidor om du
537 537
 gjort viktiga förändringar i sajtens utseende eller struktur.',
538
-	'texte_sur_titre' => 'Övertitel',
539
-	'texte_table_ok' => ': den här tabellen är OK.',
540
-	'texte_tentative_recuperation' => 'Reparationsförsök',
541
-	'texte_tenter_reparation' => 'Försök att reparera databasen',
542
-	'texte_titre_02' => 'Ärenderad:',
543
-	'texte_titre_obligatoire' => '<b>Titel</b> [Krävs]',
544
-	'texte_travail_article' => '@nom_auteur_modif@ arbetade med den här artikeln för @date_diff@ minuter sedan',
545
-	'texte_vide' => 'tom',
546
-	'texte_vider_cache' => 'töm cachen',
547
-	'titre_admin_tech' => 'Tekniskt underhåll',
548
-	'titre_admin_vider' => 'Tekniskt underhåll',
549
-	'titre_cadre_afficher_article' => 'Visa artiklarna:',
550
-	'titre_cadre_afficher_traductions' => 'Visa status för översättningen för följande språk:',
551
-	'titre_cadre_ajouter_auteur' => 'LÄGG TILL EN REDAKTÖR:',
552
-	'titre_cadre_interieur_rubrique' => 'I Avdelningen',
553
-	'titre_cadre_numero_auteur' => 'Redaktör nummer',
554
-	'titre_cadre_signature_obligatoire' => '<b>Signatur</b> [krävs]<br />',
555
-	'titre_config_fonctions' => 'Sajtens konfiguration',
556
-	'titre_configuration' => 'Sajtens konfiguration',
557
-	'titre_connexion_ldap' => 'Optioner: <b>Din LDAP koppling</b>',
558
-	'titre_groupe_mots' => 'NYCKELORDSGRUPP:',
559
-	'titre_langue_article' => 'ARTIKELNS SPRÅK', # MODIF
560
-	'titre_langue_rubrique' => 'AVDELNINGENS SPRÅK', # MODIF
561
-	'titre_langue_trad_article' => 'ARTIKESPRÅK OCH ÖVERSÄTTNINGAR',
562
-	'titre_les_articles' => 'ARTIKLAR',
563
-	'titre_naviguer_dans_le_site' => 'Navigera i sajten...',
564
-	'titre_nouvelle_rubrique' => 'Ny avdelning',
565
-	'titre_numero_rubrique' => 'AVDELNING NUMMER:',
566
-	'titre_page_articles_edit' => 'Editera: @titre@',
567
-	'titre_page_articles_page' => 'Artiklar',
568
-	'titre_page_articles_tous' => 'Hela sajten',
569
-	'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
570
-	'titre_page_config_contenu' => 'Sajtens inställningar',
571
-	'titre_page_delete_all' => 'total och oåterkallelig radering',
572
-	'titre_page_recherche' => 'Sökresultat @recherche@',
573
-	'titre_page_statistiques_referers' => 'Statistik (inkommande länkar)',
574
-	'titre_page_upgrade' => 'Uppgradera SPIP',
575
-	'titre_publication_articles_post_dates' => 'Tidsstyrd publicering av artiklar',
576
-	'titre_reparation' => 'Reparera',
577
-	'titre_suivi_petition' => 'Uppföljning av namninasamlingar',
578
-	'trad_article_traduction' => 'Alla versioner av den här artikeln:',
579
-	'trad_delier' => 'Sluta länka den här artikeln till dess översättningar', # MODIF
580
-	'trad_lier' => 'Den här artikeln är en översättning av artikel nummer:',
581
-	'trad_new' => 'Skriv en ny översättning av den här artikeln', # MODIF
538
+    'texte_sur_titre' => 'Övertitel',
539
+    'texte_table_ok' => ': den här tabellen är OK.',
540
+    'texte_tentative_recuperation' => 'Reparationsförsök',
541
+    'texte_tenter_reparation' => 'Försök att reparera databasen',
542
+    'texte_titre_02' => 'Ärenderad:',
543
+    'texte_titre_obligatoire' => '<b>Titel</b> [Krävs]',
544
+    'texte_travail_article' => '@nom_auteur_modif@ arbetade med den här artikeln för @date_diff@ minuter sedan',
545
+    'texte_vide' => 'tom',
546
+    'texte_vider_cache' => 'töm cachen',
547
+    'titre_admin_tech' => 'Tekniskt underhåll',
548
+    'titre_admin_vider' => 'Tekniskt underhåll',
549
+    'titre_cadre_afficher_article' => 'Visa artiklarna:',
550
+    'titre_cadre_afficher_traductions' => 'Visa status för översättningen för följande språk:',
551
+    'titre_cadre_ajouter_auteur' => 'LÄGG TILL EN REDAKTÖR:',
552
+    'titre_cadre_interieur_rubrique' => 'I Avdelningen',
553
+    'titre_cadre_numero_auteur' => 'Redaktör nummer',
554
+    'titre_cadre_signature_obligatoire' => '<b>Signatur</b> [krävs]<br />',
555
+    'titre_config_fonctions' => 'Sajtens konfiguration',
556
+    'titre_configuration' => 'Sajtens konfiguration',
557
+    'titre_connexion_ldap' => 'Optioner: <b>Din LDAP koppling</b>',
558
+    'titre_groupe_mots' => 'NYCKELORDSGRUPP:',
559
+    'titre_langue_article' => 'ARTIKELNS SPRÅK', # MODIF
560
+    'titre_langue_rubrique' => 'AVDELNINGENS SPRÅK', # MODIF
561
+    'titre_langue_trad_article' => 'ARTIKESPRÅK OCH ÖVERSÄTTNINGAR',
562
+    'titre_les_articles' => 'ARTIKLAR',
563
+    'titre_naviguer_dans_le_site' => 'Navigera i sajten...',
564
+    'titre_nouvelle_rubrique' => 'Ny avdelning',
565
+    'titre_numero_rubrique' => 'AVDELNING NUMMER:',
566
+    'titre_page_articles_edit' => 'Editera: @titre@',
567
+    'titre_page_articles_page' => 'Artiklar',
568
+    'titre_page_articles_tous' => 'Hela sajten',
569
+    'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
570
+    'titre_page_config_contenu' => 'Sajtens inställningar',
571
+    'titre_page_delete_all' => 'total och oåterkallelig radering',
572
+    'titre_page_recherche' => 'Sökresultat @recherche@',
573
+    'titre_page_statistiques_referers' => 'Statistik (inkommande länkar)',
574
+    'titre_page_upgrade' => 'Uppgradera SPIP',
575
+    'titre_publication_articles_post_dates' => 'Tidsstyrd publicering av artiklar',
576
+    'titre_reparation' => 'Reparera',
577
+    'titre_suivi_petition' => 'Uppföljning av namninasamlingar',
578
+    'trad_article_traduction' => 'Alla versioner av den här artikeln:',
579
+    'trad_delier' => 'Sluta länka den här artikeln till dess översättningar', # MODIF
580
+    'trad_lier' => 'Den här artikeln är en översättning av artikel nummer:',
581
+    'trad_new' => 'Skriv en ny översättning av den här artikeln', # MODIF
582 582
 
583
-	// U
584
-	'utf8_convert_erreur_orig' => 'Fel: teckenkodningen @charset@ stöds inte.',
583
+    // U
584
+    'utf8_convert_erreur_orig' => 'Fel: teckenkodningen @charset@ stöds inte.',
585 585
 
586
-	// V
587
-	'version' => 'Version:'
586
+    // V
587
+    'version' => 'Version:'
588 588
 );
Please login to merge, or discard this patch.
ecrire/lang/ecrire_da.php 1 patch
Indentation   +492 added lines, -492 removed lines patch added patch discarded remove patch
@@ -4,496 +4,496 @@  discard block
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'aide_non_disponible' => 'Denne del af online-hjælpen er endnu ikke tilgængelig på dansk.',
14
-	'avis_acces_interdit' => 'Ingen adgang',
15
-	'avis_article_modifie' => 'Advarsel, @nom_auteur_modif@ har arbejdet på denne artikel for @date_diff@ minutter siden',
16
-	'avis_aucun_resultat' => 'Ingen resultater fundet.',
17
-	'avis_chemin_invalide_1' => 'Den sti som du har valgt',
18
-	'avis_chemin_invalide_2' => 'ser ikke ud til at være gyldig. Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet.',
19
-	'avis_connexion_echec_1' => 'Ingen forbindelse til SQL-serveren', # MODIF
20
-	'avis_connexion_echec_2' => 'Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet',
21
-	'avis_connexion_echec_3' => '<b>NB:</b> På mange servere skal du <b>anmode om</b> at få åbnet adgang til en SQL-database, før du kan bruge den. Hvis du ikke kan etablere en forbindelse, så kontroller venligst at du har indgivet denne anmodning.', # MODIF
22
-	'avis_connexion_ldap_echec_1' => 'Ingen forbindelse til LDAP-serveren',
23
-	'avis_connexion_ldap_echec_2' => 'Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet.',
24
-	'avis_connexion_ldap_echec_3' => 'Alternativt kan du vælge ikke at benytte LDAP til at importere brugere.',
25
-	'avis_deplacement_rubrique' => 'Advarsel! Dette afsnit indeholder @contient_breves@ nyheder@scb@: Hvis du vil flytte den, så afkryds venligst her for at bekræfte.',
26
-	'avis_erreur_connexion_mysql' => 'Fejl i forbindelse til SQL',
27
-	'avis_espace_interdit' => '<b>Forbudt område</b><p>SPIP er allerede installeret.', # MODIF
28
-	'avis_lecture_noms_bases_1' => 'Installationsprogrammet kunne ikke læse navnene på de installerede databaser.',
29
-	'avis_lecture_noms_bases_2' => 'Enten er databasen ikke tilgængelig, eller også er funktionen, som giver oversigt
12
+    // A
13
+    'aide_non_disponible' => 'Denne del af online-hjælpen er endnu ikke tilgængelig på dansk.',
14
+    'avis_acces_interdit' => 'Ingen adgang',
15
+    'avis_article_modifie' => 'Advarsel, @nom_auteur_modif@ har arbejdet på denne artikel for @date_diff@ minutter siden',
16
+    'avis_aucun_resultat' => 'Ingen resultater fundet.',
17
+    'avis_chemin_invalide_1' => 'Den sti som du har valgt',
18
+    'avis_chemin_invalide_2' => 'ser ikke ud til at være gyldig. Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet.',
19
+    'avis_connexion_echec_1' => 'Ingen forbindelse til SQL-serveren', # MODIF
20
+    'avis_connexion_echec_2' => 'Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet',
21
+    'avis_connexion_echec_3' => '<b>NB:</b> På mange servere skal du <b>anmode om</b> at få åbnet adgang til en SQL-database, før du kan bruge den. Hvis du ikke kan etablere en forbindelse, så kontroller venligst at du har indgivet denne anmodning.', # MODIF
22
+    'avis_connexion_ldap_echec_1' => 'Ingen forbindelse til LDAP-serveren',
23
+    'avis_connexion_ldap_echec_2' => 'Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet.',
24
+    'avis_connexion_ldap_echec_3' => 'Alternativt kan du vælge ikke at benytte LDAP til at importere brugere.',
25
+    'avis_deplacement_rubrique' => 'Advarsel! Dette afsnit indeholder @contient_breves@ nyheder@scb@: Hvis du vil flytte den, så afkryds venligst her for at bekræfte.',
26
+    'avis_erreur_connexion_mysql' => 'Fejl i forbindelse til SQL',
27
+    'avis_espace_interdit' => '<b>Forbudt område</b><p>SPIP er allerede installeret.', # MODIF
28
+    'avis_lecture_noms_bases_1' => 'Installationsprogrammet kunne ikke læse navnene på de installerede databaser.',
29
+    'avis_lecture_noms_bases_2' => 'Enten er databasen ikke tilgængelig, eller også er funktionen, som giver oversigt
30 30
 		over databaser, sat ud af kraft af sikkerhedsårsager (hvilket er tilfældet på mange servere).',
31
-	'avis_lecture_noms_bases_3' => 'Hvis det sidstnævnte er tilfældet, er det muligt at en database, som er navngivet efter dit login, kan anvendes:',
32
-	'avis_non_acces_page' => 'Du har ikke adgang til denne side.',
33
-	'avis_operation_echec' => 'Opgaven mislykkedes.',
34
-	'avis_suppression_base' => 'ADVARSEL, sletning kan ikke omgøres',
31
+    'avis_lecture_noms_bases_3' => 'Hvis det sidstnævnte er tilfældet, er det muligt at en database, som er navngivet efter dit login, kan anvendes:',
32
+    'avis_non_acces_page' => 'Du har ikke adgang til denne side.',
33
+    'avis_operation_echec' => 'Opgaven mislykkedes.',
34
+    'avis_suppression_base' => 'ADVARSEL, sletning kan ikke omgøres',
35 35
 
36
-	// B
37
-	'bouton_acces_ldap' => 'Tilføj adgang til LDAP >>',
38
-	'bouton_ajouter' => 'Tilføj',
39
-	'bouton_demande_publication' => 'Anmod om at få offentliggjort denne artikel',
40
-	'bouton_effacer_tout' => 'Slet alt',
41
-	'bouton_envoyer_message' => 'Send færdig meddelelse',
42
-	'bouton_modifier' => 'Ret',
43
-	'bouton_radio_afficher' => 'Vis',
44
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Medtag i listen over tilknyttede redaktører',
45
-	'bouton_radio_envoi_annonces_adresse' => 'Send nyheder til adressen:',
46
-	'bouton_radio_envoi_liste_nouveautes' => 'Send seneste nyhedsliste',
47
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Medtag ikke i listen over tilknyttede redaktører',
48
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Send ingen redaktionelle nyheder',
49
-	'bouton_redirection' => 'VIDERESTIL',
50
-	'bouton_relancer_installation' => 'Gentag installationen',
51
-	'bouton_suivant' => 'Næste',
52
-	'bouton_tenter_recuperation' => 'Reparationsforsøg',
53
-	'bouton_test_proxy' => 'Test proxy',
54
-	'bouton_vider_cache' => 'Tøm cache',
36
+    // B
37
+    'bouton_acces_ldap' => 'Tilføj adgang til LDAP >>',
38
+    'bouton_ajouter' => 'Tilføj',
39
+    'bouton_demande_publication' => 'Anmod om at få offentliggjort denne artikel',
40
+    'bouton_effacer_tout' => 'Slet alt',
41
+    'bouton_envoyer_message' => 'Send færdig meddelelse',
42
+    'bouton_modifier' => 'Ret',
43
+    'bouton_radio_afficher' => 'Vis',
44
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Medtag i listen over tilknyttede redaktører',
45
+    'bouton_radio_envoi_annonces_adresse' => 'Send nyheder til adressen:',
46
+    'bouton_radio_envoi_liste_nouveautes' => 'Send seneste nyhedsliste',
47
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Medtag ikke i listen over tilknyttede redaktører',
48
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Send ingen redaktionelle nyheder',
49
+    'bouton_redirection' => 'VIDERESTIL',
50
+    'bouton_relancer_installation' => 'Gentag installationen',
51
+    'bouton_suivant' => 'Næste',
52
+    'bouton_tenter_recuperation' => 'Reparationsforsøg',
53
+    'bouton_test_proxy' => 'Test proxy',
54
+    'bouton_vider_cache' => 'Tøm cache',
55 55
 
56
-	// C
57
-	'calendrier_synchro' => 'Hvis du benytter en kalenderapplikation, der er kompatibel med <b>iCal</b>, kan du synkronisere med information på dette websted.',
56
+    // C
57
+    'calendrier_synchro' => 'Hvis du benytter en kalenderapplikation, der er kompatibel med <b>iCal</b>, kan du synkronisere med information på dette websted.',
58 58
 
59
-	// D
60
-	'date_mot_heures' => 'timer',
59
+    // D
60
+    'date_mot_heures' => 'timer',
61 61
 
62
-	// E
63
-	'email' => 'e-mail',
64
-	'email_2' => 'e-mail:',
65
-	'entree_adresse_annuaire' => 'Adresse på kataloget',
66
-	'entree_adresse_email' => 'Din e-mail-adresse',
67
-	'entree_base_donnee_1' => 'Adresse på database',
68
-	'entree_base_donnee_2' => '(Ofte svarer denne adresse til adressen på webstedet, undertiden er den navngivet «localhost», og undertiden skal den være blank.)',
69
-	'entree_biographie' => 'Kort præsentation.',
70
-	'entree_chemin_acces' => '<b>Angiv</b> stien:',
71
-	'entree_cle_pgp' => 'Din PGP nøgle',
72
-	'entree_contenu_rubrique' => '(Kort beskrivelse af afsnittets indhold.)',
73
-	'entree_identifiants_connexion' => 'Dine opkoblingsinformationer...',
74
-	'entree_informations_connexion_ldap' => 'Udfyld denne side med LDAP opkoblingsinformation. Du kan indhente oplysningerne hos din system- eller netværskadministrator.',
75
-	'entree_infos_perso' => 'Hvem er du?',
76
-	'entree_interieur_rubrique' => 'I afsnit:',
77
-	'entree_liens_sites' => '<b>Hypertekst link</b> (henvisning, websted...)',
78
-	'entree_login' => 'Dit login',
79
-	'entree_login_connexion_1' => 'Tilkoblingslogin',
80
-	'entree_login_connexion_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)',
81
-	'entree_mot_passe' => 'Din adgangskode',
82
-	'entree_mot_passe_1' => 'Tilkoblingsadgangskode',
83
-	'entree_mot_passe_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)',
84
-	'entree_nom_fichier' => 'Indtast filnavn @texte_compresse@:',
85
-	'entree_nom_pseudo' => 'Dit navn eller alias',
86
-	'entree_nom_pseudo_1' => '(navn eller kaldenavn)',
87
-	'entree_nom_site' => 'Dit websteds navn',
88
-	'entree_nouveau_passe' => 'Ny adgangskode',
89
-	'entree_passe_ldap' => 'Adgangskode',
90
-	'entree_port_annuaire' => 'Portnummer på kataloget',
91
-	'entree_signature' => 'Signatur',
92
-	'entree_titre_obligatoire' => '<b>Titel</b> [Skal oplyses]<br />',
93
-	'entree_url' => 'Dit websteds URL',
62
+    // E
63
+    'email' => 'e-mail',
64
+    'email_2' => 'e-mail:',
65
+    'entree_adresse_annuaire' => 'Adresse på kataloget',
66
+    'entree_adresse_email' => 'Din e-mail-adresse',
67
+    'entree_base_donnee_1' => 'Adresse på database',
68
+    'entree_base_donnee_2' => '(Ofte svarer denne adresse til adressen på webstedet, undertiden er den navngivet «localhost», og undertiden skal den være blank.)',
69
+    'entree_biographie' => 'Kort præsentation.',
70
+    'entree_chemin_acces' => '<b>Angiv</b> stien:',
71
+    'entree_cle_pgp' => 'Din PGP nøgle',
72
+    'entree_contenu_rubrique' => '(Kort beskrivelse af afsnittets indhold.)',
73
+    'entree_identifiants_connexion' => 'Dine opkoblingsinformationer...',
74
+    'entree_informations_connexion_ldap' => 'Udfyld denne side med LDAP opkoblingsinformation. Du kan indhente oplysningerne hos din system- eller netværskadministrator.',
75
+    'entree_infos_perso' => 'Hvem er du?',
76
+    'entree_interieur_rubrique' => 'I afsnit:',
77
+    'entree_liens_sites' => '<b>Hypertekst link</b> (henvisning, websted...)',
78
+    'entree_login' => 'Dit login',
79
+    'entree_login_connexion_1' => 'Tilkoblingslogin',
80
+    'entree_login_connexion_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)',
81
+    'entree_mot_passe' => 'Din adgangskode',
82
+    'entree_mot_passe_1' => 'Tilkoblingsadgangskode',
83
+    'entree_mot_passe_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)',
84
+    'entree_nom_fichier' => 'Indtast filnavn @texte_compresse@:',
85
+    'entree_nom_pseudo' => 'Dit navn eller alias',
86
+    'entree_nom_pseudo_1' => '(navn eller kaldenavn)',
87
+    'entree_nom_site' => 'Dit websteds navn',
88
+    'entree_nouveau_passe' => 'Ny adgangskode',
89
+    'entree_passe_ldap' => 'Adgangskode',
90
+    'entree_port_annuaire' => 'Portnummer på kataloget',
91
+    'entree_signature' => 'Signatur',
92
+    'entree_titre_obligatoire' => '<b>Titel</b> [Skal oplyses]<br />',
93
+    'entree_url' => 'Dit websteds URL',
94 94
 
95
-	// I
96
-	'ical_info1' => 'Denne side viser flere måder til at følge med i aktiviteter på dette websted.',
97
-	'ical_info2' => 'For mere information, besøg <a href="@spipnet@">SPIP dokumentation</a>.', # MODIF
98
-	'ical_info_calendrier' => 'To kalendere står til rådighed. Den første er en oversigt over webstedet, der viser alle offentliggjorte artikler.Den anden indeholder både redaktionelle annonceringer og dine seneste private meddelelser. Den er forbeholdt dig i kraft af en personlig nøgle, som du kan ændre når som helst ved at forny din adgangskode.',
99
-	'ical_methode_http' => 'Filhentning',
100
-	'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF
101
-	'ical_texte_prive' => 'Denne strengt personlige kalender holder dig underrettet om private redaktionelle aktiviteter på webstedet (opgaver, personlige aftaler, indsendte artikler, nyheder ...).',
102
-	'ical_texte_public' => 'Med denne kalender kan du følge de offentlige aktiviteter på webstedet (offentliggjorte artikler og nyheder).',
103
-	'ical_texte_rss' => 'Du kan syndikere de seneste nyheder på dette websted i en hvilken som helst XML/RSS (Rich Site Summary) fillæser. Dette format tillader også SPIP at læse de seneste nyheder offenliggjort af andre websteder i et kompatibelt udvekslingsformat.',
104
-	'ical_titre_js' => 'Javascript',
105
-	'ical_titre_mailing' => 'Postliste',
106
-	'ical_titre_rss' => '«Backend» filer',
107
-	'icone_activer_cookie' => 'Opret administrationscookie',
108
-	'icone_afficher_auteurs' => 'Vis forfattere',
109
-	'icone_afficher_visiteurs' => 'Vis besøgende',
110
-	'icone_arret_discussion' => 'Stop deltagelse i denne diskussion',
111
-	'icone_calendrier' => 'Kalender',
112
-	'icone_creer_auteur' => 'Opret ny forfatter og tilknyt til denne artikel',
113
-	'icone_creer_mot_cle' => 'Opret nyt nøgleord og tilknyt til denne artikel',
114
-	'icone_creer_rubrique_2' => 'Opret nyt afsnit',
115
-	'icone_modifier_article' => 'Ret denne artikel',
116
-	'icone_modifier_rubrique' => 'Ret dette afsnit',
117
-	'icone_retour' => 'Tilbage',
118
-	'icone_retour_article' => 'Tilbage til artikel',
119
-	'icone_supprimer_cookie' => 'Slet cookier',
120
-	'icone_supprimer_rubrique' => 'Slet dette afsnit',
121
-	'icone_supprimer_signature' => 'Slet denne signatur',
122
-	'icone_valider_signature' => 'Godkend signatur',
123
-	'image_administrer_rubrique' => 'Du kan administrere dette afsnit',
124
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
125
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
126
-	'info_1_article' => '1 artikel',
127
-	'info_activer_cookie' => 'Du kan installere en <b>administrationscookie</b>, som tillader dig at skifte nemt mellem det offentlige websted og dit private afsnit.',
128
-	'info_administrateur' => 'Administrator',
129
-	'info_administrateur_1' => 'Administrator',
130
-	'info_administrateur_2' => 'af webstedet (<i>anvend med forsigtighed</i>)',
131
-	'info_administrateur_site_01' => 'Hvis du er webstedsadministrator, så',
132
-	'info_administrateur_site_02' => 'klik på dette link',
133
-	'info_administrateurs' => 'Administratorer',
134
-	'info_administrer_rubrique' => 'Du kan administrere dette afsnit',
135
-	'info_adresse' => 'til adressen:',
136
-	'info_adresse_url' => 'Dit offentlige websteds URL',
137
-	'info_aide_en_ligne' => 'SPIP online hjælp',
138
-	'info_ajout_image' => 'Når du vedhæfter billeder til en artikel, kan
95
+    // I
96
+    'ical_info1' => 'Denne side viser flere måder til at følge med i aktiviteter på dette websted.',
97
+    'ical_info2' => 'For mere information, besøg <a href="@spipnet@">SPIP dokumentation</a>.', # MODIF
98
+    'ical_info_calendrier' => 'To kalendere står til rådighed. Den første er en oversigt over webstedet, der viser alle offentliggjorte artikler.Den anden indeholder både redaktionelle annonceringer og dine seneste private meddelelser. Den er forbeholdt dig i kraft af en personlig nøgle, som du kan ændre når som helst ved at forny din adgangskode.',
99
+    'ical_methode_http' => 'Filhentning',
100
+    'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF
101
+    'ical_texte_prive' => 'Denne strengt personlige kalender holder dig underrettet om private redaktionelle aktiviteter på webstedet (opgaver, personlige aftaler, indsendte artikler, nyheder ...).',
102
+    'ical_texte_public' => 'Med denne kalender kan du følge de offentlige aktiviteter på webstedet (offentliggjorte artikler og nyheder).',
103
+    'ical_texte_rss' => 'Du kan syndikere de seneste nyheder på dette websted i en hvilken som helst XML/RSS (Rich Site Summary) fillæser. Dette format tillader også SPIP at læse de seneste nyheder offenliggjort af andre websteder i et kompatibelt udvekslingsformat.',
104
+    'ical_titre_js' => 'Javascript',
105
+    'ical_titre_mailing' => 'Postliste',
106
+    'ical_titre_rss' => '«Backend» filer',
107
+    'icone_activer_cookie' => 'Opret administrationscookie',
108
+    'icone_afficher_auteurs' => 'Vis forfattere',
109
+    'icone_afficher_visiteurs' => 'Vis besøgende',
110
+    'icone_arret_discussion' => 'Stop deltagelse i denne diskussion',
111
+    'icone_calendrier' => 'Kalender',
112
+    'icone_creer_auteur' => 'Opret ny forfatter og tilknyt til denne artikel',
113
+    'icone_creer_mot_cle' => 'Opret nyt nøgleord og tilknyt til denne artikel',
114
+    'icone_creer_rubrique_2' => 'Opret nyt afsnit',
115
+    'icone_modifier_article' => 'Ret denne artikel',
116
+    'icone_modifier_rubrique' => 'Ret dette afsnit',
117
+    'icone_retour' => 'Tilbage',
118
+    'icone_retour_article' => 'Tilbage til artikel',
119
+    'icone_supprimer_cookie' => 'Slet cookier',
120
+    'icone_supprimer_rubrique' => 'Slet dette afsnit',
121
+    'icone_supprimer_signature' => 'Slet denne signatur',
122
+    'icone_valider_signature' => 'Godkend signatur',
123
+    'image_administrer_rubrique' => 'Du kan administrere dette afsnit',
124
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
125
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
126
+    'info_1_article' => '1 artikel',
127
+    'info_activer_cookie' => 'Du kan installere en <b>administrationscookie</b>, som tillader dig at skifte nemt mellem det offentlige websted og dit private afsnit.',
128
+    'info_administrateur' => 'Administrator',
129
+    'info_administrateur_1' => 'Administrator',
130
+    'info_administrateur_2' => 'af webstedet (<i>anvend med forsigtighed</i>)',
131
+    'info_administrateur_site_01' => 'Hvis du er webstedsadministrator, så',
132
+    'info_administrateur_site_02' => 'klik på dette link',
133
+    'info_administrateurs' => 'Administratorer',
134
+    'info_administrer_rubrique' => 'Du kan administrere dette afsnit',
135
+    'info_adresse' => 'til adressen:',
136
+    'info_adresse_url' => 'Dit offentlige websteds URL',
137
+    'info_aide_en_ligne' => 'SPIP online hjælp',
138
+    'info_ajout_image' => 'Når du vedhæfter billeder til en artikel, kan
139 139
 		SPIP automatisk lave miniatureudgaver af billederne.
140 140
 		Dette muliggør f.eks. automatisk oprettelse af et
141 141
 		galleri eller et album.',
142
-	'info_ajouter_rubrique' => 'Tilføj endnu et afsnit at administrere:',
143
-	'info_annonce_nouveautes' => 'Seneste annonceringer',
144
-	'info_article' => 'artikel',
145
-	'info_article_2' => 'artikler',
146
-	'info_article_a_paraitre' => 'Fremdaterede artikler der skal offentliggøres',
147
-	'info_articles_02' => 'artikler',
148
-	'info_articles_2' => 'Artikler',
149
-	'info_articles_auteur' => 'Denne forfatters artikler',
150
-	'info_articles_trouves' => 'Fundne artikler',
151
-	'info_attente_validation' => 'Dine artikler som afventer godkendelse',
152
-	'info_aujourdhui' => 'i dag:',
153
-	'info_auteurs' => 'Forfattere',
154
-	'info_auteurs_par_tri' => 'Forfattere@partri@',
155
-	'info_auteurs_trouves' => 'Forfattere fundet',
156
-	'info_authentification_externe' => 'Ekstern adgangskontrol',
157
-	'info_avertissement' => 'Advarsel',
158
-	'info_base_installee' => 'Din databasestruktur er installeret.',
159
-	'info_chapeau' => 'Hoved',
160
-	'info_chapeau_2' => 'Indledning:',
161
-	'info_chemin_acces_1' => 'Valgmuligheder: <b>Adgangsvej til katalog</b>',
162
-	'info_chemin_acces_2' => 'Du skal nu konfigurere adgangsvejen til kataloginformationen. Dette er vigtigt for at kunne læse de brugerprofiler, som ligger i kataloget.',
163
-	'info_chemin_acces_annuaire' => 'Valgmuligheder: <b>Adgangsvej til katalog</b>',
164
-	'info_choix_base' => 'Tredje skrift:',
165
-	'info_classement_1' => '<sup>.</sup> af @liste@',
166
-	'info_classement_2' => '<sup>.</sup> af @liste@',
167
-	'info_code_acces' => 'Glem ikke dine egne adgangsoplysninger!',
168
-	'info_config_suivi' => 'Hvis denne adresse svarer til en postliste, kan du nedefor angive, hvor webstedets besøgende kan lade sig registrere. Denne adresse kan være en  URL (f.eks. siden med tilmelding til listen via web), eller en e-mail adresse med et særligt emne tilknyttet (f.eks.: <tt>@adresse_suivi@?subject=abonner</tt>):',
169
-	'info_config_suivi_explication' => 'Du kan abonnere på dette websteds postliste. Du vil så via e-mail modtage annonceringer vedrørende artikler og nyheder, der er indsendt til offentliggørelse.',
170
-	'info_confirmer_passe' => 'Bekræft ny adgangskode:',
171
-	'info_connexion_base' => 'Andet skrift: <b>Forsøg på opkobling til databasen</b>',
172
-	'info_connexion_ldap_ok' => '<b>Din LDAP-opkobling lykkedes.</b><p> Du kan gå til næste skridt.', # MODIF
173
-	'info_connexion_mysql' => 'Første skridt: <b>Din SQL opkobling</b>',
174
-	'info_connexion_ok' => 'Opkoblingen lykkedes.',
175
-	'info_contact' => 'Kontakt',
176
-	'info_contenu_articles' => 'Artiklens bestanddele',
177
-	'info_creation_paragraphe' => '(For at lave afsnit skal du indsætte blanke linier.)', # MODIF
178
-	'info_creation_rubrique' => 'Før du kan skrive artikler<br /> skal du lave mindst et afsnit.<br />',
179
-	'info_creation_tables' => 'Fjerde skridt: <b>Oprettelse af databasetabeller</b>',
180
-	'info_creer_base' => '<b>Opret</b> en ny database:',
181
-	'info_dans_rubrique' => 'I afsnit:',
182
-	'info_date_publication_anterieure' => 'Dato for tidligere offentliggørelse:',
183
-	'info_date_referencement' => 'DATO FOR HENVISNING TIL DETTE WEBSTED:',
184
-	'info_derniere_etape' => 'Sidste skridt: <b>Det er overstået!',
185
-	'info_descriptif' => 'Beskrivelse:',
186
-	'info_discussion_cours' => 'Igangværende diskussioner',
187
-	'info_ecrire_article' => 'Før du kan lave artikler, skal du oprette mindst et afsnit.',
188
-	'info_email_envoi' => 'Afsenderens e-mail adresse (valgfri)',
189
-	'info_email_envoi_txt' => 'Indtast afsenderens e-mail adresse ved afsendelse af e-mails (som standard bruges modtagerens adresse som afsenderadresse) :',
190
-	'info_email_webmestre' => 'E-mail-adresse på webmaster (valgfrit)', # MODIF
191
-	'info_envoi_email_automatique' => 'Automatisk e-mail-forsendelse',
192
-	'info_envoyer_maintenant' => 'Send nu',
193
-	'info_etape_suivante' => 'Gå til næste trin',
194
-	'info_etape_suivante_1' => 'Du kan gå til næste trin.',
195
-	'info_etape_suivante_2' => 'Du kan gå til næste trin.',
196
-	'info_exportation_base' => 'eksporter database til @archive@',
197
-	'info_facilite_suivi_activite' => 'For at lette opfølgning på webstedets redaktionelle aktiviteter sender SPIP e-mails med anmodning om offentliggørelse og godkendelse til f.eks. redaktørens adresseliste.', # MODIF
198
-	'info_fichiers_authent' => 'Adgangskontrolfil ".htpasswd"',
199
-	'info_gauche_admin_tech' => '<b>Kun administratorer har adgang til denne side.</b><p> Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF
200
-	'info_gauche_admin_vider' => '<b>Kun administratorer har adgang til denne side.</b><p> Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF
201
-	'info_gauche_auteurs' => 'Her finder du alle webstedets forfattere. Status på hver enkelt fremgår af farven på ikonet (redaktør = grøn, administrator = gul).',
202
-	'info_gauche_auteurs_exterieurs' => 'Udenforstående forfattere uden adgang til webstedet vises med et blåt symbol; slettede forfattere repræsenteres af en papirkurv.', # MODIF
203
-	'info_gauche_messagerie' => 'Meddelelsessystemet giver mulighed for at udveksle meddelelser mellem redaktører, for at gemme huskesedler (til personlig brug) 
142
+    'info_ajouter_rubrique' => 'Tilføj endnu et afsnit at administrere:',
143
+    'info_annonce_nouveautes' => 'Seneste annonceringer',
144
+    'info_article' => 'artikel',
145
+    'info_article_2' => 'artikler',
146
+    'info_article_a_paraitre' => 'Fremdaterede artikler der skal offentliggøres',
147
+    'info_articles_02' => 'artikler',
148
+    'info_articles_2' => 'Artikler',
149
+    'info_articles_auteur' => 'Denne forfatters artikler',
150
+    'info_articles_trouves' => 'Fundne artikler',
151
+    'info_attente_validation' => 'Dine artikler som afventer godkendelse',
152
+    'info_aujourdhui' => 'i dag:',
153
+    'info_auteurs' => 'Forfattere',
154
+    'info_auteurs_par_tri' => 'Forfattere@partri@',
155
+    'info_auteurs_trouves' => 'Forfattere fundet',
156
+    'info_authentification_externe' => 'Ekstern adgangskontrol',
157
+    'info_avertissement' => 'Advarsel',
158
+    'info_base_installee' => 'Din databasestruktur er installeret.',
159
+    'info_chapeau' => 'Hoved',
160
+    'info_chapeau_2' => 'Indledning:',
161
+    'info_chemin_acces_1' => 'Valgmuligheder: <b>Adgangsvej til katalog</b>',
162
+    'info_chemin_acces_2' => 'Du skal nu konfigurere adgangsvejen til kataloginformationen. Dette er vigtigt for at kunne læse de brugerprofiler, som ligger i kataloget.',
163
+    'info_chemin_acces_annuaire' => 'Valgmuligheder: <b>Adgangsvej til katalog</b>',
164
+    'info_choix_base' => 'Tredje skrift:',
165
+    'info_classement_1' => '<sup>.</sup> af @liste@',
166
+    'info_classement_2' => '<sup>.</sup> af @liste@',
167
+    'info_code_acces' => 'Glem ikke dine egne adgangsoplysninger!',
168
+    'info_config_suivi' => 'Hvis denne adresse svarer til en postliste, kan du nedefor angive, hvor webstedets besøgende kan lade sig registrere. Denne adresse kan være en  URL (f.eks. siden med tilmelding til listen via web), eller en e-mail adresse med et særligt emne tilknyttet (f.eks.: <tt>@adresse_suivi@?subject=abonner</tt>):',
169
+    'info_config_suivi_explication' => 'Du kan abonnere på dette websteds postliste. Du vil så via e-mail modtage annonceringer vedrørende artikler og nyheder, der er indsendt til offentliggørelse.',
170
+    'info_confirmer_passe' => 'Bekræft ny adgangskode:',
171
+    'info_connexion_base' => 'Andet skrift: <b>Forsøg på opkobling til databasen</b>',
172
+    'info_connexion_ldap_ok' => '<b>Din LDAP-opkobling lykkedes.</b><p> Du kan gå til næste skridt.', # MODIF
173
+    'info_connexion_mysql' => 'Første skridt: <b>Din SQL opkobling</b>',
174
+    'info_connexion_ok' => 'Opkoblingen lykkedes.',
175
+    'info_contact' => 'Kontakt',
176
+    'info_contenu_articles' => 'Artiklens bestanddele',
177
+    'info_creation_paragraphe' => '(For at lave afsnit skal du indsætte blanke linier.)', # MODIF
178
+    'info_creation_rubrique' => 'Før du kan skrive artikler<br /> skal du lave mindst et afsnit.<br />',
179
+    'info_creation_tables' => 'Fjerde skridt: <b>Oprettelse af databasetabeller</b>',
180
+    'info_creer_base' => '<b>Opret</b> en ny database:',
181
+    'info_dans_rubrique' => 'I afsnit:',
182
+    'info_date_publication_anterieure' => 'Dato for tidligere offentliggørelse:',
183
+    'info_date_referencement' => 'DATO FOR HENVISNING TIL DETTE WEBSTED:',
184
+    'info_derniere_etape' => 'Sidste skridt: <b>Det er overstået!',
185
+    'info_descriptif' => 'Beskrivelse:',
186
+    'info_discussion_cours' => 'Igangværende diskussioner',
187
+    'info_ecrire_article' => 'Før du kan lave artikler, skal du oprette mindst et afsnit.',
188
+    'info_email_envoi' => 'Afsenderens e-mail adresse (valgfri)',
189
+    'info_email_envoi_txt' => 'Indtast afsenderens e-mail adresse ved afsendelse af e-mails (som standard bruges modtagerens adresse som afsenderadresse) :',
190
+    'info_email_webmestre' => 'E-mail-adresse på webmaster (valgfrit)', # MODIF
191
+    'info_envoi_email_automatique' => 'Automatisk e-mail-forsendelse',
192
+    'info_envoyer_maintenant' => 'Send nu',
193
+    'info_etape_suivante' => 'Gå til næste trin',
194
+    'info_etape_suivante_1' => 'Du kan gå til næste trin.',
195
+    'info_etape_suivante_2' => 'Du kan gå til næste trin.',
196
+    'info_exportation_base' => 'eksporter database til @archive@',
197
+    'info_facilite_suivi_activite' => 'For at lette opfølgning på webstedets redaktionelle aktiviteter sender SPIP e-mails med anmodning om offentliggørelse og godkendelse til f.eks. redaktørens adresseliste.', # MODIF
198
+    'info_fichiers_authent' => 'Adgangskontrolfil ".htpasswd"',
199
+    'info_gauche_admin_tech' => '<b>Kun administratorer har adgang til denne side.</b><p> Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF
200
+    'info_gauche_admin_vider' => '<b>Kun administratorer har adgang til denne side.</b><p> Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF
201
+    'info_gauche_auteurs' => 'Her finder du alle webstedets forfattere. Status på hver enkelt fremgår af farven på ikonet (redaktør = grøn, administrator = gul).',
202
+    'info_gauche_auteurs_exterieurs' => 'Udenforstående forfattere uden adgang til webstedet vises med et blåt symbol; slettede forfattere repræsenteres af en papirkurv.', # MODIF
203
+    'info_gauche_messagerie' => 'Meddelelsessystemet giver mulighed for at udveksle meddelelser mellem redaktører, for at gemme huskesedler (til personlig brug) 
204 204
 	eller for at vise annonceringer i det private område (hvis du er administrator).',
205
-	'info_gauche_statistiques_referers' => 'Denne side viser en oversigt over <i>henvisende sider</i>, dvs. websteder der har linket til dit websted alene i dag. Faktisk nulstilles oversigten med 24 timers mellemrum.',
206
-	'info_gauche_visiteurs_enregistres' => 'Her finder du de besøgende, der er tilmeldt til webstedets offentlige afsnit (fora med tilmelding).',
207
-	'info_generation_miniatures_images' => 'Dannelse af piktogrammer',
208
-	'info_hebergeur_desactiver_envoi_email' => 'Nogle webhoteller tillader ikke automatisk udsendelse af e-mails. I så fald kan følgende funktioner i SPIP ikke benyttes.',
209
-	'info_hier' => 'i går:',
210
-	'info_identification_publique' => 'Din offentlige identitet...',
211
-	'info_image_process' => 'Vælg den bedste metode til at skabe miniaturebilleder ved at klikke på det korresponderende billede.',
212
-	'info_image_process2' => '<b>N.B.</b> <i>If you can’t see any image, then your server is not configured to use such tools. If you want to use these features, contact your provider’s technical support and ask for the «GD» or «Imagick» extensions to be installed.</i>', # MODIF
213
-	'info_informations_personnelles' => 'Femte trin: <b>Personlig information</b>',
214
-	'info_inscription_automatique' => 'Automatisk registrering af nye redaktører',
215
-	'info_jeu_caractere' => 'Webstedets tegnsæt',
216
-	'info_jours' => 'dage',
217
-	'info_laisser_champs_vides' => 'efterlad disse felter tomme)',
218
-	'info_langues' => 'Webstedets sprog',
219
-	'info_ldap_ok' => 'LDAP adgangskontrol er installeret.',
220
-	'info_lien_hypertexte' => 'Hypertekst link:',
221
-	'info_liste_redacteurs_connectes' => 'Oversigt over tilknyttede reaktører',
222
-	'info_login_existant' => 'Dette login findes allerede.',
223
-	'info_login_trop_court' => 'Login for kort.',
224
-	'info_maximum' => 'maksimum:',
225
-	'info_message_en_redaction' => 'Dine meddelelser under redaktion',
226
-	'info_message_technique' => 'Teknisk meddelelse:',
227
-	'info_messagerie_interne' => 'Interne meddelelser',
228
-	'info_mise_a_niveau_base' => 'SQL databaseopgradering',
229
-	'info_mise_a_niveau_base_2' => '{{Advarsel!}} Du har installeret en version af SPIP-filer, der er ældre end dem, der var på webstedet i forvejen. Du risikerer at miste databasen og webstedet vil ikke fungere ordentligt mere.<br />{{Geninstraller SPIP-filerne.}}',
230
-	'info_modifier_rubrique' => 'Ret afsnit:',
231
-	'info_modifier_titre' => 'Ret: @titre@',
232
-	'info_mon_site_spip' => 'Mit SPIP-websted',
233
-	'info_moyenne' => 'gennemsnit:',
234
-	'info_multi_cet_article' => 'Denne artikel er på:',
235
-	'info_multi_langues_choisies' => 'Vælg de sprog der skal være til rådighed for redaktører på webstedet.
205
+    'info_gauche_statistiques_referers' => 'Denne side viser en oversigt over <i>henvisende sider</i>, dvs. websteder der har linket til dit websted alene i dag. Faktisk nulstilles oversigten med 24 timers mellemrum.',
206
+    'info_gauche_visiteurs_enregistres' => 'Her finder du de besøgende, der er tilmeldt til webstedets offentlige afsnit (fora med tilmelding).',
207
+    'info_generation_miniatures_images' => 'Dannelse af piktogrammer',
208
+    'info_hebergeur_desactiver_envoi_email' => 'Nogle webhoteller tillader ikke automatisk udsendelse af e-mails. I så fald kan følgende funktioner i SPIP ikke benyttes.',
209
+    'info_hier' => 'i går:',
210
+    'info_identification_publique' => 'Din offentlige identitet...',
211
+    'info_image_process' => 'Vælg den bedste metode til at skabe miniaturebilleder ved at klikke på det korresponderende billede.',
212
+    'info_image_process2' => '<b>N.B.</b> <i>If you can’t see any image, then your server is not configured to use such tools. If you want to use these features, contact your provider’s technical support and ask for the «GD» or «Imagick» extensions to be installed.</i>', # MODIF
213
+    'info_informations_personnelles' => 'Femte trin: <b>Personlig information</b>',
214
+    'info_inscription_automatique' => 'Automatisk registrering af nye redaktører',
215
+    'info_jeu_caractere' => 'Webstedets tegnsæt',
216
+    'info_jours' => 'dage',
217
+    'info_laisser_champs_vides' => 'efterlad disse felter tomme)',
218
+    'info_langues' => 'Webstedets sprog',
219
+    'info_ldap_ok' => 'LDAP adgangskontrol er installeret.',
220
+    'info_lien_hypertexte' => 'Hypertekst link:',
221
+    'info_liste_redacteurs_connectes' => 'Oversigt over tilknyttede reaktører',
222
+    'info_login_existant' => 'Dette login findes allerede.',
223
+    'info_login_trop_court' => 'Login for kort.',
224
+    'info_maximum' => 'maksimum:',
225
+    'info_message_en_redaction' => 'Dine meddelelser under redaktion',
226
+    'info_message_technique' => 'Teknisk meddelelse:',
227
+    'info_messagerie_interne' => 'Interne meddelelser',
228
+    'info_mise_a_niveau_base' => 'SQL databaseopgradering',
229
+    'info_mise_a_niveau_base_2' => '{{Advarsel!}} Du har installeret en version af SPIP-filer, der er ældre end dem, der var på webstedet i forvejen. Du risikerer at miste databasen og webstedet vil ikke fungere ordentligt mere.<br />{{Geninstraller SPIP-filerne.}}',
230
+    'info_modifier_rubrique' => 'Ret afsnit:',
231
+    'info_modifier_titre' => 'Ret: @titre@',
232
+    'info_mon_site_spip' => 'Mit SPIP-websted',
233
+    'info_moyenne' => 'gennemsnit:',
234
+    'info_multi_cet_article' => 'Denne artikel er på:',
235
+    'info_multi_langues_choisies' => 'Vælg de sprog der skal være til rådighed for redaktører på webstedet.
236 236
   Sprog der allerede er i brug på webstedet (de øverste på listen) kan ikke fravælges.
237 237
  ',
238
-	'info_multi_secteurs' => 'Kun for afsnit placeret i roden ?',
239
-	'info_nom' => 'Navn',
240
-	'info_nom_destinataire' => 'Navn på modtager',
241
-	'info_nom_site' => 'Dit websteds navn',
242
-	'info_nombre_articles' => '@nb_articles@ artikler,',
243
-	'info_nombre_rubriques' => '@nb_rubriques@ afsnit',
244
-	'info_nombre_sites' => '@nb_sites@ websteder,',
245
-	'info_non_deplacer' => 'Flyt ikke...',
246
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP kan udsende webstedets seneste indlæg regelmæssigt.
238
+    'info_multi_secteurs' => 'Kun for afsnit placeret i roden ?',
239
+    'info_nom' => 'Navn',
240
+    'info_nom_destinataire' => 'Navn på modtager',
241
+    'info_nom_site' => 'Dit websteds navn',
242
+    'info_nombre_articles' => '@nb_articles@ artikler,',
243
+    'info_nombre_rubriques' => '@nb_rubriques@ afsnit',
244
+    'info_nombre_sites' => '@nb_sites@ websteder,',
245
+    'info_non_deplacer' => 'Flyt ikke...',
246
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP kan udsende webstedets seneste indlæg regelmæssigt.
247 247
 		(nyligt offentliggjorte artikler og nyheder).',
248
-	'info_non_envoi_liste_nouveautes' => 'Send ikke oversigt over seneste nyheder',
249
-	'info_non_modifiable' => 'kan ikke ændres',
250
-	'info_non_suppression_mot_cle' => 'Jeg ønsker ikke at slette dette nøgleord.',
251
-	'info_notes' => 'Fodnoter',
252
-	'info_nouvel_article' => 'Ny artikel',
253
-	'info_nouvelle_traduction' => 'Ny oversættelse:',
254
-	'info_numero_article' => 'ARTIKEL NUMMER:',
255
-	'info_obligatoire_02' => '[Skal udfyldes]', # MODIF
256
-	'info_options_avancees' => 'AVANCEREDE INDSTILLINGER',
257
-	'info_ou' => 'eller...',
258
-	'info_page_interdite' => 'Forbudt side',
259
-	'info_par_nombre_article' => '(efter antal artiker)',
260
-	'info_passe_trop_court' => 'Adgangskode for kort.',
261
-	'info_passes_identiques' => 'De to adgangskoder er ikke ens.',
262
-	'info_plus_cinq_car' => 'mere end 5 tegn',
263
-	'info_plus_cinq_car_2' => '(Mere end 5 tegn)',
264
-	'info_plus_trois_car' => '(Mere end 3 tegn)',
265
-	'info_popularite' => 'popularitet: @popularite@; besøg: @visites@',
266
-	'info_post_scriptum' => 'Efterskrift',
267
-	'info_post_scriptum_2' => 'Efterskrift:',
268
-	'info_pour' => 'til',
269
-	'info_procedez_par_etape' => 'gå frem skridt for skridt',
270
-	'info_procedure_maj_version' => 'opgraderingsprocdeduren bør følges for at tilpasse databasen til den nye version af SPIP.',
271
-	'info_ps' => 'P.S.',
272
-	'info_publies' => 'Dine offentliggjorte artikler',
273
-	'info_question_inscription_nouveaux_redacteurs' => 'Vil du tillade, at nye redaktører tilmelder sig
248
+    'info_non_envoi_liste_nouveautes' => 'Send ikke oversigt over seneste nyheder',
249
+    'info_non_modifiable' => 'kan ikke ændres',
250
+    'info_non_suppression_mot_cle' => 'Jeg ønsker ikke at slette dette nøgleord.',
251
+    'info_notes' => 'Fodnoter',
252
+    'info_nouvel_article' => 'Ny artikel',
253
+    'info_nouvelle_traduction' => 'Ny oversættelse:',
254
+    'info_numero_article' => 'ARTIKEL NUMMER:',
255
+    'info_obligatoire_02' => '[Skal udfyldes]', # MODIF
256
+    'info_options_avancees' => 'AVANCEREDE INDSTILLINGER',
257
+    'info_ou' => 'eller...',
258
+    'info_page_interdite' => 'Forbudt side',
259
+    'info_par_nombre_article' => '(efter antal artiker)',
260
+    'info_passe_trop_court' => 'Adgangskode for kort.',
261
+    'info_passes_identiques' => 'De to adgangskoder er ikke ens.',
262
+    'info_plus_cinq_car' => 'mere end 5 tegn',
263
+    'info_plus_cinq_car_2' => '(Mere end 5 tegn)',
264
+    'info_plus_trois_car' => '(Mere end 3 tegn)',
265
+    'info_popularite' => 'popularitet: @popularite@; besøg: @visites@',
266
+    'info_post_scriptum' => 'Efterskrift',
267
+    'info_post_scriptum_2' => 'Efterskrift:',
268
+    'info_pour' => 'til',
269
+    'info_procedez_par_etape' => 'gå frem skridt for skridt',
270
+    'info_procedure_maj_version' => 'opgraderingsprocdeduren bør følges for at tilpasse databasen til den nye version af SPIP.',
271
+    'info_ps' => 'P.S.',
272
+    'info_publies' => 'Dine offentliggjorte artikler',
273
+    'info_question_inscription_nouveaux_redacteurs' => 'Vil du tillade, at nye redaktører tilmelder sig
274 274
 		på det offentligt tilgængelige websted? Ja betyder, at besøgende kan tilmelde sig på en automatisk dannet formular,
275 275
 		og derefter få adgang til det private område, hvor de kan vedligeholde deres egne artikler.
276 276
 		<blockquote><i>Under tilmeldingen modtager brugerne en automatisk dannet e-mail med deres adgangskode til det
277 277
 		private websted. Nogle webhoteller tillader ikke at der sendes e-mails fra deres servere. I så fald kan automatisk
278 278
 		tilmelding ikke finde sted.', # MODIF
279
-	'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
280
-	'info_racine_site' => 'Top',
281
-	'info_recharger_page' => 'Vær venlig at genindlæse denne side om et øjeblik.',
282
-	'info_recherche_auteur_zero' => '<b>Ingen resultater fundet til "@cherche_auteur@".',
283
-	'info_recommencer' => 'Vær venlig at forsøge igen.',
284
-	'info_redacteur_1' => 'Redaktør',
285
-	'info_redacteur_2' => 'med adgang til det private område (<i>anbefalet</i>)',
286
-	'info_redacteurs' => 'Redaktører',
287
-	'info_redaction_en_cours' => 'REDIGERING ER IGANG',
288
-	'info_redirection' => 'Viderestilling',
289
-	'info_refuses' => 'Dine artikler er afvist',
290
-	'info_reglage_ldap' => 'Muligheder: <b>Konfigurere LDAP understøttelse</b>',
291
-	'info_renvoi_article' => '<b>Viderestilling.</b> Denne artikel henviser til siden:',
292
-	'info_reserve_admin' => 'Kun administratorer kan ændre denne adresse.',
293
-	'info_restreindre_rubrique' => 'Begræns administrationsrettigheder til dette afsnit:',
294
-	'info_resultat_recherche' => 'Søgeresultater:',
295
-	'info_rubriques' => 'Afsnit',
296
-	'info_rubriques_02' => 'afsnit',
297
-	'info_rubriques_trouvees' => 'Afsnit fundet',
298
-	'info_sans_titre' => 'Uden overskrift',
299
-	'info_selection_chemin_acces' => '<b>Vælg</b> nedenfor stien til kataloget:',
300
-	'info_signatures' => 'underskrifter',
301
-	'info_site' => 'Websted',
302
-	'info_site_2' => 'websted:',
303
-	'info_site_min' => 'websted',
304
-	'info_site_reference_2' => 'Henvisning',
305
-	'info_site_web' => 'WEBSTED:', # MODIF
306
-	'info_sites' => 'websteder',
307
-	'info_sites_lies_mot' => 'Links til websteder knyttet til dette nøgleord',
308
-	'info_sites_proxy' => 'Brug proxy',
309
-	'info_sites_trouves' => 'Websteder fundet',
310
-	'info_sous_titre' => 'Underrubrik:',
311
-	'info_statut_administrateur' => 'Administrator',
312
-	'info_statut_auteur' => 'Denne forfatters status:', # MODIF
313
-	'info_statut_redacteur' => 'Redaktør',
314
-	'info_statut_utilisateurs_1' => 'Importerede brugeres standardstatus',
315
-	'info_statut_utilisateurs_2' => 'Vælg den status som skal tildeles personerne i LDAP kataloget, når de logger ind første gang. Senere kan du ændre værdien for hver forfatter fra sag til sag.',
316
-	'info_suivi_activite' => 'Opfølgning på redaktionelle aktiviteter',
317
-	'info_surtitre' => 'Hovedoverskrift:',
318
-	'info_taille_maximale_vignette' => 'Max. størrelse på piktogram dannet af systemet:',
319
-	'info_terminer_installation' => 'Du kan nu afslutte standardinstallationen.',
320
-	'info_texte' => 'Tekst',
321
-	'info_texte_explicatif' => 'Forklarende tekst',
322
-	'info_texte_long' => '(teksten er for lang: den vil blive opdelt i flere dele, som vil blive sat sammen efter godkendelse.)',
323
-	'info_texte_message' => 'Meddelelsens tekst:', # MODIF
324
-	'info_texte_message_02' => 'Meddelelsens tekst',
325
-	'info_titre' => 'Overskrift:',
326
-	'info_total' => 'ialt:',
327
-	'info_tous_articles_en_redaction' => 'Alle artikler undervejs',
328
-	'info_tous_articles_presents' => 'Alle artikler offentliggjort i dette afsnit',
329
-	'info_tous_les' => 'for hver:',
330
-	'info_tout_site' => 'Hele webstedet',
331
-	'info_tout_site2' => 'Artiklen er ikke blevet oversat til dette sprog.',
332
-	'info_tout_site3' => 'Artiklen er blevet oversat til dette sprig, men nogle ændringer er senere blevet tilføjet til referenceartiklen. Oversættelsen skal opdateres.   ',
333
-	'info_tout_site4' => 'Artiklen er blevet oversat til dette sprog og oversættelsen er opdateret.',
334
-	'info_tout_site5' => 'Den oprindelige artikel.',
335
-	'info_tout_site6' => '<b>Advarsel:</b> kun de oprindelige artikler vises.
279
+    'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
280
+    'info_racine_site' => 'Top',
281
+    'info_recharger_page' => 'Vær venlig at genindlæse denne side om et øjeblik.',
282
+    'info_recherche_auteur_zero' => '<b>Ingen resultater fundet til "@cherche_auteur@".',
283
+    'info_recommencer' => 'Vær venlig at forsøge igen.',
284
+    'info_redacteur_1' => 'Redaktør',
285
+    'info_redacteur_2' => 'med adgang til det private område (<i>anbefalet</i>)',
286
+    'info_redacteurs' => 'Redaktører',
287
+    'info_redaction_en_cours' => 'REDIGERING ER IGANG',
288
+    'info_redirection' => 'Viderestilling',
289
+    'info_refuses' => 'Dine artikler er afvist',
290
+    'info_reglage_ldap' => 'Muligheder: <b>Konfigurere LDAP understøttelse</b>',
291
+    'info_renvoi_article' => '<b>Viderestilling.</b> Denne artikel henviser til siden:',
292
+    'info_reserve_admin' => 'Kun administratorer kan ændre denne adresse.',
293
+    'info_restreindre_rubrique' => 'Begræns administrationsrettigheder til dette afsnit:',
294
+    'info_resultat_recherche' => 'Søgeresultater:',
295
+    'info_rubriques' => 'Afsnit',
296
+    'info_rubriques_02' => 'afsnit',
297
+    'info_rubriques_trouvees' => 'Afsnit fundet',
298
+    'info_sans_titre' => 'Uden overskrift',
299
+    'info_selection_chemin_acces' => '<b>Vælg</b> nedenfor stien til kataloget:',
300
+    'info_signatures' => 'underskrifter',
301
+    'info_site' => 'Websted',
302
+    'info_site_2' => 'websted:',
303
+    'info_site_min' => 'websted',
304
+    'info_site_reference_2' => 'Henvisning',
305
+    'info_site_web' => 'WEBSTED:', # MODIF
306
+    'info_sites' => 'websteder',
307
+    'info_sites_lies_mot' => 'Links til websteder knyttet til dette nøgleord',
308
+    'info_sites_proxy' => 'Brug proxy',
309
+    'info_sites_trouves' => 'Websteder fundet',
310
+    'info_sous_titre' => 'Underrubrik:',
311
+    'info_statut_administrateur' => 'Administrator',
312
+    'info_statut_auteur' => 'Denne forfatters status:', # MODIF
313
+    'info_statut_redacteur' => 'Redaktør',
314
+    'info_statut_utilisateurs_1' => 'Importerede brugeres standardstatus',
315
+    'info_statut_utilisateurs_2' => 'Vælg den status som skal tildeles personerne i LDAP kataloget, når de logger ind første gang. Senere kan du ændre værdien for hver forfatter fra sag til sag.',
316
+    'info_suivi_activite' => 'Opfølgning på redaktionelle aktiviteter',
317
+    'info_surtitre' => 'Hovedoverskrift:',
318
+    'info_taille_maximale_vignette' => 'Max. størrelse på piktogram dannet af systemet:',
319
+    'info_terminer_installation' => 'Du kan nu afslutte standardinstallationen.',
320
+    'info_texte' => 'Tekst',
321
+    'info_texte_explicatif' => 'Forklarende tekst',
322
+    'info_texte_long' => '(teksten er for lang: den vil blive opdelt i flere dele, som vil blive sat sammen efter godkendelse.)',
323
+    'info_texte_message' => 'Meddelelsens tekst:', # MODIF
324
+    'info_texte_message_02' => 'Meddelelsens tekst',
325
+    'info_titre' => 'Overskrift:',
326
+    'info_total' => 'ialt:',
327
+    'info_tous_articles_en_redaction' => 'Alle artikler undervejs',
328
+    'info_tous_articles_presents' => 'Alle artikler offentliggjort i dette afsnit',
329
+    'info_tous_les' => 'for hver:',
330
+    'info_tout_site' => 'Hele webstedet',
331
+    'info_tout_site2' => 'Artiklen er ikke blevet oversat til dette sprog.',
332
+    'info_tout_site3' => 'Artiklen er blevet oversat til dette sprig, men nogle ændringer er senere blevet tilføjet til referenceartiklen. Oversættelsen skal opdateres.   ',
333
+    'info_tout_site4' => 'Artiklen er blevet oversat til dette sprog og oversættelsen er opdateret.',
334
+    'info_tout_site5' => 'Den oprindelige artikel.',
335
+    'info_tout_site6' => '<b>Advarsel:</b> kun de oprindelige artikler vises.
336 336
 Oversættelserne er tilknyttet den oprindelige artikel 
337 337
 i en farve, der angiver deres status:',
338
-	'info_travail_colaboratif' => 'Samarbejde om artikler',
339
-	'info_un_article' => 'en artikel,',
340
-	'info_un_site' => 'et websted,',
341
-	'info_une_rubrique' => 'et afsnit,',
342
-	'info_une_rubrique_02' => '1 afsnit',
343
-	'info_url' => 'URL:',
344
-	'info_urlref' => 'Hyperlink:',
345
-	'info_utilisation_spip' => 'SPIP er nu klar til brug...',
346
-	'info_visites_par_mois' => 'Besøg pr. måned:',
347
-	'info_visiteur_1' => 'Besøgende',
348
-	'info_visiteur_2' => 'på den offentligt tilgængelige websted',
349
-	'info_visiteurs' => 'Besøgende',
350
-	'info_visiteurs_02' => 'Besøgende på offentligt websted',
351
-	'install_select_langue' => 'Vælg et sprog og klik derefter på knappen «næste» for at igangsætte installationen.',
352
-	'intem_redacteur' => 'redaktør',
353
-	'item_accepter_inscriptions' => 'Tillad tilmeldinger',
354
-	'item_activer_messages_avertissement' => 'Tillad advarselsmeddelelser',
355
-	'item_administrateur_2' => 'administrator',
356
-	'item_afficher_calendrier' => 'Vis i kalenderen',
357
-	'item_choix_administrateurs' => 'administratorer',
358
-	'item_choix_generation_miniature' => 'Dan miniaturepiktogrammer automatisk.',
359
-	'item_choix_non_generation_miniature' => 'Dan ikke miniaturebilleder.',
360
-	'item_choix_redacteurs' => 'redaktører',
361
-	'item_choix_visiteurs' => 'besøgende på den offentlige websted',
362
-	'item_creer_fichiers_authent' => 'Dan .htpasswd filer',
363
-	'item_login' => 'Login',
364
-	'item_mots_cles_association_articles' => 'artiklerne',
365
-	'item_mots_cles_association_rubriques' => 'afsnittene',
366
-	'item_mots_cles_association_sites' => 'de linkede eller syndikerede websteder.',
367
-	'item_non' => 'Nej',
368
-	'item_non_accepter_inscriptions' => 'Tillad ikke tilmelding',
369
-	'item_non_activer_messages_avertissement' => 'Ingen advarselsmeddelelser',
370
-	'item_non_afficher_calendrier' => 'Vis ikke i kalender',
371
-	'item_non_creer_fichiers_authent' => 'Dan ikke disse filer',
372
-	'item_non_publier_articles' => 'Vent med at offentliggøre artikler til deres publiceringsdato.',
373
-	'item_nouvel_auteur' => 'Ny forfatter',
374
-	'item_nouvelle_rubrique' => 'Nyt afsnit',
375
-	'item_oui' => 'Ja',
376
-	'item_publier_articles' => 'Offentliggør artikler uden hensyn til deres publiceringsdato.',
377
-	'item_reponse_article' => 'Kommenter artiklen',
378
-	'item_visiteur' => 'besøgende',
338
+    'info_travail_colaboratif' => 'Samarbejde om artikler',
339
+    'info_un_article' => 'en artikel,',
340
+    'info_un_site' => 'et websted,',
341
+    'info_une_rubrique' => 'et afsnit,',
342
+    'info_une_rubrique_02' => '1 afsnit',
343
+    'info_url' => 'URL:',
344
+    'info_urlref' => 'Hyperlink:',
345
+    'info_utilisation_spip' => 'SPIP er nu klar til brug...',
346
+    'info_visites_par_mois' => 'Besøg pr. måned:',
347
+    'info_visiteur_1' => 'Besøgende',
348
+    'info_visiteur_2' => 'på den offentligt tilgængelige websted',
349
+    'info_visiteurs' => 'Besøgende',
350
+    'info_visiteurs_02' => 'Besøgende på offentligt websted',
351
+    'install_select_langue' => 'Vælg et sprog og klik derefter på knappen «næste» for at igangsætte installationen.',
352
+    'intem_redacteur' => 'redaktør',
353
+    'item_accepter_inscriptions' => 'Tillad tilmeldinger',
354
+    'item_activer_messages_avertissement' => 'Tillad advarselsmeddelelser',
355
+    'item_administrateur_2' => 'administrator',
356
+    'item_afficher_calendrier' => 'Vis i kalenderen',
357
+    'item_choix_administrateurs' => 'administratorer',
358
+    'item_choix_generation_miniature' => 'Dan miniaturepiktogrammer automatisk.',
359
+    'item_choix_non_generation_miniature' => 'Dan ikke miniaturebilleder.',
360
+    'item_choix_redacteurs' => 'redaktører',
361
+    'item_choix_visiteurs' => 'besøgende på den offentlige websted',
362
+    'item_creer_fichiers_authent' => 'Dan .htpasswd filer',
363
+    'item_login' => 'Login',
364
+    'item_mots_cles_association_articles' => 'artiklerne',
365
+    'item_mots_cles_association_rubriques' => 'afsnittene',
366
+    'item_mots_cles_association_sites' => 'de linkede eller syndikerede websteder.',
367
+    'item_non' => 'Nej',
368
+    'item_non_accepter_inscriptions' => 'Tillad ikke tilmelding',
369
+    'item_non_activer_messages_avertissement' => 'Ingen advarselsmeddelelser',
370
+    'item_non_afficher_calendrier' => 'Vis ikke i kalender',
371
+    'item_non_creer_fichiers_authent' => 'Dan ikke disse filer',
372
+    'item_non_publier_articles' => 'Vent med at offentliggøre artikler til deres publiceringsdato.',
373
+    'item_nouvel_auteur' => 'Ny forfatter',
374
+    'item_nouvelle_rubrique' => 'Nyt afsnit',
375
+    'item_oui' => 'Ja',
376
+    'item_publier_articles' => 'Offentliggør artikler uden hensyn til deres publiceringsdato.',
377
+    'item_reponse_article' => 'Kommenter artiklen',
378
+    'item_visiteur' => 'besøgende',
379 379
 
380
-	// J
381
-	'jour_non_connu_nc' => ' ',
380
+    // J
381
+    'jour_non_connu_nc' => ' ',
382 382
 
383
-	// L
384
-	'lien_ajouter_auteur' => 'Tilføj denne forfatter',
385
-	'lien_email' => 'e-mail',
386
-	'lien_nom_site' => 'WEBSTEDETS NAVN:',
387
-	'lien_retirer_auteur' => 'Fjern forfatter',
388
-	'lien_site' => 'websted',
389
-	'lien_tout_deplier' => 'Udfold alle',
390
-	'lien_tout_replier' => 'Sammenfold alle',
391
-	'lien_trier_nom' => 'Sorter efter navn',
392
-	'lien_trier_nombre_articles' => 'Sorter efter antal artikler',
393
-	'lien_trier_statut' => 'Sorter efter status',
394
-	'lien_voir_en_ligne' => 'SE ONLINE:',
395
-	'logo_article' => 'LOGO TIL ARTIKLEN', # MODIF
396
-	'logo_auteur' => 'LOGO TIL FORFATTEREN', # MODIF
397
-	'logo_rubrique' => 'LOGO TIL AFSNITTETS', # MODIF
398
-	'logo_site' => 'LOGO TIL WEBSTEDETS', # MODIF
399
-	'logo_standard_rubrique' => 'STANDARDLOGO TIL AFSNIT', # MODIF
400
-	'logo_survol' => 'PEGEFØLSOMT LOGO', # MODIF
383
+    // L
384
+    'lien_ajouter_auteur' => 'Tilføj denne forfatter',
385
+    'lien_email' => 'e-mail',
386
+    'lien_nom_site' => 'WEBSTEDETS NAVN:',
387
+    'lien_retirer_auteur' => 'Fjern forfatter',
388
+    'lien_site' => 'websted',
389
+    'lien_tout_deplier' => 'Udfold alle',
390
+    'lien_tout_replier' => 'Sammenfold alle',
391
+    'lien_trier_nom' => 'Sorter efter navn',
392
+    'lien_trier_nombre_articles' => 'Sorter efter antal artikler',
393
+    'lien_trier_statut' => 'Sorter efter status',
394
+    'lien_voir_en_ligne' => 'SE ONLINE:',
395
+    'logo_article' => 'LOGO TIL ARTIKLEN', # MODIF
396
+    'logo_auteur' => 'LOGO TIL FORFATTEREN', # MODIF
397
+    'logo_rubrique' => 'LOGO TIL AFSNITTETS', # MODIF
398
+    'logo_site' => 'LOGO TIL WEBSTEDETS', # MODIF
399
+    'logo_standard_rubrique' => 'STANDARDLOGO TIL AFSNIT', # MODIF
400
+    'logo_survol' => 'PEGEFØLSOMT LOGO', # MODIF
401 401
 
402
-	// M
403
-	'menu_aide_installation_choix_base' => 'Valg af database',
404
-	'module_fichier_langue' => 'Sprogfil',
405
-	'module_raccourci' => 'Genvej',
406
-	'module_texte_affiche' => 'Vist tekst',
407
-	'module_texte_explicatif' => 'Du kan indsætte følgende genveje i dit websteds skabeloner. De vil automatisk blive oversat til de forskellige sprog, som der findes sprogfiler til.',
408
-	'module_texte_traduction' => 'Sprogfilen « @module@ » findes på:',
409
-	'mois_non_connu' => 'ukendt',
402
+    // M
403
+    'menu_aide_installation_choix_base' => 'Valg af database',
404
+    'module_fichier_langue' => 'Sprogfil',
405
+    'module_raccourci' => 'Genvej',
406
+    'module_texte_affiche' => 'Vist tekst',
407
+    'module_texte_explicatif' => 'Du kan indsætte følgende genveje i dit websteds skabeloner. De vil automatisk blive oversat til de forskellige sprog, som der findes sprogfiler til.',
408
+    'module_texte_traduction' => 'Sprogfilen « @module@ » findes på:',
409
+    'mois_non_connu' => 'ukendt',
410 410
 
411
-	// O
412
-	'onglet_repartition_actuelle' => 'nu',
411
+    // O
412
+    'onglet_repartition_actuelle' => 'nu',
413 413
 
414
-	// R
415
-	'required' => '[Skal udfyldes]', # MODIF
414
+    // R
415
+    'required' => '[Skal udfyldes]', # MODIF
416 416
 
417
-	// S
418
-	'statut_admin_restreint' => '(begrænset admin)', # MODIF
417
+    // S
418
+    'statut_admin_restreint' => '(begrænset admin)', # MODIF
419 419
 
420
-	// T
421
-	'text_article_propose_publication' => 'Artiklen er sendt til offentliggørelse. Hold dig ikke tilbage fra at give din mening til kende gennem det forum, der er tilknyttet artiklen (nederst på siden).', # MODIF
422
-	'texte_acces_ldap_anonyme_1' => 'Nogle LDAP-servere tillader ikke anonym adgang. I så fald må du angive en brugeridentifikation for senere at kunne søge efter information i kataloget. Men i de fleste tilfælde kan du lade de følgende felter stå tomme.',
423
-	'texte_admin_effacer_01' => 'Denne kommando sletter <i>hele</i> indholdet i databasen,
420
+    // T
421
+    'text_article_propose_publication' => 'Artiklen er sendt til offentliggørelse. Hold dig ikke tilbage fra at give din mening til kende gennem det forum, der er tilknyttet artiklen (nederst på siden).', # MODIF
422
+    'texte_acces_ldap_anonyme_1' => 'Nogle LDAP-servere tillader ikke anonym adgang. I så fald må du angive en brugeridentifikation for senere at kunne søge efter information i kataloget. Men i de fleste tilfælde kan du lade de følgende felter stå tomme.',
423
+    'texte_admin_effacer_01' => 'Denne kommando sletter <i>hele</i> indholdet i databasen,
424 424
 	herunder <i>hele</i> opsætningen for redaktører og administratorer. Når du har udført den, bør du 
425 425
 	geninstallere SPIP for at danne en ny database og åbne op for den første administratoradgang.',
426
-	'texte_adresse_annuaire_1' => '(Hvis dit katalog findes på samme server som webstedet, er det formentlig «localhost».)',
427
-	'texte_ajout_auteur' => 'Følgende forfatter har bidraget til artiklen:',
428
-	'texte_annuaire_ldap_1' => 'Hvis du har adgang til et LDAP-katalog, kan du anvende det til automatisk at importere brugere i SPIP.',
429
-	'texte_article_statut' => 'Denne artikel er:',
430
-	'texte_article_virtuel' => 'Virtuel artikel',
431
-	'texte_article_virtuel_reference' => '<b>Virtuel artikel:</b> fremstår som en artikel på dit websted, men viderestiller til en anden URL. Slet URL’en for at fjerne viderestillingen.',
432
-	'texte_aucun_resultat_auteur' => 'Ingen resultater til "@cherche_auteur@".',
433
-	'texte_auteur_messagerie' => 'Dette websted kan løbende holde øje med, hvilke redaktører der er logget ind. Dette muliggør realtidsudveksling af meddelelser (hvis udveksling af meddelser ovenfor er fravalgt, vedligeholdes oversigten over redaktører, der er online, heller ikke). Du kan vælge ikke at være synlig i oversigten (du er så «usynlig» for andre brugere).',
434
-	'texte_auteurs' => 'FORFATTERNE',
435
-	'texte_choix_base_1' => 'Vælg database:',
436
-	'texte_choix_base_2' => 'SQL server indeholder et antal databaser.',
437
-	'texte_choix_base_3' => '<b>Vælg</b> vælg nedenfor den database, som webhotellet har tildelt dig:',
438
-	'texte_compte_element' => '@count@ element',
439
-	'texte_compte_elements' => '@count@ elementer',
440
-	'texte_connexion_mysql' => 'Slå op i de oplysninger, som dit webhotel har stillet til rådighed: Hvis webhotellet understøtter SQL, bør det indeholde oplysninger om opkobling.', # MODIF
441
-	'texte_contenu_article' => '(Artiklens indhold med få ord.)',
442
-	'texte_contenu_articles' => 'Med udgangspunkt i det layout du har valgt til dit websted, kan du vælge at nogle artikelelementer ikke skal benyttes.
426
+    'texte_adresse_annuaire_1' => '(Hvis dit katalog findes på samme server som webstedet, er det formentlig «localhost».)',
427
+    'texte_ajout_auteur' => 'Følgende forfatter har bidraget til artiklen:',
428
+    'texte_annuaire_ldap_1' => 'Hvis du har adgang til et LDAP-katalog, kan du anvende det til automatisk at importere brugere i SPIP.',
429
+    'texte_article_statut' => 'Denne artikel er:',
430
+    'texte_article_virtuel' => 'Virtuel artikel',
431
+    'texte_article_virtuel_reference' => '<b>Virtuel artikel:</b> fremstår som en artikel på dit websted, men viderestiller til en anden URL. Slet URL’en for at fjerne viderestillingen.',
432
+    'texte_aucun_resultat_auteur' => 'Ingen resultater til "@cherche_auteur@".',
433
+    'texte_auteur_messagerie' => 'Dette websted kan løbende holde øje med, hvilke redaktører der er logget ind. Dette muliggør realtidsudveksling af meddelelser (hvis udveksling af meddelser ovenfor er fravalgt, vedligeholdes oversigten over redaktører, der er online, heller ikke). Du kan vælge ikke at være synlig i oversigten (du er så «usynlig» for andre brugere).',
434
+    'texte_auteurs' => 'FORFATTERNE',
435
+    'texte_choix_base_1' => 'Vælg database:',
436
+    'texte_choix_base_2' => 'SQL server indeholder et antal databaser.',
437
+    'texte_choix_base_3' => '<b>Vælg</b> vælg nedenfor den database, som webhotellet har tildelt dig:',
438
+    'texte_compte_element' => '@count@ element',
439
+    'texte_compte_elements' => '@count@ elementer',
440
+    'texte_connexion_mysql' => 'Slå op i de oplysninger, som dit webhotel har stillet til rådighed: Hvis webhotellet understøtter SQL, bør det indeholde oplysninger om opkobling.', # MODIF
441
+    'texte_contenu_article' => '(Artiklens indhold med få ord.)',
442
+    'texte_contenu_articles' => 'Med udgangspunkt i det layout du har valgt til dit websted, kan du vælge at nogle artikelelementer ikke skal benyttes.
443 443
 		Benyt følgende liste til at bestemme, hvilke elementer der skal være til rådighed.',
444
-	'texte_crash_base' => 'Hvis din database er brudt ned, kan du her forsøge en automatisk genopbygning.',
445
-	'texte_creer_rubrique' => 'Før du kan skrive artikler,<br /> skal du oprette et afsnit.',
446
-	'texte_date_creation_article' => 'DATO FOR OPRETTELSE AF ARTIKLEN:',
447
-	'texte_date_publication_anterieure' => 'DATO FOR TIDLIGERE OFFENTLIGGØRELSE',
448
-	'texte_date_publication_anterieure_nonaffichee' => 'Skjul dato for tidligere offentliggørelse.',
449
-	'texte_date_publication_article' => 'DATO FOR ONLINE OFFENTLIGGØRELSE:',
450
-	'texte_descriptif_rapide' => 'Kort beskrivelse',
451
-	'texte_effacer_base' => 'Slet SPIP databasen',
452
-	'texte_en_cours_validation' => 'Følgende artikler og nyheder er foreslået offentliggjort. Tøv ikke med at give din mening til kende via de fora, som er knyttet til artiklerne.', # MODIF
453
-	'texte_enrichir_mise_a_jour' => 'Du kan forbedre layoutet af teksten ved at benytte «typografiske koder».',
454
-	'texte_fichier_authent' => '<b>Skal SPIP oprette specielle <tt>.htpasswd</tt>
444
+    'texte_crash_base' => 'Hvis din database er brudt ned, kan du her forsøge en automatisk genopbygning.',
445
+    'texte_creer_rubrique' => 'Før du kan skrive artikler,<br /> skal du oprette et afsnit.',
446
+    'texte_date_creation_article' => 'DATO FOR OPRETTELSE AF ARTIKLEN:',
447
+    'texte_date_publication_anterieure' => 'DATO FOR TIDLIGERE OFFENTLIGGØRELSE',
448
+    'texte_date_publication_anterieure_nonaffichee' => 'Skjul dato for tidligere offentliggørelse.',
449
+    'texte_date_publication_article' => 'DATO FOR ONLINE OFFENTLIGGØRELSE:',
450
+    'texte_descriptif_rapide' => 'Kort beskrivelse',
451
+    'texte_effacer_base' => 'Slet SPIP databasen',
452
+    'texte_en_cours_validation' => 'Følgende artikler og nyheder er foreslået offentliggjort. Tøv ikke med at give din mening til kende via de fora, som er knyttet til artiklerne.', # MODIF
453
+    'texte_enrichir_mise_a_jour' => 'Du kan forbedre layoutet af teksten ved at benytte «typografiske koder».',
454
+    'texte_fichier_authent' => '<b>Skal SPIP oprette specielle <tt>.htpasswd</tt>
455 455
 		og <tt>.htpasswd-admin</tt> filer i kataloget @dossier@?</b><p>
456 456
 		Disse filer kan benyttes til at begrænse adgangen for forfattere og administratorer til andre dele af dit websted
457 457
 		(f.eks. et eksternt statistikprogram).<p>
458 458
 		Hvis du ikke har benyttet sådanne filer før, kan du vælge standardværdien (ingen filoprettelse).', # MODIF
459
-	'texte_informations_personnelles_1' => 'Systemet vil give dig en tilpasset adgang til webstedet.',
460
-	'texte_informations_personnelles_2' => '(Bemærk: hvis det er en geninstallation og din adgang stadig fungerer, kan du', # MODIF
461
-	'texte_introductif_article' => '(Introduktion til artiklen)',
462
-	'texte_jeu_caractere' => 'Denne indstilling er nyttig, hvis dit websted viser andre alfabeter end det latinske alfabet (dvs. det «vestlige») og dets afledninger. 
459
+    'texte_informations_personnelles_1' => 'Systemet vil give dig en tilpasset adgang til webstedet.',
460
+    'texte_informations_personnelles_2' => '(Bemærk: hvis det er en geninstallation og din adgang stadig fungerer, kan du', # MODIF
461
+    'texte_introductif_article' => '(Introduktion til artiklen)',
462
+    'texte_jeu_caractere' => 'Denne indstilling er nyttig, hvis dit websted viser andre alfabeter end det latinske alfabet (dvs. det «vestlige») og dets afledninger. 
463 463
  I så fald skal standardindstillingen ændres til et passende tegnsæt. Vi anbefaler dig at prøve med forskellige indstillinger for at finde den bedste løsning. Husk også at tilpasse webstedet tilsvarende (<tt>#CHARSET</tt> parameteren).',
464
-	'texte_login_ldap_1' => '(Efterlad tom for anonym adgang eller indtast en fuldstændig sti, f.eks. «<tt>uid=hansen, ou=brugere, dc=mit-domæne, dc=dk</tt>».)',
465
-	'texte_login_precaution' => 'Advarsel! Dette er den login, du er koblet på med nu.
464
+    'texte_login_ldap_1' => '(Efterlad tom for anonym adgang eller indtast en fuldstændig sti, f.eks. «<tt>uid=hansen, ou=brugere, dc=mit-domæne, dc=dk</tt>».)',
465
+    'texte_login_precaution' => 'Advarsel! Dette er den login, du er koblet på med nu.
466 466
 	Brug denne formular med forsigtighed ...',
467
-	'texte_mise_a_niveau_base_1' => 'Du har netop opdateret SPIP’s filer.
467
+    'texte_mise_a_niveau_base_1' => 'Du har netop opdateret SPIP’s filer.
468 468
 	Du skal nu opdatere webstedets database.',
469
-	'texte_modifier_article' => 'Ret artiklen:',
470
-	'texte_multilinguisme' => 'Hvis du ønsker at administrere artikler på flere sprog med den deraf følgende større kompleksitet, kan du forsyne afsnit og/eller artikler med en sprogvalgsmenu. Denne funktion er afhængig af strukturen på websiden.', # MODIF
471
-	'texte_multilinguisme_trad' => 'Du kan også vælge at have link mellem de forskellige sprogversioner af en artikel.', # MODIF
472
-	'texte_non_compresse' => '<i>ukomprimeret</i> (din server understøtter ikke denne funktion)',
473
-	'texte_nouvelle_version_spip_1' => 'Du har netop installeret en ny version af SPIP.',
474
-	'texte_nouvelle_version_spip_2' => 'Denne nye version kræver en mere omfattende opdatering end sædvanligt. Hvis du er webmaster på webstedet, så slet venligst filen <tt>inc_connect.php3</tt> i kataloget <tt>ecrire</tt> og genstart installationen for at opdatere dine opkoblingsparametre til databasen. <p>(NB.: hvis du har glemt dine opkoblingsparametre, så kast et blik på indholdet af filen <tt>inc_connect.php3</tt> før du sletter den...)', # MODIF
475
-	'texte_operation_echec' => 'Gå tilbage til forrige side og vælg en anden database eller opret en ny. Kontroller de oplysninger, dit webhotel har stillet til rådighed.',
476
-	'texte_plus_trois_car' => 'mere end 3 tegn',
477
-	'texte_plusieurs_articles' => 'Der er fundet flere forfattere til "@cherche_auteur@":',
478
-	'texte_port_annuaire' => '(Standardværdien passer for det meste.)',
479
-	'texte_proposer_publication' => 'Når din artikel er færdig,<br /> kan du indsende den til offentliggørelse.',
480
-	'texte_proxy' => 'I nogle tilfælde (intranet, beskyttede netværk...),
469
+    'texte_modifier_article' => 'Ret artiklen:',
470
+    'texte_multilinguisme' => 'Hvis du ønsker at administrere artikler på flere sprog med den deraf følgende større kompleksitet, kan du forsyne afsnit og/eller artikler med en sprogvalgsmenu. Denne funktion er afhængig af strukturen på websiden.', # MODIF
471
+    'texte_multilinguisme_trad' => 'Du kan også vælge at have link mellem de forskellige sprogversioner af en artikel.', # MODIF
472
+    'texte_non_compresse' => '<i>ukomprimeret</i> (din server understøtter ikke denne funktion)',
473
+    'texte_nouvelle_version_spip_1' => 'Du har netop installeret en ny version af SPIP.',
474
+    'texte_nouvelle_version_spip_2' => 'Denne nye version kræver en mere omfattende opdatering end sædvanligt. Hvis du er webmaster på webstedet, så slet venligst filen <tt>inc_connect.php3</tt> i kataloget <tt>ecrire</tt> og genstart installationen for at opdatere dine opkoblingsparametre til databasen. <p>(NB.: hvis du har glemt dine opkoblingsparametre, så kast et blik på indholdet af filen <tt>inc_connect.php3</tt> før du sletter den...)', # MODIF
475
+    'texte_operation_echec' => 'Gå tilbage til forrige side og vælg en anden database eller opret en ny. Kontroller de oplysninger, dit webhotel har stillet til rådighed.',
476
+    'texte_plus_trois_car' => 'mere end 3 tegn',
477
+    'texte_plusieurs_articles' => 'Der er fundet flere forfattere til "@cherche_auteur@":',
478
+    'texte_port_annuaire' => '(Standardværdien passer for det meste.)',
479
+    'texte_proposer_publication' => 'Når din artikel er færdig,<br /> kan du indsende den til offentliggørelse.',
480
+    'texte_proxy' => 'I nogle tilfælde (intranet, beskyttede netværk...),
481 481
 		er det nødvendigt at benytte en <i>proxy HTTP</i> for at komme i kontakt med syndikerede websteder.
482 482
 		Hvis der skal benyttes proxy, så indtast dens adresse her: 
483 483
 		<tt><html>http://proxy:8080</html></tt>. Almindeligvis skal feltet stå tomt.',
484
-	'texte_publication_articles_post_dates' => 'Hvad skal SPIP gøre med hensyn til artikler med en offentliggørelsesdato, der ligger ude i 
484
+    'texte_publication_articles_post_dates' => 'Hvad skal SPIP gøre med hensyn til artikler med en offentliggørelsesdato, der ligger ude i 
485 485
 		fremtiden?',
486
-	'texte_rappel_selection_champs' => '[Husk at vælge dette felt korrekt.]',
487
-	'texte_recalcul_page' => 'Hvis du kun ønsker at opdatere en side, bør du gøre det ved fra det offentlige område at benytte knappen « Opdater ».',
488
-	'texte_recuperer_base' => 'Reparer databasen',
489
-	'texte_reference_mais_redirige' => 'artikler der refereres til på dit SPIP websted, men som viderestiller til en anden URL.',
490
-	'texte_requetes_echouent' => '<b>Når nogle SQL forespørgsler systematisk og uden tilsyneladende grund går galt, er det muligt at fejlen ligger i selve databasen.</b>
486
+    'texte_rappel_selection_champs' => '[Husk at vælge dette felt korrekt.]',
487
+    'texte_recalcul_page' => 'Hvis du kun ønsker at opdatere en side, bør du gøre det ved fra det offentlige område at benytte knappen « Opdater ».',
488
+    'texte_recuperer_base' => 'Reparer databasen',
489
+    'texte_reference_mais_redirige' => 'artikler der refereres til på dit SPIP websted, men som viderestiller til en anden URL.',
490
+    'texte_requetes_echouent' => '<b>Når nogle SQL forespørgsler systematisk og uden tilsyneladende grund går galt, er det muligt at fejlen ligger i selve databasen.</b>
491 491
 		<p>SQL har en funktion, der reparerer dens tabeller, hvis de er blevet ødelagt ved et uheld. 
492 492
 		Her kan du forsøge at igangsætte denne reparationsfunktion; 
493 493
 		hvis den går galt, bør du beholde en kopi af skærmbilledet, 
494 494
 		som måske kan indeholde antydninger af, hvad der er galt....
495 495
 		<p>Hvis problemet fortsat består, så kontakt dit webhotel.', # MODIF
496
-	'texte_selection_langue_principale' => 'Du kan nedenfor vælge webstedets «hovedsprog». 
496
+    'texte_selection_langue_principale' => 'Du kan nedenfor vælge webstedets «hovedsprog». 
497 497
 		Heldigvis begrænser dette valg ikke dine artikler til at skulle skrives på det valgte sprog 
498 498
 		men gør det muligt at fastsætte, 
499 499
 		<ul><li> standardformatet for datoer i det offentlige område</li>
@@ -503,60 +503,60 @@  discard block
 block discarded – undo
503 503
 		<li> det sprog der anvendes i formularer på det offentlige websted</li>
504 504
 
505 505
 		<li> standardsproget i det private område.</li></ul>',
506
-	'texte_sous_titre' => 'Underrubrik',
507
-	'texte_statistiques_visites' => '(mørke bjælker:  Søndag / mørk kurve: gennemsnitsudvikling)',
508
-	'texte_statut_attente_validation' => 'afventer godkendelse',
509
-	'texte_statut_publies' => 'offentliggjort online',
510
-	'texte_statut_refuses' => 'afvist',
511
-	'texte_suppression_fichiers' => 'Brug denne kommando til at slette alle filer i SPIP’s cache.
506
+    'texte_sous_titre' => 'Underrubrik',
507
+    'texte_statistiques_visites' => '(mørke bjælker:  Søndag / mørk kurve: gennemsnitsudvikling)',
508
+    'texte_statut_attente_validation' => 'afventer godkendelse',
509
+    'texte_statut_publies' => 'offentliggjort online',
510
+    'texte_statut_refuses' => 'afvist',
511
+    'texte_suppression_fichiers' => 'Brug denne kommando til at slette alle filer i SPIP’s cache.
512 512
 		Dette giver dig bl.a. mulighed for at gennemtvinge opdatering af alle sider i tilfælde af 
513 513
 		at du har lavet væsentlige grafiske eller strukturelle ændringer på webstedet.',
514
-	'texte_sur_titre' => 'Hovedoverskrift',
515
-	'texte_table_ok' => ': denne tabel er OK.',
516
-	'texte_tentative_recuperation' => 'Reparationsforsøg',
517
-	'texte_tenter_reparation' => 'Forsøg på at reparere databasen',
518
-	'texte_test_proxy' => 'For at afprøve proxy’en, kan du indtaste adressen på et websted som du ønsker at teste.',
519
-	'texte_titre_02' => 'Emne:',
520
-	'texte_titre_obligatoire' => '<b>Overskrift</b> [Obligatorisk]',
521
-	'texte_travail_article' => '@nom_auteur_modif@ har arbejdet på denne artikel for @date_diff@ minutter siden',
522
-	'texte_travail_collaboratif' => 'Hvis det sker hyppigt at flere redaktører arbejder på samme artikel, kan systemet
514
+    'texte_sur_titre' => 'Hovedoverskrift',
515
+    'texte_table_ok' => ': denne tabel er OK.',
516
+    'texte_tentative_recuperation' => 'Reparationsforsøg',
517
+    'texte_tenter_reparation' => 'Forsøg på at reparere databasen',
518
+    'texte_test_proxy' => 'For at afprøve proxy’en, kan du indtaste adressen på et websted som du ønsker at teste.',
519
+    'texte_titre_02' => 'Emne:',
520
+    'texte_titre_obligatoire' => '<b>Overskrift</b> [Obligatorisk]',
521
+    'texte_travail_article' => '@nom_auteur_modif@ har arbejdet på denne artikel for @date_diff@ minutter siden',
522
+    'texte_travail_collaboratif' => 'Hvis det sker hyppigt at flere redaktører arbejder på samme artikel, kan systemet
523 523
 		vise «åbne» artikler for at undgå samtidige ændringer. Denne indstilling er som standard
524 524
 		slået fra for at undgå utidige advarselsmeddelelser.',
525
-	'texte_vide' => 'tom',
526
-	'texte_vider_cache' => 'Tøm cachen',
527
-	'titre_admin_tech' => 'Teknisk vedligeholdelse',
528
-	'titre_admin_vider' => 'Teknisk vedligeholdelse',
529
-	'titre_cadre_afficher_article' => 'Vis artikler som er',
530
-	'titre_cadre_afficher_traductions' => 'Vis oversættelsesstatus for følgende sprog:',
531
-	'titre_cadre_ajouter_auteur' => 'TILFØJ FORFATTER:',
532
-	'titre_cadre_interieur_rubrique' => 'I afsnit',
533
-	'titre_cadre_numero_auteur' => 'FORFATTER NUMMER',
534
-	'titre_cadre_signature_obligatoire' => '<b>Underskrift</b> [Obligatorisk]<br />',
535
-	'titre_config_fonctions' => 'Konfigurering af webstedet',
536
-	'titre_configuration' => 'Konfigurering af webstedet',
537
-	'titre_connexion_ldap' => 'Indstillinger: <b>Din LDAP forbindelse</b>',
538
-	'titre_groupe_mots' => 'NØGLEORDSGRUPPE:',
539
-	'titre_langue_article' => 'ARTIKLENS SPROG', # MODIF
540
-	'titre_langue_rubrique' => 'SPROGAFSNIT', # MODIF
541
-	'titre_langue_trad_article' => 'ARTIKLENS SPROG OG OVERSÆTTELSER',
542
-	'titre_les_articles' => 'ARTIKLER',
543
-	'titre_naviguer_dans_le_site' => 'Gennemse webstedet...',
544
-	'titre_nouvelle_rubrique' => 'Nyt afsnit',
545
-	'titre_numero_rubrique' => 'AFSNITSNUMMER:',
546
-	'titre_page_articles_edit' => 'Ret: @titre@',
547
-	'titre_page_articles_page' => 'Artikler',
548
-	'titre_page_articles_tous' => 'Hele webstedet',
549
-	'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
550
-	'titre_page_config_contenu' => 'Webstedskonfigurering',
551
-	'titre_page_delete_all' => 'total og uigenkaldelig sletning',
552
-	'titre_page_recherche' => 'Søgeresultater @recherche@',
553
-	'titre_page_statistiques_referers' => 'Statistik (indkommende links)',
554
-	'titre_page_upgrade' => 'SPIP opgradering',
555
-	'titre_publication_articles_post_dates' => 'Offentliggørelse af fremdaterede artikler',
556
-	'titre_reparation' => 'Reparer',
557
-	'titre_suivi_petition' => 'Opfølgning på appeller',
558
-	'trad_article_traduction' => 'Alle udgaver af denne artikel :',
559
-	'trad_delier' => 'Afbryd forbindelsen mellem denne artikel og oversættelserne', # MODIF
560
-	'trad_lier' => 'Denne artikel er en oversættelse af artikel nummer :',
561
-	'trad_new' => 'Lav en ny oversættelse af denne artikel' # MODIF
525
+    'texte_vide' => 'tom',
526
+    'texte_vider_cache' => 'Tøm cachen',
527
+    'titre_admin_tech' => 'Teknisk vedligeholdelse',
528
+    'titre_admin_vider' => 'Teknisk vedligeholdelse',
529
+    'titre_cadre_afficher_article' => 'Vis artikler som er',
530
+    'titre_cadre_afficher_traductions' => 'Vis oversættelsesstatus for følgende sprog:',
531
+    'titre_cadre_ajouter_auteur' => 'TILFØJ FORFATTER:',
532
+    'titre_cadre_interieur_rubrique' => 'I afsnit',
533
+    'titre_cadre_numero_auteur' => 'FORFATTER NUMMER',
534
+    'titre_cadre_signature_obligatoire' => '<b>Underskrift</b> [Obligatorisk]<br />',
535
+    'titre_config_fonctions' => 'Konfigurering af webstedet',
536
+    'titre_configuration' => 'Konfigurering af webstedet',
537
+    'titre_connexion_ldap' => 'Indstillinger: <b>Din LDAP forbindelse</b>',
538
+    'titre_groupe_mots' => 'NØGLEORDSGRUPPE:',
539
+    'titre_langue_article' => 'ARTIKLENS SPROG', # MODIF
540
+    'titre_langue_rubrique' => 'SPROGAFSNIT', # MODIF
541
+    'titre_langue_trad_article' => 'ARTIKLENS SPROG OG OVERSÆTTELSER',
542
+    'titre_les_articles' => 'ARTIKLER',
543
+    'titre_naviguer_dans_le_site' => 'Gennemse webstedet...',
544
+    'titre_nouvelle_rubrique' => 'Nyt afsnit',
545
+    'titre_numero_rubrique' => 'AFSNITSNUMMER:',
546
+    'titre_page_articles_edit' => 'Ret: @titre@',
547
+    'titre_page_articles_page' => 'Artikler',
548
+    'titre_page_articles_tous' => 'Hele webstedet',
549
+    'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
550
+    'titre_page_config_contenu' => 'Webstedskonfigurering',
551
+    'titre_page_delete_all' => 'total og uigenkaldelig sletning',
552
+    'titre_page_recherche' => 'Søgeresultater @recherche@',
553
+    'titre_page_statistiques_referers' => 'Statistik (indkommende links)',
554
+    'titre_page_upgrade' => 'SPIP opgradering',
555
+    'titre_publication_articles_post_dates' => 'Offentliggørelse af fremdaterede artikler',
556
+    'titre_reparation' => 'Reparer',
557
+    'titre_suivi_petition' => 'Opfølgning på appeller',
558
+    'trad_article_traduction' => 'Alle udgaver af denne artikel :',
559
+    'trad_delier' => 'Afbryd forbindelsen mellem denne artikel og oversættelserne', # MODIF
560
+    'trad_lier' => 'Denne artikel er en oversættelse af artikel nummer :',
561
+    'trad_new' => 'Lav en ny oversættelse af denne artikel' # MODIF
562 562
 );
Please login to merge, or discard this patch.
ecrire/lang/ecrire_ay.php 1 patch
Indentation   +190 added lines, -190 removed lines patch added patch discarded remove patch
@@ -4,211 +4,211 @@
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'activer_plugin' => 'Plugin uk naktayaña
12
+    // A
13
+    'activer_plugin' => 'Plugin uk naktayaña
14 14
 ',
15
-	'aide_non_disponible' => 'Aka yanapa naktatxa janiw aka arunx wakitakiti.',
16
-	'auteur' => 'Qillqiri:',
17
-	'avis_acces_interdit' => 'Mantawx jark’ata.',
18
-	'avis_article_modifie' => 'Amuyam @nom_auteur_modif@ aka qillqatax irnaqataw @date_diff@ ninkharata.',
19
-	'avis_aucun_resultat' => 'Janiw askichat utjkiti.
15
+    'aide_non_disponible' => 'Aka yanapa naktatxa janiw aka arunx wakitakiti.',
16
+    'auteur' => 'Qillqiri:',
17
+    'avis_acces_interdit' => 'Mantawx jark’ata.',
18
+    'avis_article_modifie' => 'Amuyam @nom_auteur_modif@ aka qillqatax irnaqataw @date_diff@ ninkharata.',
19
+    'avis_aucun_resultat' => 'Janiw askichat utjkiti.
20 20
 ',
21
-	'avis_chemin_invalide_1' => 'Thakhix ajllita',
22
-	'avis_chemin_invalide_2' => 'Jan jamakiw iyaw satakiti. Nayrt’ir laphi uñnaqar kutt’am ukatsti jikit yatiyawinak qhanstayam.',
23
-	'avis_connexion_echec_1' => 'Chinuwix jalanuqirirux janiw walt’kiti MySQL.',
24
-	'avis_connexion_echec_2' => 'Arkir laphi uñnaqar kutt’am ukatsti jikit yatiyawinaka mayamp uñjam.',
25
-	'avis_connexion_echec_3' => '&lt;b&gt;Amuyam:&lt;/b&gt; Walja jalanuqirinakana, munasiwa &lt;b&gt;mayiña&lt;/b&gt; mantawitx naktata yatqalltawiru MySQL janir apnaqasa. Janitix chinusiñ puyrktaxa mayampi uñjam lartax ukja.',
26
-	'avis_connexion_ldap_echec_1' => 'Jalanuqirirux chinuwi ukaxa LDAP janiw walt’kiti.',
27
-	'avis_connexion_ldap_echec_2' => 'Nayrir laphi uñnaqar kutt’am ukatsti jikit yatiyawinak qhanstayam.',
28
-	'avis_connexion_ldap_echec_3' => 'Mayakipawjam, askichir ukax jan apnaqamti LDAP apnaqirinak apayaniñataki.',
29
-	'avis_deplacement_rubrique' => '¡AMUYAM! Aka t’aqan utjiwa @contient_breves@ breve@scb@. Janitix yäqtaxa,  iyaw sat casilla uk naktayam.',
30
-	'avis_erreur_connexion_mysql' => 'Chinuw pantjata MySQL',
31
-	'avis_espace_interdit' => '<b>Ch’usawx jark’ata</b> <div>SPIP ukax uchantataxiwa</div>',
32
-	'avis_lecture_noms_bases_1' => 'Uchantat pirwa yatiyawinakatxa uchantir prugramaxa janiw liykiti.',
33
-	'avis_lecture_noms_bases_3' => 'Payir lurawinxa, inas mä pirwa apnaqiri sutimampi apnaqasispa:',
34
-	'avis_non_acces_page' => 'Aka laphi uñnaqarux janiw mantañaniktati.',
35
-	'avis_operation_echec' => 'Lurawix janiw walt’kiti.',
36
-	'avis_operation_impossible' => 'Lurawix janipuni',
37
-	'avis_suppression_base' => '¡AMUYAM, apaqat yatiyawinakax janiw askichaskaspati!',
21
+    'avis_chemin_invalide_1' => 'Thakhix ajllita',
22
+    'avis_chemin_invalide_2' => 'Jan jamakiw iyaw satakiti. Nayrt’ir laphi uñnaqar kutt’am ukatsti jikit yatiyawinak qhanstayam.',
23
+    'avis_connexion_echec_1' => 'Chinuwix jalanuqirirux janiw walt’kiti MySQL.',
24
+    'avis_connexion_echec_2' => 'Arkir laphi uñnaqar kutt’am ukatsti jikit yatiyawinaka mayamp uñjam.',
25
+    'avis_connexion_echec_3' => '&lt;b&gt;Amuyam:&lt;/b&gt; Walja jalanuqirinakana, munasiwa &lt;b&gt;mayiña&lt;/b&gt; mantawitx naktata yatqalltawiru MySQL janir apnaqasa. Janitix chinusiñ puyrktaxa mayampi uñjam lartax ukja.',
26
+    'avis_connexion_ldap_echec_1' => 'Jalanuqirirux chinuwi ukaxa LDAP janiw walt’kiti.',
27
+    'avis_connexion_ldap_echec_2' => 'Nayrir laphi uñnaqar kutt’am ukatsti jikit yatiyawinak qhanstayam.',
28
+    'avis_connexion_ldap_echec_3' => 'Mayakipawjam, askichir ukax jan apnaqamti LDAP apnaqirinak apayaniñataki.',
29
+    'avis_deplacement_rubrique' => '¡AMUYAM! Aka t’aqan utjiwa @contient_breves@ breve@scb@. Janitix yäqtaxa,  iyaw sat casilla uk naktayam.',
30
+    'avis_erreur_connexion_mysql' => 'Chinuw pantjata MySQL',
31
+    'avis_espace_interdit' => '<b>Ch’usawx jark’ata</b> <div>SPIP ukax uchantataxiwa</div>',
32
+    'avis_lecture_noms_bases_1' => 'Uchantat pirwa yatiyawinakatxa uchantir prugramaxa janiw liykiti.',
33
+    'avis_lecture_noms_bases_3' => 'Payir lurawinxa, inas mä pirwa apnaqiri sutimampi apnaqasispa:',
34
+    'avis_non_acces_page' => 'Aka laphi uñnaqarux janiw mantañaniktati.',
35
+    'avis_operation_echec' => 'Lurawix janiw walt’kiti.',
36
+    'avis_operation_impossible' => 'Lurawix janipuni',
37
+    'avis_suppression_base' => '¡AMUYAM, apaqat yatiyawinakax janiw askichaskaspati!',
38 38
 
39
-	// B
40
-	'bouton_acces_ldap' => 'Mä mantaw yapaña LDAP',
41
-	'bouton_ajouter' => 'Yapaña',
42
-	'bouton_annuler' => 'Jiwt’ayaña',
43
-	'bouton_demande_publication' => 'Aka qillqat yatiyañ mayiña',
44
-	'bouton_desactive_tout' => 'Taqpach jiwt’ayaña',
45
-	'bouton_effacer_tout' => '¡Taqpach chhaqhayaña!',
46
-	'bouton_envoyer_message' => 'Qhananchat yatiyaw: apayaña',
47
-	'bouton_modifier' => 'Mayjachaña',
48
-	'bouton_radio_afficher' => 'Uñachayaña',
49
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Chint’at tanta qillqirinakan uñstaña',
50
-	'bouton_radio_envoi_annonces_adresse' => 'Yatiyawinak utjawir apayaña:',
51
-	'bouton_radio_envoi_liste_nouveautes' => 'Machaq tanta yatiyawinak apayaña',
52
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Tanta qillqirinakan jan uñstaña',
53
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Yatiyawinak qhanstat jan apayaña',
54
-	'bouton_redirection' => 'Irpxatawi',
55
-	'bouton_relancer_installation' => 'Mayamp uchantaw yatiyaña',
56
-	'bouton_suivant' => 'Jutiri',
57
-	'bouton_tenter_recuperation' => 'Askichañ yant’aña',
58
-	'bouton_test_proxy' => 'proxy uk yant’aña',
59
-	'bouton_vider_cache' => 'caché uk ch’usachaña',
39
+    // B
40
+    'bouton_acces_ldap' => 'Mä mantaw yapaña LDAP',
41
+    'bouton_ajouter' => 'Yapaña',
42
+    'bouton_annuler' => 'Jiwt’ayaña',
43
+    'bouton_demande_publication' => 'Aka qillqat yatiyañ mayiña',
44
+    'bouton_desactive_tout' => 'Taqpach jiwt’ayaña',
45
+    'bouton_effacer_tout' => '¡Taqpach chhaqhayaña!',
46
+    'bouton_envoyer_message' => 'Qhananchat yatiyaw: apayaña',
47
+    'bouton_modifier' => 'Mayjachaña',
48
+    'bouton_radio_afficher' => 'Uñachayaña',
49
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Chint’at tanta qillqirinakan uñstaña',
50
+    'bouton_radio_envoi_annonces_adresse' => 'Yatiyawinak utjawir apayaña:',
51
+    'bouton_radio_envoi_liste_nouveautes' => 'Machaq tanta yatiyawinak apayaña',
52
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Tanta qillqirinakan jan uñstaña',
53
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Yatiyawinak qhanstat jan apayaña',
54
+    'bouton_redirection' => 'Irpxatawi',
55
+    'bouton_relancer_installation' => 'Mayamp uchantaw yatiyaña',
56
+    'bouton_suivant' => 'Jutiri',
57
+    'bouton_tenter_recuperation' => 'Askichañ yant’aña',
58
+    'bouton_test_proxy' => 'proxy uk yant’aña',
59
+    'bouton_vider_cache' => 'caché uk ch’usachaña',
60 60
 
61
-	// C
62
-	'cache_modifiable_webmestre' => 'Aka amuykipawix mayxt’ataspaw webmistress qamawit ukata.',
61
+    // C
62
+    'cache_modifiable_webmestre' => 'Aka amuykipawix mayxt’ataspaw webmistress qamawit ukata.',
63 63
 
64
-	// D
65
-	'date_mot_heures' => 'urasa
64
+    // D
65
+    'date_mot_heures' => 'urasa
66 66
 ',
67 67
 
68
-	// E
69
-	'email' => 'aruskipayiri',
70
-	'email_2' => 'aruskipayiri:
68
+    // E
69
+    'email' => 'aruskipayiri',
70
+    'email_2' => 'aruskipayiri:
71 71
 ',
72
-	'entree_adresse_annuaire' => 'Marpachat utjawi',
73
-	'entree_adresse_email' => 'Aruskipayirima',
74
-	'entree_base_donnee_1' => 'Pirwat yatiyawinakaxa utjawi',
75
-	'entree_biographie' => 'Mä juk’a jakawipat qillqa, juk’a arunakampi...',
76
-	'entree_chemin_acces' => '<b>Mantaña</b> mantañ thakhixa:',
77
-	'entree_cle_pgp' => 'Impt’atama PGP',
78
-	'entree_contenu_rubrique' => '(T’aqan utjawipa, qawqha arunakampi)',
79
-	'entree_identifiants_connexion' => 'Chinuw uñacht’ayirinakama...',
80
-	'entree_informations_connexion_ldap' => 'Aka phuqañ laphina yatiyawinak conexión ukata jach’a q’ipimaru LDAP. Uka yatiyawinakxa yatiyanitamwa apnaqir apnaqawita jan ukjax red ukata',
81
-	'entree_infos_perso' => '¿Khititasa?',
82
-	'entree_interieur_rubrique' => 'T’aqata maqhana...',
83
-	'entree_liens_sites' => '<b>Chinu jach’a sawu </b>(aytata, qamaw tumpañataki, ...)',
84
-	'entree_login' => 'Sutichatama',
85
-	'entree_login_connexion_1' => 'Chinu uñacht’ayirima',
86
-	'entree_mot_passe' => 'Imt’awima',
87
-	'entree_mot_passe_1' => 'Chinu imt’awima',
88
-	'entree_mot_passe_2' => '(Awisax FTP imt’atamar ukankiwa ukatsti awisax ch’usak jayti)',
89
-	'entree_nom_fichier' => 'K’ipit sutipa uk uchantaña @texte_compresse@:',
90
-	'entree_nom_pseudo' => 'Sutima jan ukax sutinchama',
91
-	'entree_nom_pseudo_1' => 'Sutima jan ukax sutinchama',
92
-	'entree_nom_site' => 'Qamawiman sutipa',
93
-	'entree_nouveau_passe' => 'Machaq imt’awima',
94
-	'entree_passe_ldap' => 'Imt’awima',
95
-	'entree_port_annuaire' => 'Marpachat thakhin jakhu',
96
-	'entree_signature' => 'Iyawsa',
97
-	'entree_titre_obligatoire' => '<b>Sutinchata</b> [Obligatorio]<br />',
98
-	'entree_url' => 'Utjawi(URL) qamawimata',
99
-	'erreur_plugin_fichier_absent' => 'Jan utjaw q’ipi
72
+    'entree_adresse_annuaire' => 'Marpachat utjawi',
73
+    'entree_adresse_email' => 'Aruskipayirima',
74
+    'entree_base_donnee_1' => 'Pirwat yatiyawinakaxa utjawi',
75
+    'entree_biographie' => 'Mä juk’a jakawipat qillqa, juk’a arunakampi...',
76
+    'entree_chemin_acces' => '<b>Mantaña</b> mantañ thakhixa:',
77
+    'entree_cle_pgp' => 'Impt’atama PGP',
78
+    'entree_contenu_rubrique' => '(T’aqan utjawipa, qawqha arunakampi)',
79
+    'entree_identifiants_connexion' => 'Chinuw uñacht’ayirinakama...',
80
+    'entree_informations_connexion_ldap' => 'Aka phuqañ laphina yatiyawinak conexión ukata jach’a q’ipimaru LDAP. Uka yatiyawinakxa yatiyanitamwa apnaqir apnaqawita jan ukjax red ukata',
81
+    'entree_infos_perso' => '¿Khititasa?',
82
+    'entree_interieur_rubrique' => 'T’aqata maqhana...',
83
+    'entree_liens_sites' => '<b>Chinu jach’a sawu </b>(aytata, qamaw tumpañataki, ...)',
84
+    'entree_login' => 'Sutichatama',
85
+    'entree_login_connexion_1' => 'Chinu uñacht’ayirima',
86
+    'entree_mot_passe' => 'Imt’awima',
87
+    'entree_mot_passe_1' => 'Chinu imt’awima',
88
+    'entree_mot_passe_2' => '(Awisax FTP imt’atamar ukankiwa ukatsti awisax ch’usak jayti)',
89
+    'entree_nom_fichier' => 'K’ipit sutipa uk uchantaña @texte_compresse@:',
90
+    'entree_nom_pseudo' => 'Sutima jan ukax sutinchama',
91
+    'entree_nom_pseudo_1' => 'Sutima jan ukax sutinchama',
92
+    'entree_nom_site' => 'Qamawiman sutipa',
93
+    'entree_nouveau_passe' => 'Machaq imt’awima',
94
+    'entree_passe_ldap' => 'Imt’awima',
95
+    'entree_port_annuaire' => 'Marpachat thakhin jakhu',
96
+    'entree_signature' => 'Iyawsa',
97
+    'entree_titre_obligatoire' => '<b>Sutinchata</b> [Obligatorio]<br />',
98
+    'entree_url' => 'Utjawi(URL) qamawimata',
99
+    'erreur_plugin_fichier_absent' => 'Jan utjaw q’ipi
100 100
 ',
101
-	'erreur_plugin_fichier_def_absent' => 'Qhanstayat q’ipix janiw utjkiti',
102
-	'erreur_plugin_nom_fonction_interdit' => 'Lurt’awit sutix jark’ata',
103
-	'erreur_plugin_nom_manquant' => 'Jan utjawi plugin ukan sutipa',
104
-	'erreur_plugin_prefix_manquant' => 'Sutinakat ch’usawj pluguin ukat jan qhanstata',
105
-	'erreur_plugin_tag_plugin_absent' => 'Janiw utjkiti &lt;plugin&gt; qhanstayawin q’ipita',
106
-	'erreur_plugin_version_manquant' => 'Pluguin ukat uñjata jan utjkiti',
101
+    'erreur_plugin_fichier_def_absent' => 'Qhanstayat q’ipix janiw utjkiti',
102
+    'erreur_plugin_nom_fonction_interdit' => 'Lurt’awit sutix jark’ata',
103
+    'erreur_plugin_nom_manquant' => 'Jan utjawi plugin ukan sutipa',
104
+    'erreur_plugin_prefix_manquant' => 'Sutinakat ch’usawj pluguin ukat jan qhanstata',
105
+    'erreur_plugin_tag_plugin_absent' => 'Janiw utjkiti &lt;plugin&gt; qhanstayawin q’ipita',
106
+    'erreur_plugin_version_manquant' => 'Pluguin ukat uñjata jan utjkiti',
107 107
 
108
-	// I
109
-	'ical_info1' => 'Aka qamawinxa kunayman lurawinak chinusiñataki utji qamaw utjawipampi',
110
-	'ical_info2' => 'Aka taqpach lurawinakxat juk’amp yatxatañatakix, yatxatañatakix jan pächasimti <a href="@spipnet@">illqanakawi</a>.', # MODIF
111
-	'ical_info_calendrier' => 'Pä pachachimpuw utjtam. Mayirix qamawit mä laphi uñnaqawa kunanti taqpach yatiyat qillqatank yatiyi: jumakiw uñjtax uka mä suti imt’awi ukata, ukatxa mayjt’ayasmaw kuna pachtix munktax ukja imt’awim mayjt’ayasa.',
112
-	'ical_methode_http' => 'Apaqaña',
113
-	'ical_methode_webcal' => 'Kikipawi (webcal://)', # MODIF
114
-	'ical_texte_prive' => 'Aka sapa maynit pacha chimpuxa, aka qamawit jark’ata lurawinak yatiytam (lurawinaka ukatsti sapa maynit aytatanaka, qillqatanaka ukatsti jisk’aptat amtanaka...)',
115
-	'ical_texte_public' => 'Aka pacha chimpux uñchukiytam qamawit lurawinaka (qillqatanak ukatsti jisk’aptatanak yatiyata).',
116
-	'ical_texte_rss' => 'Machaq yatiyawinak aka qamawitxa apxasismaw kawkir q’ipinak liyt’irimpi XML/RSS (Rich Site Summary) utt’ayataru. Ukhamaraki SPIP ukax liyt’aspaw machaq yatiyat yatiyawinaka yaqha qamawinakana kawkinti turkakipaw utt’ayatampi lurapxi (apxasit qamawinaka). ',
117
-	'ical_titre_js' => 'Javascript',
118
-	'ical_titre_mailing' => 'Aruskipayirit tanta',
119
-	'ical_titre_rss' => 'Apxasit q’ipinaka',
120
-	'icone_activer_cookie' => '“Cookie” uk naktayaña yatiyawinakata',
121
-	'icone_admin_plugin' => 'Pluguin ukanakat apnaqawi',
122
-	'icone_afficher_auteurs' => 'Qillqirinaka uñachayaña',
123
-	'icone_afficher_visiteurs' => 'Tumpirinaka uñachayaña',
124
-	'icone_arret_discussion' => 'Aka aruskipawin jan mayamp arst’añati',
125
-	'icone_calendrier' => 'Pachachimpu',
126
-	'icone_creer_auteur' => 'Mä machaq qillqiri uñstayaña ukatsti aka qillqatar mayacht’aña',
127
-	'icone_creer_rubrique_2' => 'Mä machaq t’aqa uñstayaña',
128
-	'icone_modifier_article' => 'Aka qillqata mayjt’ayaña',
129
-	'icone_modifier_rubrique' => 'Aka t’aqa mayjt’ayaña',
130
-	'icone_retour' => 'Kutiña',
131
-	'icone_retour_article' => 'Qillqatar kutiña',
132
-	'icone_supprimer_cookie' => '\\&quot;Cookie\\&quot; uk apaqaña yatiyawinakata ',
133
-	'icone_supprimer_rubrique' => 'Aka t’aqa a paqayaña',
134
-	'icone_supprimer_signature' => 'Aka iyawsa apaqaña',
135
-	'icone_valider_signature' => 'Aka iyaws iyaw saña',
136
-	'image_administrer_rubrique' => 'Aka t’aqa apnaqasmawa',
137
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
138
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
139
-	'info_1_article' => '1 qillqata',
140
-	'info_administrateur' => 'Apnaqiri',
141
-	'info_administrateur_1' => 'Apnaqiri',
142
-	'info_administrateur_2' => 'Qamawita (<i>amuyump luram</i>)',
143
-	'info_administrateur_site_02' => 'Aka chinunx limt’am',
144
-	'info_administrateurs' => 'Apnaqirinaka',
145
-	'info_administrer_rubrique' => 'Aka t’aqxa apnaqasmawa',
146
-	'info_adresse' => 'utjawiru:',
147
-	'info_adresse_url' => 'Utjawi (URL) jach’a qamaw utata',
148
-	'info_aide_en_ligne' => 'SPIP naktatat yanapa',
149
-	'info_ajouter_rubrique' => 'Apnaqañatakix yaqha t’aqa yapaña',
150
-	'info_annonce_nouveautes' => 'Machaq yatiyawinaka yatiyaña',
151
-	'info_article' => 'qillqata
108
+    // I
109
+    'ical_info1' => 'Aka qamawinxa kunayman lurawinak chinusiñataki utji qamaw utjawipampi',
110
+    'ical_info2' => 'Aka taqpach lurawinakxat juk’amp yatxatañatakix, yatxatañatakix jan pächasimti <a href="@spipnet@">illqanakawi</a>.', # MODIF
111
+    'ical_info_calendrier' => 'Pä pachachimpuw utjtam. Mayirix qamawit mä laphi uñnaqawa kunanti taqpach yatiyat qillqatank yatiyi: jumakiw uñjtax uka mä suti imt’awi ukata, ukatxa mayjt’ayasmaw kuna pachtix munktax ukja imt’awim mayjt’ayasa.',
112
+    'ical_methode_http' => 'Apaqaña',
113
+    'ical_methode_webcal' => 'Kikipawi (webcal://)', # MODIF
114
+    'ical_texte_prive' => 'Aka sapa maynit pacha chimpuxa, aka qamawit jark’ata lurawinak yatiytam (lurawinaka ukatsti sapa maynit aytatanaka, qillqatanaka ukatsti jisk’aptat amtanaka...)',
115
+    'ical_texte_public' => 'Aka pacha chimpux uñchukiytam qamawit lurawinaka (qillqatanak ukatsti jisk’aptatanak yatiyata).',
116
+    'ical_texte_rss' => 'Machaq yatiyawinak aka qamawitxa apxasismaw kawkir q’ipinak liyt’irimpi XML/RSS (Rich Site Summary) utt’ayataru. Ukhamaraki SPIP ukax liyt’aspaw machaq yatiyat yatiyawinaka yaqha qamawinakana kawkinti turkakipaw utt’ayatampi lurapxi (apxasit qamawinaka). ',
117
+    'ical_titre_js' => 'Javascript',
118
+    'ical_titre_mailing' => 'Aruskipayirit tanta',
119
+    'ical_titre_rss' => 'Apxasit q’ipinaka',
120
+    'icone_activer_cookie' => '“Cookie” uk naktayaña yatiyawinakata',
121
+    'icone_admin_plugin' => 'Pluguin ukanakat apnaqawi',
122
+    'icone_afficher_auteurs' => 'Qillqirinaka uñachayaña',
123
+    'icone_afficher_visiteurs' => 'Tumpirinaka uñachayaña',
124
+    'icone_arret_discussion' => 'Aka aruskipawin jan mayamp arst’añati',
125
+    'icone_calendrier' => 'Pachachimpu',
126
+    'icone_creer_auteur' => 'Mä machaq qillqiri uñstayaña ukatsti aka qillqatar mayacht’aña',
127
+    'icone_creer_rubrique_2' => 'Mä machaq t’aqa uñstayaña',
128
+    'icone_modifier_article' => 'Aka qillqata mayjt’ayaña',
129
+    'icone_modifier_rubrique' => 'Aka t’aqa mayjt’ayaña',
130
+    'icone_retour' => 'Kutiña',
131
+    'icone_retour_article' => 'Qillqatar kutiña',
132
+    'icone_supprimer_cookie' => '\\&quot;Cookie\\&quot; uk apaqaña yatiyawinakata ',
133
+    'icone_supprimer_rubrique' => 'Aka t’aqa a paqayaña',
134
+    'icone_supprimer_signature' => 'Aka iyawsa apaqaña',
135
+    'icone_valider_signature' => 'Aka iyaws iyaw saña',
136
+    'image_administrer_rubrique' => 'Aka t’aqa apnaqasmawa',
137
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
138
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
139
+    'info_1_article' => '1 qillqata',
140
+    'info_administrateur' => 'Apnaqiri',
141
+    'info_administrateur_1' => 'Apnaqiri',
142
+    'info_administrateur_2' => 'Qamawita (<i>amuyump luram</i>)',
143
+    'info_administrateur_site_02' => 'Aka chinunx limt’am',
144
+    'info_administrateurs' => 'Apnaqirinaka',
145
+    'info_administrer_rubrique' => 'Aka t’aqxa apnaqasmawa',
146
+    'info_adresse' => 'utjawiru:',
147
+    'info_adresse_url' => 'Utjawi (URL) jach’a qamaw utata',
148
+    'info_aide_en_ligne' => 'SPIP naktatat yanapa',
149
+    'info_ajouter_rubrique' => 'Apnaqañatakix yaqha t’aqa yapaña',
150
+    'info_annonce_nouveautes' => 'Machaq yatiyawinaka yatiyaña',
151
+    'info_article' => 'qillqata
152 152
 ',
153
-	'info_article_2' => 'qillqatanaka',
154
-	'info_article_a_paraitre' => 'Qillqatanak jutir urumpi yatiyataru',
155
-	'info_articles_02' => 'qillqatanaka',
156
-	'info_articles_2' => 'Qillqatanaka',
157
-	'info_articles_auteur' => 'Aka qillqirit qillqatanaka',
158
-	'info_articles_trouves' => 'Qillqatanak jikita',
159
-	'info_attente_validation' => 'Qillqatanakax iyaw sañataki suyaski',
160
-	'info_aujourdhui' => 'jichhüru:',
161
-	'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', # MODIF
162
-	'info_auteurs' => 'Qillqirinaka',
163
-	'info_auteurs_par_tri' => 'Qillqirinaka@partri@',
164
-	'info_auteurs_trouves' => 'Qillqirinaka jikita',
165
-	'info_authentification_externe' => 'Anqax chiqpach siriwi',
166
-	'info_avertissement' => 'Amuyam',
167
-	'info_base_installee' => 'Ch’akha ch’akha pirwa yatiyawinakamatxa uchantataxiwa',
168
-	'info_chapeau' => 'Qalltawi',
169
-	'info_chapeau_2' => 'Qalltawi:',
170
-	'info_chemin_acces_1' => 'Ajlliñatakiwa:  &lt;b&gt;&lt;/b&gt;mantañ thakhita jach’a q’ipina&lt;/b&gt;',
171
-	'info_chemin_acces_annuaire' => 'Ajllañatakiwa:  &lt;b&gt;Mantañ thakhi jach’a q’ipina&lt;/b&gt;',
172
-	'info_choix_base' => 'Kimsir sarawi:',
173
-	'info_classement_1' => '° ukjaru @liste@',
174
-	'info_classement_2' => '° ukjaru @liste@ 
153
+    'info_article_2' => 'qillqatanaka',
154
+    'info_article_a_paraitre' => 'Qillqatanak jutir urumpi yatiyataru',
155
+    'info_articles_02' => 'qillqatanaka',
156
+    'info_articles_2' => 'Qillqatanaka',
157
+    'info_articles_auteur' => 'Aka qillqirit qillqatanaka',
158
+    'info_articles_trouves' => 'Qillqatanak jikita',
159
+    'info_attente_validation' => 'Qillqatanakax iyaw sañataki suyaski',
160
+    'info_aujourdhui' => 'jichhüru:',
161
+    'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', # MODIF
162
+    'info_auteurs' => 'Qillqirinaka',
163
+    'info_auteurs_par_tri' => 'Qillqirinaka@partri@',
164
+    'info_auteurs_trouves' => 'Qillqirinaka jikita',
165
+    'info_authentification_externe' => 'Anqax chiqpach siriwi',
166
+    'info_avertissement' => 'Amuyam',
167
+    'info_base_installee' => 'Ch’akha ch’akha pirwa yatiyawinakamatxa uchantataxiwa',
168
+    'info_chapeau' => 'Qalltawi',
169
+    'info_chapeau_2' => 'Qalltawi:',
170
+    'info_chemin_acces_1' => 'Ajlliñatakiwa:  &lt;b&gt;&lt;/b&gt;mantañ thakhita jach’a q’ipina&lt;/b&gt;',
171
+    'info_chemin_acces_annuaire' => 'Ajllañatakiwa:  &lt;b&gt;Mantañ thakhi jach’a q’ipina&lt;/b&gt;',
172
+    'info_choix_base' => 'Kimsir sarawi:',
173
+    'info_classement_1' => '° ukjaru @liste@',
174
+    'info_classement_2' => '° ukjaru @liste@ 
175 175
 ',
176
-	'info_code_acces' => '¡Mantañ chimpunakam jan armasimti!',
177
-	'info_config_suivi_explication' => 'Tanta aruskipayiriru aka qamawitxa qillqayasismaw. Aruskipayiritxa qillqatanakat yatiyawinak qatuqata ukatsti jisk’aptat amtatanak yatiyatawiru.',
178
-	'info_confirmer_passe' => 'Machaq imt’aw iyaw saña: ',
179
-	'info_connexion_base' => 'Payir sarawi: &lt;b&gt;chinuñ yant’awi base ukaru&lt;/b&gt;',
180
-	'info_connexion_ldap_ok' => 'LDAP chinuwix lurt’xiwa.</b><p> jutir sarawir sarantasmawa.</p>', # MODIF
181
-	'info_connexion_mysql' => 'Mayir sarawi: <b> MySQL chinuwima</b>',
182
-	'info_connexion_ok' => 'Chinuwix lurt’xiwa.',
183
-	'info_contact' => 'Jikxatata',
184
-	'info_contenu_articles' => 'Qillqatanakat utjawi',
185
-	'info_creation_paragraphe' => ' (Tanta amuyunak uñstayañatakix, ch’usa siqinak jaytam)', # MODIF
186
-	'info_creation_rubrique' => 'Janir qillqatanak qillt’asinxa, &lt;br /&gt; mä t’aqa uñstayañama.&lt;br /&gt;',
187
-	'info_creation_tables' => 'Pusir sarawi: &lt;b&gt;base ukat uyu uyunakat uñstayawi&lt;/b&gt; ',
188
-	'info_creer_base' => '&lt;b&gt;uñstayaña&lt;/b&gt; mä machaq yatiyawinak pirwa: ',
189
-	'info_dans_rubrique' => 'T’aqanxa...',
190
-	'info_date_publication_anterieure' => 'Nayrt’ir uru aka qillqawita',
191
-	'info_date_referencement' => 'APXASIW URU AKA QAMAWITA:',
192
-	'info_derniere_etape' => 'Qhipa sarawi: ¡tukuytanwa!',
193
-	'info_descriptif' => 'Uñt’ayawi:',
194
-	'info_discussion_cours' => 'Amuyt’awinakax lurasiskiw',
195
-	'info_ecrire_article' => 'Janir qillqatanak qillqasinxa, mä t’aqa uñstayañamawa.',
196
-	'info_email_envoi' => 'Apaw aruskipayirit utjawipa (ajlliñatakiwa)',
197
-	'info_email_webmestre' => 'Aruskipayirit utjawipa webmaster ukata (ajlliñatakiwa)', # MODIF
198
-	'info_envoi_email_automatique' => 'Aruskipayirinakat justup apayawi',
199
-	'info_envoyer_maintenant' => 'Jichhaki apayaña',
200
-	'info_etape_suivante' => 'Arkir sarawir sarantaña',
201
-	'info_etape_suivante_1' => 'Arkir sarawir sarantasmawa',
202
-	'info_etape_suivante_2' => 'Arkir sarawir sarantasmawa',
203
-	'info_exportation_base' => 'base ukax apsusispaw @archive@ uka tuqiru',
204
-	'info_facilite_suivi_activite' => 'Qillqa lurawit uñch’ukiw jasachañatakix, SPIP ukax aruskipayirit apayaspa, mä tanta qillqirinakar ukhama yatiyatawinakataki yatiyawinaka ukatak mayiwinaka, ukhamarak qillqatanakat iyaw sawi.', # MODIF
205
-	'info_fichiers_authent' => 'Chiqpach sirit q’ipinaka «.htpasswd» ',
206
-	'info_forums_abo_invites' => 'Qamawimax aruskipañawinakaniw qullqimp qillqatanakatakikiwa; Aka jach’a uta qamawinxa tumpirinakaru qillqayasiñataki jawthapiyi.',
207
-	'info_gauche_auteurs' => 'Akanxa taqpach qamawit qillqirinakaw uñsti. Kunjamaskis ukxa jisk’a saltan kulurapampiw   uñacht’ayi (apnaqiri = ch’uxña, qillqiri = q’illu).',
208
-	'info_gauche_auteurs_exterieurs' => 'Anqajankir qillqirinakax, qamawir jan mantañaniwa, mä laram jisk’a saltampiw uñacht’ayataski; mä wayaqamp chhaqayatakis.', # MODIF
209
-	'info_gauche_messagerie' => 'Yatiyawirix yatiyasiwa, amtayirinak uñstyaña yatiyaw tantaru kuns apaniñapataki jan ukjax yatiyawinak yatiyaña ( apnaqir qutu ukar mayachatakis ukjax)
176
+    'info_code_acces' => '¡Mantañ chimpunakam jan armasimti!',
177
+    'info_config_suivi_explication' => 'Tanta aruskipayiriru aka qamawitxa qillqayasismaw. Aruskipayiritxa qillqatanakat yatiyawinak qatuqata ukatsti jisk’aptat amtatanak yatiyatawiru.',
178
+    'info_confirmer_passe' => 'Machaq imt’aw iyaw saña: ',
179
+    'info_connexion_base' => 'Payir sarawi: &lt;b&gt;chinuñ yant’awi base ukaru&lt;/b&gt;',
180
+    'info_connexion_ldap_ok' => 'LDAP chinuwix lurt’xiwa.</b><p> jutir sarawir sarantasmawa.</p>', # MODIF
181
+    'info_connexion_mysql' => 'Mayir sarawi: <b> MySQL chinuwima</b>',
182
+    'info_connexion_ok' => 'Chinuwix lurt’xiwa.',
183
+    'info_contact' => 'Jikxatata',
184
+    'info_contenu_articles' => 'Qillqatanakat utjawi',
185
+    'info_creation_paragraphe' => ' (Tanta amuyunak uñstayañatakix, ch’usa siqinak jaytam)', # MODIF
186
+    'info_creation_rubrique' => 'Janir qillqatanak qillt’asinxa, &lt;br /&gt; mä t’aqa uñstayañama.&lt;br /&gt;',
187
+    'info_creation_tables' => 'Pusir sarawi: &lt;b&gt;base ukat uyu uyunakat uñstayawi&lt;/b&gt; ',
188
+    'info_creer_base' => '&lt;b&gt;uñstayaña&lt;/b&gt; mä machaq yatiyawinak pirwa: ',
189
+    'info_dans_rubrique' => 'T’aqanxa...',
190
+    'info_date_publication_anterieure' => 'Nayrt’ir uru aka qillqawita',
191
+    'info_date_referencement' => 'APXASIW URU AKA QAMAWITA:',
192
+    'info_derniere_etape' => 'Qhipa sarawi: ¡tukuytanwa!',
193
+    'info_descriptif' => 'Uñt’ayawi:',
194
+    'info_discussion_cours' => 'Amuyt’awinakax lurasiskiw',
195
+    'info_ecrire_article' => 'Janir qillqatanak qillqasinxa, mä t’aqa uñstayañamawa.',
196
+    'info_email_envoi' => 'Apaw aruskipayirit utjawipa (ajlliñatakiwa)',
197
+    'info_email_webmestre' => 'Aruskipayirit utjawipa webmaster ukata (ajlliñatakiwa)', # MODIF
198
+    'info_envoi_email_automatique' => 'Aruskipayirinakat justup apayawi',
199
+    'info_envoyer_maintenant' => 'Jichhaki apayaña',
200
+    'info_etape_suivante' => 'Arkir sarawir sarantaña',
201
+    'info_etape_suivante_1' => 'Arkir sarawir sarantasmawa',
202
+    'info_etape_suivante_2' => 'Arkir sarawir sarantasmawa',
203
+    'info_exportation_base' => 'base ukax apsusispaw @archive@ uka tuqiru',
204
+    'info_facilite_suivi_activite' => 'Qillqa lurawit uñch’ukiw jasachañatakix, SPIP ukax aruskipayirit apayaspa, mä tanta qillqirinakar ukhama yatiyatawinakataki yatiyawinaka ukatak mayiwinaka, ukhamarak qillqatanakat iyaw sawi.', # MODIF
205
+    'info_fichiers_authent' => 'Chiqpach sirit q’ipinaka «.htpasswd» ',
206
+    'info_forums_abo_invites' => 'Qamawimax aruskipañawinakaniw qullqimp qillqatanakatakikiwa; Aka jach’a uta qamawinxa tumpirinakaru qillqayasiñataki jawthapiyi.',
207
+    'info_gauche_auteurs' => 'Akanxa taqpach qamawit qillqirinakaw uñsti. Kunjamaskis ukxa jisk’a saltan kulurapampiw   uñacht’ayi (apnaqiri = ch’uxña, qillqiri = q’illu).',
208
+    'info_gauche_auteurs_exterieurs' => 'Anqajankir qillqirinakax, qamawir jan mantañaniwa, mä laram jisk’a saltampiw uñacht’ayataski; mä wayaqamp chhaqayatakis.', # MODIF
209
+    'info_gauche_messagerie' => 'Yatiyawirix yatiyasiwa, amtayirinak uñstyaña yatiyaw tantaru kuns apaniñapataki jan ukjax yatiyawinak yatiyaña ( apnaqir qutu ukar mayachatakis ukjax)
210 210
 ',
211
-	'info_gauche_statistiques_referers' => 'Aka Web qamawix tantanak uñicht’ayi &lt;i&gt;referers&lt;/i&gt;, qamawinakan chinunak utjkis ukhamarak juman qamawimar apapxi, masurutakiki ukhamarak jichhurutakiki; aka tantaxa sapa pä tunka urasanaka ch’usaru uskuña.',
212
-	'info_gauche_visiteurs_enregistres' => 'Akanxa jach’a qamaw utan qillqatanakakiw jikxatasi (aruskipañawinak qillqayasiyampi)',
213
-	'info_identification_publique' => 'Uñacht’ayawima...'
211
+    'info_gauche_statistiques_referers' => 'Aka Web qamawix tantanak uñicht’ayi &lt;i&gt;referers&lt;/i&gt;, qamawinakan chinunak utjkis ukhamarak juman qamawimar apapxi, masurutakiki ukhamarak jichhurutakiki; aka tantaxa sapa pä tunka urasanaka ch’usaru uskuña.',
212
+    'info_gauche_visiteurs_enregistres' => 'Akanxa jach’a qamaw utan qillqatanakakiw jikxatasi (aruskipañawinak qillqayasiyampi)',
213
+    'info_identification_publique' => 'Uñacht’ayawima...'
214 214
 );
Please login to merge, or discard this patch.