Completed
Push — master ( 3fe97a...7569f9 )
by cam
02:24
created
ecrire/public/composer.php 1 patch
Indentation   +765 added lines, -765 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
  **/
20 20
 
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	return;
22
+    return;
23 23
 }
24 24
 
25 25
 include_spip('inc/texte');
@@ -42,229 +42,229 @@  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') && _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') && _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
-			&& _request('var_mode_objet') == $nom
133
-			&& _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') && _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') && _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
+            && _request('var_mode_objet') == $nom
133
+            && _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') || !_VAR_NOCACHE) {
159
-		ecrire_fichier($phpfile, $code);
160
-	}
157
+    $code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
158
+    if (!defined('_VAR_NOCACHE') || !_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') && in_array(_VAR_MODE, ['recalcul', 'preview', 'debug'])
181
-		|| !@file_exists($skel)
182
-		|| (@file_exists($squelette) ? @filemtime($squelette) : 0) > ($date = @filemtime($skel))
183
-		|| $date_change > $date
184
-	);
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') && in_array(_VAR_MODE, ['recalcul', 'preview', 'debug'])
181
+        || !@file_exists($skel)
182
+        || (@file_exists($squelette) ? @filemtime($squelette) : 0) > ($date = @filemtime($skel))
183
+        || $date_change > $date
184
+    );
185 185
 }
186 186
 
187 187
 // Activer l'invalideur de session
188 188
 function invalideur_session(&$Cache, $code = null) {
189
-	$Cache['session'] = spip_session();
189
+    $Cache['session'] = spip_session();
190 190
 
191
-	return $code;
191
+    return $code;
192 192
 }
193 193
 
194 194
 
195 195
 function analyse_resultat_skel($nom, $cache, $corps, $source = '') {
196
-	static $filtres = [];
197
-	$headers = [];
198
-	$corps ??= '';
199
-
200
-	// Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
201
-	// note: on essaie d'attrapper aussi certains de ces entetes codes
202
-	// "a la main" dans les squelettes, mais evidemment sans exhaustivite
203
-	if (
204
-		stripos($corps, 'header') !== false
205
-		&& preg_match_all(
206
-			'/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
207
-			$corps,
208
-			$regs,
209
-			PREG_SET_ORDER
210
-		)
211
-	) {
212
-		foreach ($regs as $r) {
213
-			$corps = str_replace($r[0], '', $corps);
214
-			# $j = Content-Type, et pas content-TYPE.
215
-			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
216
-
217
-			if ($j == 'X-Spip-Filtre' && isset($headers[$j])) {
218
-				$headers[$j] .= '|' . $r[3];
219
-			} else {
220
-				$headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
221
-			}
222
-		}
223
-	}
224
-	// S'agit-il d'un resultat constant ou contenant du code php
225
-	$process_ins = (
226
-		!str_contains($corps, '<' . '?')
227
-		|| str_contains($corps, '<' . '?xml') && !str_contains(str_replace('<' . '?xml', '', $corps), '<' . '?')
228
-	)
229
-		? 'html'
230
-		: 'php';
231
-
232
-	$skel = [
233
-		'squelette' => $nom,
234
-		'source' => $source,
235
-		'process_ins' => $process_ins,
236
-		'invalideurs' => $cache,
237
-		'entetes' => $headers,
238
-		'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
239
-	];
240
-
241
-	// traiter #FILTRE{} et filtres
242
-	if (!isset($filtres[$nom])) {
243
-		$filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
244
-	}
245
-	$filtres_headers = [];
246
-	if (isset($headers['X-Spip-Filtre']) && strlen($headers['X-Spip-Filtre'])) {
247
-		$filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
248
-		unset($headers['X-Spip-Filtre']);
249
-	}
250
-	if ((is_countable($filtres[$nom]) ? count($filtres[$nom]) : 0) || count($filtres_headers)) {
251
-		include_spip('public/sandbox');
252
-		$corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
253
-
254
-		if ($process_ins == 'html') {
255
-			$skel['process_ins'] = (
256
-				!str_contains($corps, '<' . '?')
257
-				|| str_contains($corps, '<' . '?xml') && !str_contains(str_replace('<' . '?xml', '', $corps), '<' . '?')
258
-			)
259
-				? 'html'
260
-				: 'php';
261
-		}
262
-	}
263
-
264
-	$skel['entetes'] = $headers;
265
-	$skel['texte'] = $corps;
266
-
267
-	return $skel;
196
+    static $filtres = [];
197
+    $headers = [];
198
+    $corps ??= '';
199
+
200
+    // Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
201
+    // note: on essaie d'attrapper aussi certains de ces entetes codes
202
+    // "a la main" dans les squelettes, mais evidemment sans exhaustivite
203
+    if (
204
+        stripos($corps, 'header') !== false
205
+        && preg_match_all(
206
+            '/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
207
+            $corps,
208
+            $regs,
209
+            PREG_SET_ORDER
210
+        )
211
+    ) {
212
+        foreach ($regs as $r) {
213
+            $corps = str_replace($r[0], '', $corps);
214
+            # $j = Content-Type, et pas content-TYPE.
215
+            $j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
216
+
217
+            if ($j == 'X-Spip-Filtre' && isset($headers[$j])) {
218
+                $headers[$j] .= '|' . $r[3];
219
+            } else {
220
+                $headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
221
+            }
222
+        }
223
+    }
224
+    // S'agit-il d'un resultat constant ou contenant du code php
225
+    $process_ins = (
226
+        !str_contains($corps, '<' . '?')
227
+        || str_contains($corps, '<' . '?xml') && !str_contains(str_replace('<' . '?xml', '', $corps), '<' . '?')
228
+    )
229
+        ? 'html'
230
+        : 'php';
231
+
232
+    $skel = [
233
+        'squelette' => $nom,
234
+        'source' => $source,
235
+        'process_ins' => $process_ins,
236
+        'invalideurs' => $cache,
237
+        'entetes' => $headers,
238
+        'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
239
+    ];
240
+
241
+    // traiter #FILTRE{} et filtres
242
+    if (!isset($filtres[$nom])) {
243
+        $filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
244
+    }
245
+    $filtres_headers = [];
246
+    if (isset($headers['X-Spip-Filtre']) && strlen($headers['X-Spip-Filtre'])) {
247
+        $filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
248
+        unset($headers['X-Spip-Filtre']);
249
+    }
250
+    if ((is_countable($filtres[$nom]) ? count($filtres[$nom]) : 0) || count($filtres_headers)) {
251
+        include_spip('public/sandbox');
252
+        $corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
253
+
254
+        if ($process_ins == 'html') {
255
+            $skel['process_ins'] = (
256
+                !str_contains($corps, '<' . '?')
257
+                || str_contains($corps, '<' . '?xml') && !str_contains(str_replace('<' . '?xml', '', $corps), '<' . '?')
258
+            )
259
+                ? 'html'
260
+                : 'php';
261
+        }
262
+    }
263
+
264
+    $skel['entetes'] = $headers;
265
+    $skel['texte'] = $corps;
266
+
267
+    return $skel;
268 268
 }
269 269
 
270 270
 //
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
279 279
 if ($lang_select) lang_select();
280 280
 ?'
281
-	. '>');
281
+    . '>');
282 282
 
283 283
 /**
284 284
  * Synthétise une balise dynamique : crée l'appel à l'inclusion
@@ -298,35 +298,35 @@  discard block
 block discarded – undo
298 298
  *     Code PHP pour inclure le squelette de la balise dynamique
299 299
  **/
300 300
 function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) {
301
-	if (
302
-		!str_starts_with($file, '/')
303
-		// pas de lien symbolique sous Windows
304
-		&& !(stristr(PHP_OS, 'WIN') && str_contains($file, ':'))
305
-	) {
306
-		$file = './" . _DIR_RACINE . "' . $file;
307
-	}
308
-
309
-	$lang = $context_compil[4];
310
-	if (preg_match(',\W,', $lang)) {
311
-		$lang = '';
312
-	}
313
-
314
-	$args = array_map('argumenter_squelette', $args);
315
-	if (!empty($context_compil['appel_php_depuis_modele'])) {
316
-		$args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
317
-	}
318
-	$args = join(', ', $args);
319
-
320
-	$r = sprintf(
321
-		CODE_INCLURE_BALISE,
322
-		$file,
323
-		$lang,
324
-		$nom,
325
-		$args,
326
-		join(', ', array_map('_q', $context_compil))
327
-	);
328
-
329
-	return $r;
301
+    if (
302
+        !str_starts_with($file, '/')
303
+        // pas de lien symbolique sous Windows
304
+        && !(stristr(PHP_OS, 'WIN') && str_contains($file, ':'))
305
+    ) {
306
+        $file = './" . _DIR_RACINE . "' . $file;
307
+    }
308
+
309
+    $lang = $context_compil[4];
310
+    if (preg_match(',\W,', $lang)) {
311
+        $lang = '';
312
+    }
313
+
314
+    $args = array_map('argumenter_squelette', $args);
315
+    if (!empty($context_compil['appel_php_depuis_modele'])) {
316
+        $args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
317
+    }
318
+    $args = join(', ', $args);
319
+
320
+    $r = sprintf(
321
+        CODE_INCLURE_BALISE,
322
+        $file,
323
+        $lang,
324
+        $nom,
325
+        $args,
326
+        join(', ', array_map('_q', $context_compil))
327
+    );
328
+
329
+    return $r;
330 330
 }
331 331
 
332 332
 /**
@@ -344,18 +344,18 @@  discard block
 block discarded – undo
344 344
  **/
345 345
 function argumenter_squelette($v) {
346 346
 
347
-	if (is_object($v)) {
348
-		return var_export($v, true);
349
-	} elseif (!is_array($v)) {
350
-		return "'" . texte_script((string) $v) . "'";
351
-	} else {
352
-		$out = [];
353
-		foreach ($v as $k => $val) {
354
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
355
-		}
356
-
357
-		return 'array(' . join(', ', $out) . ')';
358
-	}
347
+    if (is_object($v)) {
348
+        return var_export($v, true);
349
+    } elseif (!is_array($v)) {
350
+        return "'" . texte_script((string) $v) . "'";
351
+    } else {
352
+        $out = [];
353
+        foreach ($v as $k => $val) {
354
+            $out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
355
+        }
356
+
357
+        return 'array(' . join(', ', $out) . ')';
358
+    }
359 359
 }
360 360
 
361 361
 /**
@@ -374,13 +374,13 @@  discard block
 block discarded – undo
374 374
  * @return string
375 375
  */
376 376
 function executer_balise_dynamique_dans_un_modele(...$args) {
377
-	if (test_espace_prive()) {
378
-		return executer_balise_dynamique(...$args);
379
-	}
380
-	else {
381
-		$str_args = base64_encode(serialize($args));
382
-		return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
383
-	}
377
+    if (test_espace_prive()) {
378
+        return executer_balise_dynamique(...$args);
379
+    }
380
+    else {
381
+        $str_args = base64_encode(serialize($args));
382
+        return '<?' . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?" . ">\n";
383
+    }
384 384
 }
385 385
 
386 386
 
@@ -411,87 +411,87 @@  discard block
 block discarded – undo
411 411
  *     Code PHP d'exécutant l'inclusion du squelette (ou texte) de la balise dynamique
412 412
  **/
413 413
 function executer_balise_dynamique($nom, $args, $context_compil) {
414
-	/** @var string Nom de la balise à charger (balise demandée ou balise générique) */
415
-	$nom_balise = $nom;
416
-	/** @var string Nom de la balise générique (si utilisée) */
417
-	$nom_balise_generique = '';
418
-
419
-	$appel_php_depuis_modele = false;
420
-	if (
421
-		is_array($context_compil)
422
-		&& !is_numeric($context_compil[3])
423
-		&& empty($context_compil[0])
424
-		&& empty($context_compil[1])
425
-		&& empty($context_compil[2])
426
-		&& empty($context_compil[3])
427
-	) {
428
-		$appel_php_depuis_modele = true;
429
-	}
430
-
431
-	if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
432
-		// Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
433
-		if ($balise_generique = chercher_balise_generique($nom)) {
434
-			// injecter en premier arg le nom de la balise
435
-			array_unshift($args, $nom);
436
-			$nom_balise_generique = $balise_generique['nom_generique'];
437
-			$fonction_balise = $balise_generique['fonction_generique'];
438
-			$nom_balise = $nom_balise_generique;
439
-		}
440
-		unset($balise_generique);
441
-	}
442
-
443
-	if (!$fonction_balise) {
444
-		$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
445
-		erreur_squelette($msg, $context_compil);
446
-
447
-		return '';
448
-	}
449
-
450
-	// retrouver le fichier qui a déclaré la fonction
451
-	// même si la fonction dynamique est déclarée dans un fichier de fonctions.
452
-	// Attention sous windows, getFileName() retourne un antislash.
453
-	$reflector = new ReflectionFunction($fonction_balise);
454
-	$file = str_replace('\\', '/', $reflector->getFileName());
455
-	if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
456
-		$file = substr($file, strlen(_ROOT_RACINE));
457
-	}
458
-
459
-	// Y a-t-il une fonction de traitement des arguments ?
460
-	$f = 'balise_' . $nom_balise . '_stat';
461
-
462
-	$r = !function_exists($f) ? $args : $f($args, $context_compil);
463
-
464
-	if (!is_array($r)) {
465
-		return $r;
466
-	}
467
-
468
-	// verifier que la fonction dyn est la,
469
-	// sinon se replier sur la generique si elle existe
470
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
471
-		if (
472
-			($balise_generique = chercher_balise_generique($nom))
473
-			&& ($nom_balise_generique = $balise_generique['nom_generique'])
474
-			&& ($file = include_spip('balise/' . strtolower($nom_balise_generique)))
475
-			&& function_exists('balise_' . $nom_balise_generique . '_dyn')
476
-		) {
477
-			// et lui injecter en premier arg le nom de la balise
478
-			array_unshift($r, $nom);
479
-			$nom_balise = $nom_balise_generique;
480
-			if (!_DIR_RESTREINT) {
481
-				$file = _DIR_RESTREINT_ABS . $file;
482
-			}
483
-		} else {
484
-			$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
485
-			erreur_squelette($msg, $context_compil);
486
-
487
-			return '';
488
-		}
489
-	}
490
-
491
-	if ($appel_php_depuis_modele) {
492
-		$context_compil['appel_php_depuis_modele'] = true;
493
-	}
494
-	return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
414
+    /** @var string Nom de la balise à charger (balise demandée ou balise générique) */
415
+    $nom_balise = $nom;
416
+    /** @var string Nom de la balise générique (si utilisée) */
417
+    $nom_balise_generique = '';
418
+
419
+    $appel_php_depuis_modele = false;
420
+    if (
421
+        is_array($context_compil)
422
+        && !is_numeric($context_compil[3])
423
+        && empty($context_compil[0])
424
+        && empty($context_compil[1])
425
+        && empty($context_compil[2])
426
+        && empty($context_compil[3])
427
+    ) {
428
+        $appel_php_depuis_modele = true;
429
+    }
430
+
431
+    if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
432
+        // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
433
+        if ($balise_generique = chercher_balise_generique($nom)) {
434
+            // injecter en premier arg le nom de la balise
435
+            array_unshift($args, $nom);
436
+            $nom_balise_generique = $balise_generique['nom_generique'];
437
+            $fonction_balise = $balise_generique['fonction_generique'];
438
+            $nom_balise = $nom_balise_generique;
439
+        }
440
+        unset($balise_generique);
441
+    }
442
+
443
+    if (!$fonction_balise) {
444
+        $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
445
+        erreur_squelette($msg, $context_compil);
446
+
447
+        return '';
448
+    }
449
+
450
+    // retrouver le fichier qui a déclaré la fonction
451
+    // même si la fonction dynamique est déclarée dans un fichier de fonctions.
452
+    // Attention sous windows, getFileName() retourne un antislash.
453
+    $reflector = new ReflectionFunction($fonction_balise);
454
+    $file = str_replace('\\', '/', $reflector->getFileName());
455
+    if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
456
+        $file = substr($file, strlen(_ROOT_RACINE));
457
+    }
458
+
459
+    // Y a-t-il une fonction de traitement des arguments ?
460
+    $f = 'balise_' . $nom_balise . '_stat';
461
+
462
+    $r = !function_exists($f) ? $args : $f($args, $context_compil);
463
+
464
+    if (!is_array($r)) {
465
+        return $r;
466
+    }
467
+
468
+    // verifier que la fonction dyn est la,
469
+    // sinon se replier sur la generique si elle existe
470
+    if (!function_exists('balise_' . $nom_balise . '_dyn')) {
471
+        if (
472
+            ($balise_generique = chercher_balise_generique($nom))
473
+            && ($nom_balise_generique = $balise_generique['nom_generique'])
474
+            && ($file = include_spip('balise/' . strtolower($nom_balise_generique)))
475
+            && function_exists('balise_' . $nom_balise_generique . '_dyn')
476
+        ) {
477
+            // et lui injecter en premier arg le nom de la balise
478
+            array_unshift($r, $nom);
479
+            $nom_balise = $nom_balise_generique;
480
+            if (!_DIR_RESTREINT) {
481
+                $file = _DIR_RESTREINT_ABS . $file;
482
+            }
483
+        } else {
484
+            $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
485
+            erreur_squelette($msg, $context_compil);
486
+
487
+            return '';
488
+        }
489
+    }
490
+
491
+    if ($appel_php_depuis_modele) {
492
+        $context_compil['appel_php_depuis_modele'] = true;
493
+    }
494
+    return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
495 495
 }
496 496
 
497 497
 /**
@@ -506,23 +506,23 @@  discard block
 block discarded – undo
506 506
  * @return array|null
507 507
  */
508 508
 function chercher_balise_generique($nom) {
509
-	if (!str_contains($nom, '_')) {
510
-		return null;
511
-	}
512
-	$nom_generique = $nom;
513
-	while (false !== ($p = strrpos($nom_generique, '_'))) {
514
-		$nom_generique = substr($nom_generique, 0, $p + 1);
515
-		$fonction_generique = charger_fonction($nom_generique, 'balise', true);
516
-		if ($fonction_generique) {
517
-			return [
518
-				'nom' => $nom,
519
-				'nom_generique' => $nom_generique,
520
-				'fonction_generique' => $fonction_generique,
521
-			];
522
-		}
523
-		$nom_generique = substr($nom_generique, 0, -1);
524
-	}
525
-	return null;
509
+    if (!str_contains($nom, '_')) {
510
+        return null;
511
+    }
512
+    $nom_generique = $nom;
513
+    while (false !== ($p = strrpos($nom_generique, '_'))) {
514
+        $nom_generique = substr($nom_generique, 0, $p + 1);
515
+        $fonction_generique = charger_fonction($nom_generique, 'balise', true);
516
+        if ($fonction_generique) {
517
+            return [
518
+                'nom' => $nom,
519
+                'nom_generique' => $nom_generique,
520
+                'fonction_generique' => $fonction_generique,
521
+            ];
522
+        }
523
+        $nom_generique = substr($nom_generique, 0, -1);
524
+    }
525
+    return null;
526 526
 }
527 527
 
528 528
 
@@ -546,51 +546,51 @@  discard block
 block discarded – undo
546 546
  * @return null;
547 547
  **/
548 548
 function lang_select_public($lang, $lang_select, $titre = null) {
549
-	// Cas 1. forcer_lang = true et pas de critere {lang_select}
550
-	if (
551
-		isset($GLOBALS['forcer_lang'])
552
-		&& $GLOBALS['forcer_lang']
553
-		&& $lang_select !== 'oui'
554
-	) {
555
-		$lang = $GLOBALS['spip_lang'];
556
-	} // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
557
-	elseif (!strlen($lang)) {
558
-		$lang = $GLOBALS['spip_lang'];
559
-	} // Cas 3. l'objet est multilingue !
560
-	elseif (
561
-		$lang_select !== 'oui'
562
-		&& strlen($titre) > 10
563
-		&& str_contains($titre, '<multi>')
564
-		&& str_contains(CollecteurHtmlTag::proteger_balisesHtml($titre), '<multi>')
565
-	) {
566
-		$lang = $GLOBALS['spip_lang'];
567
-	}
568
-
569
-	// faire un lang_select() eventuellement sur la langue inchangee
570
-	lang_select($lang);
571
-
572
-	return;
549
+    // Cas 1. forcer_lang = true et pas de critere {lang_select}
550
+    if (
551
+        isset($GLOBALS['forcer_lang'])
552
+        && $GLOBALS['forcer_lang']
553
+        && $lang_select !== 'oui'
554
+    ) {
555
+        $lang = $GLOBALS['spip_lang'];
556
+    } // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
557
+    elseif (!strlen($lang)) {
558
+        $lang = $GLOBALS['spip_lang'];
559
+    } // Cas 3. l'objet est multilingue !
560
+    elseif (
561
+        $lang_select !== 'oui'
562
+        && strlen($titre) > 10
563
+        && str_contains($titre, '<multi>')
564
+        && str_contains(CollecteurHtmlTag::proteger_balisesHtml($titre), '<multi>')
565
+    ) {
566
+        $lang = $GLOBALS['spip_lang'];
567
+    }
568
+
569
+    // faire un lang_select() eventuellement sur la langue inchangee
570
+    lang_select($lang);
571
+
572
+    return;
573 573
 }
574 574
 
575 575
 
576 576
 // Si un tableau &doublons[articles] est passe en parametre,
577 577
 // il faut le nettoyer car il pourrait etre injecte en SQL
578 578
 function nettoyer_env_doublons($envd) {
579
-	foreach ($envd as $table => $liste) {
580
-		$n = '';
581
-		foreach (explode(',', $liste) as $val) {
582
-			if (($a = intval($val)) && $val === strval($a)) {
583
-				$n .= ',' . $val;
584
-			}
585
-		}
586
-		if (strlen($n)) {
587
-			$envd[$table] = $n;
588
-		} else {
589
-			unset($envd[$table]);
590
-		}
591
-	}
592
-
593
-	return $envd;
579
+    foreach ($envd as $table => $liste) {
580
+        $n = '';
581
+        foreach (explode(',', $liste) as $val) {
582
+            if (($a = intval($val)) && $val === strval($a)) {
583
+                $n .= ',' . $val;
584
+            }
585
+        }
586
+        if (strlen($n)) {
587
+            $envd[$table] = $n;
588
+        } else {
589
+            unset($envd[$table]);
590
+        }
591
+    }
592
+
593
+    return $envd;
594 594
 }
595 595
 
596 596
 /**
@@ -609,21 +609,21 @@  discard block
 block discarded – undo
609 609
  *     Opérateur trouvé (SELF ou SUBSELECT) sinon false.
610 610
  **/
611 611
 function match_self($w) {
612
-	if (is_string($w)) {
613
-		return false;
614
-	}
615
-	if (is_array($w)) {
616
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
617
-			return $w;
618
-		}
619
-		foreach (array_filter($w, 'is_array') as $sw) {
620
-			if ($m = match_self($sw)) {
621
-				return $m;
622
-			}
623
-		}
624
-	}
625
-
626
-	return false;
612
+    if (is_string($w)) {
613
+        return false;
614
+    }
615
+    if (is_array($w)) {
616
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
617
+            return $w;
618
+        }
619
+        foreach (array_filter($w, 'is_array') as $sw) {
620
+            if ($m = match_self($sw)) {
621
+                return $m;
622
+            }
623
+        }
624
+    }
625
+
626
+    return false;
627 627
 }
628 628
 
629 629
 /**
@@ -639,16 +639,16 @@  discard block
 block discarded – undo
639 639
  *     est remplacée par son code.
640 640
  **/
641 641
 function remplace_sous_requete($w, $sousrequete) {
642
-	if (is_array($w)) {
643
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
644
-			return $sousrequete;
645
-		}
646
-		foreach ($w as $k => $sw) {
647
-			$w[$k] = remplace_sous_requete($sw, $sousrequete);
648
-		}
649
-	}
650
-
651
-	return $w;
642
+    if (is_array($w)) {
643
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
644
+            return $sousrequete;
645
+        }
646
+        foreach ($w as $k => $sw) {
647
+            $w[$k] = remplace_sous_requete($sw, $sousrequete);
648
+        }
649
+    }
650
+
651
+    return $w;
652 652
 }
653 653
 
654 654
 /**
@@ -662,17 +662,17 @@  discard block
 block discarded – undo
662 662
  *     - Conditions avec des sous requêtes
663 663
  **/
664 664
 function trouver_sous_requetes($where) {
665
-	$where_simples = [];
666
-	$where_sous = [];
667
-	foreach ($where as $k => $w) {
668
-		if (match_self($w)) {
669
-			$where_sous[$k] = $w;
670
-		} else {
671
-			$where_simples[$k] = $w;
672
-		}
673
-	}
674
-
675
-	return [$where_simples, $where_sous];
665
+    $where_simples = [];
666
+    $where_sous = [];
667
+    foreach ($where as $k => $w) {
668
+        if (match_self($w)) {
669
+            $where_sous[$k] = $w;
670
+        } else {
671
+            $where_simples[$k] = $w;
672
+        }
673
+    }
674
+
675
+    return [$where_simples, $where_sous];
676 676
 }
677 677
 
678 678
 
@@ -698,293 +698,293 @@  discard block
 block discarded – undo
698 698
  * @return resource
699 699
  */
700 700
 function calculer_select(
701
-	$select = [],
702
-	$from = [],
703
-	$from_type = [],
704
-	$where = [],
705
-	$join = [],
706
-	$groupby = [],
707
-	$orderby = [],
708
-	$limit = '',
709
-	$having = [],
710
-	$table = '',
711
-	$id = '',
712
-	$serveur = '',
713
-	$requeter = true
701
+    $select = [],
702
+    $from = [],
703
+    $from_type = [],
704
+    $where = [],
705
+    $join = [],
706
+    $groupby = [],
707
+    $orderby = [],
708
+    $limit = '',
709
+    $having = [],
710
+    $table = '',
711
+    $id = '',
712
+    $serveur = '',
713
+    $requeter = true
714 714
 ) {
715 715
 
716
-	// retirer les criteres vides:
717
-	// {X ?} avec X absent de l'URL
718
-	// {par #ENV{X}} avec X absent de l'URL
719
-	// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
720
-	$menage = false;
721
-	foreach ($where as $k => $v) {
722
-		if (is_array($v) && count($v)) {
723
-			if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
724
-				$op = false;
725
-			} elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
726
-				$op = false;
727
-			} else {
728
-				$op = $v[0] ?: $v;
729
-			}
730
-		} else {
731
-			$op = $v;
732
-		}
733
-		if (!$op || $op == 1 || $op == '0=0') {
734
-			unset($where[$k]);
735
-			$menage = true;
736
-		}
737
-	}
738
-
739
-	// evacuer les eventuels groupby vide issus d'un calcul dynamique
740
-	$groupby = array_diff($groupby, ['']);
741
-
742
-	// remplacer les sous requetes recursives au calcul
743
-	[$where_simples, $where_sous] = trouver_sous_requetes($where);
744
-	foreach ($where_sous as $k => $w) {
745
-		$menage = true;
746
-		// on recupere la sous requete
747
-		$sous = match_self($w);
748
-		if ($sous[0] == 'SELF') {
749
-			// c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
750
-			array_push($where_simples, $sous[2]);
751
-			$wheresub = [
752
-				$sous[2],
753
-				'0=0'
754
-			]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
755
-			$jsub = $join;
756
-			// trouver les jointures utiles a
757
-			// reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
758
-			// ie L1.objet='article'
759
-			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
760
-			$i = 0;
761
-			do {
762
-				$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
763
-					[$sous[1] . ' AS id'],
764
-					$from,
765
-					$from_type,
766
-					$wheresub,
767
-					$jsub,
768
-					[],
769
-					[],
770
-					'',
771
-					$having,
772
-					$table,
773
-					$id,
774
-					$serveur,
775
-					false
776
-				) . ')');
777
-				if (!$i) {
778
-					$i = 1;
779
-					$wherestring = calculer_where_to_string($where[$k]);
780
-					foreach ($join as $cle => $wj) {
781
-						if (
782
-							(is_countable($wj) ? count($wj) : 0) == 4 && str_contains($wherestring, (string) "{$cle}.")
783
-						) {
784
-							$i = 0;
785
-							$wheresub[] = $wj[3];
786
-							unset($jsub[$cle][3]);
787
-						}
788
-					}
789
-				}
790
-			} while ($i++ < 1);
791
-		}
792
-		if ($sous[0] == 'SUBSELECT') {
793
-			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
794
-			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
795
-			$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
796
-				$sous[1], # select
797
-				$sous[2], #from
798
-				[], #from_type
799
-				$sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
800
-				#where, qui peut etre de la forme string comme dans sql_select
801
-					[], #join
802
-				$sous[4] ?: [], #groupby
803
-				$sous[5] ?: [], #orderby
804
-				$sous[6], #limit
805
-				$sous[7] ?: [], #having
806
-				$table,
807
-				$id,
808
-				$serveur,
809
-				false
810
-			) . ')');
811
-		}
812
-		array_pop($where_simples);
813
-	}
814
-
815
-	foreach ($having as $k => $v) {
816
-		if (!$v || $v == 1 || $v == '0=0') {
817
-			unset($having[$k]);
818
-		}
819
-	}
820
-
821
-	// Installer les jointures.
822
-	// Retirer celles seulement utiles aux criteres finalement absents mais
823
-	// parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
824
-	// si elle est seulement utile a Ln+1 elle meme inutile
825
-
826
-	$afrom = [];
827
-	$equiv = [];
828
-	$k = count($join);
829
-	foreach (array_reverse($join, true) as $cledef => $j) {
830
-		$cle = $cledef;
831
-		// le format de join est :
832
-		// array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
833
-		$join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
834
-		if (count($join[$cle]) == 2) {
835
-			$join[$cle][] = $join[$cle][1];
836
-		}
837
-		if ((is_countable($join[$cle]) ? count($join[$cle]) : 0) == 3) {
838
-			$join[$cle][] = '';
839
-		}
840
-		[$t, $c, $carr, $and] = $join[$cle];
841
-		// si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
842
-		// pour compat avec ancienne convention
843
-		if (is_numeric($cle)) {
844
-			$cle = "L$k";
845
-		}
846
-		$cle_where_lie = "JOIN-$cle";
847
-		if (
848
-			!$menage
849
-			|| isset($afrom[$cle])
850
-			|| calculer_jointnul($cle, $select)
851
-			|| calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
852
-			|| calculer_jointnul($cle, $having)
853
-			|| calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
854
-		) {
855
-			// corriger les references non explicites dans select
856
-			// ou groupby
857
-			foreach ($select as $i => $s) {
858
-				if ($s == $c) {
859
-					$select[$i] = "$cle.$c AS $c";
860
-					break;
861
-				}
862
-			}
863
-			foreach ($groupby as $i => $g) {
864
-				if ($g == $c) {
865
-					$groupby[$i] = "$cle.$c";
866
-					break;
867
-				}
868
-			}
869
-			// on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
870
-			// sans recours a preg_match
871
-			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
872
-			$afrom[$t][$cle] = [
873
-				"\n" .
874
-				($from_type[$cle] ?? 'INNER') . ' JOIN',
875
-				$from[$cle],
876
-				"AS $cle",
877
-				'ON (',
878
-				"$cle.$c",
879
-				'=',
880
-				"$t.$carr",
881
-				($and ? 'AND ' . $and : '') .
882
-				')'
883
-			];
884
-			if (isset($afrom[$cle])) {
885
-				$afrom[$t] = $afrom[$t] + $afrom[$cle];
886
-				unset($afrom[$cle]);
887
-			}
888
-			$equiv[] = $carr;
889
-		} else {
890
-			unset($join[$cledef]);
891
-			if (isset($where_simples[$cle_where_lie])) {
892
-				unset($where_simples[$cle_where_lie]);
893
-				unset($where[$cle_where_lie]);
894
-			}
895
-		}
896
-		unset($from[$cle]);
897
-		$k--;
898
-	}
899
-
900
-	if (count($afrom)) {
901
-		// Regarder si la table principale ne sert finalement a rien comme dans
902
-		//<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
903
-		//<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
904
-		//<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
905
-		// ou dans
906
-		//<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
907
-		// qui comporte plusieurs jointures
908
-		// ou dans
909
-		// <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
910
-		// <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
911
-		// penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
912
-		// <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
913
-		// penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
914
-		// <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
915
-
916
-		$t = key($from);
917
-		$c = current($from);
918
-		reset($from);
919
-		$e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
920
-		if (
921
-			!(
922
-				strpos($t, ' ')
923
-				// jointure des le depart cf boucle_doc
924
-				|| calculer_jointnul($t, $select, $e)
925
-				|| calculer_jointnul($t, $join, $e)
926
-				|| calculer_jointnul($t, $where, $e)
927
-				|| calculer_jointnul($t, $orderby, $e)
928
-				|| calculer_jointnul($t, $groupby, $e) || calculer_jointnul($t, $having, $e)
929
-			)
930
-			&& count($afrom[$t])
931
-		) {
932
-			$nfrom = reset($afrom[$t]);
933
-			$nt = array_key_first($afrom[$t]);
934
-			unset($from[$t]);
935
-			$from[$nt] = $nfrom[1];
936
-			unset($afrom[$t][$nt]);
937
-			$afrom[$nt] = $afrom[$t];
938
-			unset($afrom[$t]);
939
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
940
-			$t = $nfrom[4];
941
-			$alias = '';
942
-			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
943
-			$oldcle = explode('.', $nfrom[6]);
944
-			$oldcle = end($oldcle);
945
-			$newcle = explode('.', $nfrom[4]);
946
-			$newcle = end($newcle);
947
-			if ($newcle != $oldcle) {
948
-				// si l'ancienne cle etait deja dans le select avec un AS
949
-				// reprendre simplement ce AS
950
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
951
-				if (preg_match($as, implode(',', $select), $m)) {
952
-					$alias = '';
953
-				} else {
954
-					$alias = ', ' . $nfrom[4] . " AS $oldcle";
955
-				}
956
-			}
957
-			$select = remplacer_jointnul($t . $alias, $select, $e);
958
-			$join = remplacer_jointnul($t, $join, $e);
959
-			$where = remplacer_jointnul($t, $where, $e);
960
-			$having = remplacer_jointnul($t, $having, $e);
961
-			$groupby = remplacer_jointnul($t, $groupby, $e);
962
-			$orderby = remplacer_jointnul($t, $orderby, $e);
963
-		}
964
-		$from = reinjecte_joint($afrom, $from);
965
-	}
966
-	if (empty($GLOBALS['debug']) || !is_array($GLOBALS['debug'])) {
967
-		$wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
968
-		$GLOBALS['debug'] = [];
969
-		if ($wasdebug) {
970
-			$GLOBALS['debug']['debug'] = true;
971
-		}
972
-	}
973
-	$GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
974
-	$r = sql_select(
975
-		$select,
976
-		$from,
977
-		$where,
978
-		$groupby,
979
-		array_filter($orderby),
980
-		$limit,
981
-		$having,
982
-		$serveur,
983
-		$requeter
984
-	);
985
-	unset($GLOBALS['debug']['aucasou']);
986
-
987
-	return $r;
716
+    // retirer les criteres vides:
717
+    // {X ?} avec X absent de l'URL
718
+    // {par #ENV{X}} avec X absent de l'URL
719
+    // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
720
+    $menage = false;
721
+    foreach ($where as $k => $v) {
722
+        if (is_array($v) && count($v)) {
723
+            if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
724
+                $op = false;
725
+            } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
726
+                $op = false;
727
+            } else {
728
+                $op = $v[0] ?: $v;
729
+            }
730
+        } else {
731
+            $op = $v;
732
+        }
733
+        if (!$op || $op == 1 || $op == '0=0') {
734
+            unset($where[$k]);
735
+            $menage = true;
736
+        }
737
+    }
738
+
739
+    // evacuer les eventuels groupby vide issus d'un calcul dynamique
740
+    $groupby = array_diff($groupby, ['']);
741
+
742
+    // remplacer les sous requetes recursives au calcul
743
+    [$where_simples, $where_sous] = trouver_sous_requetes($where);
744
+    foreach ($where_sous as $k => $w) {
745
+        $menage = true;
746
+        // on recupere la sous requete
747
+        $sous = match_self($w);
748
+        if ($sous[0] == 'SELF') {
749
+            // c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
750
+            array_push($where_simples, $sous[2]);
751
+            $wheresub = [
752
+                $sous[2],
753
+                '0=0'
754
+            ]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
755
+            $jsub = $join;
756
+            // trouver les jointures utiles a
757
+            // reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
758
+            // ie L1.objet='article'
759
+            // on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
760
+            $i = 0;
761
+            do {
762
+                $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
763
+                    [$sous[1] . ' AS id'],
764
+                    $from,
765
+                    $from_type,
766
+                    $wheresub,
767
+                    $jsub,
768
+                    [],
769
+                    [],
770
+                    '',
771
+                    $having,
772
+                    $table,
773
+                    $id,
774
+                    $serveur,
775
+                    false
776
+                ) . ')');
777
+                if (!$i) {
778
+                    $i = 1;
779
+                    $wherestring = calculer_where_to_string($where[$k]);
780
+                    foreach ($join as $cle => $wj) {
781
+                        if (
782
+                            (is_countable($wj) ? count($wj) : 0) == 4 && str_contains($wherestring, (string) "{$cle}.")
783
+                        ) {
784
+                            $i = 0;
785
+                            $wheresub[] = $wj[3];
786
+                            unset($jsub[$cle][3]);
787
+                        }
788
+                    }
789
+                }
790
+            } while ($i++ < 1);
791
+        }
792
+        if ($sous[0] == 'SUBSELECT') {
793
+            // c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
794
+            array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
795
+            $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
796
+                $sous[1], # select
797
+                $sous[2], #from
798
+                [], #from_type
799
+                $sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
800
+                #where, qui peut etre de la forme string comme dans sql_select
801
+                    [], #join
802
+                $sous[4] ?: [], #groupby
803
+                $sous[5] ?: [], #orderby
804
+                $sous[6], #limit
805
+                $sous[7] ?: [], #having
806
+                $table,
807
+                $id,
808
+                $serveur,
809
+                false
810
+            ) . ')');
811
+        }
812
+        array_pop($where_simples);
813
+    }
814
+
815
+    foreach ($having as $k => $v) {
816
+        if (!$v || $v == 1 || $v == '0=0') {
817
+            unset($having[$k]);
818
+        }
819
+    }
820
+
821
+    // Installer les jointures.
822
+    // Retirer celles seulement utiles aux criteres finalement absents mais
823
+    // parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
824
+    // si elle est seulement utile a Ln+1 elle meme inutile
825
+
826
+    $afrom = [];
827
+    $equiv = [];
828
+    $k = count($join);
829
+    foreach (array_reverse($join, true) as $cledef => $j) {
830
+        $cle = $cledef;
831
+        // le format de join est :
832
+        // array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
833
+        $join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
834
+        if (count($join[$cle]) == 2) {
835
+            $join[$cle][] = $join[$cle][1];
836
+        }
837
+        if ((is_countable($join[$cle]) ? count($join[$cle]) : 0) == 3) {
838
+            $join[$cle][] = '';
839
+        }
840
+        [$t, $c, $carr, $and] = $join[$cle];
841
+        // si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
842
+        // pour compat avec ancienne convention
843
+        if (is_numeric($cle)) {
844
+            $cle = "L$k";
845
+        }
846
+        $cle_where_lie = "JOIN-$cle";
847
+        if (
848
+            !$menage
849
+            || isset($afrom[$cle])
850
+            || calculer_jointnul($cle, $select)
851
+            || calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
852
+            || calculer_jointnul($cle, $having)
853
+            || calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
854
+        ) {
855
+            // corriger les references non explicites dans select
856
+            // ou groupby
857
+            foreach ($select as $i => $s) {
858
+                if ($s == $c) {
859
+                    $select[$i] = "$cle.$c AS $c";
860
+                    break;
861
+                }
862
+            }
863
+            foreach ($groupby as $i => $g) {
864
+                if ($g == $c) {
865
+                    $groupby[$i] = "$cle.$c";
866
+                    break;
867
+                }
868
+            }
869
+            // on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
870
+            // sans recours a preg_match
871
+            // un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
872
+            $afrom[$t][$cle] = [
873
+                "\n" .
874
+                ($from_type[$cle] ?? 'INNER') . ' JOIN',
875
+                $from[$cle],
876
+                "AS $cle",
877
+                'ON (',
878
+                "$cle.$c",
879
+                '=',
880
+                "$t.$carr",
881
+                ($and ? 'AND ' . $and : '') .
882
+                ')'
883
+            ];
884
+            if (isset($afrom[$cle])) {
885
+                $afrom[$t] = $afrom[$t] + $afrom[$cle];
886
+                unset($afrom[$cle]);
887
+            }
888
+            $equiv[] = $carr;
889
+        } else {
890
+            unset($join[$cledef]);
891
+            if (isset($where_simples[$cle_where_lie])) {
892
+                unset($where_simples[$cle_where_lie]);
893
+                unset($where[$cle_where_lie]);
894
+            }
895
+        }
896
+        unset($from[$cle]);
897
+        $k--;
898
+    }
899
+
900
+    if (count($afrom)) {
901
+        // Regarder si la table principale ne sert finalement a rien comme dans
902
+        //<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
903
+        //<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
904
+        //<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
905
+        // ou dans
906
+        //<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
907
+        // qui comporte plusieurs jointures
908
+        // ou dans
909
+        // <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
910
+        // <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
911
+        // penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
912
+        // <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
913
+        // penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
914
+        // <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
915
+
916
+        $t = key($from);
917
+        $c = current($from);
918
+        reset($from);
919
+        $e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
920
+        if (
921
+            !(
922
+                strpos($t, ' ')
923
+                // jointure des le depart cf boucle_doc
924
+                || calculer_jointnul($t, $select, $e)
925
+                || calculer_jointnul($t, $join, $e)
926
+                || calculer_jointnul($t, $where, $e)
927
+                || calculer_jointnul($t, $orderby, $e)
928
+                || calculer_jointnul($t, $groupby, $e) || calculer_jointnul($t, $having, $e)
929
+            )
930
+            && count($afrom[$t])
931
+        ) {
932
+            $nfrom = reset($afrom[$t]);
933
+            $nt = array_key_first($afrom[$t]);
934
+            unset($from[$t]);
935
+            $from[$nt] = $nfrom[1];
936
+            unset($afrom[$t][$nt]);
937
+            $afrom[$nt] = $afrom[$t];
938
+            unset($afrom[$t]);
939
+            $e = '/\b' . preg_quote($nfrom[6]) . '\b/';
940
+            $t = $nfrom[4];
941
+            $alias = '';
942
+            // verifier que les deux cles sont homonymes, sinon installer un alias dans le select
943
+            $oldcle = explode('.', $nfrom[6]);
944
+            $oldcle = end($oldcle);
945
+            $newcle = explode('.', $nfrom[4]);
946
+            $newcle = end($newcle);
947
+            if ($newcle != $oldcle) {
948
+                // si l'ancienne cle etait deja dans le select avec un AS
949
+                // reprendre simplement ce AS
950
+                $as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
951
+                if (preg_match($as, implode(',', $select), $m)) {
952
+                    $alias = '';
953
+                } else {
954
+                    $alias = ', ' . $nfrom[4] . " AS $oldcle";
955
+                }
956
+            }
957
+            $select = remplacer_jointnul($t . $alias, $select, $e);
958
+            $join = remplacer_jointnul($t, $join, $e);
959
+            $where = remplacer_jointnul($t, $where, $e);
960
+            $having = remplacer_jointnul($t, $having, $e);
961
+            $groupby = remplacer_jointnul($t, $groupby, $e);
962
+            $orderby = remplacer_jointnul($t, $orderby, $e);
963
+        }
964
+        $from = reinjecte_joint($afrom, $from);
965
+    }
966
+    if (empty($GLOBALS['debug']) || !is_array($GLOBALS['debug'])) {
967
+        $wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
968
+        $GLOBALS['debug'] = [];
969
+        if ($wasdebug) {
970
+            $GLOBALS['debug']['debug'] = true;
971
+        }
972
+    }
973
+    $GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
974
+    $r = sql_select(
975
+        $select,
976
+        $from,
977
+        $where,
978
+        $groupby,
979
+        array_filter($orderby),
980
+        $limit,
981
+        $having,
982
+        $serveur,
983
+        $requeter
984
+    );
985
+    unset($GLOBALS['debug']['aucasou']);
986
+
987
+    return $r;
988 988
 }
989 989
 
990 990
 /**
@@ -995,79 +995,79 @@  discard block
 block discarded – undo
995 995
  * @return string
996 996
  */
997 997
 function calculer_where_to_string($v, $join = 'AND') {
998
-	if (empty($v)) {
999
-		return '';
1000
-	}
1001
-
1002
-	if (!is_array($v)) {
1003
-		return $v;
1004
-	} else {
1005
-		$exp = '';
1006
-		if (strtoupper($join) === 'AND') {
1007
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1008
-		} else {
1009
-			return $exp . join($join, $v);
1010
-		}
1011
-	}
998
+    if (empty($v)) {
999
+        return '';
1000
+    }
1001
+
1002
+    if (!is_array($v)) {
1003
+        return $v;
1004
+    } else {
1005
+        $exp = '';
1006
+        if (strtoupper($join) === 'AND') {
1007
+            return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1008
+        } else {
1009
+            return $exp . join($join, $v);
1010
+        }
1011
+    }
1012 1012
 }
1013 1013
 
1014 1014
 
1015 1015
 //condition suffisante (mais non necessaire) pour qu'une table soit utile
1016 1016
 
1017 1017
 function calculer_jointnul($cle, $exp, $equiv = '') {
1018
-	if (!is_array($exp)) {
1019
-		if ($equiv) {
1020
-			$exp = preg_replace($equiv, '', $exp);
1021
-		}
1022
-
1023
-		return preg_match("/\\b$cle\\./", $exp);
1024
-	} else {
1025
-		foreach ($exp as $v) {
1026
-			if (calculer_jointnul($cle, $v, $equiv)) {
1027
-				return true;
1028
-			}
1029
-		}
1030
-
1031
-		return false;
1032
-	}
1018
+    if (!is_array($exp)) {
1019
+        if ($equiv) {
1020
+            $exp = preg_replace($equiv, '', $exp);
1021
+        }
1022
+
1023
+        return preg_match("/\\b$cle\\./", $exp);
1024
+    } else {
1025
+        foreach ($exp as $v) {
1026
+            if (calculer_jointnul($cle, $v, $equiv)) {
1027
+                return true;
1028
+            }
1029
+        }
1030
+
1031
+        return false;
1032
+    }
1033 1033
 }
1034 1034
 
1035 1035
 function reinjecte_joint($afrom, $from) {
1036
-	$from_synth = [];
1037
-	foreach ($from as $k => $v) {
1038
-		$from_synth[$k] = $from[$k];
1039
-		if (isset($afrom[$k])) {
1040
-			foreach ($afrom[$k] as $kk => $vv) {
1041
-				$afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1042
-			}
1043
-			$from_synth["$k@"] = implode(' ', $afrom[$k]);
1044
-			unset($afrom[$k]);
1045
-		}
1046
-	}
1047
-
1048
-	return $from_synth;
1036
+    $from_synth = [];
1037
+    foreach ($from as $k => $v) {
1038
+        $from_synth[$k] = $from[$k];
1039
+        if (isset($afrom[$k])) {
1040
+            foreach ($afrom[$k] as $kk => $vv) {
1041
+                $afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1042
+            }
1043
+            $from_synth["$k@"] = implode(' ', $afrom[$k]);
1044
+            unset($afrom[$k]);
1045
+        }
1046
+    }
1047
+
1048
+    return $from_synth;
1049 1049
 }
1050 1050
 
1051 1051
 function remplacer_jointnul($cle, $exp, $equiv = '') {
1052
-	if (!is_array($exp)) {
1053
-		return preg_replace($equiv, $cle, $exp);
1054
-	} else {
1055
-		foreach ($exp as $k => $v) {
1056
-			$exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1057
-		}
1058
-
1059
-		return $exp;
1060
-	}
1052
+    if (!is_array($exp)) {
1053
+        return preg_replace($equiv, $cle, $exp);
1054
+    } else {
1055
+        foreach ($exp as $k => $v) {
1056
+            $exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1057
+        }
1058
+
1059
+        return $exp;
1060
+    }
1061 1061
 }
1062 1062
 
1063 1063
 // calcul du nom du squelette
1064 1064
 function calculer_nom_fonction_squel($skel, $mime_type = 'html', string $connect = '') {
1065
-	// ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1066
-	if (($l = strlen(_DIR_RACINE)) && strncmp($skel, _DIR_RACINE, $l) == 0) {
1067
-		$skel = substr($skel, strlen(_DIR_RACINE));
1068
-	}
1069
-
1070
-	return $mime_type
1071
-	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1072
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1065
+    // ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1066
+    if (($l = strlen(_DIR_RACINE)) && strncmp($skel, _DIR_RACINE, $l) == 0) {
1067
+        $skel = substr($skel, strlen(_DIR_RACINE));
1068
+    }
1069
+
1070
+    return $mime_type
1071
+    . (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1072
+    . md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1073 1073
 }
Please login to merge, or discard this patch.
ecrire/public/evaluer_page.php 1 patch
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 /**
@@ -28,50 +28,50 @@  discard block
 block discarded – undo
28 28
  * @return void
29 29
  */
30 30
 
31
- /** @var bool Évaluation réussie ? */
31
+    /** @var bool Évaluation réussie ? */
32 32
 $res = true;
33 33
 
34 34
 // Cas d'une page contenant du PHP :
35 35
 if (empty($page['process_ins']) || $page['process_ins'] != 'html') {
36
-	include_spip('inc/lang');
36
+    include_spip('inc/lang');
37 37
 
38
-	// restaurer l'etat des notes avant calcul
39
-	if (
40
-		isset($page['notes'])
41
-		&& $page['notes']
42
-		&& ($notes = charger_fonction('notes', 'inc', true))
43
-	) {
44
-		$notes($page['notes'], 'restaurer_etat');
45
-	}
46
-	ob_start();
47
-	if (str_contains((string) $page['texte'], '?xml')) {
48
-		$page['texte'] = str_replace('<?xml', "<\1?xml", (string) $page['texte']);
49
-	}
38
+    // restaurer l'etat des notes avant calcul
39
+    if (
40
+        isset($page['notes'])
41
+        && $page['notes']
42
+        && ($notes = charger_fonction('notes', 'inc', true))
43
+    ) {
44
+        $notes($page['notes'], 'restaurer_etat');
45
+    }
46
+    ob_start();
47
+    if (str_contains((string) $page['texte'], '?xml')) {
48
+        $page['texte'] = str_replace('<?xml', "<\1?xml", (string) $page['texte']);
49
+    }
50 50
 
51
-	try {
52
-		$res = eval('?' . '>' . $page['texte']);
53
-		$page['texte'] = ob_get_contents();
54
-	} catch (\Throwable $e) {
55
-		$code = $page['texte'];
56
-		$GLOBALS['numero_ligne_php'] = 1;
57
-		if (!function_exists('numerote_ligne_php')) {
58
-			function numerote_ligne_php($match) {
59
-				$GLOBALS['numero_ligne_php']++;
60
-				return "\n/*" . str_pad((string) $GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
61
-			}
62
-		}
63
-		$code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
64
-		$code = trim(highlight_string($code, true));
65
-		erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
66
-		$page['texte'] = '<!-- Erreur -->';
67
-	}
68
-	ob_end_clean();
51
+    try {
52
+        $res = eval('?' . '>' . $page['texte']);
53
+        $page['texte'] = ob_get_contents();
54
+    } catch (\Throwable $e) {
55
+        $code = $page['texte'];
56
+        $GLOBALS['numero_ligne_php'] = 1;
57
+        if (!function_exists('numerote_ligne_php')) {
58
+            function numerote_ligne_php($match) {
59
+                $GLOBALS['numero_ligne_php']++;
60
+                return "\n/*" . str_pad((string) $GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
61
+            }
62
+        }
63
+        $code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
64
+        $code = trim(highlight_string($code, true));
65
+        erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
66
+        $page['texte'] = '<!-- Erreur -->';
67
+    }
68
+    ob_end_clean();
69 69
 
70
-	$page['process_ins'] = 'html';
70
+    $page['process_ins'] = 'html';
71 71
 
72
-	if (str_contains((string) $page['texte'], '?xml')) {
73
-		$page['texte'] = str_replace("<\1?xml", '<?xml', (string) $page['texte']);
74
-	}
72
+    if (str_contains((string) $page['texte'], '?xml')) {
73
+        $page['texte'] = str_replace("<\1?xml", '<?xml', (string) $page['texte']);
74
+    }
75 75
 }
76 76
 
77 77
 // le résultat de calcul d'un squelette est toujours de type string
Please login to merge, or discard this patch.
ecrire/public/phraser_html.php 1 patch
Indentation   +1060 added lines, -1060 removed lines patch added patch discarded remove patch
@@ -27,7 +27,7 @@  discard block
 block discarded – undo
27 27
  **/
28 28
 
29 29
 if (!defined('_ECRIRE_INC_VERSION')) {
30
-	return;
30
+    return;
31 31
 }
32 32
 
33 33
 /** Début de la partie principale d'une boucle */
@@ -74,54 +74,54 @@  discard block
 block discarded – undo
74 74
  */
75 75
 function phraser_inclure(string $texte, int $ligne, array $result): array {
76 76
 
77
-	while (
78
-		(($p = strpos($texte, '<INC')) !== false)
79
-		&& preg_match(BALISE_INCLURE, $texte, $match, PREG_OFFSET_CAPTURE, $p)
80
-	) {
81
-		$poss = array_column($match, 1);
82
-		$match = array_column($match, 0);
83
-		$match = array_pad($match, 3, null);
84
-
85
-		$p = $poss[0];
86
-		$debut = substr($texte, 0, $p);
87
-		if ($p) {
88
-			$result = phraser_idiomes($debut, $ligne, $result);
89
-		}
90
-		$ligne += public_compte_ligne($debut);
91
-
92
-		$champ = new Inclure();
93
-		$champ->ligne = $ligne;
94
-		$ligne += public_compte_ligne((string) $match[0]);
95
-		$fichier = $match[2];
96
-		$champ->texte = $fichier;
97
-
98
-		$texte = substr($texte, $p + strlen((string) $match[0]));
99
-
100
-		// on assimile {var=val} a une liste de un argument sans fonction
101
-		$pos_apres = 0;
102
-		phraser_args($texte, '/>', '', $result, $champ, $pos_apres);
103
-		if (!$champ->texte || (is_countable($champ->param) ? count($champ->param) : 0) > 1) {
104
-			if (!function_exists('normaliser_inclure')) {
105
-				include_spip('public/normaliser');
106
-			}
107
-			normaliser_inclure($champ);
108
-		}
109
-		$pos_fin = strpos($texte, '>', $pos_apres) + 1;
110
-		if (
111
-			(strpos($texte, '</INCLUDE>', $pos_fin) === $pos_fin)
112
-			|| (strpos($texte, '</INCLURE>', $pos_fin) === $pos_fin)
113
-		) {
114
-			$pos_fin += 10;
115
-		}
116
-		$texte = substr($texte, $pos_fin);
117
-		$result[] = $champ;
118
-	}
119
-
120
-	if ($texte != '') {
121
-		$result = phraser_idiomes($texte, $ligne, $result);
122
-	}
123
-
124
-	return $result;
77
+    while (
78
+        (($p = strpos($texte, '<INC')) !== false)
79
+        && preg_match(BALISE_INCLURE, $texte, $match, PREG_OFFSET_CAPTURE, $p)
80
+    ) {
81
+        $poss = array_column($match, 1);
82
+        $match = array_column($match, 0);
83
+        $match = array_pad($match, 3, null);
84
+
85
+        $p = $poss[0];
86
+        $debut = substr($texte, 0, $p);
87
+        if ($p) {
88
+            $result = phraser_idiomes($debut, $ligne, $result);
89
+        }
90
+        $ligne += public_compte_ligne($debut);
91
+
92
+        $champ = new Inclure();
93
+        $champ->ligne = $ligne;
94
+        $ligne += public_compte_ligne((string) $match[0]);
95
+        $fichier = $match[2];
96
+        $champ->texte = $fichier;
97
+
98
+        $texte = substr($texte, $p + strlen((string) $match[0]));
99
+
100
+        // on assimile {var=val} a une liste de un argument sans fonction
101
+        $pos_apres = 0;
102
+        phraser_args($texte, '/>', '', $result, $champ, $pos_apres);
103
+        if (!$champ->texte || (is_countable($champ->param) ? count($champ->param) : 0) > 1) {
104
+            if (!function_exists('normaliser_inclure')) {
105
+                include_spip('public/normaliser');
106
+            }
107
+            normaliser_inclure($champ);
108
+        }
109
+        $pos_fin = strpos($texte, '>', $pos_apres) + 1;
110
+        if (
111
+            (strpos($texte, '</INCLUDE>', $pos_fin) === $pos_fin)
112
+            || (strpos($texte, '</INCLURE>', $pos_fin) === $pos_fin)
113
+        ) {
114
+            $pos_fin += 10;
115
+        }
116
+        $texte = substr($texte, $pos_fin);
117
+        $result[] = $champ;
118
+    }
119
+
120
+    if ($texte != '') {
121
+        $result = phraser_idiomes($texte, $ligne, $result);
122
+    }
123
+
124
+    return $result;
125 125
 }
126 126
 
127 127
 /**
@@ -133,38 +133,38 @@  discard block
 block discarded – undo
133 133
  */
134 134
 function phraser_polyglotte(string $texte, int $ligne, array $result): array {
135 135
 
136
-	$collecteur = new Spip\Texte\Collecteur\Multis();
137
-	$multis = $collecteur->collecter($texte);
138
-
139
-	if (!empty($multis)) {
140
-		$pos_prev = 0;
141
-		foreach ($multis as $multi) {
142
-			if ($multi['pos'] > $pos_prev) {
143
-				$champ = new Texte();
144
-				$champ->texte = substr($texte, $pos_prev, $multi['pos'] - $pos_prev);
145
-				$champ->ligne = $ligne;
146
-				$result[] = $champ;
147
-				$ligne += public_compte_ligne($champ->texte);
148
-			}
149
-
150
-			$champ = new Polyglotte();
151
-			$champ->ligne = $ligne;
152
-			$champ->traductions = $multi['trads'];
153
-			$result[] = $champ;
154
-			$ligne += public_compte_ligne($multi['raw']);
155
-			$pos_prev = $multi['pos'] + $multi['length'];
156
-		}
157
-		$texte = substr($texte, $pos_prev);
158
-	}
159
-
160
-	if ($texte !== '') {
161
-		$champ = new Texte();
162
-		$champ->texte = $texte;
163
-		$champ->ligne = $ligne;
164
-		$result[] = $champ;
165
-	}
166
-
167
-	return $result;
136
+    $collecteur = new Spip\Texte\Collecteur\Multis();
137
+    $multis = $collecteur->collecter($texte);
138
+
139
+    if (!empty($multis)) {
140
+        $pos_prev = 0;
141
+        foreach ($multis as $multi) {
142
+            if ($multi['pos'] > $pos_prev) {
143
+                $champ = new Texte();
144
+                $champ->texte = substr($texte, $pos_prev, $multi['pos'] - $pos_prev);
145
+                $champ->ligne = $ligne;
146
+                $result[] = $champ;
147
+                $ligne += public_compte_ligne($champ->texte);
148
+            }
149
+
150
+            $champ = new Polyglotte();
151
+            $champ->ligne = $ligne;
152
+            $champ->traductions = $multi['trads'];
153
+            $result[] = $champ;
154
+            $ligne += public_compte_ligne($multi['raw']);
155
+            $pos_prev = $multi['pos'] + $multi['length'];
156
+        }
157
+        $texte = substr($texte, $pos_prev);
158
+    }
159
+
160
+    if ($texte !== '') {
161
+        $champ = new Texte();
162
+        $champ->texte = $texte;
163
+        $champ->ligne = $ligne;
164
+        $result[] = $champ;
165
+    }
166
+
167
+    return $result;
168 168
 }
169 169
 
170 170
 
@@ -187,64 +187,64 @@  discard block
 block discarded – undo
187 187
  **/
188 188
 function phraser_idiomes(string $texte, int $ligne, array $result): array {
189 189
 
190
-	while (
191
-		(($p = strpos($texte, '<:')) !== false)
192
-		&& preg_match(BALISE_IDIOMES, $texte, $match, PREG_OFFSET_CAPTURE, $p)
193
-	) {
194
-		$poss = array_column($match, 1);
195
-		$match = array_column($match, 0);
196
-		$match = array_pad($match, 8, null);
197
-		$p = $poss[0];
198
-
199
-		$idiome = (string) $match[0];
200
-		// faux idiome ?
201
-		if (!$match[3] && (empty($match[5]) || $match[5][0] !== '=')) {
202
-			$debut = substr($texte, 0, $p + strlen($idiome));
203
-			$result = phraser_champs($debut, $ligne, $result);
204
-			$ligne += public_compte_ligne($debut);
205
-			continue;
206
-		}
207
-
208
-		$debut = substr($texte, 0, $p);
209
-		$result = phraser_champs($debut, $ligne, $result);
210
-		$ligne += public_compte_ligne($debut);
211
-
212
-		$texte = substr($texte, $p + strlen($idiome));
213
-
214
-		$champ = new Idiome();
215
-		$champ->ligne = $ligne;
216
-		$ligne += public_compte_ligne($idiome);
217
-		// Stocker les arguments de la balise de traduction
218
-		$args = [];
219
-		$largs = (string) $match[5];
220
-		while (
221
-			str_contains($largs, '=')
222
-			&& preg_match(BALISE_IDIOMES_ARGS, $largs, $r)
223
-		) {
224
-			$args[$r[1]] = phraser_champs($r[2], 0, []);
225
-			$largs = substr($largs, strlen($r[0]));
226
-		}
227
-		$champ->arg = $args;
228
-
229
-		// TODO : supprimer ce strtolower cf https://git.spip.net/spip/spip/issues/2536
230
-		$champ->nom_champ = strtolower((string) $match[3]);
231
-		$champ->module = $match[2];
232
-
233
-		// pas d'imbrication pour les filtres sur langue
234
-		$champ->apres = '';
235
-		if (!is_null($match[7])) {
236
-			$pos_apres = 0;
237
-			phraser_args($match[7], ':', '', [], $champ, $pos_apres);
238
-			$champ->apres = substr($match[7], $pos_apres);
239
-		}
240
-		$result[] = $champ;
241
-	}
242
-
243
-	if ($texte !== '') {
244
-		$result = phraser_champs($texte, $ligne, $result);
245
-	}
246
-
247
-	return $result;
190
+    while (
191
+        (($p = strpos($texte, '<:')) !== false)
192
+        && preg_match(BALISE_IDIOMES, $texte, $match, PREG_OFFSET_CAPTURE, $p)
193
+    ) {
194
+        $poss = array_column($match, 1);
195
+        $match = array_column($match, 0);
196
+        $match = array_pad($match, 8, null);
197
+        $p = $poss[0];
198
+
199
+        $idiome = (string) $match[0];
200
+        // faux idiome ?
201
+        if (!$match[3] && (empty($match[5]) || $match[5][0] !== '=')) {
202
+            $debut = substr($texte, 0, $p + strlen($idiome));
203
+            $result = phraser_champs($debut, $ligne, $result);
204
+            $ligne += public_compte_ligne($debut);
205
+            continue;
206
+        }
207
+
208
+        $debut = substr($texte, 0, $p);
209
+        $result = phraser_champs($debut, $ligne, $result);
210
+        $ligne += public_compte_ligne($debut);
211
+
212
+        $texte = substr($texte, $p + strlen($idiome));
213
+
214
+        $champ = new Idiome();
215
+        $champ->ligne = $ligne;
216
+        $ligne += public_compte_ligne($idiome);
217
+        // Stocker les arguments de la balise de traduction
218
+        $args = [];
219
+        $largs = (string) $match[5];
220
+        while (
221
+            str_contains($largs, '=')
222
+            && preg_match(BALISE_IDIOMES_ARGS, $largs, $r)
223
+        ) {
224
+            $args[$r[1]] = phraser_champs($r[2], 0, []);
225
+            $largs = substr($largs, strlen($r[0]));
226
+        }
227
+        $champ->arg = $args;
228
+
229
+        // TODO : supprimer ce strtolower cf https://git.spip.net/spip/spip/issues/2536
230
+        $champ->nom_champ = strtolower((string) $match[3]);
231
+        $champ->module = $match[2];
232
+
233
+        // pas d'imbrication pour les filtres sur langue
234
+        $champ->apres = '';
235
+        if (!is_null($match[7])) {
236
+            $pos_apres = 0;
237
+            phraser_args($match[7], ':', '', [], $champ, $pos_apres);
238
+            $champ->apres = substr($match[7], $pos_apres);
239
+        }
240
+        $result[] = $champ;
241
+    }
242
+
243
+    if ($texte !== '') {
244
+        $result = phraser_champs($texte, $ligne, $result);
245
+    }
246
+
247
+    return $result;
248 248
 }
249 249
 
250 250
 /**
@@ -263,53 +263,53 @@  discard block
 block discarded – undo
263 263
  **/
264 264
 function phraser_champs(string $texte, int $ligne, array $result): array {
265 265
 
266
-	while (
267
-		(($p = strpos($texte, '#')) !== false)
268
-		&& preg_match('/' . NOM_DE_CHAMP . '/S', $texte, $match, PREG_OFFSET_CAPTURE, $p)
269
-	) {
270
-		$poss = array_column($match, 1);
271
-		$match = array_column($match, 0);
272
-
273
-		$p = $poss[0];
274
-		if ($p) {
275
-			$debut = substr($texte, 0, $p);
276
-			$result = phraser_polyglotte($debut, $ligne, $result);
277
-			$ligne += public_compte_ligne($debut);
278
-		}
279
-
280
-		$champ = new Champ();
281
-		$champ->ligne = $ligne;
282
-		$ligne += public_compte_ligne($match[0]);
283
-		$champ->nom_boucle = $match[2];
284
-		$champ->nom_champ = $match[3];
285
-		$champ->etoile = $match[5];
286
-
287
-		// texte après la balise
288
-		$suite = substr($texte, $p + strlen($match[0]));
289
-		if ($suite && str_starts_with($suite, '{')) {
290
-			phraser_arg($suite, '', [], $champ);
291
-			// ce ltrim est une ereur de conception
292
-			// mais on le conserve par souci de compatibilite
293
-			$texte = ltrim((string) $suite);
294
-			// Il faudrait le normaliser dans l'arbre de syntaxe abstraite
295
-			// pour faire sauter ce cas particulier a la decompilation.
296
-			/* Ce qui suit est malheureusement incomplet pour cela:
266
+    while (
267
+        (($p = strpos($texte, '#')) !== false)
268
+        && preg_match('/' . NOM_DE_CHAMP . '/S', $texte, $match, PREG_OFFSET_CAPTURE, $p)
269
+    ) {
270
+        $poss = array_column($match, 1);
271
+        $match = array_column($match, 0);
272
+
273
+        $p = $poss[0];
274
+        if ($p) {
275
+            $debut = substr($texte, 0, $p);
276
+            $result = phraser_polyglotte($debut, $ligne, $result);
277
+            $ligne += public_compte_ligne($debut);
278
+        }
279
+
280
+        $champ = new Champ();
281
+        $champ->ligne = $ligne;
282
+        $ligne += public_compte_ligne($match[0]);
283
+        $champ->nom_boucle = $match[2];
284
+        $champ->nom_champ = $match[3];
285
+        $champ->etoile = $match[5];
286
+
287
+        // texte après la balise
288
+        $suite = substr($texte, $p + strlen($match[0]));
289
+        if ($suite && str_starts_with($suite, '{')) {
290
+            phraser_arg($suite, '', [], $champ);
291
+            // ce ltrim est une ereur de conception
292
+            // mais on le conserve par souci de compatibilite
293
+            $texte = ltrim((string) $suite);
294
+            // Il faudrait le normaliser dans l'arbre de syntaxe abstraite
295
+            // pour faire sauter ce cas particulier a la decompilation.
296
+            /* Ce qui suit est malheureusement incomplet pour cela:
297 297
 			if ($n = (strlen($suite) - strlen($texte))) {
298 298
 				$champ->apres = array(new Texte);
299 299
 				$champ->apres[0]->texte = substr($suite,0,$n);
300 300
 			}
301 301
 			*/
302
-		} else {
303
-			$texte = $suite;
304
-		}
305
-		phraser_vieux($champ);
306
-		$result[] = $champ;
307
-	}
308
-	if ($texte !== '') {
309
-		$result = phraser_polyglotte($texte, $ligne, $result);
310
-	}
311
-
312
-	return $result;
302
+        } else {
303
+            $texte = $suite;
304
+        }
305
+        phraser_vieux($champ);
306
+        $result[] = $champ;
307
+    }
308
+    if ($texte !== '') {
309
+        $result = phraser_polyglotte($texte, $ligne, $result);
310
+    }
311
+
312
+    return $result;
313 313
 }
314 314
 
315 315
 /**
@@ -324,17 +324,17 @@  discard block
 block discarded – undo
324 324
  * @see phraser_champs_interieurs()
325 325
  */
326 326
 function phraser_champs_etendus(string $texte, int $ligne, array $result): array {
327
-	if ($texte === '') {
328
-		return $result;
329
-	}
327
+    if ($texte === '') {
328
+        return $result;
329
+    }
330 330
 
331
-	$sep = '##';
332
-	while (str_contains($texte, $sep)) {
333
-		$sep .= '#';
334
-	}
331
+    $sep = '##';
332
+    while (str_contains($texte, $sep)) {
333
+        $sep .= '#';
334
+    }
335 335
 
336
-	$champs = phraser_champs_interieurs($texte, $ligne, $sep);
337
-	return array_merge($result, $champs);
336
+    $champs = phraser_champs_interieurs($texte, $ligne, $sep);
337
+    return array_merge($result, $champs);
338 338
 }
339 339
 
340 340
 /**
@@ -347,156 +347,156 @@  discard block
 block discarded – undo
347 347
  * @param Champ|Inclure|Idiome|Boucle $pointeur_champ
348 348
  */
349 349
 function phraser_args(string $texte, string $fin, string $sep, array $result, &$pointeur_champ, int &$pos_debut): array {
350
-	$length = strlen($texte);
351
-	while ($pos_debut < $length && trim($texte[$pos_debut]) === '') {
352
-		$pos_debut++;
353
-	}
354
-	while (($pos_debut < $length) && !str_contains($fin, $texte[$pos_debut])) {
355
-		// phraser_arg modifie directement le $texte, on fait donc avec ici en passant par une sous chaine
356
-		$st = substr($texte, $pos_debut);
357
-		$result = phraser_arg($st, $sep, $result, $pointeur_champ);
358
-		$pos_debut = $length - strlen((string) $st);
359
-		while ($pos_debut < $length && trim($texte[$pos_debut]) === '') {
360
-			$pos_debut++;
361
-		}
362
-	}
363
-
364
-	return $result;
350
+    $length = strlen($texte);
351
+    while ($pos_debut < $length && trim($texte[$pos_debut]) === '') {
352
+        $pos_debut++;
353
+    }
354
+    while (($pos_debut < $length) && !str_contains($fin, $texte[$pos_debut])) {
355
+        // phraser_arg modifie directement le $texte, on fait donc avec ici en passant par une sous chaine
356
+        $st = substr($texte, $pos_debut);
357
+        $result = phraser_arg($st, $sep, $result, $pointeur_champ);
358
+        $pos_debut = $length - strlen((string) $st);
359
+        while ($pos_debut < $length && trim($texte[$pos_debut]) === '') {
360
+            $pos_debut++;
361
+        }
362
+    }
363
+
364
+    return $result;
365 365
 }
366 366
 
367 367
 function phraser_arg(&$texte, $sep, $result, &$pointeur_champ) {
368
-	preg_match(',^(\|?[^}{)|]*)(.*)$,ms', (string) $texte, $match);
369
-	$suite = ltrim($match[2]);
370
-	$fonc = trim($match[1]);
371
-	if ($fonc && $fonc[0] == '|') {
372
-		$fonc = ltrim(substr($fonc, 1));
373
-	}
374
-	$res = [$fonc];
375
-	$err_f = '';
376
-	// cas du filtre sans argument ou du critere /
377
-	if (($suite && ($suite[0] != '{')) || ($fonc && $fonc[0] == '/')) {
378
-		// si pas d'argument, alors il faut une fonction ou un double |
379
-		if (!$match[1]) {
380
-			$err_f = ['zbug_erreur_filtre', ['filtre' => $texte]];
381
-			erreur_squelette($err_f, $pointeur_champ);
382
-			$texte = '';
383
-		} else {
384
-			$texte = $suite;
385
-		}
386
-		if ($err_f) {
387
-			$pointeur_champ->param = false;
388
-		} elseif ($fonc !== '') {
389
-			$pointeur_champ->param[] = $res;
390
-		}
391
-		// pour les balises avec faux filtres qui boudent ce dur larbeur
392
-		$pointeur_champ->fonctions[] = [$fonc, ''];
393
-
394
-		return $result;
395
-	}
396
-	$args = ltrim(substr($suite, 1)); // virer le '(' initial
397
-	$collecte = [];
398
-	while ($args && $args[0] != '}') {
399
-		if ($args[0] == '"') {
400
-			preg_match('/^(")([^"]*)(")(.*)$/ms', $args, $regs);
401
-		} elseif ($args[0] == "'") {
402
-			preg_match("/^(')([^']*)(')(.*)$/ms", $args, $regs);
403
-		} else {
404
-			preg_match('/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms', $args, $regs);
405
-			if (!isset($regs[2]) || !strlen($regs[2])) {
406
-				$err_f = ['zbug_erreur_filtre', ['filtre' => $args]];
407
-				erreur_squelette($err_f, $pointeur_champ);
408
-				$champ = new Texte();
409
-				$champ->apres = $champ->avant = $args = '';
410
-				break;
411
-			}
412
-		}
413
-		$arg = $regs[2];
414
-		if (trim($regs[1])) {
415
-			$champ = new Texte();
416
-			$champ->texte = $arg;
417
-			$champ->apres = $champ->avant = $regs[1];
418
-			$result[] = $champ;
419
-			$collecte[] = $champ;
420
-			$args = ltrim($regs[count($regs) - 1]);
421
-		} else {
422
-			if (!preg_match('/' . NOM_DE_CHAMP . '([{|])/', $arg, $r)) {
423
-				// 0 est un aveu d'impuissance. A completer
424
-				$arg = phraser_champs_exterieurs($arg, 0, $sep, $result);
425
-
426
-				$args = ltrim($regs[count($regs) - 1]);
427
-				$collecte = array_merge($collecte, $arg);
428
-				$result = array_merge($result, $arg);
429
-			} else {
430
-				$n = strpos($args, (string) $r[0]);
431
-				$pred = substr($args, 0, $n);
432
-				$par = ',}';
433
-				if (preg_match('/^(.*)\($/', $pred, $m)) {
434
-					$pred = $m[1];
435
-					$par = ')';
436
-				}
437
-				if ($pred) {
438
-					$champ = new Texte();
439
-					$champ->texte = $pred;
440
-					$champ->apres = $champ->avant = '';
441
-					$result[] = $champ;
442
-					$collecte[] = $champ;
443
-				}
444
-				$rec = substr($args, $n + strlen($r[0]) - 1);
445
-				$champ = new Champ();
446
-				$champ->nom_boucle = $r[2];
447
-				$champ->nom_champ = $r[3];
448
-				$champ->etoile = $r[5];
449
-				$next = $r[6];
450
-				while ($next == '{') {
451
-					phraser_arg($rec, $sep, [], $champ);
452
-					$args = ltrim((string) $rec);
453
-					$next = $args[0] ?? '';
454
-				}
455
-				while ($next == '|') {
456
-					$pos_apres = 0;
457
-					phraser_args($rec, $par, $sep, [], $champ, $pos_apres);
458
-					$args = substr((string) $rec, $pos_apres);
459
-					$next = $args[0] ?? '';
460
-				}
461
-				// Si erreur de syntaxe dans un sous-argument, propager.
462
-				if ($champ->param === false) {
463
-					$err_f = true;
464
-				} else {
465
-					phraser_vieux($champ);
466
-				}
467
-				if ($par == ')') {
468
-					$args = substr($args, 1);
469
-				}
470
-				$collecte[] = $champ;
471
-				$result[] = $champ;
472
-			}
473
-		}
474
-		if (isset($args[0]) && $args[0] == ',') {
475
-			$args = ltrim(substr($args, 1));
476
-			if ($collecte) {
477
-				$res[] = $collecte;
478
-				$collecte = [];
479
-			}
480
-		}
481
-	}
482
-	if ($collecte) {
483
-		$res[] = $collecte;
484
-		$collecte = [];
485
-	}
486
-	$texte = substr($args, 1);
487
-	$source = substr($suite, 0, strlen($suite) - strlen($texte));
488
-	// propager les erreurs, et ignorer les param vides
489
-	if ($pointeur_champ->param !== false) {
490
-		if ($err_f) {
491
-			$pointeur_champ->param = false;
492
-		} elseif ($fonc !== '' || count($res) > 1) {
493
-			$pointeur_champ->param[] = $res;
494
-		}
495
-	}
496
-	// pour les balises avec faux filtres qui boudent ce dur larbeur
497
-	$pointeur_champ->fonctions[] = [$fonc, $source];
498
-
499
-	return $result;
368
+    preg_match(',^(\|?[^}{)|]*)(.*)$,ms', (string) $texte, $match);
369
+    $suite = ltrim($match[2]);
370
+    $fonc = trim($match[1]);
371
+    if ($fonc && $fonc[0] == '|') {
372
+        $fonc = ltrim(substr($fonc, 1));
373
+    }
374
+    $res = [$fonc];
375
+    $err_f = '';
376
+    // cas du filtre sans argument ou du critere /
377
+    if (($suite && ($suite[0] != '{')) || ($fonc && $fonc[0] == '/')) {
378
+        // si pas d'argument, alors il faut une fonction ou un double |
379
+        if (!$match[1]) {
380
+            $err_f = ['zbug_erreur_filtre', ['filtre' => $texte]];
381
+            erreur_squelette($err_f, $pointeur_champ);
382
+            $texte = '';
383
+        } else {
384
+            $texte = $suite;
385
+        }
386
+        if ($err_f) {
387
+            $pointeur_champ->param = false;
388
+        } elseif ($fonc !== '') {
389
+            $pointeur_champ->param[] = $res;
390
+        }
391
+        // pour les balises avec faux filtres qui boudent ce dur larbeur
392
+        $pointeur_champ->fonctions[] = [$fonc, ''];
393
+
394
+        return $result;
395
+    }
396
+    $args = ltrim(substr($suite, 1)); // virer le '(' initial
397
+    $collecte = [];
398
+    while ($args && $args[0] != '}') {
399
+        if ($args[0] == '"') {
400
+            preg_match('/^(")([^"]*)(")(.*)$/ms', $args, $regs);
401
+        } elseif ($args[0] == "'") {
402
+            preg_match("/^(')([^']*)(')(.*)$/ms", $args, $regs);
403
+        } else {
404
+            preg_match('/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms', $args, $regs);
405
+            if (!isset($regs[2]) || !strlen($regs[2])) {
406
+                $err_f = ['zbug_erreur_filtre', ['filtre' => $args]];
407
+                erreur_squelette($err_f, $pointeur_champ);
408
+                $champ = new Texte();
409
+                $champ->apres = $champ->avant = $args = '';
410
+                break;
411
+            }
412
+        }
413
+        $arg = $regs[2];
414
+        if (trim($regs[1])) {
415
+            $champ = new Texte();
416
+            $champ->texte = $arg;
417
+            $champ->apres = $champ->avant = $regs[1];
418
+            $result[] = $champ;
419
+            $collecte[] = $champ;
420
+            $args = ltrim($regs[count($regs) - 1]);
421
+        } else {
422
+            if (!preg_match('/' . NOM_DE_CHAMP . '([{|])/', $arg, $r)) {
423
+                // 0 est un aveu d'impuissance. A completer
424
+                $arg = phraser_champs_exterieurs($arg, 0, $sep, $result);
425
+
426
+                $args = ltrim($regs[count($regs) - 1]);
427
+                $collecte = array_merge($collecte, $arg);
428
+                $result = array_merge($result, $arg);
429
+            } else {
430
+                $n = strpos($args, (string) $r[0]);
431
+                $pred = substr($args, 0, $n);
432
+                $par = ',}';
433
+                if (preg_match('/^(.*)\($/', $pred, $m)) {
434
+                    $pred = $m[1];
435
+                    $par = ')';
436
+                }
437
+                if ($pred) {
438
+                    $champ = new Texte();
439
+                    $champ->texte = $pred;
440
+                    $champ->apres = $champ->avant = '';
441
+                    $result[] = $champ;
442
+                    $collecte[] = $champ;
443
+                }
444
+                $rec = substr($args, $n + strlen($r[0]) - 1);
445
+                $champ = new Champ();
446
+                $champ->nom_boucle = $r[2];
447
+                $champ->nom_champ = $r[3];
448
+                $champ->etoile = $r[5];
449
+                $next = $r[6];
450
+                while ($next == '{') {
451
+                    phraser_arg($rec, $sep, [], $champ);
452
+                    $args = ltrim((string) $rec);
453
+                    $next = $args[0] ?? '';
454
+                }
455
+                while ($next == '|') {
456
+                    $pos_apres = 0;
457
+                    phraser_args($rec, $par, $sep, [], $champ, $pos_apres);
458
+                    $args = substr((string) $rec, $pos_apres);
459
+                    $next = $args[0] ?? '';
460
+                }
461
+                // Si erreur de syntaxe dans un sous-argument, propager.
462
+                if ($champ->param === false) {
463
+                    $err_f = true;
464
+                } else {
465
+                    phraser_vieux($champ);
466
+                }
467
+                if ($par == ')') {
468
+                    $args = substr($args, 1);
469
+                }
470
+                $collecte[] = $champ;
471
+                $result[] = $champ;
472
+            }
473
+        }
474
+        if (isset($args[0]) && $args[0] == ',') {
475
+            $args = ltrim(substr($args, 1));
476
+            if ($collecte) {
477
+                $res[] = $collecte;
478
+                $collecte = [];
479
+            }
480
+        }
481
+    }
482
+    if ($collecte) {
483
+        $res[] = $collecte;
484
+        $collecte = [];
485
+    }
486
+    $texte = substr($args, 1);
487
+    $source = substr($suite, 0, strlen($suite) - strlen($texte));
488
+    // propager les erreurs, et ignorer les param vides
489
+    if ($pointeur_champ->param !== false) {
490
+        if ($err_f) {
491
+            $pointeur_champ->param = false;
492
+        } elseif ($fonc !== '' || count($res) > 1) {
493
+            $pointeur_champ->param[] = $res;
494
+        }
495
+    }
496
+    // pour les balises avec faux filtres qui boudent ce dur larbeur
497
+    $pointeur_champ->fonctions[] = [$fonc, $source];
498
+
499
+    return $result;
500 500
 }
501 501
 
502 502
 /**
@@ -504,28 +504,28 @@  discard block
 block discarded – undo
504 504
  * et phraser les inclure sur les morceaux intermédiaires
505 505
  */
506 506
 function phraser_champs_exterieurs(string $texte, int $ligne, string $sep, array $nested_res): array {
507
-	$res = [];
508
-	$preg = ',^%' . preg_quote($sep, ',') . '([0-9]+)(\n*)@,';
509
-	while (($p = strpos($texte, "%$sep")) !== false) {
510
-		$suite = substr($texte, $p);
511
-		if (!preg_match($preg, $suite, $m)) {
512
-			break;
513
-		}
514
-		if ($p) {
515
-			$debut = substr($texte, 0, $p);
516
-			$res = phraser_inclure($debut, $ligne, $res);
517
-			$ligne += public_compte_ligne($debut);
518
-		}
519
-		$res[] = $nested_res[$m[1]];
520
-		$ligne += strlen($m[2]);
521
-		$texte = substr($suite, strlen($m[0]));
522
-	}
523
-
524
-	if ($texte !== '') {
525
-		$res = phraser_inclure($texte, $ligne, $res);
526
-	}
527
-
528
-	return $res;
507
+    $res = [];
508
+    $preg = ',^%' . preg_quote($sep, ',') . '([0-9]+)(\n*)@,';
509
+    while (($p = strpos($texte, "%$sep")) !== false) {
510
+        $suite = substr($texte, $p);
511
+        if (!preg_match($preg, $suite, $m)) {
512
+            break;
513
+        }
514
+        if ($p) {
515
+            $debut = substr($texte, 0, $p);
516
+            $res = phraser_inclure($debut, $ligne, $res);
517
+            $ligne += public_compte_ligne($debut);
518
+        }
519
+        $res[] = $nested_res[$m[1]];
520
+        $ligne += strlen($m[2]);
521
+        $texte = substr($suite, strlen($m[0]));
522
+    }
523
+
524
+    if ($texte !== '') {
525
+        $res = phraser_inclure($texte, $ligne, $res);
526
+    }
527
+
528
+    return $res;
529 529
 }
530 530
 
531 531
 /**
@@ -542,75 +542,75 @@  discard block
 block discarded – undo
542 542
  */
543 543
 function phraser_champs_interieurs(string $texte, int $no_ligne, string $sep): array {
544 544
 
545
-	$champs_trouves = [];
546
-	do {
547
-		$parties = [];
548
-		$nbl = $no_ligne;
549
-		$search_pos = 0;
550
-
551
-		// trouver tous les champs intérieurs (sans autre champs imbriqués), les analyser, et les remplacer par un placehoder
552
-		// le $texte est découpé en parties qu'on re-parse ensuite jusqu'à ce qu'on ne trouve plus de nouveaux champs
553
-		while (
554
-			(($p = strpos($texte, '[', $search_pos)) !== false)
555
-			&& preg_match(CHAMP_ETENDU, $texte, $match, PREG_OFFSET_CAPTURE, $p)
556
-		) {
557
-			$poss = array_column($match, 1);
558
-			$match = array_column($match, 0);
559
-			// si jamais il y a une sous balise inclue dans la partie 7, alors on est pas dans le champ le plus interieur, on continue le search plus loin
560
-			if (str_contains($match[7], '[') && preg_match(CHAMP_ETENDU, $texte, $r, 0, $poss[7])) {
561
-				$search_pos = $poss[7];
562
-				continue;
563
-			}
564
-
565
-			$nbl_debut = 0;
566
-			if ($poss[0]) {
567
-				$nbl_debut = public_compte_ligne($texte, 0, $poss[0]);
568
-				$parties[] = substr($texte, 0, $poss[0]);
569
-			}
570
-			$nbl += $nbl_debut;
571
-
572
-			$champ = new Champ();
573
-			$champ->ligne = $nbl;
574
-			$champ->nom_boucle = $match[3];
575
-			$champ->nom_champ = $match[4];
576
-			$champ->etoile = $match[6];
577
-			$nbl_champ = public_compte_ligne($texte, $poss[0], $poss[0] + strlen($match[0]));
578
-
579
-			// phraser_args indiquera ou commence apres
580
-			$pos_apres = 0;
581
-			$champs_trouves = phraser_args($match[7], ')', $sep, $champs_trouves, $champ, $pos_apres);
582
-			phraser_vieux($champ);
583
-			$champ->avant =	phraser_champs_exterieurs($match[1], $nbl, $sep, $champs_trouves);
584
-			$apres = substr($match[7], $pos_apres + 1);
585
-
586
-			$nbl_debut_champ = 0;
587
-			if (!empty($apres)) {
588
-				$nbl_debut_champ = public_compte_ligne($texte, $poss[0], $poss[7] + $pos_apres + 1);
589
-			}
590
-			$champ->apres = phraser_champs_exterieurs($apres, $nbl + $nbl_debut_champ, $sep, $champs_trouves);
591
-
592
-			// reinjecter la boucle si c'en est une
593
-			phraser_boucle_placeholder($champ);
594
-
595
-			$champs_trouves[] = $champ;
596
-			$j = count($champs_trouves) - 1;
597
-			// on remplace ce champ par un placeholder
598
-			// ajouter $nbl_champ retour ligne pour que la partie conserve le nombre de lignes lors des itérations suivantes
599
-			$parties[] = ($t = "%{$sep}{$j}" . str_repeat("\n", $nbl_champ) . '@');
600
-			$nbl += $nbl_champ;
601
-
602
-			$texte = substr($texte, $poss[0] + strlen($match[0]));
603
-			$search_pos = 0;
604
-		}
605
-
606
-		// si on a trouvé des morceaux, il faut recommencer
607
-		if (count($parties)) {
608
-			// reprenons tous les morceaux qu'on a mis de côté car ne matchant pas (encore)
609
-			$texte = implode('', $parties) . $texte;
610
-		}
611
-	} while (count($parties));
612
-
613
-	return phraser_champs_exterieurs($texte, $no_ligne, $sep, $champs_trouves);
545
+    $champs_trouves = [];
546
+    do {
547
+        $parties = [];
548
+        $nbl = $no_ligne;
549
+        $search_pos = 0;
550
+
551
+        // trouver tous les champs intérieurs (sans autre champs imbriqués), les analyser, et les remplacer par un placehoder
552
+        // le $texte est découpé en parties qu'on re-parse ensuite jusqu'à ce qu'on ne trouve plus de nouveaux champs
553
+        while (
554
+            (($p = strpos($texte, '[', $search_pos)) !== false)
555
+            && preg_match(CHAMP_ETENDU, $texte, $match, PREG_OFFSET_CAPTURE, $p)
556
+        ) {
557
+            $poss = array_column($match, 1);
558
+            $match = array_column($match, 0);
559
+            // si jamais il y a une sous balise inclue dans la partie 7, alors on est pas dans le champ le plus interieur, on continue le search plus loin
560
+            if (str_contains($match[7], '[') && preg_match(CHAMP_ETENDU, $texte, $r, 0, $poss[7])) {
561
+                $search_pos = $poss[7];
562
+                continue;
563
+            }
564
+
565
+            $nbl_debut = 0;
566
+            if ($poss[0]) {
567
+                $nbl_debut = public_compte_ligne($texte, 0, $poss[0]);
568
+                $parties[] = substr($texte, 0, $poss[0]);
569
+            }
570
+            $nbl += $nbl_debut;
571
+
572
+            $champ = new Champ();
573
+            $champ->ligne = $nbl;
574
+            $champ->nom_boucle = $match[3];
575
+            $champ->nom_champ = $match[4];
576
+            $champ->etoile = $match[6];
577
+            $nbl_champ = public_compte_ligne($texte, $poss[0], $poss[0] + strlen($match[0]));
578
+
579
+            // phraser_args indiquera ou commence apres
580
+            $pos_apres = 0;
581
+            $champs_trouves = phraser_args($match[7], ')', $sep, $champs_trouves, $champ, $pos_apres);
582
+            phraser_vieux($champ);
583
+            $champ->avant =	phraser_champs_exterieurs($match[1], $nbl, $sep, $champs_trouves);
584
+            $apres = substr($match[7], $pos_apres + 1);
585
+
586
+            $nbl_debut_champ = 0;
587
+            if (!empty($apres)) {
588
+                $nbl_debut_champ = public_compte_ligne($texte, $poss[0], $poss[7] + $pos_apres + 1);
589
+            }
590
+            $champ->apres = phraser_champs_exterieurs($apres, $nbl + $nbl_debut_champ, $sep, $champs_trouves);
591
+
592
+            // reinjecter la boucle si c'en est une
593
+            phraser_boucle_placeholder($champ);
594
+
595
+            $champs_trouves[] = $champ;
596
+            $j = count($champs_trouves) - 1;
597
+            // on remplace ce champ par un placeholder
598
+            // ajouter $nbl_champ retour ligne pour que la partie conserve le nombre de lignes lors des itérations suivantes
599
+            $parties[] = ($t = "%{$sep}{$j}" . str_repeat("\n", $nbl_champ) . '@');
600
+            $nbl += $nbl_champ;
601
+
602
+            $texte = substr($texte, $poss[0] + strlen($match[0]));
603
+            $search_pos = 0;
604
+        }
605
+
606
+        // si on a trouvé des morceaux, il faut recommencer
607
+        if (count($parties)) {
608
+            // reprenons tous les morceaux qu'on a mis de côté car ne matchant pas (encore)
609
+            $texte = implode('', $parties) . $texte;
610
+        }
611
+    } while (count($parties));
612
+
613
+    return phraser_champs_exterieurs($texte, $no_ligne, $sep, $champs_trouves);
614 614
 }
615 615
 
616 616
 /**
@@ -621,20 +621,20 @@  discard block
 block discarded – undo
621 621
  * @return void
622 622
  */
623 623
 function phraser_vieux(&$champ) {
624
-	$nom = $champ->nom_champ;
625
-	if ($champ->param) {
626
-		if ($nom == 'MODELE') {
627
-			if (!function_exists('phraser_vieux_modele')) {
628
-				include_spip('public/normaliser');
629
-			}
630
-			phraser_vieux_modele($champ);
631
-		} elseif ($nom == 'INCLURE' || $nom == 'INCLUDE') {
632
-			if (!function_exists('phraser_vieux_inclu')) {
633
-				include_spip('public/normaliser');
634
-			}
635
-			phraser_vieux_inclu($champ);
636
-		}
637
-	}
624
+    $nom = $champ->nom_champ;
625
+    if ($champ->param) {
626
+        if ($nom == 'MODELE') {
627
+            if (!function_exists('phraser_vieux_modele')) {
628
+                include_spip('public/normaliser');
629
+            }
630
+            phraser_vieux_modele($champ);
631
+        } elseif ($nom == 'INCLURE' || $nom == 'INCLUDE') {
632
+            if (!function_exists('phraser_vieux_inclu')) {
633
+                include_spip('public/normaliser');
634
+            }
635
+            phraser_vieux_inclu($champ);
636
+        }
637
+    }
638 638
 }
639 639
 
640 640
 
@@ -662,199 +662,199 @@  discard block
 block discarded – undo
662 662
  **/
663 663
 function phraser_criteres($params, &$result) {
664 664
 
665
-	$err_ci = ''; // indiquera s'il y a eu une erreur
666
-	$args = [];
667
-	$type = $result->type_requete;
668
-	$doublons = [];
669
-	foreach ($params as $v) {
670
-		$var = $v[1][0];
671
-		$param = ($var->type != 'texte') ? '' : $var->texte;
672
-		if (((is_countable($v) ? count($v) : 0) > 2) && (!preg_match(',[^A-Za-z]IN[^A-Za-z],i', (string) $param))) {
673
-			// plus d'un argument et pas le critere IN:
674
-			// detecter comme on peut si c'est le critere implicite LIMIT debut, fin
675
-			if (
676
-				$var->type != 'texte' || preg_match('/^(n|n-|(n-)?\d+)$/S', (string) $param)
677
-			) {
678
-				$op = ',';
679
-				$not = false;
680
-				$cond = false;
681
-			} else {
682
-				// Le debut du premier argument est l'operateur
683
-				preg_match('/^([!]?)([a-zA-Z]\w*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms', (string) $param, $m);
684
-				$op = $m[2];
685
-				$not = (bool) $m[1];
686
-				$cond = (bool) $m[3];
687
-				// virer le premier argument,
688
-				// et mettre son reliquat eventuel
689
-				// Recopier pour ne pas alterer le texte source
690
-				// utile au debusqueur
691
-				if ($m[4]) {
692
-					// une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
693
-					if (preg_match(',^(["\'])(.*)\1$,', $m[4])) {
694
-						$c = null;
695
-						eval('$c = ' . $m[4] . ';');
696
-						if (isset($c)) {
697
-							$m[4] = $c;
698
-						}
699
-					}
700
-					$texte = new Texte();
701
-					$texte->texte = $m[4];
702
-					$v[1][0] = $texte;
703
-				} else {
704
-					array_shift($v[1]);
705
-				}
706
-			}
707
-			array_shift($v); // $v[O] est vide
708
-			$crit = new Critere();
709
-			$crit->op = $op;
710
-			$crit->not = $not;
711
-			$crit->cond = $cond;
712
-			$crit->exclus = '';
713
-			$crit->param = $v;
714
-			$args[] = $crit;
715
-		} else {
716
-			if ($var->type != 'texte') {
717
-				// cas 1 seul arg ne commencant pas par du texte brut:
718
-				// erreur ou critere infixe "/"
719
-				if (($v[1][1]->type != 'texte') || (trim((string) $v[1][1]->texte) != '/')) {
720
-					$err_ci = [
721
-						'zbug_critere_inconnu',
722
-						['critere' => $var->nom_champ]
723
-					];
724
-					erreur_squelette($err_ci, $result);
725
-				} else {
726
-					$crit = new Critere();
727
-					$crit->op = '/';
728
-					$crit->not = false;
729
-					$crit->exclus = '';
730
-					$crit->param = [[$v[1][0]], [$v[1][2]]];
731
-					$args[] = $crit;
732
-				}
733
-			} else {
734
-				// traiter qq lexemes particuliers pour faciliter la suite
735
-				// les separateurs
736
-				if ($var->apres) {
737
-					$result->separateur[] = $param;
738
-				} elseif ($param == 'tout' || $param == 'tous') {
739
-					$result->modificateur['tout'] = true;
740
-				} elseif ($param == 'plat') {
741
-					$result->modificateur['plat'] = true;
742
-				}
743
-
744
-				// Boucle hierarchie, analyser le critere id_rubrique
745
-				// et les autres critères {id_x} pour forcer {tout} sur
746
-				// ceux-ci pour avoir la rubrique mere...
747
-				// Les autres critères de la boucle hierarchie doivent être
748
-				// traités normalement.
749
-				elseif (
750
-					strcasecmp($type, 'hierarchie') == 0
751
-					&& !preg_match(",^id_rubrique\b,", (string) $param)
752
-					&& preg_match(',^id_\w+\s*$,', (string) $param)
753
-				) {
754
-					$result->modificateur['tout'] = true;
755
-				} elseif (strcasecmp($type, 'hierarchie') == 0 && $param == 'id_rubrique') {
756
-					// rien a faire sur {id_rubrique} tout seul
757
-				} else {
758
-					// pas d'emplacement statique, faut un dynamique
759
-					// mais il y a 2 cas qui ont les 2 !
760
-					if (($param == 'unique') || (preg_match(',^!?doublons *,', (string) $param))) {
761
-						// cette variable sera inseree dans le code
762
-						// et son nom sert d'indicateur des maintenant
763
-						$result->doublons = '$doublons_index';
764
-						if ($param == 'unique') {
765
-							$param = 'doublons';
766
-						}
767
-					} elseif ($param == 'recherche') {
768
-						// meme chose (a cause de #nom_de_boucle:URL_*)
769
-						$result->hash = ' ';
770
-					}
771
-
772
-					if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', (string) $param, $m)) {
773
-						$crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
774
-					} elseif (
775
-						preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
776
-						')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', (string) $param, $m)
777
-					) {
778
-						$a2 = trim($m[8]);
779
-						if ($a2 && ($a2[0] == "'" || $a2[0] == '"') && $a2[0] == substr($a2, -1)) {
780
-							$a2 = substr($a2, 1, -1);
781
-						}
782
-						$crit = phraser_critere_infixe(
783
-							$m[2],
784
-							$a2,
785
-							$v,
786
-							(($m[2] == 'lang_select') ? $m[2] : $m[7]),
787
-							$m[6],
788
-							$m[5]
789
-						);
790
-						$crit->exclus = $m[1];
791
-					} elseif (
792
-						preg_match('/^([!]?)\s*(' .
793
-						CHAMP_SQL_PLUS_FONC .
794
-						')\s*(\??)(.*)$/is', (string) $param, $m)
795
-					) {
796
-						// contient aussi les comparaisons implicites !
797
-						// Comme ci-dessus:
798
-						// le premier arg contient l'operateur
799
-						array_shift($v);
800
-						if ($m[6]) {
801
-							$v[0][0] = new Texte();
802
-							$v[0][0]->texte = $m[6];
803
-						} else {
804
-							array_shift($v[0]);
805
-							if (!$v[0]) {
806
-								array_shift($v);
807
-							}
808
-						}
809
-						$crit = new Critere();
810
-						$crit->op = $m[2];
811
-						$crit->param = $v;
812
-						$crit->not = (bool) $m[1];
813
-						$crit->cond = (bool) $m[5];
814
-					} else {
815
-						$err_ci = [
816
-							'zbug_critere_inconnu',
817
-							['critere' => $param]
818
-						];
819
-						erreur_squelette($err_ci, $result);
820
-					}
821
-
822
-					if ((!preg_match(',^!?doublons *,', (string) $param)) || $crit->not) {
823
-						$args[] = $crit;
824
-					} else {
825
-						$doublons[] = $crit;
826
-					}
827
-				}
828
-			}
829
-		}
830
-	}
831
-
832
-	// les doublons non nies doivent etre le dernier critere
833
-	// pour que la variable $doublon_index ait la bonne valeur
834
-	// cf critere_doublon
835
-	if ($doublons) {
836
-		$args = [...$args, ...$doublons];
837
-	}
838
-
839
-	// Si erreur, laisser la chaine dans ce champ pour le HTTP 503
840
-	if (!$err_ci) {
841
-		$result->criteres = $args;
842
-	}
665
+    $err_ci = ''; // indiquera s'il y a eu une erreur
666
+    $args = [];
667
+    $type = $result->type_requete;
668
+    $doublons = [];
669
+    foreach ($params as $v) {
670
+        $var = $v[1][0];
671
+        $param = ($var->type != 'texte') ? '' : $var->texte;
672
+        if (((is_countable($v) ? count($v) : 0) > 2) && (!preg_match(',[^A-Za-z]IN[^A-Za-z],i', (string) $param))) {
673
+            // plus d'un argument et pas le critere IN:
674
+            // detecter comme on peut si c'est le critere implicite LIMIT debut, fin
675
+            if (
676
+                $var->type != 'texte' || preg_match('/^(n|n-|(n-)?\d+)$/S', (string) $param)
677
+            ) {
678
+                $op = ',';
679
+                $not = false;
680
+                $cond = false;
681
+            } else {
682
+                // Le debut du premier argument est l'operateur
683
+                preg_match('/^([!]?)([a-zA-Z]\w*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms', (string) $param, $m);
684
+                $op = $m[2];
685
+                $not = (bool) $m[1];
686
+                $cond = (bool) $m[3];
687
+                // virer le premier argument,
688
+                // et mettre son reliquat eventuel
689
+                // Recopier pour ne pas alterer le texte source
690
+                // utile au debusqueur
691
+                if ($m[4]) {
692
+                    // une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
693
+                    if (preg_match(',^(["\'])(.*)\1$,', $m[4])) {
694
+                        $c = null;
695
+                        eval('$c = ' . $m[4] . ';');
696
+                        if (isset($c)) {
697
+                            $m[4] = $c;
698
+                        }
699
+                    }
700
+                    $texte = new Texte();
701
+                    $texte->texte = $m[4];
702
+                    $v[1][0] = $texte;
703
+                } else {
704
+                    array_shift($v[1]);
705
+                }
706
+            }
707
+            array_shift($v); // $v[O] est vide
708
+            $crit = new Critere();
709
+            $crit->op = $op;
710
+            $crit->not = $not;
711
+            $crit->cond = $cond;
712
+            $crit->exclus = '';
713
+            $crit->param = $v;
714
+            $args[] = $crit;
715
+        } else {
716
+            if ($var->type != 'texte') {
717
+                // cas 1 seul arg ne commencant pas par du texte brut:
718
+                // erreur ou critere infixe "/"
719
+                if (($v[1][1]->type != 'texte') || (trim((string) $v[1][1]->texte) != '/')) {
720
+                    $err_ci = [
721
+                        'zbug_critere_inconnu',
722
+                        ['critere' => $var->nom_champ]
723
+                    ];
724
+                    erreur_squelette($err_ci, $result);
725
+                } else {
726
+                    $crit = new Critere();
727
+                    $crit->op = '/';
728
+                    $crit->not = false;
729
+                    $crit->exclus = '';
730
+                    $crit->param = [[$v[1][0]], [$v[1][2]]];
731
+                    $args[] = $crit;
732
+                }
733
+            } else {
734
+                // traiter qq lexemes particuliers pour faciliter la suite
735
+                // les separateurs
736
+                if ($var->apres) {
737
+                    $result->separateur[] = $param;
738
+                } elseif ($param == 'tout' || $param == 'tous') {
739
+                    $result->modificateur['tout'] = true;
740
+                } elseif ($param == 'plat') {
741
+                    $result->modificateur['plat'] = true;
742
+                }
743
+
744
+                // Boucle hierarchie, analyser le critere id_rubrique
745
+                // et les autres critères {id_x} pour forcer {tout} sur
746
+                // ceux-ci pour avoir la rubrique mere...
747
+                // Les autres critères de la boucle hierarchie doivent être
748
+                // traités normalement.
749
+                elseif (
750
+                    strcasecmp($type, 'hierarchie') == 0
751
+                    && !preg_match(",^id_rubrique\b,", (string) $param)
752
+                    && preg_match(',^id_\w+\s*$,', (string) $param)
753
+                ) {
754
+                    $result->modificateur['tout'] = true;
755
+                } elseif (strcasecmp($type, 'hierarchie') == 0 && $param == 'id_rubrique') {
756
+                    // rien a faire sur {id_rubrique} tout seul
757
+                } else {
758
+                    // pas d'emplacement statique, faut un dynamique
759
+                    // mais il y a 2 cas qui ont les 2 !
760
+                    if (($param == 'unique') || (preg_match(',^!?doublons *,', (string) $param))) {
761
+                        // cette variable sera inseree dans le code
762
+                        // et son nom sert d'indicateur des maintenant
763
+                        $result->doublons = '$doublons_index';
764
+                        if ($param == 'unique') {
765
+                            $param = 'doublons';
766
+                        }
767
+                    } elseif ($param == 'recherche') {
768
+                        // meme chose (a cause de #nom_de_boucle:URL_*)
769
+                        $result->hash = ' ';
770
+                    }
771
+
772
+                    if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', (string) $param, $m)) {
773
+                        $crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
774
+                    } elseif (
775
+                        preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
776
+                        ')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', (string) $param, $m)
777
+                    ) {
778
+                        $a2 = trim($m[8]);
779
+                        if ($a2 && ($a2[0] == "'" || $a2[0] == '"') && $a2[0] == substr($a2, -1)) {
780
+                            $a2 = substr($a2, 1, -1);
781
+                        }
782
+                        $crit = phraser_critere_infixe(
783
+                            $m[2],
784
+                            $a2,
785
+                            $v,
786
+                            (($m[2] == 'lang_select') ? $m[2] : $m[7]),
787
+                            $m[6],
788
+                            $m[5]
789
+                        );
790
+                        $crit->exclus = $m[1];
791
+                    } elseif (
792
+                        preg_match('/^([!]?)\s*(' .
793
+                        CHAMP_SQL_PLUS_FONC .
794
+                        ')\s*(\??)(.*)$/is', (string) $param, $m)
795
+                    ) {
796
+                        // contient aussi les comparaisons implicites !
797
+                        // Comme ci-dessus:
798
+                        // le premier arg contient l'operateur
799
+                        array_shift($v);
800
+                        if ($m[6]) {
801
+                            $v[0][0] = new Texte();
802
+                            $v[0][0]->texte = $m[6];
803
+                        } else {
804
+                            array_shift($v[0]);
805
+                            if (!$v[0]) {
806
+                                array_shift($v);
807
+                            }
808
+                        }
809
+                        $crit = new Critere();
810
+                        $crit->op = $m[2];
811
+                        $crit->param = $v;
812
+                        $crit->not = (bool) $m[1];
813
+                        $crit->cond = (bool) $m[5];
814
+                    } else {
815
+                        $err_ci = [
816
+                            'zbug_critere_inconnu',
817
+                            ['critere' => $param]
818
+                        ];
819
+                        erreur_squelette($err_ci, $result);
820
+                    }
821
+
822
+                    if ((!preg_match(',^!?doublons *,', (string) $param)) || $crit->not) {
823
+                        $args[] = $crit;
824
+                    } else {
825
+                        $doublons[] = $crit;
826
+                    }
827
+                }
828
+            }
829
+        }
830
+    }
831
+
832
+    // les doublons non nies doivent etre le dernier critere
833
+    // pour que la variable $doublon_index ait la bonne valeur
834
+    // cf critere_doublon
835
+    if ($doublons) {
836
+        $args = [...$args, ...$doublons];
837
+    }
838
+
839
+    // Si erreur, laisser la chaine dans ce champ pour le HTTP 503
840
+    if (!$err_ci) {
841
+        $result->criteres = $args;
842
+    }
843 843
 }
844 844
 
845 845
 function phraser_critere_infixe($arg1, $arg2, $args, $op, $not, $cond) {
846
-	$args[0] = new Texte();
847
-	$args[0]->texte = $arg1;
848
-	$args[0] = [$args[0]];
849
-	$args[1][0] = new Texte();
850
-	$args[1][0]->texte = $arg2;
851
-	$crit = new Critere();
852
-	$crit->op = $op;
853
-	$crit->not = (bool) $not;
854
-	$crit->cond = (bool) $cond;
855
-	$crit->param = $args;
856
-
857
-	return $crit;
846
+    $args[0] = new Texte();
847
+    $args[0]->texte = $arg1;
848
+    $args[0] = [$args[0]];
849
+    $args[1][0] = new Texte();
850
+    $args[1][0]->texte = $arg2;
851
+    $crit = new Critere();
852
+    $crit->op = $op;
853
+    $crit->not = (bool) $not;
854
+    $crit->cond = (bool) $cond;
855
+    $crit->param = $args;
856
+
857
+    return $crit;
858 858
 }
859 859
 
860 860
 /**
@@ -865,11 +865,11 @@  discard block
 block discarded – undo
865 865
  * @return int
866 866
  */
867 867
 function public_compte_ligne($texte, $debut = 0, $fin = null) {
868
-	if (is_null($fin)) {
869
-		return substr_count((string) $texte, "\n", $debut);
870
-	} else {
871
-		return substr_count((string) $texte, "\n", $debut, $fin - $debut);
872
-	}
868
+    if (is_null($fin)) {
869
+        return substr_count((string) $texte, "\n", $debut);
870
+    } else {
871
+        return substr_count((string) $texte, "\n", $debut, $fin - $debut);
872
+    }
873 873
 }
874 874
 
875 875
 
@@ -879,87 +879,87 @@  discard block
 block discarded – undo
879 879
  * et ensuite on regarde son vrai debut soit <B_xxx> soit <BB_xxx>
880 880
  */
881 881
 function public_trouver_premiere_boucle(string $texte, string $id_parent, array $descr, int $pos_debut_texte = 0): ?array {
882
-	$premiere_boucle = null;
883
-	$pos_derniere_boucle_anonyme = $pos_debut_texte;
884
-
885
-	$current_pos = $pos_debut_texte;
886
-	while (($pos_boucle = strpos((string) $texte, BALISE_BOUCLE, $current_pos)) !== false) {
887
-		$current_pos = $pos_boucle + 1;
888
-		$pos_parent = strpos((string) $texte, '(', $pos_boucle);
889
-
890
-		$id_boucle = '';
891
-		if ($pos_parent !== false) {
892
-			$id_boucle = trim(substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), $pos_parent - $pos_boucle - strlen(BALISE_BOUCLE)));
893
-		}
894
-		if (
895
-			$pos_parent === false
896
-			|| strlen($id_boucle) && (!is_numeric($id_boucle) && !str_starts_with($id_boucle, '_'))
897
-		) {
898
-			$result = new Boucle();
899
-			$result->id_parent = $id_parent;
900
-			$result->descr = $descr;
901
-
902
-			// un id_boucle pour l'affichage de l'erreur
903
-			if (!strlen($id_boucle)) {
904
-				$id_boucle = substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
905
-			}
906
-			$result->id_boucle = $id_boucle;
907
-			$err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
908
-			erreur_squelette($err_b, $result);
909
-
910
-			continue;
911
-		}
912
-		else {
913
-			$boucle = [
914
-				'id_boucle' => $id_boucle,
915
-				'id_boucle_err' => $id_boucle,
916
-				'debut_boucle' => $pos_boucle,
917
-				'pos_boucle' => $pos_boucle,
918
-				'pos_parent' => $pos_parent,
919
-				'pos_precond' => false,
920
-				'pos_precond_inside' => false,
921
-				'pos_preaff' => false,
922
-				'pos_preaff_inside' => false,
923
-			];
924
-
925
-			// un id_boucle pour l'affichage de l'erreur sur les boucle anonymes
926
-			if (!strlen($id_boucle)) {
927
-				$boucle['id_boucle_err'] = substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
928
-			}
929
-
930
-			// trouver sa position de depart reelle : au <Bxx> ou au <BBxx>
931
-			$precond_boucle = BALISE_PRECOND_BOUCLE . $id_boucle . '>';
932
-			$pos_precond = strpos((string) $texte, $precond_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
933
-			if (
934
-				$pos_precond !== false
935
-				&& $pos_precond < $boucle['debut_boucle']
936
-			) {
937
-				$boucle['debut_boucle'] = $pos_precond;
938
-				$boucle['pos_precond'] = $pos_precond;
939
-				$boucle['pos_precond_inside'] = $pos_precond + strlen($precond_boucle);
940
-			}
941
-
942
-			$preaff_boucle = BALISE_PREAFF_BOUCLE . $id_boucle . '>';
943
-			$pos_preaff = strpos((string) $texte, $preaff_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
944
-			if (
945
-				$pos_preaff !== false
946
-				&& $pos_preaff < $boucle['debut_boucle']
947
-			) {
948
-				$boucle['debut_boucle'] = $pos_preaff;
949
-				$boucle['pos_preaff'] = $pos_preaff;
950
-				$boucle['pos_preaff_inside'] = $pos_preaff + strlen($preaff_boucle);
951
-			}
952
-			if (!strlen($id_boucle)) {
953
-				$pos_derniere_boucle_anonyme = $pos_boucle;
954
-			}
955
-
956
-			if (is_null($premiere_boucle) || $premiere_boucle['debut_boucle'] > $boucle['debut_boucle']) {
957
-				$premiere_boucle = $boucle;
958
-			}
959
-		}
960
-	}
961
-
962
-	return $premiere_boucle;
882
+    $premiere_boucle = null;
883
+    $pos_derniere_boucle_anonyme = $pos_debut_texte;
884
+
885
+    $current_pos = $pos_debut_texte;
886
+    while (($pos_boucle = strpos((string) $texte, BALISE_BOUCLE, $current_pos)) !== false) {
887
+        $current_pos = $pos_boucle + 1;
888
+        $pos_parent = strpos((string) $texte, '(', $pos_boucle);
889
+
890
+        $id_boucle = '';
891
+        if ($pos_parent !== false) {
892
+            $id_boucle = trim(substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), $pos_parent - $pos_boucle - strlen(BALISE_BOUCLE)));
893
+        }
894
+        if (
895
+            $pos_parent === false
896
+            || strlen($id_boucle) && (!is_numeric($id_boucle) && !str_starts_with($id_boucle, '_'))
897
+        ) {
898
+            $result = new Boucle();
899
+            $result->id_parent = $id_parent;
900
+            $result->descr = $descr;
901
+
902
+            // un id_boucle pour l'affichage de l'erreur
903
+            if (!strlen($id_boucle)) {
904
+                $id_boucle = substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
905
+            }
906
+            $result->id_boucle = $id_boucle;
907
+            $err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
908
+            erreur_squelette($err_b, $result);
909
+
910
+            continue;
911
+        }
912
+        else {
913
+            $boucle = [
914
+                'id_boucle' => $id_boucle,
915
+                'id_boucle_err' => $id_boucle,
916
+                'debut_boucle' => $pos_boucle,
917
+                'pos_boucle' => $pos_boucle,
918
+                'pos_parent' => $pos_parent,
919
+                'pos_precond' => false,
920
+                'pos_precond_inside' => false,
921
+                'pos_preaff' => false,
922
+                'pos_preaff_inside' => false,
923
+            ];
924
+
925
+            // un id_boucle pour l'affichage de l'erreur sur les boucle anonymes
926
+            if (!strlen($id_boucle)) {
927
+                $boucle['id_boucle_err'] = substr((string) $texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
928
+            }
929
+
930
+            // trouver sa position de depart reelle : au <Bxx> ou au <BBxx>
931
+            $precond_boucle = BALISE_PRECOND_BOUCLE . $id_boucle . '>';
932
+            $pos_precond = strpos((string) $texte, $precond_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
933
+            if (
934
+                $pos_precond !== false
935
+                && $pos_precond < $boucle['debut_boucle']
936
+            ) {
937
+                $boucle['debut_boucle'] = $pos_precond;
938
+                $boucle['pos_precond'] = $pos_precond;
939
+                $boucle['pos_precond_inside'] = $pos_precond + strlen($precond_boucle);
940
+            }
941
+
942
+            $preaff_boucle = BALISE_PREAFF_BOUCLE . $id_boucle . '>';
943
+            $pos_preaff = strpos((string) $texte, $preaff_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
944
+            if (
945
+                $pos_preaff !== false
946
+                && $pos_preaff < $boucle['debut_boucle']
947
+            ) {
948
+                $boucle['debut_boucle'] = $pos_preaff;
949
+                $boucle['pos_preaff'] = $pos_preaff;
950
+                $boucle['pos_preaff_inside'] = $pos_preaff + strlen($preaff_boucle);
951
+            }
952
+            if (!strlen($id_boucle)) {
953
+                $pos_derniere_boucle_anonyme = $pos_boucle;
954
+            }
955
+
956
+            if (is_null($premiere_boucle) || $premiere_boucle['debut_boucle'] > $boucle['debut_boucle']) {
957
+                $premiere_boucle = $boucle;
958
+            }
959
+        }
960
+    }
961
+
962
+    return $premiere_boucle;
963 963
 }
964 964
 
965 965
 /**
@@ -975,68 +975,68 @@  discard block
 block discarded – undo
975 975
  *   la description de la boucle dans un tableau associatif
976 976
  */
977 977
 function public_trouver_fin_boucle(string $texte, string $id_parent, array $boucle, int $pos_debut_texte, $result): array {
978
-	$id_boucle = $boucle['id_boucle'];
979
-	$pos_courante = $pos_debut_texte;
980
-
981
-	$boucle['pos_postcond'] = false;
982
-	$boucle['pos_postcond_inside'] = false;
983
-	$boucle['pos_altern'] = false;
984
-	$boucle['pos_altern_inside'] = false;
985
-	$boucle['pos_postaff'] = false;
986
-	$boucle['pos_postaff_inside'] = false;
987
-
988
-	$pos_anonyme_next = null;
989
-	// si c'est une boucle anonyme, chercher la position de la prochaine boucle anonyme
990
-	if (!strlen((string) $id_boucle)) {
991
-		$pos_anonyme_next = strpos((string) $texte, BALISE_BOUCLE . '(', $pos_courante);
992
-	}
993
-
994
-	//
995
-	// 1. Recuperer la partie conditionnelle apres
996
-	//
997
-	$apres_boucle = BALISE_POSTCOND_BOUCLE . $id_boucle . '>';
998
-	$pos_apres = strpos((string) $texte, $apres_boucle, $pos_courante);
999
-	if (
1000
-		$pos_apres !== false
1001
-		&& (!$pos_anonyme_next || $pos_apres < $pos_anonyme_next)
1002
-	) {
1003
-		$boucle['pos_postcond'] = $pos_apres;
1004
-		$pos_apres += strlen($apres_boucle);
1005
-		$boucle['pos_postcond_inside'] = $pos_apres;
1006
-		$pos_courante = $pos_apres ;
1007
-	}
1008
-
1009
-	//
1010
-	// 2. Récuperer la partie alternative apres
1011
-	//
1012
-	$altern_boucle = BALISE_ALT_BOUCLE . $id_boucle . '>';
1013
-	$pos_altern = strpos((string) $texte, $altern_boucle, $pos_courante);
1014
-	if (
1015
-		$pos_altern !== false
1016
-		&& (!$pos_anonyme_next || $pos_altern < $pos_anonyme_next)
1017
-	) {
1018
-		$boucle['pos_altern'] = $pos_altern;
1019
-		$pos_altern += strlen($altern_boucle);
1020
-		$boucle['pos_altern_inside'] = $pos_altern;
1021
-		$pos_courante = $pos_altern;
1022
-	}
1023
-
1024
-	//
1025
-	// 3. Recuperer la partie footer non alternative
1026
-	//
1027
-	$postaff_boucle = BALISE_POSTAFF_BOUCLE . $id_boucle . '>';
1028
-	$pos_postaff = strpos((string) $texte, $postaff_boucle, $pos_courante);
1029
-	if (
1030
-		$pos_postaff !== false
1031
-		&& (!$pos_anonyme_next || $pos_postaff < $pos_anonyme_next)
1032
-	) {
1033
-		$boucle['pos_postaff'] = $pos_postaff;
1034
-		$pos_postaff += strlen($postaff_boucle);
1035
-		$boucle['pos_postaff_inside'] = $pos_postaff;
1036
-		$pos_courante = $pos_postaff ;
1037
-	}
1038
-
1039
-	return $boucle;
978
+    $id_boucle = $boucle['id_boucle'];
979
+    $pos_courante = $pos_debut_texte;
980
+
981
+    $boucle['pos_postcond'] = false;
982
+    $boucle['pos_postcond_inside'] = false;
983
+    $boucle['pos_altern'] = false;
984
+    $boucle['pos_altern_inside'] = false;
985
+    $boucle['pos_postaff'] = false;
986
+    $boucle['pos_postaff_inside'] = false;
987
+
988
+    $pos_anonyme_next = null;
989
+    // si c'est une boucle anonyme, chercher la position de la prochaine boucle anonyme
990
+    if (!strlen((string) $id_boucle)) {
991
+        $pos_anonyme_next = strpos((string) $texte, BALISE_BOUCLE . '(', $pos_courante);
992
+    }
993
+
994
+    //
995
+    // 1. Recuperer la partie conditionnelle apres
996
+    //
997
+    $apres_boucle = BALISE_POSTCOND_BOUCLE . $id_boucle . '>';
998
+    $pos_apres = strpos((string) $texte, $apres_boucle, $pos_courante);
999
+    if (
1000
+        $pos_apres !== false
1001
+        && (!$pos_anonyme_next || $pos_apres < $pos_anonyme_next)
1002
+    ) {
1003
+        $boucle['pos_postcond'] = $pos_apres;
1004
+        $pos_apres += strlen($apres_boucle);
1005
+        $boucle['pos_postcond_inside'] = $pos_apres;
1006
+        $pos_courante = $pos_apres ;
1007
+    }
1008
+
1009
+    //
1010
+    // 2. Récuperer la partie alternative apres
1011
+    //
1012
+    $altern_boucle = BALISE_ALT_BOUCLE . $id_boucle . '>';
1013
+    $pos_altern = strpos((string) $texte, $altern_boucle, $pos_courante);
1014
+    if (
1015
+        $pos_altern !== false
1016
+        && (!$pos_anonyme_next || $pos_altern < $pos_anonyme_next)
1017
+    ) {
1018
+        $boucle['pos_altern'] = $pos_altern;
1019
+        $pos_altern += strlen($altern_boucle);
1020
+        $boucle['pos_altern_inside'] = $pos_altern;
1021
+        $pos_courante = $pos_altern;
1022
+    }
1023
+
1024
+    //
1025
+    // 3. Recuperer la partie footer non alternative
1026
+    //
1027
+    $postaff_boucle = BALISE_POSTAFF_BOUCLE . $id_boucle . '>';
1028
+    $pos_postaff = strpos((string) $texte, $postaff_boucle, $pos_courante);
1029
+    if (
1030
+        $pos_postaff !== false
1031
+        && (!$pos_anonyme_next || $pos_postaff < $pos_anonyme_next)
1032
+    ) {
1033
+        $boucle['pos_postaff'] = $pos_postaff;
1034
+        $pos_postaff += strlen($postaff_boucle);
1035
+        $boucle['pos_postaff_inside'] = $pos_postaff;
1036
+        $pos_courante = $pos_postaff ;
1037
+    }
1038
+
1039
+    return $boucle;
1040 1040
 }
1041 1041
 
1042 1042
 
@@ -1045,21 +1045,21 @@  discard block
 block discarded – undo
1045 1045
  * @param null|object $boucle
1046 1046
  */
1047 1047
 function phraser_boucle_placeholder(&$champ, ?string $boucle_placeholder = null, $boucle = null) {
1048
-	static $boucles_connues = [];
1049
-	// si c'est un appel pour memoriser une boucle, memorisons la
1050
-	if (is_string($champ) && !empty($boucle_placeholder) && !empty($boucle)) {
1051
-		$boucles_connues[$boucle_placeholder][$champ] = &$boucle;
1052
-	}
1053
-	else {
1054
-		if (!empty($champ->nom_champ) && !empty($boucles_connues[$champ->nom_champ])) {
1055
-			$placeholder = $champ->nom_champ;
1056
-			$id = reset($champ->param[0][1]);
1057
-			$id = $id->texte;
1058
-			if (!empty($boucles_connues[$placeholder][$id])) {
1059
-				$champ = $boucles_connues[$placeholder][$id];
1060
-			}
1061
-		}
1062
-	}
1048
+    static $boucles_connues = [];
1049
+    // si c'est un appel pour memoriser une boucle, memorisons la
1050
+    if (is_string($champ) && !empty($boucle_placeholder) && !empty($boucle)) {
1051
+        $boucles_connues[$boucle_placeholder][$champ] = &$boucle;
1052
+    }
1053
+    else {
1054
+        if (!empty($champ->nom_champ) && !empty($boucles_connues[$champ->nom_champ])) {
1055
+            $placeholder = $champ->nom_champ;
1056
+            $id = reset($champ->param[0][1]);
1057
+            $id = $id->texte;
1058
+            if (!empty($boucles_connues[$placeholder][$id])) {
1059
+                $champ = $boucles_connues[$placeholder][$id];
1060
+            }
1061
+        }
1062
+    }
1063 1063
 }
1064 1064
 
1065 1065
 
@@ -1069,11 +1069,11 @@  discard block
 block discarded – undo
1069 1069
  * @return string
1070 1070
  */
1071 1071
 function public_generer_boucle_placeholder(string $id_boucle, &$boucle, string $boucle_placeholder, int $nb_lignes): string {
1072
-	$placeholder = "[(#{$boucle_placeholder}{" . $id_boucle . '})' . str_pad('', $nb_lignes, "\n") . ']';
1073
-	//memoriser la boucle a reinjecter
1074
-	$id_boucle = "$id_boucle";
1075
-	phraser_boucle_placeholder($id_boucle, $boucle_placeholder, $boucle);
1076
-	return $placeholder;
1072
+    $placeholder = "[(#{$boucle_placeholder}{" . $id_boucle . '})' . str_pad('', $nb_lignes, "\n") . ']';
1073
+    //memoriser la boucle a reinjecter
1074
+    $id_boucle = "$id_boucle";
1075
+    phraser_boucle_placeholder($id_boucle, $boucle_placeholder, $boucle);
1076
+    return $placeholder;
1077 1077
 }
1078 1078
 
1079 1079
 /**
@@ -1086,264 +1086,264 @@  discard block
 block discarded – undo
1086 1086
  */
1087 1087
 function public_phraser_html_dist(string $texte, string $id_parent, array &$boucles, array $descr, int $ligne_debut_texte = 1, ?string $boucle_placeholder = null): array {
1088 1088
 
1089
-	$all_res = [];
1090
-	// definir un placholder pour les boucles dont on est sur d'avoir aucune occurence dans le squelette
1091
-	if (is_null($boucle_placeholder)) {
1092
-		do {
1093
-			$boucle_placeholder = 'BOUCLE_PLACEHOLDER_' . strtoupper(md5(uniqid()));
1094
-		} while (str_contains((string) $texte, $boucle_placeholder));
1095
-	}
1096
-
1097
-	$ligne_debut_initial = $ligne_debut_texte;
1098
-	$pos_debut_texte = 0;
1099
-	while ($boucle = public_trouver_premiere_boucle($texte, $id_parent, $descr, $pos_debut_texte)) {
1100
-		$err_b = ''; // indiquera s'il y a eu une erreur
1101
-		$result = new Boucle();
1102
-		$result->id_parent = $id_parent;
1103
-		$result->descr = $descr;
1104
-
1105
-		$pos_courante = $boucle['pos_boucle'];
1106
-		$pos_parent = $boucle['pos_parent'];
1107
-		$id_boucle_search = $id_boucle = $boucle['id_boucle'];
1108
-
1109
-		$ligne_preaff = $ligne_avant = $ligne_milieu = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_parent);
1110
-
1111
-		// boucle anonyme ?
1112
-		if (!strlen((string) $id_boucle)) {
1113
-			$id_boucle = '_anon_L' . $ligne_milieu . '_' . substr(md5('anonyme:' . $id_parent . ':' . json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1114
-		}
1115
-
1116
-		$pos_debut_boucle = $pos_courante;
1117
-
1118
-		$pos_milieu = $pos_parent;
1119
-
1120
-		// Regarder si on a une partie conditionnelle avant <B_xxx>
1121
-		if ($boucle['pos_precond'] !== false) {
1122
-			$pos_debut_boucle = $boucle['pos_precond'];
1123
-
1124
-			$pos_avant = $boucle['pos_precond_inside'];
1125
-			$result->avant = substr((string) $texte, $pos_avant, $pos_courante - $pos_avant);
1126
-			$ligne_avant = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1127
-		}
1128
-
1129
-		// Regarder si on a une partie inconditionnelle avant <BB_xxx>
1130
-		if ($boucle['pos_preaff'] !== false) {
1131
-			$end_preaff = $pos_debut_boucle;
1132
-
1133
-			$pos_preaff = $boucle['pos_preaff_inside'];
1134
-			$result->preaff = substr((string) $texte, $pos_preaff, $end_preaff - $pos_preaff);
1135
-			$ligne_preaff = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1136
-		}
1137
-
1138
-		$result->id_boucle = $id_boucle;
1139
-
1140
-		if (
1141
-			!preg_match(SPEC_BOUCLE, (string) $texte, $match, 0, $pos_milieu)
1142
-			|| ($pos_match = strpos((string) $texte, (string) $match[0], $pos_milieu)) === false
1143
-			|| $pos_match > $pos_milieu
1144
-		) {
1145
-			$err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
1146
-			erreur_squelette($err_b, $result);
1147
-
1148
-			$ligne_debut_texte += public_compte_ligne($texte, $pos_debut_texte, $pos_courante + 1);
1149
-			$pos_debut_texte = $pos_courante + 1;
1150
-			continue;
1151
-		}
1152
-
1153
-		$result->type_requete = $match[0];
1154
-		$pos_milieu += strlen($match[0]);
1155
-		$pos_courante = $pos_milieu; // on s'en sert pour compter les lignes plus precisemment
1156
-
1157
-		$type = $match[1];
1158
-		$jointures = trim($match[2]);
1159
-		$table_optionnelle = ($match[3]);
1160
-		if ($jointures) {
1161
-			// on affecte pas ici les jointures explicites, mais dans la compilation
1162
-			// ou elles seront completees des jointures declarees
1163
-			$result->jointures_explicites = $jointures;
1164
-		}
1165
-
1166
-		if ($table_optionnelle) {
1167
-			$result->table_optionnelle = true;
1168
-			$result->type_table_optionnelle = $type;
1169
-		}
1170
-
1171
-		// 1ere passe sur les criteres, vu comme des arguments sans fct
1172
-		// Resultat mis dans result->param
1173
-		$pos_fin_criteres = $pos_milieu;
1174
-		phraser_args($texte, '/>', '', $all_res, $result, $pos_fin_criteres);
1175
-
1176
-		// En 2e passe result->criteres contiendra un tableau
1177
-		// pour l'instant on met le source (chaine) :
1178
-		// si elle reste ici au final, c'est qu'elle contient une erreur
1179
-		$pos_courante = $pos_fin_criteres; // on s'en sert pour compter les lignes plus precisemment
1180
-		$result->criteres = substr((string) $texte, $pos_milieu, $pos_fin_criteres - $pos_milieu);
1181
-		$pos_milieu = $pos_fin_criteres;
1182
-
1183
-		//
1184
-		// Recuperer la fin :
1185
-		//
1186
-		if ($texte[$pos_milieu] === '/') {
1187
-			// boucle autofermante : pas de partie conditionnelle apres
1188
-			$pos_courante += 2;
1189
-			$result->milieu = '';
1190
-		} else {
1191
-			$pos_milieu += 1;
1192
-
1193
-			$fin_boucle = BALISE_FIN_BOUCLE . $id_boucle_search . '>';
1194
-			$pos_fin = strpos((string) $texte, $fin_boucle, $pos_milieu);
1195
-			if ($pos_fin === false) {
1196
-				$err_b = [
1197
-					'zbug_erreur_boucle_fermant',
1198
-					['id' => $id_boucle]
1199
-				];
1200
-				erreur_squelette($err_b, $result);
1201
-				$pos_courante += strlen($fin_boucle);
1202
-			}
1203
-			else {
1204
-				// verifier une eventuelle imbrication d'une boucle homonyme
1205
-				// (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1206
-				$search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
1207
-				$search_from = $pos_milieu;
1208
-				$nb_open = 1;
1209
-				$nb_close = 1;
1210
-				$maxiter = 0;
1211
-				do {
1212
-					while (
1213
-						$nb_close < $nb_open
1214
-						&& ($p = strpos((string) $texte, $fin_boucle, $pos_fin + 1))
1215
-					) {
1216
-						$nb_close++;
1217
-						$pos_fin = $p;
1218
-					}
1219
-					// si on a pas trouve assez de boucles fermantes, sortir de la, on a fait de notre mieux
1220
-					if ($nb_close < $nb_open) {
1221
-						break;
1222
-					}
1223
-					while (
1224
-						($p = strpos((string) $texte, $search_debut_boucle, $search_from))
1225
-						&& $p < $pos_fin
1226
-					) {
1227
-						$nb_open++;
1228
-						$search_from = $p + 1;
1229
-					}
1230
-				} while ($nb_close < $nb_open && $maxiter++ < 5);
1231
-
1232
-				$pos_courante = $pos_fin + strlen($fin_boucle);
1233
-			}
1234
-			$result->milieu = substr((string) $texte, $pos_milieu, $pos_fin - $pos_milieu);
1235
-		}
1236
-
1237
-		$ligne_suite = $ligne_apres = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_courante);
1238
-		$boucle = public_trouver_fin_boucle($texte, $id_parent, $boucle, $pos_courante, $result);
1239
-
1240
-		//
1241
-		// 1. Partie conditionnelle apres ?
1242
-		//
1243
-		if ($boucle['pos_postcond']) {
1244
-			$result->apres = substr((string) $texte, $pos_courante, $boucle['pos_postcond'] - $pos_courante);
1245
-			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postcond_inside']);
1246
-			$pos_courante = $boucle['pos_postcond_inside'] ;
1247
-		}
1248
-
1249
-
1250
-		//
1251
-		// 2. Partie alternative apres ?
1252
-		//
1253
-		$ligne_altern = $ligne_suite;
1254
-		if ($boucle['pos_altern']) {
1255
-			$result->altern = substr((string) $texte, $pos_courante, $boucle['pos_altern'] - $pos_courante);
1256
-			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_altern_inside']);
1257
-			$pos_courante = $boucle['pos_altern_inside'];
1258
-		}
1259
-
1260
-		//
1261
-		// 3. Partie footer non alternative ?
1262
-		//
1263
-		$ligne_postaff = $ligne_suite;
1264
-		if ($boucle['pos_postaff']) {
1265
-			$result->postaff = substr((string) $texte, $pos_courante, $boucle['pos_postaff'] - $pos_courante);
1266
-			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postaff_inside']);
1267
-			$pos_courante = $boucle['pos_postaff_inside'];
1268
-		}
1269
-
1270
-		$result->ligne = $ligne_preaff;
1271
-
1272
-		if ($p = strpos($type, ':')) {
1273
-			$result->sql_serveur = substr($type, 0, $p);
1274
-			$type = substr($type, $p + 1);
1275
-		}
1276
-		$soustype = strtolower($type);
1277
-
1278
-		if (!isset($GLOBALS['table_des_tables'][$soustype])) {
1279
-			$soustype = $type;
1280
-		}
1281
-
1282
-		$result->type_requete = $soustype;
1283
-		// Lancer la 2e passe sur les criteres si la 1ere etait bonne
1284
-		if (!is_array($result->param)) {
1285
-			$err_b = true;
1286
-		} else {
1287
-			phraser_criteres($result->param, $result);
1288
-			if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) {
1289
-				$result->type_requete = TYPE_RECURSIF;
1290
-				$args = $result->param;
1291
-				array_unshift(
1292
-					$args,
1293
-					substr($type, strlen(TYPE_RECURSIF))
1294
-				);
1295
-				$result->param = $args;
1296
-			}
1297
-		}
1298
-
1299
-		$descr['id_mere_contexte'] = $id_boucle;
1300
-		$result->milieu = public_phraser_html_dist($result->milieu, $id_boucle, $boucles, $descr, $ligne_milieu, $boucle_placeholder);
1301
-		// reserver la place dans la pile des boucles pour compiler ensuite dans le bon ordre
1302
-		// ie les boucles qui apparaissent dans les partie conditionnelles doivent etre compilees apres cette boucle
1303
-		// si il y a deja une boucle de ce nom, cela declenchera une erreur ensuite
1304
-		if (empty($boucles[$id_boucle])) {
1305
-			$boucles[$id_boucle] = null;
1306
-		}
1307
-		$result->preaff = public_phraser_html_dist($result->preaff, $id_parent, $boucles, $descr, $ligne_preaff, $boucle_placeholder);
1308
-		$result->avant = public_phraser_html_dist($result->avant, $id_parent, $boucles, $descr, $ligne_avant, $boucle_placeholder);
1309
-		$result->apres = public_phraser_html_dist($result->apres, $id_parent, $boucles, $descr, $ligne_apres, $boucle_placeholder);
1310
-		$result->altern = public_phraser_html_dist($result->altern, $id_parent, $boucles, $descr, $ligne_altern, $boucle_placeholder);
1311
-		$result->postaff = public_phraser_html_dist($result->postaff, $id_parent, $boucles, $descr, $ligne_postaff, $boucle_placeholder);
1312
-
1313
-		// Prevenir le generateur de code que le squelette est faux
1314
-		if ($err_b) {
1315
-			$result->type_requete = false;
1316
-		}
1317
-
1318
-		// Verifier qu'il n'y a pas double definition
1319
-		// apres analyse des sous-parties (pas avant).
1320
-		if (!empty($boucles[$id_boucle])) {
1321
-			if ($boucles[$id_boucle]->type_requete !== false) {
1322
-				$err_b_d = [
1323
-					'zbug_erreur_boucle_double',
1324
-					['id' => $id_boucle]
1325
-				];
1326
-				erreur_squelette($err_b_d, $result);
1327
-				// Prevenir le generateur de code que le squelette est faux
1328
-				$boucles[$id_boucle]->type_requete = false;
1329
-			}
1330
-		} else {
1331
-			$boucles[$id_boucle] = $result;
1332
-		}
1333
-
1334
-		// remplacer la boucle par un placeholder qui compte le meme nombre de lignes
1335
-		$placeholder = public_generer_boucle_placeholder($id_boucle, $boucles[$id_boucle], $boucle_placeholder, $ligne_suite - $ligne_debut_texte);
1336
-		$longueur_boucle = $pos_courante - $boucle['debut_boucle'];
1337
-		$texte = substr_replace((string) $texte, $placeholder, $boucle['debut_boucle'], $longueur_boucle);
1338
-		$pos_courante = $pos_courante - $longueur_boucle + strlen($placeholder);
1339
-
1340
-		// phraser la partie avant le debut de la boucle
1341
-		#$all_res = phraser_champs_etendus(substr($texte, $pos_debut_texte, $boucle['debut_boucle'] - $pos_debut_texte), $ligne_debut_texte, $all_res);
1342
-		#$all_res[] = &$boucles[$id_boucle];
1343
-
1344
-		$ligne_debut_texte = $ligne_suite;
1345
-		$pos_debut_texte = $pos_courante;
1346
-	}
1347
-
1348
-	return phraser_champs_etendus($texte, $ligne_debut_initial, $all_res);
1089
+    $all_res = [];
1090
+    // definir un placholder pour les boucles dont on est sur d'avoir aucune occurence dans le squelette
1091
+    if (is_null($boucle_placeholder)) {
1092
+        do {
1093
+            $boucle_placeholder = 'BOUCLE_PLACEHOLDER_' . strtoupper(md5(uniqid()));
1094
+        } while (str_contains((string) $texte, $boucle_placeholder));
1095
+    }
1096
+
1097
+    $ligne_debut_initial = $ligne_debut_texte;
1098
+    $pos_debut_texte = 0;
1099
+    while ($boucle = public_trouver_premiere_boucle($texte, $id_parent, $descr, $pos_debut_texte)) {
1100
+        $err_b = ''; // indiquera s'il y a eu une erreur
1101
+        $result = new Boucle();
1102
+        $result->id_parent = $id_parent;
1103
+        $result->descr = $descr;
1104
+
1105
+        $pos_courante = $boucle['pos_boucle'];
1106
+        $pos_parent = $boucle['pos_parent'];
1107
+        $id_boucle_search = $id_boucle = $boucle['id_boucle'];
1108
+
1109
+        $ligne_preaff = $ligne_avant = $ligne_milieu = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_parent);
1110
+
1111
+        // boucle anonyme ?
1112
+        if (!strlen((string) $id_boucle)) {
1113
+            $id_boucle = '_anon_L' . $ligne_milieu . '_' . substr(md5('anonyme:' . $id_parent . ':' . json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1114
+        }
1115
+
1116
+        $pos_debut_boucle = $pos_courante;
1117
+
1118
+        $pos_milieu = $pos_parent;
1119
+
1120
+        // Regarder si on a une partie conditionnelle avant <B_xxx>
1121
+        if ($boucle['pos_precond'] !== false) {
1122
+            $pos_debut_boucle = $boucle['pos_precond'];
1123
+
1124
+            $pos_avant = $boucle['pos_precond_inside'];
1125
+            $result->avant = substr((string) $texte, $pos_avant, $pos_courante - $pos_avant);
1126
+            $ligne_avant = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1127
+        }
1128
+
1129
+        // Regarder si on a une partie inconditionnelle avant <BB_xxx>
1130
+        if ($boucle['pos_preaff'] !== false) {
1131
+            $end_preaff = $pos_debut_boucle;
1132
+
1133
+            $pos_preaff = $boucle['pos_preaff_inside'];
1134
+            $result->preaff = substr((string) $texte, $pos_preaff, $end_preaff - $pos_preaff);
1135
+            $ligne_preaff = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1136
+        }
1137
+
1138
+        $result->id_boucle = $id_boucle;
1139
+
1140
+        if (
1141
+            !preg_match(SPEC_BOUCLE, (string) $texte, $match, 0, $pos_milieu)
1142
+            || ($pos_match = strpos((string) $texte, (string) $match[0], $pos_milieu)) === false
1143
+            || $pos_match > $pos_milieu
1144
+        ) {
1145
+            $err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
1146
+            erreur_squelette($err_b, $result);
1147
+
1148
+            $ligne_debut_texte += public_compte_ligne($texte, $pos_debut_texte, $pos_courante + 1);
1149
+            $pos_debut_texte = $pos_courante + 1;
1150
+            continue;
1151
+        }
1152
+
1153
+        $result->type_requete = $match[0];
1154
+        $pos_milieu += strlen($match[0]);
1155
+        $pos_courante = $pos_milieu; // on s'en sert pour compter les lignes plus precisemment
1156
+
1157
+        $type = $match[1];
1158
+        $jointures = trim($match[2]);
1159
+        $table_optionnelle = ($match[3]);
1160
+        if ($jointures) {
1161
+            // on affecte pas ici les jointures explicites, mais dans la compilation
1162
+            // ou elles seront completees des jointures declarees
1163
+            $result->jointures_explicites = $jointures;
1164
+        }
1165
+
1166
+        if ($table_optionnelle) {
1167
+            $result->table_optionnelle = true;
1168
+            $result->type_table_optionnelle = $type;
1169
+        }
1170
+
1171
+        // 1ere passe sur les criteres, vu comme des arguments sans fct
1172
+        // Resultat mis dans result->param
1173
+        $pos_fin_criteres = $pos_milieu;
1174
+        phraser_args($texte, '/>', '', $all_res, $result, $pos_fin_criteres);
1175
+
1176
+        // En 2e passe result->criteres contiendra un tableau
1177
+        // pour l'instant on met le source (chaine) :
1178
+        // si elle reste ici au final, c'est qu'elle contient une erreur
1179
+        $pos_courante = $pos_fin_criteres; // on s'en sert pour compter les lignes plus precisemment
1180
+        $result->criteres = substr((string) $texte, $pos_milieu, $pos_fin_criteres - $pos_milieu);
1181
+        $pos_milieu = $pos_fin_criteres;
1182
+
1183
+        //
1184
+        // Recuperer la fin :
1185
+        //
1186
+        if ($texte[$pos_milieu] === '/') {
1187
+            // boucle autofermante : pas de partie conditionnelle apres
1188
+            $pos_courante += 2;
1189
+            $result->milieu = '';
1190
+        } else {
1191
+            $pos_milieu += 1;
1192
+
1193
+            $fin_boucle = BALISE_FIN_BOUCLE . $id_boucle_search . '>';
1194
+            $pos_fin = strpos((string) $texte, $fin_boucle, $pos_milieu);
1195
+            if ($pos_fin === false) {
1196
+                $err_b = [
1197
+                    'zbug_erreur_boucle_fermant',
1198
+                    ['id' => $id_boucle]
1199
+                ];
1200
+                erreur_squelette($err_b, $result);
1201
+                $pos_courante += strlen($fin_boucle);
1202
+            }
1203
+            else {
1204
+                // verifier une eventuelle imbrication d'une boucle homonyme
1205
+                // (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1206
+                $search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
1207
+                $search_from = $pos_milieu;
1208
+                $nb_open = 1;
1209
+                $nb_close = 1;
1210
+                $maxiter = 0;
1211
+                do {
1212
+                    while (
1213
+                        $nb_close < $nb_open
1214
+                        && ($p = strpos((string) $texte, $fin_boucle, $pos_fin + 1))
1215
+                    ) {
1216
+                        $nb_close++;
1217
+                        $pos_fin = $p;
1218
+                    }
1219
+                    // si on a pas trouve assez de boucles fermantes, sortir de la, on a fait de notre mieux
1220
+                    if ($nb_close < $nb_open) {
1221
+                        break;
1222
+                    }
1223
+                    while (
1224
+                        ($p = strpos((string) $texte, $search_debut_boucle, $search_from))
1225
+                        && $p < $pos_fin
1226
+                    ) {
1227
+                        $nb_open++;
1228
+                        $search_from = $p + 1;
1229
+                    }
1230
+                } while ($nb_close < $nb_open && $maxiter++ < 5);
1231
+
1232
+                $pos_courante = $pos_fin + strlen($fin_boucle);
1233
+            }
1234
+            $result->milieu = substr((string) $texte, $pos_milieu, $pos_fin - $pos_milieu);
1235
+        }
1236
+
1237
+        $ligne_suite = $ligne_apres = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_courante);
1238
+        $boucle = public_trouver_fin_boucle($texte, $id_parent, $boucle, $pos_courante, $result);
1239
+
1240
+        //
1241
+        // 1. Partie conditionnelle apres ?
1242
+        //
1243
+        if ($boucle['pos_postcond']) {
1244
+            $result->apres = substr((string) $texte, $pos_courante, $boucle['pos_postcond'] - $pos_courante);
1245
+            $ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postcond_inside']);
1246
+            $pos_courante = $boucle['pos_postcond_inside'] ;
1247
+        }
1248
+
1249
+
1250
+        //
1251
+        // 2. Partie alternative apres ?
1252
+        //
1253
+        $ligne_altern = $ligne_suite;
1254
+        if ($boucle['pos_altern']) {
1255
+            $result->altern = substr((string) $texte, $pos_courante, $boucle['pos_altern'] - $pos_courante);
1256
+            $ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_altern_inside']);
1257
+            $pos_courante = $boucle['pos_altern_inside'];
1258
+        }
1259
+
1260
+        //
1261
+        // 3. Partie footer non alternative ?
1262
+        //
1263
+        $ligne_postaff = $ligne_suite;
1264
+        if ($boucle['pos_postaff']) {
1265
+            $result->postaff = substr((string) $texte, $pos_courante, $boucle['pos_postaff'] - $pos_courante);
1266
+            $ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postaff_inside']);
1267
+            $pos_courante = $boucle['pos_postaff_inside'];
1268
+        }
1269
+
1270
+        $result->ligne = $ligne_preaff;
1271
+
1272
+        if ($p = strpos($type, ':')) {
1273
+            $result->sql_serveur = substr($type, 0, $p);
1274
+            $type = substr($type, $p + 1);
1275
+        }
1276
+        $soustype = strtolower($type);
1277
+
1278
+        if (!isset($GLOBALS['table_des_tables'][$soustype])) {
1279
+            $soustype = $type;
1280
+        }
1281
+
1282
+        $result->type_requete = $soustype;
1283
+        // Lancer la 2e passe sur les criteres si la 1ere etait bonne
1284
+        if (!is_array($result->param)) {
1285
+            $err_b = true;
1286
+        } else {
1287
+            phraser_criteres($result->param, $result);
1288
+            if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) {
1289
+                $result->type_requete = TYPE_RECURSIF;
1290
+                $args = $result->param;
1291
+                array_unshift(
1292
+                    $args,
1293
+                    substr($type, strlen(TYPE_RECURSIF))
1294
+                );
1295
+                $result->param = $args;
1296
+            }
1297
+        }
1298
+
1299
+        $descr['id_mere_contexte'] = $id_boucle;
1300
+        $result->milieu = public_phraser_html_dist($result->milieu, $id_boucle, $boucles, $descr, $ligne_milieu, $boucle_placeholder);
1301
+        // reserver la place dans la pile des boucles pour compiler ensuite dans le bon ordre
1302
+        // ie les boucles qui apparaissent dans les partie conditionnelles doivent etre compilees apres cette boucle
1303
+        // si il y a deja une boucle de ce nom, cela declenchera une erreur ensuite
1304
+        if (empty($boucles[$id_boucle])) {
1305
+            $boucles[$id_boucle] = null;
1306
+        }
1307
+        $result->preaff = public_phraser_html_dist($result->preaff, $id_parent, $boucles, $descr, $ligne_preaff, $boucle_placeholder);
1308
+        $result->avant = public_phraser_html_dist($result->avant, $id_parent, $boucles, $descr, $ligne_avant, $boucle_placeholder);
1309
+        $result->apres = public_phraser_html_dist($result->apres, $id_parent, $boucles, $descr, $ligne_apres, $boucle_placeholder);
1310
+        $result->altern = public_phraser_html_dist($result->altern, $id_parent, $boucles, $descr, $ligne_altern, $boucle_placeholder);
1311
+        $result->postaff = public_phraser_html_dist($result->postaff, $id_parent, $boucles, $descr, $ligne_postaff, $boucle_placeholder);
1312
+
1313
+        // Prevenir le generateur de code que le squelette est faux
1314
+        if ($err_b) {
1315
+            $result->type_requete = false;
1316
+        }
1317
+
1318
+        // Verifier qu'il n'y a pas double definition
1319
+        // apres analyse des sous-parties (pas avant).
1320
+        if (!empty($boucles[$id_boucle])) {
1321
+            if ($boucles[$id_boucle]->type_requete !== false) {
1322
+                $err_b_d = [
1323
+                    'zbug_erreur_boucle_double',
1324
+                    ['id' => $id_boucle]
1325
+                ];
1326
+                erreur_squelette($err_b_d, $result);
1327
+                // Prevenir le generateur de code que le squelette est faux
1328
+                $boucles[$id_boucle]->type_requete = false;
1329
+            }
1330
+        } else {
1331
+            $boucles[$id_boucle] = $result;
1332
+        }
1333
+
1334
+        // remplacer la boucle par un placeholder qui compte le meme nombre de lignes
1335
+        $placeholder = public_generer_boucle_placeholder($id_boucle, $boucles[$id_boucle], $boucle_placeholder, $ligne_suite - $ligne_debut_texte);
1336
+        $longueur_boucle = $pos_courante - $boucle['debut_boucle'];
1337
+        $texte = substr_replace((string) $texte, $placeholder, $boucle['debut_boucle'], $longueur_boucle);
1338
+        $pos_courante = $pos_courante - $longueur_boucle + strlen($placeholder);
1339
+
1340
+        // phraser la partie avant le debut de la boucle
1341
+        #$all_res = phraser_champs_etendus(substr($texte, $pos_debut_texte, $boucle['debut_boucle'] - $pos_debut_texte), $ligne_debut_texte, $all_res);
1342
+        #$all_res[] = &$boucles[$id_boucle];
1343
+
1344
+        $ligne_debut_texte = $ligne_suite;
1345
+        $pos_debut_texte = $pos_courante;
1346
+    }
1347
+
1348
+    return phraser_champs_etendus($texte, $ligne_debut_initial, $all_res);
1349 1349
 }
Please login to merge, or discard this patch.
ecrire/public/aiguiller.php 1 patch
Indentation   +285 added lines, -285 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 /**
@@ -18,154 +18,154 @@  discard block
 block discarded – undo
18 18
  * @return string
19 19
  */
20 20
 function securiser_redirect_action($redirect) {
21
-	$redirect ??= '';
22
-	// cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
23
-	if (str_contains($redirect, '%')) {
24
-		$r2 = urldecode($redirect);
25
-		if (($r3 = securiser_redirect_action($r2)) !== $r2) {
26
-			return $r3;
27
-		}
28
-	}
29
-	if (
30
-		(tester_url_absolue($redirect) || preg_match(',^\w+:,', trim($redirect)))
31
-		&& !defined('_AUTORISER_ACTION_ABS_REDIRECT')
32
-	) {
33
-		// si l'url est une url du site, on la laisse passer sans rien faire
34
-		// c'est encore le plus simple
35
-		$base = $GLOBALS['meta']['adresse_site'] . '/';
36
-		if (strlen($base) && str_starts_with($redirect, $base)) {
37
-			return $redirect;
38
-		}
39
-		$base = url_de_base();
40
-		if (strlen($base) && str_starts_with($redirect, $base)) {
41
-			return $redirect;
42
-		}
21
+    $redirect ??= '';
22
+    // cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
23
+    if (str_contains($redirect, '%')) {
24
+        $r2 = urldecode($redirect);
25
+        if (($r3 = securiser_redirect_action($r2)) !== $r2) {
26
+            return $r3;
27
+        }
28
+    }
29
+    if (
30
+        (tester_url_absolue($redirect) || preg_match(',^\w+:,', trim($redirect)))
31
+        && !defined('_AUTORISER_ACTION_ABS_REDIRECT')
32
+    ) {
33
+        // si l'url est une url du site, on la laisse passer sans rien faire
34
+        // c'est encore le plus simple
35
+        $base = $GLOBALS['meta']['adresse_site'] . '/';
36
+        if (strlen($base) && str_starts_with($redirect, $base)) {
37
+            return $redirect;
38
+        }
39
+        $base = url_de_base();
40
+        if (strlen($base) && str_starts_with($redirect, $base)) {
41
+            return $redirect;
42
+        }
43 43
 
44
-		return '';
45
-	}
44
+        return '';
45
+    }
46 46
 
47
-	return $redirect;
47
+    return $redirect;
48 48
 }
49 49
 
50 50
 function traiter_appels_actions() {
51
-	// cas de l'appel qui renvoie une redirection (302) ou rien (204)
52
-	if ($action = _request('action')) {
53
-		include_spip('base/abstract_sql'); // chargement systematique pour les actions
54
-		include_spip('inc/autoriser');
55
-		include_spip('inc/headers');
56
-		include_spip('inc/actions');
57
-		// des actions peuvent appeler _T
58
-		if (!isset($GLOBALS['spip_lang'])) {
59
-			include_spip('inc/lang');
60
-			utiliser_langue_visiteur();
61
-		}
62
-		// si l'action est provoque par un hit {ajax}
63
-		// il faut transmettre l'env ajax au redirect
64
-		// on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
65
-		if (
66
-			($v = _request('var_ajax'))
67
-			&& $v !== 'form'
68
-			&& ($args = _request('var_ajax_env'))
69
-			&& ($url = _request('redirect'))
70
-		) {
71
-			$url = parametre_url($url, 'var_ajax', $v, '&');
72
-			$url = parametre_url($url, 'var_ajax_env', $args, '&');
73
-			set_request('redirect', $url);
74
-		} else {
75
-			if (_request('redirect')) {
76
-				set_request('redirect', securiser_redirect_action(_request('redirect')));
77
-			}
78
-		}
79
-		$var_f = charger_fonction($action, 'action');
80
-		$var_f();
81
-		if (!isset($GLOBALS['redirect'])) {
82
-			$GLOBALS['redirect'] = _request('redirect') ?? '';
83
-			if ($_SERVER['REQUEST_METHOD'] === 'POST') {
84
-				$GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
85
-			}
86
-			$GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
87
-		}
88
-		if ($url = $GLOBALS['redirect']) {
89
-			// si l'action est provoque par un hit {ajax}
90
-			// il faut transmettre l'env ajax au redirect
91
-			// qui a pu etre defini par l'action
92
-			if (
93
-				($v = _request('var_ajax'))
94
-				&& $v !== 'form'
95
-				&& ($args = _request('var_ajax_env'))
96
-			) {
97
-				$url = parametre_url($url, 'var_ajax', $v, '&');
98
-				$url = parametre_url($url, 'var_ajax_env', $args, '&');
99
-				// passer l'ancre en variable pour pouvoir la gerer cote serveur
100
-				$url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
101
-			}
102
-			$url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
103
-			redirige_par_entete($url);
104
-		}
51
+    // cas de l'appel qui renvoie une redirection (302) ou rien (204)
52
+    if ($action = _request('action')) {
53
+        include_spip('base/abstract_sql'); // chargement systematique pour les actions
54
+        include_spip('inc/autoriser');
55
+        include_spip('inc/headers');
56
+        include_spip('inc/actions');
57
+        // des actions peuvent appeler _T
58
+        if (!isset($GLOBALS['spip_lang'])) {
59
+            include_spip('inc/lang');
60
+            utiliser_langue_visiteur();
61
+        }
62
+        // si l'action est provoque par un hit {ajax}
63
+        // il faut transmettre l'env ajax au redirect
64
+        // on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
65
+        if (
66
+            ($v = _request('var_ajax'))
67
+            && $v !== 'form'
68
+            && ($args = _request('var_ajax_env'))
69
+            && ($url = _request('redirect'))
70
+        ) {
71
+            $url = parametre_url($url, 'var_ajax', $v, '&');
72
+            $url = parametre_url($url, 'var_ajax_env', $args, '&');
73
+            set_request('redirect', $url);
74
+        } else {
75
+            if (_request('redirect')) {
76
+                set_request('redirect', securiser_redirect_action(_request('redirect')));
77
+            }
78
+        }
79
+        $var_f = charger_fonction($action, 'action');
80
+        $var_f();
81
+        if (!isset($GLOBALS['redirect'])) {
82
+            $GLOBALS['redirect'] = _request('redirect') ?? '';
83
+            if ($_SERVER['REQUEST_METHOD'] === 'POST') {
84
+                $GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
85
+            }
86
+            $GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
87
+        }
88
+        if ($url = $GLOBALS['redirect']) {
89
+            // si l'action est provoque par un hit {ajax}
90
+            // il faut transmettre l'env ajax au redirect
91
+            // qui a pu etre defini par l'action
92
+            if (
93
+                ($v = _request('var_ajax'))
94
+                && $v !== 'form'
95
+                && ($args = _request('var_ajax_env'))
96
+            ) {
97
+                $url = parametre_url($url, 'var_ajax', $v, '&');
98
+                $url = parametre_url($url, 'var_ajax_env', $args, '&');
99
+                // passer l'ancre en variable pour pouvoir la gerer cote serveur
100
+                $url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
101
+            }
102
+            $url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
103
+            redirige_par_entete($url);
104
+        }
105 105
 
106
-		// attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
107
-		// et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
108
-		if (!headers_sent() && !ob_get_length()) {
109
-			http_response_code(204);
110
-		} // No Content
111
-		return true;
112
-	}
106
+        // attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
107
+        // et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
108
+        if (!headers_sent() && !ob_get_length()) {
109
+            http_response_code(204);
110
+        } // No Content
111
+        return true;
112
+    }
113 113
 
114
-	return false;
114
+    return false;
115 115
 }
116 116
 
117 117
 
118 118
 function refuser_traiter_formulaire_ajax() {
119
-	if (
120
-		($v = _request('var_ajax'))
121
-		&& $v == 'form'
122
-		&& ($form = _request('formulaire_action'))
123
-		&& ($args = _request('formulaire_action_args'))
124
-		&& decoder_contexte_ajax($args, $form) !== false
125
-	) {
126
-		// on est bien dans le contexte de traitement d'un formulaire en ajax
127
-		// mais traiter ne veut pas
128
-		// on le dit a la page qui va resumbit
129
-		// sans ajax
130
-		include_spip('inc/actions');
131
-		ajax_retour('noajax', false);
132
-		exit;
133
-	}
119
+    if (
120
+        ($v = _request('var_ajax'))
121
+        && $v == 'form'
122
+        && ($form = _request('formulaire_action'))
123
+        && ($args = _request('formulaire_action_args'))
124
+        && decoder_contexte_ajax($args, $form) !== false
125
+    ) {
126
+        // on est bien dans le contexte de traitement d'un formulaire en ajax
127
+        // mais traiter ne veut pas
128
+        // on le dit a la page qui va resumbit
129
+        // sans ajax
130
+        include_spip('inc/actions');
131
+        ajax_retour('noajax', false);
132
+        exit;
133
+    }
134 134
 }
135 135
 
136 136
 function traiter_appels_inclusions_ajax() {
137
-	// traiter les appels de bloc ajax (ex: pagination)
138
-	if (
139
-		($v = _request('var_ajax'))
140
-		&& $v !== 'form'
141
-		&& ($args = _request('var_ajax_env'))
142
-	) {
143
-		include_spip('inc/filtres');
144
-		include_spip('inc/actions');
145
-		if (
146
-			($args = decoder_contexte_ajax($args)) && ($fond = $args['fond'])
147
-		) {
148
-			include_spip('public/assembler');
149
-			$contexte = calculer_contexte();
150
-			$contexte = array_merge($args, $contexte);
151
-			$page = recuperer_fond($fond, $contexte, ['trim' => false]);
152
-			$texte = $page;
153
-			if ($ancre = _request('var_ajax_ancre')) {
154
-				// pas n'importe quoi quand meme dans la variable !
155
-				$ancre = str_replace(['<', '"', "'"], ['&lt;', '&quot;', ''], $ancre);
156
-				$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
157
-			}
158
-		} else {
159
-			include_spip('inc/headers');
160
-			http_response_code(400);
161
-			$texte = _L('signature ajax bloc incorrecte');
162
-		}
163
-		ajax_retour($texte, false);
137
+    // traiter les appels de bloc ajax (ex: pagination)
138
+    if (
139
+        ($v = _request('var_ajax'))
140
+        && $v !== 'form'
141
+        && ($args = _request('var_ajax_env'))
142
+    ) {
143
+        include_spip('inc/filtres');
144
+        include_spip('inc/actions');
145
+        if (
146
+            ($args = decoder_contexte_ajax($args)) && ($fond = $args['fond'])
147
+        ) {
148
+            include_spip('public/assembler');
149
+            $contexte = calculer_contexte();
150
+            $contexte = array_merge($args, $contexte);
151
+            $page = recuperer_fond($fond, $contexte, ['trim' => false]);
152
+            $texte = $page;
153
+            if ($ancre = _request('var_ajax_ancre')) {
154
+                // pas n'importe quoi quand meme dans la variable !
155
+                $ancre = str_replace(['<', '"', "'"], ['&lt;', '&quot;', ''], $ancre);
156
+                $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
157
+            }
158
+        } else {
159
+            include_spip('inc/headers');
160
+            http_response_code(400);
161
+            $texte = _L('signature ajax bloc incorrecte');
162
+        }
163
+        ajax_retour($texte, false);
164 164
 
165
-		return true; // on a fini le hit
166
-	}
165
+        return true; // on a fini le hit
166
+    }
167 167
 
168
-	return false;
168
+    return false;
169 169
 }
170 170
 
171 171
 // au 1er appel, traite les formulaires dynamiques charger/verifier/traiter
@@ -173,172 +173,172 @@  discard block
 block discarded – undo
173 173
 // Le 1er renvoie True si il faut faire exit a la sortie
174 174
 
175 175
 function traiter_formulaires_dynamiques($get = false) {
176
-	static $post = [];
177
-	static $done = false;
176
+    static $post = [];
177
+    static $done = false;
178 178
 
179
-	if ($get) {
180
-		return $post;
181
-	}
182
-	if ($done) {
183
-		return false;
184
-	}
185
-	$done = true;
179
+    if ($get) {
180
+        return $post;
181
+    }
182
+    if ($done) {
183
+        return false;
184
+    }
185
+    $done = true;
186 186
 
187
-	if (
188
-		!(($form = _request('formulaire_action'))
189
-		&& ($args = _request('formulaire_action_args')))
190
-	) {
191
-		return false;
192
-	} // le hit peut continuer normalement
187
+    if (
188
+        !(($form = _request('formulaire_action'))
189
+        && ($args = _request('formulaire_action_args')))
190
+    ) {
191
+        return false;
192
+    } // le hit peut continuer normalement
193 193
 
194
-	// verifier que le post est licite (du meme auteur ou d'une session anonyme)
195
-	$sign = _request('formulaire_action_sign');
196
-	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
197
-		if (empty($sign)) {
198
-			spip_log("signature ajax form incorrecte : $form (formulaire non signe mais on a une session)", 'formulaires' . _LOG_ERREUR);
199
-			return false;
200
-		}
201
-		$securiser_action = charger_fonction('securiser_action', 'inc');
202
-		$secu = $securiser_action($form, $args, '', -1);
203
-		if ($sign !== $secu['hash']) {
204
-			spip_log("signature ajax form incorrecte : $form (formulaire signe mais ne correspond pas a la session)", 'formulaires' . _LOG_ERREUR);
205
-			return false;
206
-		}
207
-	}
208
-	else {
209
-		if (!empty($sign)) {
210
-			spip_log("signature ajax form incorrecte : $form (formulaire signe mais pas de session)", 'formulaires' . _LOG_ERREUR);
211
-			return false;
212
-		}
213
-	}
194
+    // verifier que le post est licite (du meme auteur ou d'une session anonyme)
195
+    $sign = _request('formulaire_action_sign');
196
+    if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
197
+        if (empty($sign)) {
198
+            spip_log("signature ajax form incorrecte : $form (formulaire non signe mais on a une session)", 'formulaires' . _LOG_ERREUR);
199
+            return false;
200
+        }
201
+        $securiser_action = charger_fonction('securiser_action', 'inc');
202
+        $secu = $securiser_action($form, $args, '', -1);
203
+        if ($sign !== $secu['hash']) {
204
+            spip_log("signature ajax form incorrecte : $form (formulaire signe mais ne correspond pas a la session)", 'formulaires' . _LOG_ERREUR);
205
+            return false;
206
+        }
207
+    }
208
+    else {
209
+        if (!empty($sign)) {
210
+            spip_log("signature ajax form incorrecte : $form (formulaire signe mais pas de session)", 'formulaires' . _LOG_ERREUR);
211
+            return false;
212
+        }
213
+    }
214 214
 
215
-	include_spip('inc/filtres');
216
-	if (($args = decoder_contexte_ajax($args, $form)) === false) {
217
-		spip_log("signature ajax form incorrecte : $form (encodage corrompu)", 'formulaires' . _LOG_ERREUR);
215
+    include_spip('inc/filtres');
216
+    if (($args = decoder_contexte_ajax($args, $form)) === false) {
217
+        spip_log("signature ajax form incorrecte : $form (encodage corrompu)", 'formulaires' . _LOG_ERREUR);
218 218
 
219
-		return false; // continuons le hit comme si de rien etait
220
-	} else {
221
-		include_spip('inc/lang');
222
-		// sauvegarder la lang en cours
223
-		$old_lang = $GLOBALS['spip_lang'];
224
-		// changer la langue avec celle qui a cours dans le formulaire
225
-		// on la depile de $args car c'est un argument implicite masque
226
-		changer_langue(array_shift($args));
219
+        return false; // continuons le hit comme si de rien etait
220
+    } else {
221
+        include_spip('inc/lang');
222
+        // sauvegarder la lang en cours
223
+        $old_lang = $GLOBALS['spip_lang'];
224
+        // changer la langue avec celle qui a cours dans le formulaire
225
+        // on la depile de $args car c'est un argument implicite masque
226
+        changer_langue(array_shift($args));
227 227
 
228 228
 
229
-		// inclure mes_fonctions et autres filtres avant verifier/traiter
230
-		include_fichiers_fonctions();
231
-		// ainsi que l'API SQL bien utile dans verifier/traiter
232
-		include_spip('base/abstract_sql');
229
+        // inclure mes_fonctions et autres filtres avant verifier/traiter
230
+        include_fichiers_fonctions();
231
+        // ainsi que l'API SQL bien utile dans verifier/traiter
232
+        include_spip('base/abstract_sql');
233 233
 
234
-		/**
235
-		 * Pipeline exécuté lors de la soumission d'un formulaire,
236
-		 * mais avant l'appel de la fonction de vérification.
237
-		 */
238
-		pipeline(
239
-			'formulaire_receptionner',
240
-			[
241
-				'args' => ['form' => $form, 'args' => $args],
242
-				'data' => null,
243
-			]
244
-		);
234
+        /**
235
+         * Pipeline exécuté lors de la soumission d'un formulaire,
236
+         * mais avant l'appel de la fonction de vérification.
237
+         */
238
+        pipeline(
239
+            'formulaire_receptionner',
240
+            [
241
+                'args' => ['form' => $form, 'args' => $args],
242
+                'data' => null,
243
+            ]
244
+        );
245 245
 
246
-		$verifier = charger_fonction('verifier', "formulaires/$form/", true);
247
-		$post["erreurs_$form"] = pipeline(
248
-			'formulaire_verifier',
249
-			[
250
-				'args' => ['form' => $form, 'args' => $args],
251
-				'data' => $verifier ? $verifier(...$args) : []
252
-			]
253
-		);
254
-		// prise en charge CVT multi etape si besoin
255
-		if (_request('cvtm_prev_post')) {
256
-			include_spip('inc/cvt_multietapes');
257
-			$post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
258
-				['form' => $form, 'args' => $args],
259
-				$post["erreurs_$form"]
260
-			);
261
-		}
246
+        $verifier = charger_fonction('verifier', "formulaires/$form/", true);
247
+        $post["erreurs_$form"] = pipeline(
248
+            'formulaire_verifier',
249
+            [
250
+                'args' => ['form' => $form, 'args' => $args],
251
+                'data' => $verifier ? $verifier(...$args) : []
252
+            ]
253
+        );
254
+        // prise en charge CVT multi etape si besoin
255
+        if (_request('cvtm_prev_post')) {
256
+            include_spip('inc/cvt_multietapes');
257
+            $post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
258
+                ['form' => $form, 'args' => $args],
259
+                $post["erreurs_$form"]
260
+            );
261
+        }
262 262
 
263
-		// accessibilite : si des erreurs mais pas de message general l'ajouter
264
-		if (isset($post["erreurs_$form"]) && (is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) && !isset($post["erreurs_$form"]['message_erreur'])) {
265
-			$post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(
266
-				is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0,
267
-				'avis_1_erreur_saisie',
268
-				'avis_nb_erreurs_saisie'
269
-			);
270
-		}
263
+        // accessibilite : si des erreurs mais pas de message general l'ajouter
264
+        if (isset($post["erreurs_$form"]) && (is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) && !isset($post["erreurs_$form"]['message_erreur'])) {
265
+            $post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(
266
+                is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0,
267
+                'avis_1_erreur_saisie',
268
+                'avis_nb_erreurs_saisie'
269
+            );
270
+        }
271 271
 
272
-		// si on ne demandait qu'une verif json
273
-		if (_request('formulaire_action_verifier_json')) {
274
-			include_spip('inc/json');
275
-			include_spip('inc/actions');
276
-			ajax_retour(json_encode($post["erreurs_$form"], JSON_THROW_ON_ERROR), 'text/plain');
272
+        // si on ne demandait qu'une verif json
273
+        if (_request('formulaire_action_verifier_json')) {
274
+            include_spip('inc/json');
275
+            include_spip('inc/actions');
276
+            ajax_retour(json_encode($post["erreurs_$form"], JSON_THROW_ON_ERROR), 'text/plain');
277 277
 
278
-			return true; // on a fini le hit
279
-		}
280
-		$retour = '';
281
-		if (isset($post["erreurs_$form"]) && (is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) == 0) {
282
-			$rev = '';
283
-			if ($traiter = charger_fonction('traiter', "formulaires/$form/", true)) {
284
-				$rev = $traiter(...$args);
285
-			}
278
+            return true; // on a fini le hit
279
+        }
280
+        $retour = '';
281
+        if (isset($post["erreurs_$form"]) && (is_countable($post["erreurs_$form"]) ? count($post["erreurs_$form"]) : 0) == 0) {
282
+            $rev = '';
283
+            if ($traiter = charger_fonction('traiter', "formulaires/$form/", true)) {
284
+                $rev = $traiter(...$args);
285
+            }
286 286
 
287
-			$rev = pipeline(
288
-				'formulaire_traiter',
289
-				[
290
-					'args' => ['form' => $form, 'args' => $args],
291
-					'data' => $rev
292
-				]
293
-			);
294
-			// le retour de traiter est
295
-			// un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
296
-			// il permet le pipelinage, en particulier
297
-			// en y passant l'id de l'objet cree/modifie
298
-			// si message_erreur est present, on considere que le traitement a echoue
299
-			$post["message_ok_$form"] = '';
300
-			// on peut avoir message_ok et message_erreur
301
-			if (isset($rev['message_ok'])) {
302
-				$post["message_ok_$form"] = $rev['message_ok'];
303
-			}
287
+            $rev = pipeline(
288
+                'formulaire_traiter',
289
+                [
290
+                    'args' => ['form' => $form, 'args' => $args],
291
+                    'data' => $rev
292
+                ]
293
+            );
294
+            // le retour de traiter est
295
+            // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
296
+            // il permet le pipelinage, en particulier
297
+            // en y passant l'id de l'objet cree/modifie
298
+            // si message_erreur est present, on considere que le traitement a echoue
299
+            $post["message_ok_$form"] = '';
300
+            // on peut avoir message_ok et message_erreur
301
+            if (isset($rev['message_ok'])) {
302
+                $post["message_ok_$form"] = $rev['message_ok'];
303
+            }
304 304
 
305
-			// verifier si traiter n'a pas echoue avec une erreur :
306
-			if (isset($rev['message_erreur'])) {
307
-				$post["erreurs_$form"]['message_erreur'] = $rev['message_erreur'];
308
-				// si il y a une erreur on ne redirige pas
309
-			} else {
310
-				// sinon faire ce qu'il faut :
311
-				if (isset($rev['editable'])) {
312
-					$post["editable_$form"] = $rev['editable'];
313
-				}
314
-				// si une redirection est demandee, appeler redirigae_formulaire qui choisira
315
-				// le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
316
-				if (isset($rev['redirect']) && $rev['redirect']) {
317
-					include_spip('inc/headers');
318
-					[$masque, $message] = redirige_formulaire($rev['redirect'], '', 'ajaxform');
319
-					$post["message_ok_$form"] .= $message;
320
-					$retour .= $masque;
321
-				}
322
-			}
323
-		}
324
-		// si le formulaire a ete soumis en ajax, on le renvoie direct !
325
-		if (_request('var_ajax')) {
326
-			if (find_in_path('formulaire_.php', 'balise/', true)) {
327
-				include_spip('inc/actions');
328
-				include_spip('public/assembler');
329
-				$retour .= inclure_balise_dynamique(balise_formulaire__dyn($form, ...$args), false);
330
-				// on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
331
-				// sans cela le formulaire n'est pas actif apres le hit ajax
332
-				// la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
333
-				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
334
-				ajax_retour($retour, false);
305
+            // verifier si traiter n'a pas echoue avec une erreur :
306
+            if (isset($rev['message_erreur'])) {
307
+                $post["erreurs_$form"]['message_erreur'] = $rev['message_erreur'];
308
+                // si il y a une erreur on ne redirige pas
309
+            } else {
310
+                // sinon faire ce qu'il faut :
311
+                if (isset($rev['editable'])) {
312
+                    $post["editable_$form"] = $rev['editable'];
313
+                }
314
+                // si une redirection est demandee, appeler redirigae_formulaire qui choisira
315
+                // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
316
+                if (isset($rev['redirect']) && $rev['redirect']) {
317
+                    include_spip('inc/headers');
318
+                    [$masque, $message] = redirige_formulaire($rev['redirect'], '', 'ajaxform');
319
+                    $post["message_ok_$form"] .= $message;
320
+                    $retour .= $masque;
321
+                }
322
+            }
323
+        }
324
+        // si le formulaire a ete soumis en ajax, on le renvoie direct !
325
+        if (_request('var_ajax')) {
326
+            if (find_in_path('formulaire_.php', 'balise/', true)) {
327
+                include_spip('inc/actions');
328
+                include_spip('public/assembler');
329
+                $retour .= inclure_balise_dynamique(balise_formulaire__dyn($form, ...$args), false);
330
+                // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
331
+                // sans cela le formulaire n'est pas actif apres le hit ajax
332
+                // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
333
+                $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
334
+                ajax_retour($retour, false);
335 335
 
336
-				return true; // on a fini le hit
337
-			}
338
-		}
339
-		// restaurer la lang en cours
340
-		changer_langue($old_lang);
341
-	}
336
+                return true; // on a fini le hit
337
+            }
338
+        }
339
+        // restaurer la lang en cours
340
+        changer_langue($old_lang);
341
+    }
342 342
 
343
-	return false; // le hit peut continuer normalement
343
+    return false; // le hit peut continuer normalement
344 344
 }
Please login to merge, or discard this patch.
ecrire/lang/spip_pl.php 1 patch
Indentation   +605 added lines, -605 removed lines patch added patch discarded remove patch
@@ -5,226 +5,226 @@  discard block
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'access_interface_graphique' => 'Powrót do pełnego interfejsu graficznego',
10
-	'access_mode_texte' => 'Uproszczony interfejs - tryb tekstowy',
11
-	'admin_debug' => 'debug',
12
-	'admin_modifier_article' => 'Modyfikuj artykuł',
13
-	'admin_modifier_auteur' => 'Modyfikuj autora',
14
-	'admin_modifier_breve' => 'Modyfikuj news',
15
-	'admin_modifier_mot' => 'Modyfikuj słowo kluczowe',
16
-	'admin_modifier_rubrique' => 'Modyfikuj dział',
17
-	'admin_recalculer' => 'Odśwież ',
18
-	'afficher_calendrier' => 'Wyświetl kalendarz',
19
-	'afficher_trad' => 'pokaż przekłady',
20
-	'alerte_maj_impossible' => '<b>Uwaga!</b> Uaktualnienie bazy danych SQL do wersji @version@ jest nie możliwe. Powodem jest prawdopodobnie brak uprawnień do modyfikacji bazy danych. Skontaktuj się z administratorem lub firmą hostingową.',
21
-	'alerte_modif_info_concourante' => 'UWAGA: Ta informacja była zmieniana w innym miejscu. Obecna wartość to:Cette information a été modifiée par ailleurs. La valeur actuelle est :',
22
-	'analyse_xml' => 'Analiza XML',
23
-	'annuler' => 'Anuluj',
24
-	'antispam_champ_vide' => 'Pozostaw puste:',
25
-	'articles_recents' => 'Najnowsze artykuły',
26
-	'avis_archive_incorrect' => 'ten plik archiwalny nie należy do SPIP',
27
-	'avis_archive_invalide' => 'plik archiwalny jest nieprawidłowy',
28
-	'avis_attention' => 'UWAGA !',
29
-	'avis_champ_incorrect_type_objet' => 'Nieprawiłowa nazwa pola @name@ dla obiektu typu @type@',
30
-	'avis_colonne_inexistante' => 'Kolumna @col@ nie istnieje',
31
-	'avis_erreur' => 'Błąd: zobacz poniżej’;',
32
-	'avis_erreur_connexion' => 'Błąd połączenia',
33
-	'avis_erreur_cookie' => 'problem z cookie',
34
-	'avis_erreur_fonction_contexte' => 'Błąd programistyczny. Ta funkcja nie powinna być wywoływana w tym kontekście.',
35
-	'avis_erreur_mysql' => 'Błąd SQL',
36
-	'avis_erreur_sauvegarde' => 'Błąd archiwizacji (@type@ @id_objet@)!',
37
-	'avis_erreur_visiteur' => 'Problem z dostępem do stron administracyjnych',
8
+    // A
9
+    'access_interface_graphique' => 'Powrót do pełnego interfejsu graficznego',
10
+    'access_mode_texte' => 'Uproszczony interfejs - tryb tekstowy',
11
+    'admin_debug' => 'debug',
12
+    'admin_modifier_article' => 'Modyfikuj artykuł',
13
+    'admin_modifier_auteur' => 'Modyfikuj autora',
14
+    'admin_modifier_breve' => 'Modyfikuj news',
15
+    'admin_modifier_mot' => 'Modyfikuj słowo kluczowe',
16
+    'admin_modifier_rubrique' => 'Modyfikuj dział',
17
+    'admin_recalculer' => 'Odśwież ',
18
+    'afficher_calendrier' => 'Wyświetl kalendarz',
19
+    'afficher_trad' => 'pokaż przekłady',
20
+    'alerte_maj_impossible' => '<b>Uwaga!</b> Uaktualnienie bazy danych SQL do wersji @version@ jest nie możliwe. Powodem jest prawdopodobnie brak uprawnień do modyfikacji bazy danych. Skontaktuj się z administratorem lub firmą hostingową.',
21
+    'alerte_modif_info_concourante' => 'UWAGA: Ta informacja była zmieniana w innym miejscu. Obecna wartość to:Cette information a été modifiée par ailleurs. La valeur actuelle est :',
22
+    'analyse_xml' => 'Analiza XML',
23
+    'annuler' => 'Anuluj',
24
+    'antispam_champ_vide' => 'Pozostaw puste:',
25
+    'articles_recents' => 'Najnowsze artykuły',
26
+    'avis_archive_incorrect' => 'ten plik archiwalny nie należy do SPIP',
27
+    'avis_archive_invalide' => 'plik archiwalny jest nieprawidłowy',
28
+    'avis_attention' => 'UWAGA !',
29
+    'avis_champ_incorrect_type_objet' => 'Nieprawiłowa nazwa pola @name@ dla obiektu typu @type@',
30
+    'avis_colonne_inexistante' => 'Kolumna @col@ nie istnieje',
31
+    'avis_erreur' => 'Błąd: zobacz poniżej’;',
32
+    'avis_erreur_connexion' => 'Błąd połączenia',
33
+    'avis_erreur_cookie' => 'problem z cookie',
34
+    'avis_erreur_fonction_contexte' => 'Błąd programistyczny. Ta funkcja nie powinna być wywoływana w tym kontekście.',
35
+    'avis_erreur_mysql' => 'Błąd SQL',
36
+    'avis_erreur_sauvegarde' => 'Błąd archiwizacji (@type@ @id_objet@)!',
37
+    'avis_erreur_visiteur' => 'Problem z dostępem do stron administracyjnych',
38 38
 
39
-	// B
40
-	'barre_a_accent_grave' => 'Wstaw dużą literę A z akcentem grave',
41
-	'barre_aide' => 'Użyj skrótów typograficznych do ulepszenia layoutu',
42
-	'barre_e_accent_aigu' => 'Wstaw dużą literę E z akcentem acute',
43
-	'barre_eo' => 'Wstaw ligaturę oe',
44
-	'barre_eo_maj' => 'Wstaw dużą ligaturę EO',
45
-	'barre_euro' => 'Umieść symbol €€',
46
-	'barre_gras' => 'Wstaw w {{boldzie}}',
47
-	'barre_guillemets' => 'Umieść w "cudzysłowie"',
48
-	'barre_guillemets_simples' => 'Umieść w innym “cudzysłowie”',
49
-	'barre_intertitre' => 'Przekształć w {{{śródtytuł}}}',
50
-	'barre_italic' => 'Wstaw w {italiku}',
51
-	'barre_lien' => 'Zmień w [hiperłącze->http://...]',
52
-	'barre_lien_input' => 'Proszę wpisać cel hiperłącza (może to być URL internetowy w formie http://www.mysite.com lub po prostu numer artykułu na tej stronie).',
53
-	'barre_note' => 'Zmień w [[Przypis]]',
54
-	'barre_paragraphe' => 'Utwórz paragraf',
55
-	'barre_quote' => '<quote>Zacytuj wiadomość</quote>',
56
-	'bouton_changer' => 'Zatwierdź',
57
-	'bouton_chercher' => 'Szukaj',
58
-	'bouton_choisir' => 'Wybierz',
59
-	'bouton_deplacer' => 'Przenieś',
60
-	'bouton_download' => 'Ściągnij',
61
-	'bouton_enregistrer' => 'Zapisz',
62
-	'bouton_radio_desactiver_messagerie_interne' => 'Dezaktywuj pocztę wewnętrzną',
63
-	'bouton_radio_envoi_annonces' => 'Wyślij ogłoszenia redakcyjne',
64
-	'bouton_radio_non_envoi_annonces' => 'Nie wysyłaj żadnych zawiadomień',
65
-	'bouton_radio_non_envoi_liste_nouveautes' => 'Nie wysyłaj najnowszej listy newsów',
66
-	'bouton_recharger_page' => 'ponownie załaduj tę stronę',
67
-	'bouton_telecharger' => 'Załaduj',
68
-	'bouton_upload' => 'Załaduj',
69
-	'bouton_valider' => 'Zatwierdź',
39
+    // B
40
+    'barre_a_accent_grave' => 'Wstaw dużą literę A z akcentem grave',
41
+    'barre_aide' => 'Użyj skrótów typograficznych do ulepszenia layoutu',
42
+    'barre_e_accent_aigu' => 'Wstaw dużą literę E z akcentem acute',
43
+    'barre_eo' => 'Wstaw ligaturę oe',
44
+    'barre_eo_maj' => 'Wstaw dużą ligaturę EO',
45
+    'barre_euro' => 'Umieść symbol €€',
46
+    'barre_gras' => 'Wstaw w {{boldzie}}',
47
+    'barre_guillemets' => 'Umieść w "cudzysłowie"',
48
+    'barre_guillemets_simples' => 'Umieść w innym “cudzysłowie”',
49
+    'barre_intertitre' => 'Przekształć w {{{śródtytuł}}}',
50
+    'barre_italic' => 'Wstaw w {italiku}',
51
+    'barre_lien' => 'Zmień w [hiperłącze->http://...]',
52
+    'barre_lien_input' => 'Proszę wpisać cel hiperłącza (może to być URL internetowy w formie http://www.mysite.com lub po prostu numer artykułu na tej stronie).',
53
+    'barre_note' => 'Zmień w [[Przypis]]',
54
+    'barre_paragraphe' => 'Utwórz paragraf',
55
+    'barre_quote' => '<quote>Zacytuj wiadomość</quote>',
56
+    'bouton_changer' => 'Zatwierdź',
57
+    'bouton_chercher' => 'Szukaj',
58
+    'bouton_choisir' => 'Wybierz',
59
+    'bouton_deplacer' => 'Przenieś',
60
+    'bouton_download' => 'Ściągnij',
61
+    'bouton_enregistrer' => 'Zapisz',
62
+    'bouton_radio_desactiver_messagerie_interne' => 'Dezaktywuj pocztę wewnętrzną',
63
+    'bouton_radio_envoi_annonces' => 'Wyślij ogłoszenia redakcyjne',
64
+    'bouton_radio_non_envoi_annonces' => 'Nie wysyłaj żadnych zawiadomień',
65
+    'bouton_radio_non_envoi_liste_nouveautes' => 'Nie wysyłaj najnowszej listy newsów',
66
+    'bouton_recharger_page' => 'ponownie załaduj tę stronę',
67
+    'bouton_telecharger' => 'Załaduj',
68
+    'bouton_upload' => 'Załaduj',
69
+    'bouton_valider' => 'Zatwierdź',
70 70
 
71
-	// C
72
-	'cal_apresmidi' => 'popołudniu',
73
-	'cal_jour_entier' => 'cały dzień',
74
-	'cal_matin' => 'rano',
75
-	'cal_par_jour' => 'wg dni',
76
-	'cal_par_mois' => 'wg miesięcy',
77
-	'cal_par_semaine' => 'wg tygodni',
78
-	'choix_couleur_interface' => 'kolor',
79
-	'choix_interface' => 'wybór interfejsu',
80
-	'colonne' => 'Kolumna',
81
-	'confirm_changer_statut' => 'Uwaga, czy na pewno chcesz zmienić status tego elementu ? Kontynuować ?',
82
-	'correcte' => 'poprawna',
71
+    // C
72
+    'cal_apresmidi' => 'popołudniu',
73
+    'cal_jour_entier' => 'cały dzień',
74
+    'cal_matin' => 'rano',
75
+    'cal_par_jour' => 'wg dni',
76
+    'cal_par_mois' => 'wg miesięcy',
77
+    'cal_par_semaine' => 'wg tygodni',
78
+    'choix_couleur_interface' => 'kolor',
79
+    'choix_interface' => 'wybór interfejsu',
80
+    'colonne' => 'Kolumna',
81
+    'confirm_changer_statut' => 'Uwaga, czy na pewno chcesz zmienić status tego elementu ? Kontynuować ?',
82
+    'correcte' => 'poprawna',
83 83
 
84
-	// D
85
-	'date_aujourdhui' => 'dziś',
86
-	'date_avant_jc' => 'P.N.E.',
87
-	'date_dans' => 'w @delai@',
88
-	'date_de_mois_1' => '@j@ stycznia',
89
-	'date_de_mois_10' => '@j@ października',
90
-	'date_de_mois_11' => '@j@ listopada',
91
-	'date_de_mois_12' => '@j@ grudnia',
92
-	'date_de_mois_2' => '@j@ lutego',
93
-	'date_de_mois_3' => '@j@ marca',
94
-	'date_de_mois_4' => '@j@ kwietnia',
95
-	'date_de_mois_5' => '@j@ maja',
96
-	'date_de_mois_6' => '@j@ czerwca',
97
-	'date_de_mois_7' => '@j@ lipca',
98
-	'date_de_mois_8' => '@j@ sierpnia',
99
-	'date_de_mois_9' => '@j@ września',
100
-	'date_demain' => 'jutro',
101
-	'date_fmt_heures_minutes' => '@h@h@m@min',
102
-	'date_fmt_jour_heure' => '@jour@ o @heure@',
103
-	'date_fmt_jour_mois' => '@jourmois@',
104
-	'date_fmt_jour_mois_annee' => '@jourmois@ @annee@',
105
-	'date_fmt_mois_annee' => '@nommois@ @annee@',
106
-	'date_fmt_nomjour_date' => '@date@ @nomjour@ ',
107
-	'date_heures' => 'godziny',
108
-	'date_hier' => 'wczoraj',
109
-	'date_il_y_a' => 'jest @delai@',
110
-	'date_jnum1' => '1',
111
-	'date_jnum10' => '10',
112
-	'date_jnum11' => '11',
113
-	'date_jnum12' => '12',
114
-	'date_jnum13' => '13',
115
-	'date_jnum14' => '14',
116
-	'date_jnum15' => '15',
117
-	'date_jnum16' => '16',
118
-	'date_jnum17' => '17',
119
-	'date_jnum18' => '18',
120
-	'date_jnum19' => '19',
121
-	'date_jnum2' => '2',
122
-	'date_jnum20' => '20',
123
-	'date_jnum21' => '21',
124
-	'date_jnum22' => '22',
125
-	'date_jnum23' => '23',
126
-	'date_jnum24' => '24',
127
-	'date_jnum25' => '25',
128
-	'date_jnum26' => '26',
129
-	'date_jnum27' => '27',
130
-	'date_jnum28' => '28',
131
-	'date_jnum29' => '29',
132
-	'date_jnum3' => '3',
133
-	'date_jnum30' => '30',
134
-	'date_jnum31' => '31',
135
-	'date_jnum4' => '4',
136
-	'date_jnum5' => '5',
137
-	'date_jnum6' => '6',
138
-	'date_jnum7' => '7',
139
-	'date_jnum8' => '8',
140
-	'date_jnum9' => '9',
141
-	'date_jour_1' => 'Niedziela',
142
-	'date_jour_1_abbr' => 'nie.',
143
-	'date_jour_1_initiale' => 'n.',
144
-	'date_jour_2' => 'Poniedziałek',
145
-	'date_jour_2_abbr' => 'pon.',
146
-	'date_jour_2_initiale' => 'p.',
147
-	'date_jour_3' => 'Wtorek',
148
-	'date_jour_3_abbr' => 'wto.',
149
-	'date_jour_3_initiale' => 'w.',
150
-	'date_jour_4' => 'Środa',
151
-	'date_jour_4_abbr' => 'śro.',
152
-	'date_jour_4_initiale' => 'ś.',
153
-	'date_jour_5' => 'Czwartek',
154
-	'date_jour_5_abbr' => 'czw.',
155
-	'date_jour_5_initiale' => 'c.',
156
-	'date_jour_6' => 'Piątek',
157
-	'date_jour_6_abbr' => 'pią.',
158
-	'date_jour_6_initiale' => 'p.',
159
-	'date_jour_7' => 'Sobota',
160
-	'date_jour_7_abbr' => 'sob.',
161
-	'date_jour_7_initiale' => 's.',
162
-	'date_jours' => 'dni',
163
-	'date_minutes' => 'minuty',
164
-	'date_mois' => 'miesiąc',
165
-	'date_mois_1' => 'Styczeń',
166
-	'date_mois_10' => 'Październik',
167
-	'date_mois_10_abbr' => 'paźdź.',
168
-	'date_mois_11' => 'Listopad',
169
-	'date_mois_11_abbr' => 'list.',
170
-	'date_mois_12' => 'Grudzień',
171
-	'date_mois_12_abbr' => 'gru.',
172
-	'date_mois_1_abbr' => 'sty.',
173
-	'date_mois_2' => 'Luty',
174
-	'date_mois_2_abbr' => 'lut.',
175
-	'date_mois_3' => 'Marzec',
176
-	'date_mois_3_abbr' => 'mar.',
177
-	'date_mois_4' => 'Kwiecień',
178
-	'date_mois_4_abbr' => 'kw.',
179
-	'date_mois_5' => 'Maj',
180
-	'date_mois_5_abbr' => 'maj',
181
-	'date_mois_6' => 'Czerwiec',
182
-	'date_mois_6_abbr' => 'czer.',
183
-	'date_mois_7' => 'Lipiec',
184
-	'date_mois_7_abbr' => 'lip.',
185
-	'date_mois_8' => 'Sierpień',
186
-	'date_mois_8_abbr' => 'sie.',
187
-	'date_mois_9' => 'Wrzesień',
188
-	'date_mois_9_abbr' => 'wrz.',
189
-	'date_saison_1' => 'zima',
190
-	'date_saison_2' => 'wiosna',
191
-	'date_saison_3' => 'lato',
192
-	'date_saison_4' => 'jesień',
193
-	'date_secondes' => 'sekundy',
194
-	'date_semaines' => 'tygodnie',
195
-	'date_un_mois' => 'miesiące',
196
-	'date_une_heure' => 'godzina',
197
-	'date_une_minute' => 'minuta',
198
-	'date_une_seconde' => 'sekunda',
199
-	'date_une_semaine' => 'tydzień',
200
-	'dirs_commencer' => ' w celu rzeczywistego rozpoczęcia instalacji',
201
-	'dirs_preliminaire' => 'Wstęp: <b>Ustawienia pozwoleń dostępu</b>',
202
-	'dirs_probleme_droits' => 'Problem z prawami dostępu',
203
-	'dirs_repertoires_absents' => '<p><b>Następujące katalogi nie zostały odnalezione :</b></p> <ul>@bad_dirs@.</ul> 
84
+    // D
85
+    'date_aujourdhui' => 'dziś',
86
+    'date_avant_jc' => 'P.N.E.',
87
+    'date_dans' => 'w @delai@',
88
+    'date_de_mois_1' => '@j@ stycznia',
89
+    'date_de_mois_10' => '@j@ października',
90
+    'date_de_mois_11' => '@j@ listopada',
91
+    'date_de_mois_12' => '@j@ grudnia',
92
+    'date_de_mois_2' => '@j@ lutego',
93
+    'date_de_mois_3' => '@j@ marca',
94
+    'date_de_mois_4' => '@j@ kwietnia',
95
+    'date_de_mois_5' => '@j@ maja',
96
+    'date_de_mois_6' => '@j@ czerwca',
97
+    'date_de_mois_7' => '@j@ lipca',
98
+    'date_de_mois_8' => '@j@ sierpnia',
99
+    'date_de_mois_9' => '@j@ września',
100
+    'date_demain' => 'jutro',
101
+    'date_fmt_heures_minutes' => '@h@h@m@min',
102
+    'date_fmt_jour_heure' => '@jour@ o @heure@',
103
+    'date_fmt_jour_mois' => '@jourmois@',
104
+    'date_fmt_jour_mois_annee' => '@jourmois@ @annee@',
105
+    'date_fmt_mois_annee' => '@nommois@ @annee@',
106
+    'date_fmt_nomjour_date' => '@date@ @nomjour@ ',
107
+    'date_heures' => 'godziny',
108
+    'date_hier' => 'wczoraj',
109
+    'date_il_y_a' => 'jest @delai@',
110
+    'date_jnum1' => '1',
111
+    'date_jnum10' => '10',
112
+    'date_jnum11' => '11',
113
+    'date_jnum12' => '12',
114
+    'date_jnum13' => '13',
115
+    'date_jnum14' => '14',
116
+    'date_jnum15' => '15',
117
+    'date_jnum16' => '16',
118
+    'date_jnum17' => '17',
119
+    'date_jnum18' => '18',
120
+    'date_jnum19' => '19',
121
+    'date_jnum2' => '2',
122
+    'date_jnum20' => '20',
123
+    'date_jnum21' => '21',
124
+    'date_jnum22' => '22',
125
+    'date_jnum23' => '23',
126
+    'date_jnum24' => '24',
127
+    'date_jnum25' => '25',
128
+    'date_jnum26' => '26',
129
+    'date_jnum27' => '27',
130
+    'date_jnum28' => '28',
131
+    'date_jnum29' => '29',
132
+    'date_jnum3' => '3',
133
+    'date_jnum30' => '30',
134
+    'date_jnum31' => '31',
135
+    'date_jnum4' => '4',
136
+    'date_jnum5' => '5',
137
+    'date_jnum6' => '6',
138
+    'date_jnum7' => '7',
139
+    'date_jnum8' => '8',
140
+    'date_jnum9' => '9',
141
+    'date_jour_1' => 'Niedziela',
142
+    'date_jour_1_abbr' => 'nie.',
143
+    'date_jour_1_initiale' => 'n.',
144
+    'date_jour_2' => 'Poniedziałek',
145
+    'date_jour_2_abbr' => 'pon.',
146
+    'date_jour_2_initiale' => 'p.',
147
+    'date_jour_3' => 'Wtorek',
148
+    'date_jour_3_abbr' => 'wto.',
149
+    'date_jour_3_initiale' => 'w.',
150
+    'date_jour_4' => 'Środa',
151
+    'date_jour_4_abbr' => 'śro.',
152
+    'date_jour_4_initiale' => 'ś.',
153
+    'date_jour_5' => 'Czwartek',
154
+    'date_jour_5_abbr' => 'czw.',
155
+    'date_jour_5_initiale' => 'c.',
156
+    'date_jour_6' => 'Piątek',
157
+    'date_jour_6_abbr' => 'pią.',
158
+    'date_jour_6_initiale' => 'p.',
159
+    'date_jour_7' => 'Sobota',
160
+    'date_jour_7_abbr' => 'sob.',
161
+    'date_jour_7_initiale' => 's.',
162
+    'date_jours' => 'dni',
163
+    'date_minutes' => 'minuty',
164
+    'date_mois' => 'miesiąc',
165
+    'date_mois_1' => 'Styczeń',
166
+    'date_mois_10' => 'Październik',
167
+    'date_mois_10_abbr' => 'paźdź.',
168
+    'date_mois_11' => 'Listopad',
169
+    'date_mois_11_abbr' => 'list.',
170
+    'date_mois_12' => 'Grudzień',
171
+    'date_mois_12_abbr' => 'gru.',
172
+    'date_mois_1_abbr' => 'sty.',
173
+    'date_mois_2' => 'Luty',
174
+    'date_mois_2_abbr' => 'lut.',
175
+    'date_mois_3' => 'Marzec',
176
+    'date_mois_3_abbr' => 'mar.',
177
+    'date_mois_4' => 'Kwiecień',
178
+    'date_mois_4_abbr' => 'kw.',
179
+    'date_mois_5' => 'Maj',
180
+    'date_mois_5_abbr' => 'maj',
181
+    'date_mois_6' => 'Czerwiec',
182
+    'date_mois_6_abbr' => 'czer.',
183
+    'date_mois_7' => 'Lipiec',
184
+    'date_mois_7_abbr' => 'lip.',
185
+    'date_mois_8' => 'Sierpień',
186
+    'date_mois_8_abbr' => 'sie.',
187
+    'date_mois_9' => 'Wrzesień',
188
+    'date_mois_9_abbr' => 'wrz.',
189
+    'date_saison_1' => 'zima',
190
+    'date_saison_2' => 'wiosna',
191
+    'date_saison_3' => 'lato',
192
+    'date_saison_4' => 'jesień',
193
+    'date_secondes' => 'sekundy',
194
+    'date_semaines' => 'tygodnie',
195
+    'date_un_mois' => 'miesiące',
196
+    'date_une_heure' => 'godzina',
197
+    'date_une_minute' => 'minuta',
198
+    'date_une_seconde' => 'sekunda',
199
+    'date_une_semaine' => 'tydzień',
200
+    'dirs_commencer' => ' w celu rzeczywistego rozpoczęcia instalacji',
201
+    'dirs_preliminaire' => 'Wstęp: <b>Ustawienia pozwoleń dostępu</b>',
202
+    'dirs_probleme_droits' => 'Problem z prawami dostępu',
203
+    'dirs_repertoires_absents' => '<p><b>Następujące katalogi nie zostały odnalezione :</b></p> <ul>@bad_dirs@.</ul> 
204 204
   <p>Możliwe, że powodem tego jest nazwa, w której pomylone zostały duże i małe litery.
205 205
   Sprawdź nazwy pod względem małych i dużych liter.
206 206
   Jeśli rzeczywiście wielkość liter jest różna, zmień nazwy katalogów za pomocą dowolnego programu FTP
207 207
   <p>Po wykonaniu tej operacji będziesz mógł',
208
-	'dirs_repertoires_suivants' => '<p><b>Następujące katalogi nie są skonfigurowane do zapisu :</b></p> <ul>@bad_dirs@.</ul> 
208
+    'dirs_repertoires_suivants' => '<p><b>Następujące katalogi nie są skonfigurowane do zapisu :</b></p> <ul>@bad_dirs@.</ul> 
209 209
   <p>Aby temu zapobiec, skorzystaj z klienta FTP i ureguluj konieczne prawa dostępu
210 210
   do tych katalogów. Procedura jest wytłumaczona od A-Z w przewodniku instalacji.
211 211
   <p>Kiedy dokonasz koniecznych zmian, będziesz mógł',
212
-	'double_occurrence' => 'Podwójne wystąpienie @balise@',
212
+    'double_occurrence' => 'Podwójne wystąpienie @balise@',
213 213
 
214
-	// E
215
-	'en_cours' => 'w trakcie',
216
-	'envoi_via_le_site' => 'Wyślij ze strony',
217
-	'erreur' => 'Błąd',
218
-	'erreur_balise_non_fermee' => 'ostatni znacznik nie jest zamknięty :',
219
-	'erreur_texte' => 'błąd/błędy',
220
-	'etape' => 'Etap',
214
+    // E
215
+    'en_cours' => 'w trakcie',
216
+    'envoi_via_le_site' => 'Wyślij ze strony',
217
+    'erreur' => 'Błąd',
218
+    'erreur_balise_non_fermee' => 'ostatni znacznik nie jest zamknięty :',
219
+    'erreur_texte' => 'błąd/błędy',
220
+    'etape' => 'Etap',
221 221
 
222
-	// F
223
-	'fichier_introuvable' => 'Plik @fichier@ nie odnaleziony', # MODIF
224
-	'form_auteur_confirmation' => 'Potwierdź swój e-mail',
225
-	'form_auteur_email_modifie' => 'Twój adres e-mail został zmieniony.',
226
-	'form_auteur_envoi_mail_confirmation' => 'Mail z potwierdzeniem został wysłany na adres @email@. Prosimy o kliknięcie w link, przesłany w e-mailu aby zatwierdzić adres e-mail.',
227
-	'form_auteur_mail_confirmation' => 'Dzień dobry,
222
+    // F
223
+    'fichier_introuvable' => 'Plik @fichier@ nie odnaleziony', # MODIF
224
+    'form_auteur_confirmation' => 'Potwierdź swój e-mail',
225
+    'form_auteur_email_modifie' => 'Twój adres e-mail został zmieniony.',
226
+    'form_auteur_envoi_mail_confirmation' => 'Mail z potwierdzeniem został wysłany na adres @email@. Prosimy o kliknięcie w link, przesłany w e-mailu aby zatwierdzić adres e-mail.',
227
+    'form_auteur_mail_confirmation' => 'Dzień dobry,
228 228
 
229 229
 Uruchomiłeś procedurę zmiany adresu e-mail.
230 230
 Aby zatwierdzić nowy adres, wystarczy wejść pod podany niżej link,
@@ -232,315 +232,315 @@  discard block
 block discarded – undo
232 232
 
233 233
     @url@
234 234
 ',
235
-	'form_deja_inscrit' => 'Jesteś już zarejestrowany.',
236
-	'form_email_non_valide' => 'Twój adres e-mail nie jest prawidłowy.',
237
-	'form_forum_access_refuse' => 'Nie masz już dostępu do tej strony.',
238
-	'form_forum_bonjour' => 'Witaj @nom@,',
239
-	'form_forum_confirmer_email' => 'Aby zatwierdzić Twój adres e-mail, kliknij w ten link: @url_confirm@',
240
-	'form_forum_email_deja_enregistre' => 'Ten adres e-mail jest już zarejestrowany, wskutek czego nie możesz używać swojego zwykłego hasła.',
241
-	'form_forum_identifiant_mail' => 'Twój nowy identyfikator został właśnie wysłany do Ciebie e-mailem.',
242
-	'form_forum_identifiants' => 'Osobista identyfikacja',
243
-	'form_forum_indiquer_nom_email' => 'Wpisz tutaj swoje nazwisko i adres e-mail. Wkrótce otrzymasz e-mailem swój osobisty identyfikator.',
244
-	'form_forum_login' => 'login:',
245
-	'form_forum_message_auto' => '(to jest wiadomość automatyczna)',
246
-	'form_forum_pass' => 'hasło:',
247
-	'form_forum_probleme_mail' => 'Problem z pocztą: Twój identyfikator nie może zostać wysłany.',
248
-	'form_forum_voici1' => 'Oto Twóje dane, które pozwolą Ci wziąć udział w rozwoju serwisu
235
+    'form_deja_inscrit' => 'Jesteś już zarejestrowany.',
236
+    'form_email_non_valide' => 'Twój adres e-mail nie jest prawidłowy.',
237
+    'form_forum_access_refuse' => 'Nie masz już dostępu do tej strony.',
238
+    'form_forum_bonjour' => 'Witaj @nom@,',
239
+    'form_forum_confirmer_email' => 'Aby zatwierdzić Twój adres e-mail, kliknij w ten link: @url_confirm@',
240
+    'form_forum_email_deja_enregistre' => 'Ten adres e-mail jest już zarejestrowany, wskutek czego nie możesz używać swojego zwykłego hasła.',
241
+    'form_forum_identifiant_mail' => 'Twój nowy identyfikator został właśnie wysłany do Ciebie e-mailem.',
242
+    'form_forum_identifiants' => 'Osobista identyfikacja',
243
+    'form_forum_indiquer_nom_email' => 'Wpisz tutaj swoje nazwisko i adres e-mail. Wkrótce otrzymasz e-mailem swój osobisty identyfikator.',
244
+    'form_forum_login' => 'login:',
245
+    'form_forum_message_auto' => '(to jest wiadomość automatyczna)',
246
+    'form_forum_pass' => 'hasło:',
247
+    'form_forum_probleme_mail' => 'Problem z pocztą: Twój identyfikator nie może zostać wysłany.',
248
+    'form_forum_voici1' => 'Oto Twóje dane, które pozwolą Ci wziąć udział w rozwoju serwisu
249 249
 "@nom_site_spip@" (@adresse_site@):',
250
-	'form_forum_voici2' => 'Oto Twój identyfikator do proponowania artykułów w
250
+    'form_forum_voici2' => 'Oto Twój identyfikator do proponowania artykułów w
251 251
 serwisie "@nom_site_spip@" (@adresse_login@):',
252
-	'form_indiquer_email' => 'Proszę wpisać swój adres e-mail.',
253
-	'form_indiquer_nom' => 'Proszę wpisać swoje nazwisko.',
254
-	'form_indiquer_nom_site' => 'Proszę wpisać nazwę swoich stron\\y.',
255
-	'form_pet_deja_enregistre' => 'Ta strona jest już zarejestrowana',
256
-	'form_pet_signature_pasprise' => 'Twój podpis został zlekceważony.',
257
-	'form_prop_confirmer_envoi' => 'Potwierdź wysłanie',
258
-	'form_prop_description' => 'Opis/komentarz',
259
-	'form_prop_enregistre' => 'Twoja propozycja została zapisana, pojawi się online po jej zatwierdzeniu przez administratora tej strony.',
260
-	'form_prop_envoyer' => 'Wyślij wiadomość',
261
-	'form_prop_indiquer_email' => 'Proszę wpisać prawidłowy adres e-mail',
262
-	'form_prop_indiquer_nom_site' => 'Proszę wpisać nazwę strony.',
263
-	'form_prop_indiquer_sujet' => 'Proszę wpisać temat',
264
-	'form_prop_message_envoye' => 'Wiadomość wysłana',
265
-	'form_prop_non_enregistre' => 'Twoja propozycja nie została zapisana.',
266
-	'form_prop_sujet' => 'Temat',
267
-	'form_prop_url_site' => 'URL stron\\y', # MODIF
268
-	'forum_non_inscrit' => 'Nie jesteś zarejestrowany, lub adres bądź hasło są nieprawidłowe.',
269
-	'forum_par_auteur' => 'wg @auteur@',
270
-	'forum_titre_erreur' => 'Błąd...',
252
+    'form_indiquer_email' => 'Proszę wpisać swój adres e-mail.',
253
+    'form_indiquer_nom' => 'Proszę wpisać swoje nazwisko.',
254
+    'form_indiquer_nom_site' => 'Proszę wpisać nazwę swoich stron\\y.',
255
+    'form_pet_deja_enregistre' => 'Ta strona jest już zarejestrowana',
256
+    'form_pet_signature_pasprise' => 'Twój podpis został zlekceważony.',
257
+    'form_prop_confirmer_envoi' => 'Potwierdź wysłanie',
258
+    'form_prop_description' => 'Opis/komentarz',
259
+    'form_prop_enregistre' => 'Twoja propozycja została zapisana, pojawi się online po jej zatwierdzeniu przez administratora tej strony.',
260
+    'form_prop_envoyer' => 'Wyślij wiadomość',
261
+    'form_prop_indiquer_email' => 'Proszę wpisać prawidłowy adres e-mail',
262
+    'form_prop_indiquer_nom_site' => 'Proszę wpisać nazwę strony.',
263
+    'form_prop_indiquer_sujet' => 'Proszę wpisać temat',
264
+    'form_prop_message_envoye' => 'Wiadomość wysłana',
265
+    'form_prop_non_enregistre' => 'Twoja propozycja nie została zapisana.',
266
+    'form_prop_sujet' => 'Temat',
267
+    'form_prop_url_site' => 'URL stron\\y', # MODIF
268
+    'forum_non_inscrit' => 'Nie jesteś zarejestrowany, lub adres bądź hasło są nieprawidłowe.',
269
+    'forum_par_auteur' => 'wg @auteur@',
270
+    'forum_titre_erreur' => 'Błąd...',
271 271
 
272
-	// I
273
-	'ical_texte_rss_articles' => 'Plik "backend" artykułów tej strony znajduje się pod adresem:',
274
-	'ical_texte_rss_articles2' => 'Możesz również otrzymać pliki "backend" dla artykułów dla każdego z działów strony:',
275
-	'ical_texte_rss_breves' => 'Istnieje także plik zawierający wszystkie newsy opublikowane na stronie. Precyzując numer działu, otrzymasz newsy opublikowane w tym dziale.',
276
-	'icone_a_suivre' => 'Aktualności',
277
-	'icone_admin_site' => 'Administracja strony',
278
-	'icone_agenda' => 'Kalendarz',
279
-	'icone_aide_ligne' => 'Pomoc',
280
-	'icone_articles' => 'Artykuły',
281
-	'icone_auteurs' => 'Autorzy',
282
-	'icone_brouteur' => 'Menu podręczne',
283
-	'icone_configuration_site' => 'Konfiguracja',
284
-	'icone_configurer_site' => 'Konfiguruj swoją stronę',
285
-	'icone_creer_nouvel_auteur' => 'Utwórz nowego autora',
286
-	'icone_creer_rubrique' => 'Utwórz dział',
287
-	'icone_creer_sous_rubrique' => 'Utwórz poddział',
288
-	'icone_deconnecter' => 'Rozłącz',
289
-	'icone_discussions' => 'Dyskusje',
290
-	'icone_doc_rubrique' => 'Załączniki',
291
-	'icone_ecrire_article' => 'Napisz nowy artykuł',
292
-	'icone_edition_site' => 'Edycja',
293
-	'icone_gestion_langues' => 'Zarządzanie językami',
294
-	'icone_informations_personnelles' => 'Informacje osobiste',
295
-	'icone_interface_complet' => 'cały interfejs',
296
-	'icone_interface_simple' => 'Uproszczony interfejs',
297
-	'icone_maintenance_site' => 'Administracja stroną',
298
-	'icone_messagerie_personnelle' => 'Wiadomości prywatne',
299
-	'icone_repartition_debut' => 'Pokaż dystrybucję od początku',
300
-	'icone_rubriques' => 'Działy',
301
-	'icone_sauver_site' => 'Backup strony',
302
-	'icone_site_entier' => 'Cała strona',
303
-	'icone_sites_references' => 'Zlinkowane strony',
304
-	'icone_statistiques' => 'Statystyki strony',
305
-	'icone_suivi_activite' => 'Prace redakcyjne',
306
-	'icone_suivi_actualite' => 'Rozwój strony',
307
-	'icone_suivi_pettions' => 'Śledź/zarządzaj ogłoszeniami',
308
-	'icone_suivi_revisions' => 'Zmiany artykułów',
309
-	'icone_supprimer_document' => 'Usuń ten dokument',
310
-	'icone_supprimer_image' => 'Usuń ten obrazek',
311
-	'icone_tous_articles' => 'Wszystkie Twoje artykuły',
312
-	'icone_tous_auteur' => 'Wszyscy autorzy',
313
-	'icone_tous_visiteur' => 'Wszyscy odwiedzający',
314
-	'icone_visiter_site' => 'Przejdź do Twojego serwisu',
315
-	'icone_voir_en_ligne' => 'Obejrzyj online',
316
-	'img_indisponible' => 'obrazek niedostępny',
317
-	'impossible' => 'niemożliwe',
318
-	'info_a_suivre' => 'KONTYNUUJ »',
319
-	'info_acces_interdit' => 'Dostęp zabroniony',
320
-	'info_acces_refuse' => 'Brak dostępu',
321
-	'info_action' => 'Akcja: @action@',
322
-	'info_administrer_rubriques' => 'Możesz zarządzać tą działami i jej poddziałami',
323
-	'info_adresse_non_indiquee' => 'Nie podałeś adresu testowego!',
324
-	'info_aide' => 'POMOC:',
325
-	'info_ajouter_mot' => 'Dodaj to słowo kluczowe',
326
-	'info_annonce' => 'ZAWIADOMIENIE',
327
-	'info_annonces_generales' => 'Ogólne ogłoszenia:',
328
-	'info_article_propose' => 'Zaproponowany artykuł',
329
-	'info_article_publie' => 'Artykuł opublikowany',
330
-	'info_article_redaction' => 'Artykuł w trakcie tworzenia',
331
-	'info_article_refuse' => 'Artykuł odrzucony',
332
-	'info_article_supprime' => 'Artykuł usunięty',
333
-	'info_articles' => 'Artykuły',
334
-	'info_articles_a_valider' => 'Artykuły do zatwierdzenia',
335
-	'info_articles_nb' => '@nb@ artykułów',
336
-	'info_articles_proposes' => 'Zaproponowane artykuły',
337
-	'info_articles_un' => '1 artykuł',
338
-	'info_auteurs_nombre' => 'autor(zy):',
339
-	'info_authentification_ftp' => 'Uwierzytelnienie (poprzez FTP).',
340
-	'info_breves_2' => 'newsy',
341
-	'info_breves_nb' => '@nb@ newsów',
342
-	'info_connexion_refusee' => 'Brak połączenia',
343
-	'info_contact_developpeur' => 'Proszę skontaktować się z deweloperem.',
344
-	'info_contenance' => 'Ta strona zawiera:',
345
-	'info_contribution' => 'wpisy na forum', # MODIF
346
-	'info_copyright' => '@spip@ - darmowe oprogramowanie dystrybuowane w oparciu o licencję @lien_gpl@.',
347
-	'info_copyright_doc' => 'Więcej informacji na stronie <a href="@spipnet@">http://www.spip.net</a>.', # MODIF
348
-	'info_copyright_gpl' => 'na licencji GPL',
349
-	'info_cours_edition' => 'Twoje artykuły w trakcie redagowania', # MODIF
350
-	'info_creer_repertoire' => 'Utwórz plik lub katalog o nazwie:',
351
-	'info_creer_repertoire_2' => 'w podkatalogu <b>@repertoire@</b>, a następnie:',
352
-	'info_creer_vignette' => 'generowanie miniaturki',
353
-	'info_deplier' => 'Rozwiń',
354
-	'info_descriptif_nombre' => 'opis(y):',
355
-	'info_description' => 'Opis:',
356
-	'info_description_2' => 'Opis:',
357
-	'info_dimension' => 'Rozmiar:',
358
-	'info_ecire_message_prive' => 'Napisz prywatną wiadomość',
359
-	'info_email_invalide' => 'Nieprawidłowy adres e-mail.',
360
-	'info_en_cours_validation' => 'Twoje artykuły są w trakcie redagowania',
361
-	'info_en_ligne' => 'Teraz online:',
362
-	'info_envoyer_message_prive' => 'Wyślij prywatną wiadomość do tego autora',
363
-	'info_erreur_requete' => 'Błąd zapytania :',
364
-	'info_erreur_squelette2' => 'Żaden szkielet <b>@fichier@</b> nie jest dostępny ...',
365
-	'info_erreur_systeme' => 'Błąd systemu (errno @errsys@)',
366
-	'info_erreur_systeme2' => 'Albo dysk twardy jest pełny albo uszkodzona jest baza danych.<br />
272
+    // I
273
+    'ical_texte_rss_articles' => 'Plik "backend" artykułów tej strony znajduje się pod adresem:',
274
+    'ical_texte_rss_articles2' => 'Możesz również otrzymać pliki "backend" dla artykułów dla każdego z działów strony:',
275
+    'ical_texte_rss_breves' => 'Istnieje także plik zawierający wszystkie newsy opublikowane na stronie. Precyzując numer działu, otrzymasz newsy opublikowane w tym dziale.',
276
+    'icone_a_suivre' => 'Aktualności',
277
+    'icone_admin_site' => 'Administracja strony',
278
+    'icone_agenda' => 'Kalendarz',
279
+    'icone_aide_ligne' => 'Pomoc',
280
+    'icone_articles' => 'Artykuły',
281
+    'icone_auteurs' => 'Autorzy',
282
+    'icone_brouteur' => 'Menu podręczne',
283
+    'icone_configuration_site' => 'Konfiguracja',
284
+    'icone_configurer_site' => 'Konfiguruj swoją stronę',
285
+    'icone_creer_nouvel_auteur' => 'Utwórz nowego autora',
286
+    'icone_creer_rubrique' => 'Utwórz dział',
287
+    'icone_creer_sous_rubrique' => 'Utwórz poddział',
288
+    'icone_deconnecter' => 'Rozłącz',
289
+    'icone_discussions' => 'Dyskusje',
290
+    'icone_doc_rubrique' => 'Załączniki',
291
+    'icone_ecrire_article' => 'Napisz nowy artykuł',
292
+    'icone_edition_site' => 'Edycja',
293
+    'icone_gestion_langues' => 'Zarządzanie językami',
294
+    'icone_informations_personnelles' => 'Informacje osobiste',
295
+    'icone_interface_complet' => 'cały interfejs',
296
+    'icone_interface_simple' => 'Uproszczony interfejs',
297
+    'icone_maintenance_site' => 'Administracja stroną',
298
+    'icone_messagerie_personnelle' => 'Wiadomości prywatne',
299
+    'icone_repartition_debut' => 'Pokaż dystrybucję od początku',
300
+    'icone_rubriques' => 'Działy',
301
+    'icone_sauver_site' => 'Backup strony',
302
+    'icone_site_entier' => 'Cała strona',
303
+    'icone_sites_references' => 'Zlinkowane strony',
304
+    'icone_statistiques' => 'Statystyki strony',
305
+    'icone_suivi_activite' => 'Prace redakcyjne',
306
+    'icone_suivi_actualite' => 'Rozwój strony',
307
+    'icone_suivi_pettions' => 'Śledź/zarządzaj ogłoszeniami',
308
+    'icone_suivi_revisions' => 'Zmiany artykułów',
309
+    'icone_supprimer_document' => 'Usuń ten dokument',
310
+    'icone_supprimer_image' => 'Usuń ten obrazek',
311
+    'icone_tous_articles' => 'Wszystkie Twoje artykuły',
312
+    'icone_tous_auteur' => 'Wszyscy autorzy',
313
+    'icone_tous_visiteur' => 'Wszyscy odwiedzający',
314
+    'icone_visiter_site' => 'Przejdź do Twojego serwisu',
315
+    'icone_voir_en_ligne' => 'Obejrzyj online',
316
+    'img_indisponible' => 'obrazek niedostępny',
317
+    'impossible' => 'niemożliwe',
318
+    'info_a_suivre' => 'KONTYNUUJ »',
319
+    'info_acces_interdit' => 'Dostęp zabroniony',
320
+    'info_acces_refuse' => 'Brak dostępu',
321
+    'info_action' => 'Akcja: @action@',
322
+    'info_administrer_rubriques' => 'Możesz zarządzać tą działami i jej poddziałami',
323
+    'info_adresse_non_indiquee' => 'Nie podałeś adresu testowego!',
324
+    'info_aide' => 'POMOC:',
325
+    'info_ajouter_mot' => 'Dodaj to słowo kluczowe',
326
+    'info_annonce' => 'ZAWIADOMIENIE',
327
+    'info_annonces_generales' => 'Ogólne ogłoszenia:',
328
+    'info_article_propose' => 'Zaproponowany artykuł',
329
+    'info_article_publie' => 'Artykuł opublikowany',
330
+    'info_article_redaction' => 'Artykuł w trakcie tworzenia',
331
+    'info_article_refuse' => 'Artykuł odrzucony',
332
+    'info_article_supprime' => 'Artykuł usunięty',
333
+    'info_articles' => 'Artykuły',
334
+    'info_articles_a_valider' => 'Artykuły do zatwierdzenia',
335
+    'info_articles_nb' => '@nb@ artykułów',
336
+    'info_articles_proposes' => 'Zaproponowane artykuły',
337
+    'info_articles_un' => '1 artykuł',
338
+    'info_auteurs_nombre' => 'autor(zy):',
339
+    'info_authentification_ftp' => 'Uwierzytelnienie (poprzez FTP).',
340
+    'info_breves_2' => 'newsy',
341
+    'info_breves_nb' => '@nb@ newsów',
342
+    'info_connexion_refusee' => 'Brak połączenia',
343
+    'info_contact_developpeur' => 'Proszę skontaktować się z deweloperem.',
344
+    'info_contenance' => 'Ta strona zawiera:',
345
+    'info_contribution' => 'wpisy na forum', # MODIF
346
+    'info_copyright' => '@spip@ - darmowe oprogramowanie dystrybuowane w oparciu o licencję @lien_gpl@.',
347
+    'info_copyright_doc' => 'Więcej informacji na stronie <a href="@spipnet@">http://www.spip.net</a>.', # MODIF
348
+    'info_copyright_gpl' => 'na licencji GPL',
349
+    'info_cours_edition' => 'Twoje artykuły w trakcie redagowania', # MODIF
350
+    'info_creer_repertoire' => 'Utwórz plik lub katalog o nazwie:',
351
+    'info_creer_repertoire_2' => 'w podkatalogu <b>@repertoire@</b>, a następnie:',
352
+    'info_creer_vignette' => 'generowanie miniaturki',
353
+    'info_deplier' => 'Rozwiń',
354
+    'info_descriptif_nombre' => 'opis(y):',
355
+    'info_description' => 'Opis:',
356
+    'info_description_2' => 'Opis:',
357
+    'info_dimension' => 'Rozmiar:',
358
+    'info_ecire_message_prive' => 'Napisz prywatną wiadomość',
359
+    'info_email_invalide' => 'Nieprawidłowy adres e-mail.',
360
+    'info_en_cours_validation' => 'Twoje artykuły są w trakcie redagowania',
361
+    'info_en_ligne' => 'Teraz online:',
362
+    'info_envoyer_message_prive' => 'Wyślij prywatną wiadomość do tego autora',
363
+    'info_erreur_requete' => 'Błąd zapytania :',
364
+    'info_erreur_squelette2' => 'Żaden szkielet <b>@fichier@</b> nie jest dostępny ...',
365
+    'info_erreur_systeme' => 'Błąd systemu (errno @errsys@)',
366
+    'info_erreur_systeme2' => 'Albo dysk twardy jest pełny albo uszkodzona jest baza danych.<br />
367 367
 <span style="color:red;">Spróbuj <a href=\'@script@\'>naprawić bazę danych</a>, lub skontaktuj się z administratorem serwera.</span>',
368
-	'info_fini' => 'Zakończono!',
369
-	'info_format_image' => 'Formaty plików obrazków, które mogą być używane do tworzenia minitaturek : @gd_formats@.',
370
-	'info_format_non_defini' => 'format niezdefiniowany',
371
-	'info_grand_ecran' => 'Cały ekran',
372
-	'info_image_aide' => 'POMOC',
373
-	'info_image_process_titre' => 'Sposób generowania miniaturek',
374
-	'info_impossible_lire_page' => '<b>Błąd !</b> Nie można odczytać strony<tt><html>@test_proxy@</html></tt> za pośrednictwem proxy<tt>',
375
-	'info_installation_systeme_publication' => 'Instalacja systemu publikacji...',
376
-	'info_installer_documents' => 'Możesz automatycznie dodawać wszystkie dokumenty znajdujące się w folderze @upload@.',
377
-	'info_installer_ftp' => 'Jako administrator możesz umieszczać (przez FTP) pliki w folderze @upload@, aby później wybierać je bezpośrednio stąd.',
378
-	'info_installer_images' => 'Możesz umieszczać obrazki w formatach JPEG, GIF i PNG.',
379
-	'info_installer_images_dossier' => 'Umieść obrazki w folderze @upload@ aby móc je stąd wybierać.',
380
-	'info_interface_complete' => 'cały interfejs',
381
-	'info_interface_simple' => 'Uproszczony interfejs',
382
-	'info_joindre_document_article' => 'Do tego artykułu możesz załączać dokumenty typu',
383
-	'info_joindre_document_rubrique' => 'Do tego działu możesz dodawać dokumenty typu',
384
-	'info_joindre_documents_article' => 'Do swojego atykułu możesz załączać dokumenty typu:',
385
-	'info_l_article' => 'artykuł',
386
-	'info_la_breve' => 'news',
387
-	'info_la_rubrique' => 'dział',
388
-	'info_langue_principale' => 'Język głównej strony',
389
-	'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ pikseli',
390
-	'info_les_auteurs_1' => 'wg @les_auteurs@',
391
-	'info_logo_format_interdit' => 'Dla logo dozwolone są następujące formaty: @formats@.',
392
-	'info_logo_max_poids' => 'Logo może mieć maksymalnie @maxi@ (teraz ma @actuel@).',
393
-	'info_mail_fournisseur' => '[email protected]',
394
-	'info_message_2' => 'WIADOMOŚĆ',
395
-	'info_message_supprime' => 'WIADOMOŚĆ USUNIĘTA',
396
-	'info_mise_en_ligne' => 'Data publikacji online:',
397
-	'info_modification_parametres_securite' => 'modyfikacja parametrów bezpieczeństwa',
398
-	'info_mois_courant' => 'Bieżący miesiąc:',
399
-	'info_mot_cle_ajoute' => 'Następujące słowo kluczowe dodane zostało do',
400
-	'info_multi_herit' => 'Język domyślny',
401
-	'info_multi_langues_soulignees' => '<u>Podkreślonie języka</u> świadczy o kompletnym przekładzie wszystkich tekstów interfejsu. Jeśli wybierzesz jeden z tych języków, elementy serwisu (daty, formularze) zostaną automatycznie przetłumaczone. W przypadku języków nie-podkreślonych, elementy te ukażą się w głównym języku serwisu.', # MODIF
402
-	'info_multilinguisme' => 'Wielojęzyczny',
403
-	'info_nom_non_utilisateurs_connectes' => 'Twoja nazwa nie pojawia się na liście podłączonych użytkowników.',
404
-	'info_nom_utilisateurs_connectes' => 'Twoje imię występuje na liście podłączonych użytkowników.',
405
-	'info_nombre_en_ligne' => 'Teraz online:',
406
-	'info_non_resultat' => 'Żadnych wyników dla "@cherche_mot@"',
407
-	'info_non_utilisation_messagerie' => 'Nie korzystasz z wewnętrznej komunikacji tego serwisu.',
408
-	'info_nouveau_message' => 'MASZ NOWĄ WIADOMOŚĆ',
409
-	'info_nouveaux_messages' => 'MASZ @total_messages@ NOWYCH WIADOMOŚCI',
410
-	'info_numero_abbreviation' => 'N° ',
411
-	'info_pense_bete' => 'NOTATKA',
412
-	'info_petit_ecran' => 'Małe okno',
413
-	'info_pixels' => 'piksele',
414
-	'info_plusieurs_mots_trouves' => 'Kilkanaście słów kluczowych zostało znalezionych dla "@cherche_mot@":',
415
-	'info_portfolio_automatique' => 'Automatyczne portfolio:',
416
-	'info_premier_resultat' => '[@debut_limit@ pierwsze wyniki z @total@]',
417
-	'info_premier_resultat_sur' => '[@debut_limit@ pierwsze wyniki z @total@]',
418
-	'info_propose_1' => '[@nom_site_spip@] Zatwierdza: @titre@',
419
-	'info_propose_2' => 'Artykuły zatwierdzone
368
+    'info_fini' => 'Zakończono!',
369
+    'info_format_image' => 'Formaty plików obrazków, które mogą być używane do tworzenia minitaturek : @gd_formats@.',
370
+    'info_format_non_defini' => 'format niezdefiniowany',
371
+    'info_grand_ecran' => 'Cały ekran',
372
+    'info_image_aide' => 'POMOC',
373
+    'info_image_process_titre' => 'Sposób generowania miniaturek',
374
+    'info_impossible_lire_page' => '<b>Błąd !</b> Nie można odczytać strony<tt><html>@test_proxy@</html></tt> za pośrednictwem proxy<tt>',
375
+    'info_installation_systeme_publication' => 'Instalacja systemu publikacji...',
376
+    'info_installer_documents' => 'Możesz automatycznie dodawać wszystkie dokumenty znajdujące się w folderze @upload@.',
377
+    'info_installer_ftp' => 'Jako administrator możesz umieszczać (przez FTP) pliki w folderze @upload@, aby później wybierać je bezpośrednio stąd.',
378
+    'info_installer_images' => 'Możesz umieszczać obrazki w formatach JPEG, GIF i PNG.',
379
+    'info_installer_images_dossier' => 'Umieść obrazki w folderze @upload@ aby móc je stąd wybierać.',
380
+    'info_interface_complete' => 'cały interfejs',
381
+    'info_interface_simple' => 'Uproszczony interfejs',
382
+    'info_joindre_document_article' => 'Do tego artykułu możesz załączać dokumenty typu',
383
+    'info_joindre_document_rubrique' => 'Do tego działu możesz dodawać dokumenty typu',
384
+    'info_joindre_documents_article' => 'Do swojego atykułu możesz załączać dokumenty typu:',
385
+    'info_l_article' => 'artykuł',
386
+    'info_la_breve' => 'news',
387
+    'info_la_rubrique' => 'dział',
388
+    'info_langue_principale' => 'Język głównej strony',
389
+    'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ pikseli',
390
+    'info_les_auteurs_1' => 'wg @les_auteurs@',
391
+    'info_logo_format_interdit' => 'Dla logo dozwolone są następujące formaty: @formats@.',
392
+    'info_logo_max_poids' => 'Logo może mieć maksymalnie @maxi@ (teraz ma @actuel@).',
393
+    'info_mail_fournisseur' => '[email protected]',
394
+    'info_message_2' => 'WIADOMOŚĆ',
395
+    'info_message_supprime' => 'WIADOMOŚĆ USUNIĘTA',
396
+    'info_mise_en_ligne' => 'Data publikacji online:',
397
+    'info_modification_parametres_securite' => 'modyfikacja parametrów bezpieczeństwa',
398
+    'info_mois_courant' => 'Bieżący miesiąc:',
399
+    'info_mot_cle_ajoute' => 'Następujące słowo kluczowe dodane zostało do',
400
+    'info_multi_herit' => 'Język domyślny',
401
+    'info_multi_langues_soulignees' => '<u>Podkreślonie języka</u> świadczy o kompletnym przekładzie wszystkich tekstów interfejsu. Jeśli wybierzesz jeden z tych języków, elementy serwisu (daty, formularze) zostaną automatycznie przetłumaczone. W przypadku języków nie-podkreślonych, elementy te ukażą się w głównym języku serwisu.', # MODIF
402
+    'info_multilinguisme' => 'Wielojęzyczny',
403
+    'info_nom_non_utilisateurs_connectes' => 'Twoja nazwa nie pojawia się na liście podłączonych użytkowników.',
404
+    'info_nom_utilisateurs_connectes' => 'Twoje imię występuje na liście podłączonych użytkowników.',
405
+    'info_nombre_en_ligne' => 'Teraz online:',
406
+    'info_non_resultat' => 'Żadnych wyników dla "@cherche_mot@"',
407
+    'info_non_utilisation_messagerie' => 'Nie korzystasz z wewnętrznej komunikacji tego serwisu.',
408
+    'info_nouveau_message' => 'MASZ NOWĄ WIADOMOŚĆ',
409
+    'info_nouveaux_messages' => 'MASZ @total_messages@ NOWYCH WIADOMOŚCI',
410
+    'info_numero_abbreviation' => 'N° ',
411
+    'info_pense_bete' => 'NOTATKA',
412
+    'info_petit_ecran' => 'Małe okno',
413
+    'info_pixels' => 'piksele',
414
+    'info_plusieurs_mots_trouves' => 'Kilkanaście słów kluczowych zostało znalezionych dla "@cherche_mot@":',
415
+    'info_portfolio_automatique' => 'Automatyczne portfolio:',
416
+    'info_premier_resultat' => '[@debut_limit@ pierwsze wyniki z @total@]',
417
+    'info_premier_resultat_sur' => '[@debut_limit@ pierwsze wyniki z @total@]',
418
+    'info_propose_1' => '[@nom_site_spip@] Zatwierdza: @titre@',
419
+    'info_propose_2' => 'Artykuły zatwierdzone
420 420
 -----------------',
421
-	'info_propose_3' => 'Artykuł "@titre@" został zatwierdzony do publikacji.',
422
-	'info_propose_4' => 'Zostałeś zaproszony do przeglądu i wyrażenia swojej opinii',
423
-	'info_propose_5' => 'w forum, które jest przyporządkowane. Jest ono dostępne pod adresem :',
424
-	'info_publie_01' => 'Artykuł "@titre@" został zatwierdzony przez @connect_nom@.',
425
-	'info_publie_1' => '[@nom_site_spip@] PUBLIKUJE: @titre@',
426
-	'info_publie_2' => 'Artykuł opublikowany
421
+    'info_propose_3' => 'Artykuł "@titre@" został zatwierdzony do publikacji.',
422
+    'info_propose_4' => 'Zostałeś zaproszony do przeglądu i wyrażenia swojej opinii',
423
+    'info_propose_5' => 'w forum, które jest przyporządkowane. Jest ono dostępne pod adresem :',
424
+    'info_publie_01' => 'Artykuł "@titre@" został zatwierdzony przez @connect_nom@.',
425
+    'info_publie_1' => '[@nom_site_spip@] PUBLIKUJE: @titre@',
426
+    'info_publie_2' => 'Artykuł opublikowany
427 427
 -----------------',
428
-	'info_rechercher' => 'Szukaj',
429
-	'info_rechercher_02' => 'Szukaj:',
430
-	'info_remplacer_vignette' => 'Zamień domyślną miniaturkę na wybrane przez ciebie logo :',
431
-	'info_sans_titre_2' => 'bez tytułu',
432
-	'info_selectionner_fichier' => 'Możesz wybrać plik z folderu @upload@',
433
-	'info_selectionner_fichier_2' => 'Wybierz plik:',
434
-	'info_supprimer_vignette' => 'usuń winietę',
435
-	'info_symbole_bleu' => 'Symbol <b>niebieski</b> oznacza  <b>notatkę</b>: n.p. wiadomość do prywatnego użytku.',
436
-	'info_symbole_jaune' => 'Symbol <b>żółty</b> oznacza <b>zawiadomienie dla wszystkich redaktorów</b>: może być opublikowana przez wszystkich administratorów, i jest widoczna dla wszystkich redaktorów.',
437
-	'info_symbole_vert' => 'Symbol <b>zielony</b> oznacza <b>wiadomości wymieniane z innymi użytkownikami</b> strony.',
438
-	'info_telecharger_nouveau_logo' => 'Załaduj nowe logo:',
439
-	'info_telecharger_ordinateur' => 'Załaduj ze swojego komputera:',
440
-	'info_tous_resultats_enregistres' => '[wszystkie wyniki są zapisane]',
441
-	'info_tout_afficher' => 'Pokaż wszystko',
442
-	'info_travaux_texte' => 'Ten serwis nie jest jeszcze skonfigurowany. Zapraszamy później...',
443
-	'info_travaux_titre' => 'Strona w trakcie budowy',
444
-	'info_trop_resultat' => 'Zbyt dużo rezultatów "@cherche_mot@" ; spróbuj sprecyzować kryteria wyszukiwania.',
445
-	'info_utilisation_messagerie_interne' => 'Używasz wewnętrznej poczty w tym serwisie.',
446
-	'info_valider_lien' => 'zatwierdź ten link',
447
-	'info_verifier_image' => ', proszę się upewnić, czy obrazki zostały przesłane prawidłowo.',
448
-	'info_vignette_defaut' => 'Domyślna winieta',
449
-	'info_vignette_personnalisee' => 'Miniaturka spersonalizowana',
450
-	'info_visite' => 'odwiedziny:',
451
-	'info_vos_rendez_vous' => 'Twoje przyszłe spotkania',
452
-	'infos_vos_pense_bete' => 'Twoje notatki', # MODIF
428
+    'info_rechercher' => 'Szukaj',
429
+    'info_rechercher_02' => 'Szukaj:',
430
+    'info_remplacer_vignette' => 'Zamień domyślną miniaturkę na wybrane przez ciebie logo :',
431
+    'info_sans_titre_2' => 'bez tytułu',
432
+    'info_selectionner_fichier' => 'Możesz wybrać plik z folderu @upload@',
433
+    'info_selectionner_fichier_2' => 'Wybierz plik:',
434
+    'info_supprimer_vignette' => 'usuń winietę',
435
+    'info_symbole_bleu' => 'Symbol <b>niebieski</b> oznacza  <b>notatkę</b>: n.p. wiadomość do prywatnego użytku.',
436
+    'info_symbole_jaune' => 'Symbol <b>żółty</b> oznacza <b>zawiadomienie dla wszystkich redaktorów</b>: może być opublikowana przez wszystkich administratorów, i jest widoczna dla wszystkich redaktorów.',
437
+    'info_symbole_vert' => 'Symbol <b>zielony</b> oznacza <b>wiadomości wymieniane z innymi użytkownikami</b> strony.',
438
+    'info_telecharger_nouveau_logo' => 'Załaduj nowe logo:',
439
+    'info_telecharger_ordinateur' => 'Załaduj ze swojego komputera:',
440
+    'info_tous_resultats_enregistres' => '[wszystkie wyniki są zapisane]',
441
+    'info_tout_afficher' => 'Pokaż wszystko',
442
+    'info_travaux_texte' => 'Ten serwis nie jest jeszcze skonfigurowany. Zapraszamy później...',
443
+    'info_travaux_titre' => 'Strona w trakcie budowy',
444
+    'info_trop_resultat' => 'Zbyt dużo rezultatów "@cherche_mot@" ; spróbuj sprecyzować kryteria wyszukiwania.',
445
+    'info_utilisation_messagerie_interne' => 'Używasz wewnętrznej poczty w tym serwisie.',
446
+    'info_valider_lien' => 'zatwierdź ten link',
447
+    'info_verifier_image' => ', proszę się upewnić, czy obrazki zostały przesłane prawidłowo.',
448
+    'info_vignette_defaut' => 'Domyślna winieta',
449
+    'info_vignette_personnalisee' => 'Miniaturka spersonalizowana',
450
+    'info_visite' => 'odwiedziny:',
451
+    'info_vos_rendez_vous' => 'Twoje przyszłe spotkania',
452
+    'infos_vos_pense_bete' => 'Twoje notatki', # MODIF
453 453
 
454
-	// L
455
-	'lien_afficher_icones_seuls' => 'Pokazuj tylko ikonki',
456
-	'lien_afficher_texte_icones' => 'POkazuj ikonki i tekst',
457
-	'lien_afficher_texte_seul' => 'Pokazuj tylko tekst',
458
-	'lien_liberer' => 'uwolnij',
459
-	'lien_liberer_tous' => 'uwolnij artykuły', # MODIF
460
-	'lien_nouvea_pense_bete' => 'NOWA NOTATKA',
461
-	'lien_nouveau_message' => 'NOWA WIADOMOŚĆ',
462
-	'lien_nouvelle_annonce' => 'NOWE ZAWIADOMIENIE',
463
-	'lien_petitions' => 'OGŁOSZENIE',
464
-	'lien_popularite' => 'popularność: @popularite@%',
465
-	'lien_racine_site' => 'RDZEŃ STRONY',
466
-	'lien_reessayer' => 'spróbuj ponownie',
467
-	'lien_repondre_message' => 'Odpowiedz na tę wiadomość',
468
-	'lien_supprimer' => 'usuń',
469
-	'lien_tout_afficher' => 'Pokaż wszystko',
470
-	'lien_visite_site' => 'odwiedź stronę',
471
-	'lien_visites' => '@visites@ odwiedzin',
472
-	'lien_voir_auteur' => 'Sprawdź autora',
473
-	'ligne' => 'Linia',
474
-	'login' => 'Połączenie',
475
-	'login_acces_prive' => 'dostęp do obszaru prywatnego',
476
-	'login_autre_identifiant' => 'zaloguj używając innego loginu',
477
-	'login_cookie_accepte' => 'Zmień ustawienia Twojej przeglądarki, aby je akceptowała (przynajmniej dla tej strony).',
478
-	'login_cookie_oblige' => 'Aby móc zalogować się bezpiecznie do tej strony, musicie zaakceptować cookies.',
479
-	'login_deconnexion_ok' => 'Rozłączanie zakończono.',
480
-	'login_erreur_pass' => 'Błąd hasła.',
481
-	'login_espace_prive' => 'obszar prywatny',
482
-	'login_identifiant_inconnu' => 'Login « @login@ » nieznany.',
483
-	'login_login' => 'Login:',
484
-	'login_login2' => 'Login (identyfikator) :', # MODIF
485
-	'login_login_pass_incorrect' => '(Zły login lub hasło).',
486
-	'login_motpasseoublie' => 'zapomniałeś hasła?',
487
-	'login_non_securise' => 'Uwaga ten formularz nie jest bezpieczny.
454
+    // L
455
+    'lien_afficher_icones_seuls' => 'Pokazuj tylko ikonki',
456
+    'lien_afficher_texte_icones' => 'POkazuj ikonki i tekst',
457
+    'lien_afficher_texte_seul' => 'Pokazuj tylko tekst',
458
+    'lien_liberer' => 'uwolnij',
459
+    'lien_liberer_tous' => 'uwolnij artykuły', # MODIF
460
+    'lien_nouvea_pense_bete' => 'NOWA NOTATKA',
461
+    'lien_nouveau_message' => 'NOWA WIADOMOŚĆ',
462
+    'lien_nouvelle_annonce' => 'NOWE ZAWIADOMIENIE',
463
+    'lien_petitions' => 'OGŁOSZENIE',
464
+    'lien_popularite' => 'popularność: @popularite@%',
465
+    'lien_racine_site' => 'RDZEŃ STRONY',
466
+    'lien_reessayer' => 'spróbuj ponownie',
467
+    'lien_repondre_message' => 'Odpowiedz na tę wiadomość',
468
+    'lien_supprimer' => 'usuń',
469
+    'lien_tout_afficher' => 'Pokaż wszystko',
470
+    'lien_visite_site' => 'odwiedź stronę',
471
+    'lien_visites' => '@visites@ odwiedzin',
472
+    'lien_voir_auteur' => 'Sprawdź autora',
473
+    'ligne' => 'Linia',
474
+    'login' => 'Połączenie',
475
+    'login_acces_prive' => 'dostęp do obszaru prywatnego',
476
+    'login_autre_identifiant' => 'zaloguj używając innego loginu',
477
+    'login_cookie_accepte' => 'Zmień ustawienia Twojej przeglądarki, aby je akceptowała (przynajmniej dla tej strony).',
478
+    'login_cookie_oblige' => 'Aby móc zalogować się bezpiecznie do tej strony, musicie zaakceptować cookies.',
479
+    'login_deconnexion_ok' => 'Rozłączanie zakończono.',
480
+    'login_erreur_pass' => 'Błąd hasła.',
481
+    'login_espace_prive' => 'obszar prywatny',
482
+    'login_identifiant_inconnu' => 'Login « @login@ » nieznany.',
483
+    'login_login' => 'Login:',
484
+    'login_login2' => 'Login (identyfikator) :', # MODIF
485
+    'login_login_pass_incorrect' => '(Zły login lub hasło).',
486
+    'login_motpasseoublie' => 'zapomniałeś hasła?',
487
+    'login_non_securise' => 'Uwaga ten formularz nie jest bezpieczny.
488 488
    Jeśli nie chcesz aby Twoje hasło zostało przechwycone w sieci
489 489
    , włącz JavaScript w Twojej przeglądarce i',
490
-	'login_nouvelle_tentative' => 'Nowa próba',
491
-	'login_par_ici' => 'Jesteś zarejestrowany... tędy...',
492
-	'login_pass2' => 'Hasło:',
493
-	'login_preferez_refuser' => '<b>Jeśli wolisz nie korzystać z cookies</b>, jest inna (mniej bezpieczna) metoda do dyspozycji :',
494
-	'login_recharger' => 'przeładuj stronę',
495
-	'login_rester_identifie' => 'Pozostań zalogowany kilka dni', # MODIF
496
-	'login_retour_public' => 'Powrót do strony publicznej',
497
-	'login_retour_site' => 'Powrót do strony publicznej',
498
-	'login_retoursitepublic' => 'Powrót do strony publicznej',
499
-	'login_sinscrire' => 'rejestracja', # MODIF
500
-	'login_test_navigateur' => 'test przeglądarki/łącz ponownie',
501
-	'login_verifiez_navigateur' => '(Sprawdź czy Twoja przeglądarka nie zapamiętała hasła...)',
490
+    'login_nouvelle_tentative' => 'Nowa próba',
491
+    'login_par_ici' => 'Jesteś zarejestrowany... tędy...',
492
+    'login_pass2' => 'Hasło:',
493
+    'login_preferez_refuser' => '<b>Jeśli wolisz nie korzystać z cookies</b>, jest inna (mniej bezpieczna) metoda do dyspozycji :',
494
+    'login_recharger' => 'przeładuj stronę',
495
+    'login_rester_identifie' => 'Pozostań zalogowany kilka dni', # MODIF
496
+    'login_retour_public' => 'Powrót do strony publicznej',
497
+    'login_retour_site' => 'Powrót do strony publicznej',
498
+    'login_retoursitepublic' => 'Powrót do strony publicznej',
499
+    'login_sinscrire' => 'rejestracja', # MODIF
500
+    'login_test_navigateur' => 'test przeglądarki/łącz ponownie',
501
+    'login_verifiez_navigateur' => '(Sprawdź czy Twoja przeglądarka nie zapamiętała hasła...)',
502 502
 
503
-	// M
504
-	'masquer_trad' => 'ukryj tlumaczenia',
505
-	'module_fichiers_langues' => 'Pliki językowe',
503
+    // M
504
+    'masquer_trad' => 'ukryj tlumaczenia',
505
+    'module_fichiers_langues' => 'Pliki językowe',
506 506
 
507
-	// N
508
-	'navigateur_pas_redirige' => 'Jeśli twoja przeglądarka cię nie przekierowała, kliknij tutaj, żeby kontynuować.',
509
-	'numero' => 'Numer',
507
+    // N
508
+    'navigateur_pas_redirige' => 'Jeśli twoja przeglądarka cię nie przekierowała, kliknij tutaj, żeby kontynuować.',
509
+    'numero' => 'Numer',
510 510
 
511
-	// O
512
-	'occurence' => 'Wystąpienie',
513
-	'onglet_affacer_base' => 'Usuń bazę danych',
514
-	'onglet_auteur' => 'Autor',
515
-	'onglet_contenu_site' => 'Zawartość strony',
516
-	'onglet_evolution_visite_mod' => 'Ewolucja',
517
-	'onglet_fonctions_avances' => 'Funkcje zaawansowane',
518
-	'onglet_informations_personnelles' => 'Informacje osobiste',
519
-	'onglet_interactivite' => 'Interaktywność',
520
-	'onglet_messagerie' => 'Wiadomości',
521
-	'onglet_repartition_rubrique' => 'Rozłożenie działów',
522
-	'onglet_save_restaur_base' => 'Backup/zapisywanie bazy danych',
523
-	'onglet_vider_cache' => 'Opróżnij cache',
511
+    // O
512
+    'occurence' => 'Wystąpienie',
513
+    'onglet_affacer_base' => 'Usuń bazę danych',
514
+    'onglet_auteur' => 'Autor',
515
+    'onglet_contenu_site' => 'Zawartość strony',
516
+    'onglet_evolution_visite_mod' => 'Ewolucja',
517
+    'onglet_fonctions_avances' => 'Funkcje zaawansowane',
518
+    'onglet_informations_personnelles' => 'Informacje osobiste',
519
+    'onglet_interactivite' => 'Interaktywność',
520
+    'onglet_messagerie' => 'Wiadomości',
521
+    'onglet_repartition_rubrique' => 'Rozłożenie działów',
522
+    'onglet_save_restaur_base' => 'Backup/zapisywanie bazy danych',
523
+    'onglet_vider_cache' => 'Opróżnij cache',
524 524
 
525
-	// P
526
-	'pass_choix_pass' => 'Proszę wybrać swoje nowe hasło:',
527
-	'pass_erreur' => 'Błąd',
528
-	'pass_erreur_acces_refuse' => '<b>Błąd:</b> nie masz już dostępu do tej strony.',
529
-	'pass_erreur_code_inconnu' => '<b>Błąd :</b> ten kod nie odpowiada, żadnemu z użytkowników, którzy mają dostęp do tej strony.',
530
-	'pass_erreur_non_enregistre' => '<b>Błąd :</b> adres <tt>@email_oubli@</tt> nie jest zarejestrowany na tej stronie.',
531
-	'pass_erreur_non_valide' => '<b>Błąd :</b> e-mail <tt>@email_oubli@</tt> nie jest prawidłowy!',
532
-	'pass_erreur_probleme_technique' => '<b>Bład :</b> e-mail nie mógł być wysłany z powodu problemów technicznych.',
533
-	'pass_espace_prive_bla' => 'Strefa prywatna tego serwisu jest dostęna
525
+    // P
526
+    'pass_choix_pass' => 'Proszę wybrać swoje nowe hasło:',
527
+    'pass_erreur' => 'Błąd',
528
+    'pass_erreur_acces_refuse' => '<b>Błąd:</b> nie masz już dostępu do tej strony.',
529
+    'pass_erreur_code_inconnu' => '<b>Błąd :</b> ten kod nie odpowiada, żadnemu z użytkowników, którzy mają dostęp do tej strony.',
530
+    'pass_erreur_non_enregistre' => '<b>Błąd :</b> adres <tt>@email_oubli@</tt> nie jest zarejestrowany na tej stronie.',
531
+    'pass_erreur_non_valide' => '<b>Błąd :</b> e-mail <tt>@email_oubli@</tt> nie jest prawidłowy!',
532
+    'pass_erreur_probleme_technique' => '<b>Bład :</b> e-mail nie mógł być wysłany z powodu problemów technicznych.',
533
+    'pass_espace_prive_bla' => 'Strefa prywatna tego serwisu jest dostęna
534 534
   dla zapisanych użytkowników. Jako zarejestrowany użytkownik,
535 535
   będziesz mógł czytać artykuły, które są w trakcie redagowania,
536 536
   proponować artykuły i brać udział w dyskusjach na forum.',
537
-	'pass_forum_bla' => 'Chcesz wziąć udział w forum
537
+    'pass_forum_bla' => 'Chcesz wziąć udział w forum
538 538
   zarezerwowanym dla zarejestrowanych użytkowników.',
539
-	'pass_indiquez_cidessous' => 'Wpisz poniżej adres e-mail pod jakim
539
+    'pass_indiquez_cidessous' => 'Wpisz poniżej adres e-mail pod jakim
540 540
 byłeś zarejestrowany poprzednio.
541 541
 Otrzymasz e-maila wyjaśniającego jak
542 542
 możesz odzyskać swój dostęp.',
543
-	'pass_mail_passcookie' => '(to jest automatyczna wiadomość)
543
+    'pass_mail_passcookie' => '(to jest automatyczna wiadomość)
544 544
 
545 545
 Aby odzyskać dostęp do strony
546 546
 @nom_site_spip@ (@adresse_site@)
@@ -552,128 +552,128 @@  discard block
 block discarded – undo
552 552
 Po wpisaniu nowego hasła
553 553
 można ponownie połączyć się ze stroną.
554 554
 ',
555
-	'pass_mot_oublie' => 'Zapomniane hasło',
556
-	'pass_nouveau_enregistre' => 'Twoje nowe hasło zostało zapisane.',
557
-	'pass_nouveau_pass' => 'Nowe hasło',
558
-	'pass_ok' => 'OK',
559
-	'pass_oubli_mot' => 'Zapomnienie hasła',
560
-	'pass_quitter_fenetre' => 'Zamknij okno',
561
-	'pass_rappel_login' => 'Przypomnienie : twój identyfikator (login) to « @login@ ».',
562
-	'pass_recevoir_mail' => 'Otrzymasz e-mail wyjaśniający jak możesz odzyskać dostęp do strony.', # MODIF
563
-	'pass_retour_public' => 'Powrót do strony publicznej',
564
-	'pass_rien_a_faire_ici' => 'Nie ma tu nic do zrobienia.',
565
-	'pass_vousinscrire' => 'Zapisaś się w tym serwisie',
566
-	'precedent' => 'poprzedni',
567
-	'previsualisation' => 'Podgląd',
568
-	'previsualiser' => 'Włącz podgląd',
555
+    'pass_mot_oublie' => 'Zapomniane hasło',
556
+    'pass_nouveau_enregistre' => 'Twoje nowe hasło zostało zapisane.',
557
+    'pass_nouveau_pass' => 'Nowe hasło',
558
+    'pass_ok' => 'OK',
559
+    'pass_oubli_mot' => 'Zapomnienie hasła',
560
+    'pass_quitter_fenetre' => 'Zamknij okno',
561
+    'pass_rappel_login' => 'Przypomnienie : twój identyfikator (login) to « @login@ ».',
562
+    'pass_recevoir_mail' => 'Otrzymasz e-mail wyjaśniający jak możesz odzyskać dostęp do strony.', # MODIF
563
+    'pass_retour_public' => 'Powrót do strony publicznej',
564
+    'pass_rien_a_faire_ici' => 'Nie ma tu nic do zrobienia.',
565
+    'pass_vousinscrire' => 'Zapisaś się w tym serwisie',
566
+    'precedent' => 'poprzedni',
567
+    'previsualisation' => 'Podgląd',
568
+    'previsualiser' => 'Włącz podgląd',
569 569
 
570
-	// R
571
-	'retour' => 'Powrót',
570
+    // R
571
+    'retour' => 'Powrót',
572 572
 
573
-	// S
574
-	'spip_conforme_dtd' => 'SPIP uznaje ten dokument za zgodny z jego DOCTYPE :',
575
-	'squelette' => 'szkielet',
576
-	'squelette_inclus_ligne' => 'szkielet zainkludowany, linia',
577
-	'squelette_ligne' => 'szkielet, linia',
578
-	'stats_visites_et_popularite' => '@visites@ odwiedzin; popularność: @popularite@',
579
-	'suivant' => 'następny',
573
+    // S
574
+    'spip_conforme_dtd' => 'SPIP uznaje ten dokument za zgodny z jego DOCTYPE :',
575
+    'squelette' => 'szkielet',
576
+    'squelette_inclus_ligne' => 'szkielet zainkludowany, linia',
577
+    'squelette_ligne' => 'szkielet, linia',
578
+    'stats_visites_et_popularite' => '@visites@ odwiedzin; popularność: @popularite@',
579
+    'suivant' => 'następny',
580 580
 
581
-	// T
582
-	'taille_ko' => '@taille@ kb',
583
-	'taille_mo' => '@taille@ Mb',
584
-	'taille_octets' => '@taille@ bytes',
585
-	'taille_octets_bi' => '@taille@ bytes',
586
-	'texte_actualite_site_1' => 'Kiedy poznasz interfejs, kliknij na «',
587
-	'texte_actualite_site_2' => 'kompletny interfejs',
588
-	'texte_actualite_site_3' => '» aby uruchomić więcej możliwości.',
589
-	'texte_creation_automatique_vignette' => 'W tym serwisie, uruchomione jest generowanie minitaurek.Jeśli instalujecie za pośrednictwem tego formularza pliki graficzne w formatach @gd_formats@, zostaną one uzupełnione o minitaurkę, o miniaturkę w wielkości maksymalnej: @taille_preview@ pixels.',
590
-	'texte_documents_associes' => 'Następujące dokumenty są związane z artykułem,
581
+    // T
582
+    'taille_ko' => '@taille@ kb',
583
+    'taille_mo' => '@taille@ Mb',
584
+    'taille_octets' => '@taille@ bytes',
585
+    'taille_octets_bi' => '@taille@ bytes',
586
+    'texte_actualite_site_1' => 'Kiedy poznasz interfejs, kliknij na «',
587
+    'texte_actualite_site_2' => 'kompletny interfejs',
588
+    'texte_actualite_site_3' => '» aby uruchomić więcej możliwości.',
589
+    'texte_creation_automatique_vignette' => 'W tym serwisie, uruchomione jest generowanie minitaurek.Jeśli instalujecie za pośrednictwem tego formularza pliki graficzne w formatach @gd_formats@, zostaną one uzupełnione o minitaurkę, o miniaturkę w wielkości maksymalnej: @taille_preview@ pixels.',
590
+    'texte_documents_associes' => 'Następujące dokumenty są związane z artykułem,
591 591
     ale nie zostały bezpośrednio do niego
592 592
     dołączone. Zależnie od układu stron publicznych,
593 593
     będę mogły pojawić się na nich jako załączniki.',
594
-	'texte_erreur_mise_niveau_base' => 'Błąd bazy danych zaistniały w trakcie uaktualniania.
594
+    'texte_erreur_mise_niveau_base' => 'Błąd bazy danych zaistniały w trakcie uaktualniania.
595 595
   Obrazek <b>@fichier@</b> nie przeszedł (artykuł @id_article@).
596 596
   Zapisz te dane, i spróbuj ponownego uaktualnienia,
597 597
 a następnie sprawdź czy obrazki pojawiają się zawsze w artykułach.',
598
-	'texte_erreur_visiteur' => 'Próbujesz dostać się do panelu administracyjnego za pomocą loginu, który na to nie pozwala.',
599
-	'texte_inc_auth_1' => 'Jesteś zalogowany za pomocą
598
+    'texte_erreur_visiteur' => 'Próbujesz dostać się do panelu administracyjnego za pomocą loginu, który na to nie pozwala.',
599
+    'texte_inc_auth_1' => 'Jesteś zalogowany za pomocą
600 600
   loginu <b>@auth_login@</b>, ale nie istnieje on (już) w bazie danych. 
601 601
   Spróbuj się', # MODIF
602
-	'texte_inc_auth_2' => 'połączyć',
603
-	'texte_inc_auth_3' => ', opuszczjąc ewentualnie przeglądarkę
602
+    'texte_inc_auth_2' => 'połączyć',
603
+    'texte_inc_auth_3' => ', opuszczjąc ewentualnie przeglądarkę
604 604
   i włączając ją na powrót.',
605
-	'texte_inc_config' => 'Zmiany dokonane na tych stronach znacząco wpłyną na
605
+    'texte_inc_config' => 'Zmiany dokonane na tych stronach znacząco wpłyną na
606 606
  funkcjonowanie Twojego serwisu. Radzimy nie zatwierdzać tych zmian do momentu, w którym nie będziecie
607 607
  dobrze obeznani z funkcjonowaniem systemu SPIP. <br /><br /><b>Najbardziej
608 608
  zalecamy, poproszenie o dokonanie zmian głównego adminsitratora serwisu.</b>',
609
-	'texte_inc_meta_1' => 'System nie może zapisać plików <code>@fichier@</code>. Jako administrator strony,',
610
-	'texte_inc_meta_2' => 'sprawdź pozwolenia zapisu',
611
-	'texte_inc_meta_3' => 'dla katalogu <code>@repertoire@</code>.',
612
-	'texte_statut_en_cours_redaction' => 'redakcja w toku',
613
-	'texte_statut_poubelle' => 'do kosza',
614
-	'texte_statut_propose_evaluation' => 'zaproponowany do oceny',
615
-	'texte_statut_publie' => 'opublikowany online',
616
-	'texte_statut_refuse' => 'odrzucony',
617
-	'titre_ajouter_mot_cle' => 'DODAJ SŁOWO KLUCZOWE:',
618
-	'titre_cadre_raccourcis' => 'SKRÓTY :',
619
-	'titre_changer_couleur_interface' => 'Zmiana koloru interfejsu',
620
-	'titre_image_admin_article' => 'Możesz edytować ten artykuł',
621
-	'titre_image_administrateur' => 'Administrator',
622
-	'titre_image_aide' => 'Pomoc do tego elementu',
623
-	'titre_image_auteur_supprime' => 'Autor usunięty',
624
-	'titre_image_redacteur' => 'Redaktor bez dostępu',
625
-	'titre_image_redacteur_02' => 'Redaktor',
626
-	'titre_image_visiteur' => 'Odwiedzający',
627
-	'titre_joindre_document' => 'ZAŁĄCZ DOKUMENT',
628
-	'titre_mots_cles' => 'SŁOWA KLUCZOWE',
629
-	'titre_probleme_technique' => 'Uwaga: problem techniczny (serwer SQL) blokuje dostęp do tej części strony. Dziękujemy za zrozumienie.',
630
-	'titre_publier_document' => 'PUBLIKUJ DOKUMENT W TYM DZIALE',
631
-	'titre_statistiques' => 'Statystyki strony',
632
-	'titre_titre_document' => 'Tytuł dokumentu:',
633
-	'trad_reference' => '(artykuł wzorcowy)', # MODIF
609
+    'texte_inc_meta_1' => 'System nie może zapisać plików <code>@fichier@</code>. Jako administrator strony,',
610
+    'texte_inc_meta_2' => 'sprawdź pozwolenia zapisu',
611
+    'texte_inc_meta_3' => 'dla katalogu <code>@repertoire@</code>.',
612
+    'texte_statut_en_cours_redaction' => 'redakcja w toku',
613
+    'texte_statut_poubelle' => 'do kosza',
614
+    'texte_statut_propose_evaluation' => 'zaproponowany do oceny',
615
+    'texte_statut_publie' => 'opublikowany online',
616
+    'texte_statut_refuse' => 'odrzucony',
617
+    'titre_ajouter_mot_cle' => 'DODAJ SŁOWO KLUCZOWE:',
618
+    'titre_cadre_raccourcis' => 'SKRÓTY :',
619
+    'titre_changer_couleur_interface' => 'Zmiana koloru interfejsu',
620
+    'titre_image_admin_article' => 'Możesz edytować ten artykuł',
621
+    'titre_image_administrateur' => 'Administrator',
622
+    'titre_image_aide' => 'Pomoc do tego elementu',
623
+    'titre_image_auteur_supprime' => 'Autor usunięty',
624
+    'titre_image_redacteur' => 'Redaktor bez dostępu',
625
+    'titre_image_redacteur_02' => 'Redaktor',
626
+    'titre_image_visiteur' => 'Odwiedzający',
627
+    'titre_joindre_document' => 'ZAŁĄCZ DOKUMENT',
628
+    'titre_mots_cles' => 'SŁOWA KLUCZOWE',
629
+    'titre_probleme_technique' => 'Uwaga: problem techniczny (serwer SQL) blokuje dostęp do tej części strony. Dziękujemy za zrozumienie.',
630
+    'titre_publier_document' => 'PUBLIKUJ DOKUMENT W TYM DZIALE',
631
+    'titre_statistiques' => 'Statystyki strony',
632
+    'titre_titre_document' => 'Tytuł dokumentu:',
633
+    'trad_reference' => '(artykuł wzorcowy)', # MODIF
634 634
 
635
-	// Z
636
-	'zbug_balise_b_aval' => ' : balise B en aval',
637
-	'zbug_balise_inexistante' => 'erreur @from@: la balise #@balise@ n’existe pas', # MODIF
638
-	'zbug_boucle' => 'pętla',
639
-	'zbug_boucle_recursive_undef' => 'pętla rekursywna nie została zdefiniowana', # MODIF
640
-	'zbug_champ_hors_boucle' => 'Pole @champ@ jest bez pętli',
641
-	'zbug_champ_hors_motif' => 'Pole @champ@ jest poza pętlą @motif@', # MODIF
642
-	'zbug_code' => 'kod',
643
-	'zbug_critere_inconnu' => 'nieznane kryterium @critere@', # MODIF
644
-	'zbug_distant_interdit' => 'operacja niedozwolona w zewnętrznej bazie', # MODIF
645
-	'zbug_doublon_table_sans_cle_primaire' => 'doublons sur une table sans clef primaire atomique', # MODIF
646
-	'zbug_doublon_table_sans_index' => 'podwójny wpis w tablicy bez indeksu', # MODIF
647
-	'zbug_erreur_boucle_double' => 'BOUCLE@id@: podwójna definicja', # MODIF
648
-	'zbug_erreur_boucle_fermant' => 'BOUCLE@id@: brakuje znacznika zamykającego', # MODIF
649
-	'zbug_erreur_boucle_syntaxe' => 'Składnia pętli (boucle) nieprawidłowa', # MODIF
650
-	'zbug_erreur_compilation' => 'Błąd kompilacji',
651
-	'zbug_erreur_execution_page' => 'błąd w wykonaniu strony', # MODIF
652
-	'zbug_erreur_filtre' => 'Błąd : filtr <b>« @filtre@ »</b> nie zdefiniowany', # MODIF
653
-	'zbug_erreur_meme_parent' => '{meme_parent} stosuje się wyłącznie do pętli (FORUMS) i (RUBRIQUES)', # MODIF
654
-	'zbug_erreur_squelette' => 'Błąd (błędy) w szkielecie',
655
-	'zbug_info_erreur_squelette' => 'Błąd na stronie',
656
-	'zbug_inversion_ordre_inexistant' => 'odwrócenie nieistniejącego uporządkowania', # MODIF
657
-	'zbug_pagination_sans_critere' => '#PAGINATION bez kryterium {pagination} lub użyta w pętli rekursywnej', # MODIF
658
-	'zbug_parametres_inclus_incorrects' => 'Złe parametry załączenia (include)', # MODIF
659
-	'zbug_profile' => 'Czas przeliczania: @time@',
660
-	'zbug_resultat' => 'wynik',
661
-	'zbug_serveur_indefini' => 'serwer SQL niezdefiniowany', # MODIF
662
-	'zbug_table_inconnue' => 'Tabela SQL « @table@ » nieznana',
663
-	'zxml_connus_attributs' => 'znane atrybuty',
664
-	'zxml_de' => 'z',
665
-	'zxml_inconnu_attribut' => 'atrybut nieznany',
666
-	'zxml_inconnu_balise' => 'znacznik nieznany',
667
-	'zxml_inconnu_entite' => 'nieznana wartość',
668
-	'zxml_inconnu_id' => 'ID nieznany',
669
-	'zxml_mais_de' => 'ale z',
670
-	'zxml_non_conforme' => 'nie jest zgodny',
671
-	'zxml_non_fils' => 'nie jest z',
672
-	'zxml_nonvide_balise' => 'znacznik nie jest pusty',
673
-	'zxml_obligatoire_attribut' => 'nieobecny atrybut obowiązkowy',
674
-	'zxml_succession_fils_incorrecte' => 'niepoprawne dziedziczenie',
675
-	'zxml_survoler' => 'najedź wskaźnikiem aby zobaczyć poprawne',
676
-	'zxml_valeur_attribut' => 'wartość artybutu',
677
-	'zxml_vide_balise' => 'pusty znacznik',
678
-	'zxml_vu' => 'widziany wcześniej',
635
+    // Z
636
+    'zbug_balise_b_aval' => ' : balise B en aval',
637
+    'zbug_balise_inexistante' => 'erreur @from@: la balise #@balise@ n’existe pas', # MODIF
638
+    'zbug_boucle' => 'pętla',
639
+    'zbug_boucle_recursive_undef' => 'pętla rekursywna nie została zdefiniowana', # MODIF
640
+    'zbug_champ_hors_boucle' => 'Pole @champ@ jest bez pętli',
641
+    'zbug_champ_hors_motif' => 'Pole @champ@ jest poza pętlą @motif@', # MODIF
642
+    'zbug_code' => 'kod',
643
+    'zbug_critere_inconnu' => 'nieznane kryterium @critere@', # MODIF
644
+    'zbug_distant_interdit' => 'operacja niedozwolona w zewnętrznej bazie', # MODIF
645
+    'zbug_doublon_table_sans_cle_primaire' => 'doublons sur une table sans clef primaire atomique', # MODIF
646
+    'zbug_doublon_table_sans_index' => 'podwójny wpis w tablicy bez indeksu', # MODIF
647
+    'zbug_erreur_boucle_double' => 'BOUCLE@id@: podwójna definicja', # MODIF
648
+    'zbug_erreur_boucle_fermant' => 'BOUCLE@id@: brakuje znacznika zamykającego', # MODIF
649
+    'zbug_erreur_boucle_syntaxe' => 'Składnia pętli (boucle) nieprawidłowa', # MODIF
650
+    'zbug_erreur_compilation' => 'Błąd kompilacji',
651
+    'zbug_erreur_execution_page' => 'błąd w wykonaniu strony', # MODIF
652
+    'zbug_erreur_filtre' => 'Błąd : filtr <b>« @filtre@ »</b> nie zdefiniowany', # MODIF
653
+    'zbug_erreur_meme_parent' => '{meme_parent} stosuje się wyłącznie do pętli (FORUMS) i (RUBRIQUES)', # MODIF
654
+    'zbug_erreur_squelette' => 'Błąd (błędy) w szkielecie',
655
+    'zbug_info_erreur_squelette' => 'Błąd na stronie',
656
+    'zbug_inversion_ordre_inexistant' => 'odwrócenie nieistniejącego uporządkowania', # MODIF
657
+    'zbug_pagination_sans_critere' => '#PAGINATION bez kryterium {pagination} lub użyta w pętli rekursywnej', # MODIF
658
+    'zbug_parametres_inclus_incorrects' => 'Złe parametry załączenia (include)', # MODIF
659
+    'zbug_profile' => 'Czas przeliczania: @time@',
660
+    'zbug_resultat' => 'wynik',
661
+    'zbug_serveur_indefini' => 'serwer SQL niezdefiniowany', # MODIF
662
+    'zbug_table_inconnue' => 'Tabela SQL « @table@ » nieznana',
663
+    'zxml_connus_attributs' => 'znane atrybuty',
664
+    'zxml_de' => 'z',
665
+    'zxml_inconnu_attribut' => 'atrybut nieznany',
666
+    'zxml_inconnu_balise' => 'znacznik nieznany',
667
+    'zxml_inconnu_entite' => 'nieznana wartość',
668
+    'zxml_inconnu_id' => 'ID nieznany',
669
+    'zxml_mais_de' => 'ale z',
670
+    'zxml_non_conforme' => 'nie jest zgodny',
671
+    'zxml_non_fils' => 'nie jest z',
672
+    'zxml_nonvide_balise' => 'znacznik nie jest pusty',
673
+    'zxml_obligatoire_attribut' => 'nieobecny atrybut obowiązkowy',
674
+    'zxml_succession_fils_incorrecte' => 'niepoprawne dziedziczenie',
675
+    'zxml_survoler' => 'najedź wskaźnikiem aby zobaczyć poprawne',
676
+    'zxml_valeur_attribut' => 'wartość artybutu',
677
+    'zxml_vide_balise' => 'pusty znacznik',
678
+    'zxml_vu' => 'widziany wcześniej',
679 679
 ];
Please login to merge, or discard this patch.
ecrire/lang/public_id.php 1 patch
Indentation   +83 added lines, -83 removed lines patch added patch discarded remove patch
@@ -5,100 +5,100 @@
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'accueil_site' => 'Halaman Depan', # MODIF
10
-	'articles' => 'Artikel-artikel',
11
-	'articles_auteur' => 'Artikel-artikel penulis ini',
12
-	'articles_populaires' => 'Artikel-artikel yang paling banyak dibaca',
13
-	'articles_rubrique' => 'Artikel-artikel bagian ini',
14
-	'aucun_article' => 'Tidak ada artikel di alamat ini',
15
-	'aucun_auteur' => 'Tidak ada penulis di alamat ini',
16
-	'aucun_site' => 'Tidak ada situs di alamat ini',
17
-	'aucune_breve' => 'Tidak ada berita di alamat ini',
18
-	'aucune_rubrique' => 'Tidak ada bagian di alamat ini',
19
-	'autres_breves' => 'Berita lainnya',
20
-	'autres_groupes_mots_clefs' => 'Kelompok-kelompok kata kunci lainnya',
21
-	'autres_sites' => 'Situs-situs lainnya',
8
+    // A
9
+    'accueil_site' => 'Halaman Depan', # MODIF
10
+    'articles' => 'Artikel-artikel',
11
+    'articles_auteur' => 'Artikel-artikel penulis ini',
12
+    'articles_populaires' => 'Artikel-artikel yang paling banyak dibaca',
13
+    'articles_rubrique' => 'Artikel-artikel bagian ini',
14
+    'aucun_article' => 'Tidak ada artikel di alamat ini',
15
+    'aucun_auteur' => 'Tidak ada penulis di alamat ini',
16
+    'aucun_site' => 'Tidak ada situs di alamat ini',
17
+    'aucune_breve' => 'Tidak ada berita di alamat ini',
18
+    'aucune_rubrique' => 'Tidak ada bagian di alamat ini',
19
+    'autres_breves' => 'Berita lainnya',
20
+    'autres_groupes_mots_clefs' => 'Kelompok-kelompok kata kunci lainnya',
21
+    'autres_sites' => 'Situs-situs lainnya',
22 22
 
23
-	// B
24
-	'bonjour' => 'Halo',
23
+    // B
24
+    'bonjour' => 'Halo',
25 25
 
26
-	// C
27
-	'commenter_site' => 'Komentar di situs ini',
26
+    // C
27
+    'commenter_site' => 'Komentar di situs ini',
28 28
 
29
-	// D
30
-	'date' => 'Tanggal',
31
-	'dernier_ajout' => 'Penambahan terbaru',
32
-	'dernieres_breves' => 'Berita terbaru',
33
-	'derniers_articles' => 'Artikel-artikel terbaru',
34
-	'derniers_commentaires' => 'Komentar-komentar terbaru',
35
-	'derniers_messages_forum' => 'Pesan-pesan terbaru yang dipublikasikan di forum ini',
29
+    // D
30
+    'date' => 'Tanggal',
31
+    'dernier_ajout' => 'Penambahan terbaru',
32
+    'dernieres_breves' => 'Berita terbaru',
33
+    'derniers_articles' => 'Artikel-artikel terbaru',
34
+    'derniers_commentaires' => 'Komentar-komentar terbaru',
35
+    'derniers_messages_forum' => 'Pesan-pesan terbaru yang dipublikasikan di forum ini',
36 36
 
37
-	// E
38
-	'edition_mode_texte' => 'Tampilan teks saja',
39
-	'en_reponse' => 'Membalas kepada:',
40
-	'en_resume' => 'Ringkasan',
41
-	'envoyer_message' => 'Untuk mengirimkan sebuah pesan',
42
-	'espace_prive' => 'Area pribadi',
37
+    // E
38
+    'edition_mode_texte' => 'Tampilan teks saja',
39
+    'en_reponse' => 'Membalas kepada:',
40
+    'en_resume' => 'Ringkasan',
41
+    'envoyer_message' => 'Untuk mengirimkan sebuah pesan',
42
+    'espace_prive' => 'Area pribadi',
43 43
 
44
-	// H
45
-	'hierarchie_site' => 'Hirarki situs',
44
+    // H
45
+    'hierarchie_site' => 'Hirarki situs',
46 46
 
47
-	// J
48
-	'jours' => 'hari',
47
+    // J
48
+    'jours' => 'hari',
49 49
 
50
-	// M
51
-	'meme_auteur' => 'Oleh penulis yang sama',
52
-	'meme_rubrique' => 'Dalam bagian yang sama',
53
-	'memes_auteurs' => 'Oleh penulis-penulis yang sama',
54
-	'message' => 'Pesan',
55
-	'messages_forum' => 'Pesan-pesan forum', # MODIF
56
-	'messages_recents' => 'Pesan-pesan forum terbaru',
57
-	'mots_clefs' => 'Kata-kata kunci',
58
-	'mots_clefs_meme_groupe' => 'Kata-kata kunci dalam kelompok yang sama',
50
+    // M
51
+    'meme_auteur' => 'Oleh penulis yang sama',
52
+    'meme_rubrique' => 'Dalam bagian yang sama',
53
+    'memes_auteurs' => 'Oleh penulis-penulis yang sama',
54
+    'message' => 'Pesan',
55
+    'messages_forum' => 'Pesan-pesan forum', # MODIF
56
+    'messages_recents' => 'Pesan-pesan forum terbaru',
57
+    'mots_clefs' => 'Kata-kata kunci',
58
+    'mots_clefs_meme_groupe' => 'Kata-kata kunci dalam kelompok yang sama',
59 59
 
60
-	// N
61
-	'navigation' => 'Navigasi',
62
-	'nom' => 'Nama',
63
-	'nouveautes' => 'Yang terbaru',
64
-	'nouveautes_web' => 'Yang terbaru di dunia Web',
65
-	'nouveaux_articles' => 'Artikel-artikel baru',
66
-	'nouvelles_breves' => 'Berita-berita baru',
60
+    // N
61
+    'navigation' => 'Navigasi',
62
+    'nom' => 'Nama',
63
+    'nouveautes' => 'Yang terbaru',
64
+    'nouveautes_web' => 'Yang terbaru di dunia Web',
65
+    'nouveaux_articles' => 'Artikel-artikel baru',
66
+    'nouvelles_breves' => 'Berita-berita baru',
67 67
 
68
-	// P
69
-	'page_precedente' => 'halaman sebelumnya',
70
-	'page_suivante' => 'halaman selanjutnya',
71
-	'par_auteur' => 'oleh ',
72
-	'participer_site' => 'Anda dapat berpartisipasi secara aktif di situs web ini dan menulis artikel anda sendiri dengan sebelumnya mendaftarkan diri di bawah ini. Anda akan menerima segera sebuah e-mail yang berisikan kode akses ke area pribadi situs ini.',
73
-	'plan_site' => 'Peta Situs',
74
-	'popularite' => 'Popularitas',
75
-	'poster_message' => 'Untuk mengirimkan sebuah pesan',
76
-	'proposer_site' => 'Anda dapat merekomendasikan sebuah situs untuk ditambahkan ke dalam bagian ini:',
68
+    // P
69
+    'page_precedente' => 'halaman sebelumnya',
70
+    'page_suivante' => 'halaman selanjutnya',
71
+    'par_auteur' => 'oleh ',
72
+    'participer_site' => 'Anda dapat berpartisipasi secara aktif di situs web ini dan menulis artikel anda sendiri dengan sebelumnya mendaftarkan diri di bawah ini. Anda akan menerima segera sebuah e-mail yang berisikan kode akses ke area pribadi situs ini.',
73
+    'plan_site' => 'Peta Situs',
74
+    'popularite' => 'Popularitas',
75
+    'poster_message' => 'Untuk mengirimkan sebuah pesan',
76
+    'proposer_site' => 'Anda dapat merekomendasikan sebuah situs untuk ditambahkan ke dalam bagian ini:',
77 77
 
78
-	// R
79
-	'repondre_article' => 'Balasan pada artikel ini',
80
-	'repondre_breve' => 'Balasan pada artikel berita ini',
81
-	'resultats_recherche' => 'Hasil pencarian',
82
-	'retour_debut_forums' => 'Kembali ke awal forum',
83
-	'rubrique' => 'Bagian',
84
-	'rubriques' => 'Bagian',
78
+    // R
79
+    'repondre_article' => 'Balasan pada artikel ini',
80
+    'repondre_breve' => 'Balasan pada artikel berita ini',
81
+    'resultats_recherche' => 'Hasil pencarian',
82
+    'retour_debut_forums' => 'Kembali ke awal forum',
83
+    'rubrique' => 'Bagian',
84
+    'rubriques' => 'Bagian',
85 85
 
86
-	// S
87
-	'signatures_petition' => 'Tanda tangan',
88
-	'site_realise_avec_spip' => 'Situs dibuat dengan SPIP',
89
-	'sites_web' => 'Situs-situs web',
90
-	'sous_rubriques' => 'Sub-sub bagian',
91
-	'suite' => 'lanjut',
92
-	'sur_web' => 'Di Web',
93
-	'syndiquer_rubrique' => 'Sindikasi bagian ini',
94
-	'syndiquer_site' => 'Sindikasi seluruh isi situs',
86
+    // S
87
+    'signatures_petition' => 'Tanda tangan',
88
+    'site_realise_avec_spip' => 'Situs dibuat dengan SPIP',
89
+    'sites_web' => 'Situs-situs web',
90
+    'sous_rubriques' => 'Sub-sub bagian',
91
+    'suite' => 'lanjut',
92
+    'sur_web' => 'Di Web',
93
+    'syndiquer_rubrique' => 'Sindikasi bagian ini',
94
+    'syndiquer_site' => 'Sindikasi seluruh isi situs',
95 95
 
96
-	// T
97
-	'texte_lettre_information' => 'Berikut adalah laporan berkala situs',
98
-	'texte_lettre_information_2' => 'Laporan ini memberikan ringkasan artikel-artikel dan berita-berita yang dipublikasikan sejak', # MODIF
96
+    // T
97
+    'texte_lettre_information' => 'Berikut adalah laporan berkala situs',
98
+    'texte_lettre_information_2' => 'Laporan ini memberikan ringkasan artikel-artikel dan berita-berita yang dipublikasikan sejak', # MODIF
99 99
 
100
-	// V
101
-	'ver_imprimer' => 'Versi cetak',
102
-	'voir_en_ligne' => 'Lihat secara online',
103
-	'voir_squelette' => 'ٍTampilkan templat halaman ini',
100
+    // V
101
+    'ver_imprimer' => 'Versi cetak',
102
+    'voir_en_ligne' => 'Lihat secara online',
103
+    'voir_squelette' => 'ٍTampilkan templat halaman ini',
104 104
 ];
Please login to merge, or discard this patch.
ecrire/lang/ecrire_oc_prv.php 1 patch
Indentation   +521 added lines, -521 removed lines patch added patch discarded remove patch
@@ -5,484 +5,484 @@  discard block
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'activer_plugin' => 'Activar l’ajuston',
10
-	'aide_non_disponible' => 'Aquela part de l’ajuda en linha es pas encara disponibla per aquesta lenga.',
11
-	'auteur' => 'Autor :',
12
-	'avis_acces_interdit' => 'Accès proïbit.',
13
-	'avis_article_modifie' => 'Atencion, @nom_auteur_modif@ a trabalhat sus aquel article fa @date_diff@ minutas',
14
-	'avis_aucun_resultat' => 'Ges de resultat.',
15
-	'avis_chemin_invalide_1' => 'Lo camin qu’avètz chausit',
16
-	'avis_chemin_invalide_2' => 'sembla pas valid. Vougatz tornar a la pagina anteriora per verificar leis informacions fornidas.',
17
-	'avis_connexion_echec_1' => 'La connexion au servidor SQL s’es encalada.', # MODIF
18
-	'avis_connexion_echec_2' => 'Tornatz a la pagina anteriora, e verificatz leis informacions qu’avètz fornidas.',
19
-	'avis_connexion_echec_3' => '<b>N.B.</b> Sus fòrça servidors, devètz <b>demandar</b> qu’activen vòstre accès a la basa SQL avans de la poder utilizar. Se vos podètz pas connectar, verificatz qu’agatz ben realizat aqueu procediment.', # MODIF
20
-	'avis_connexion_ldap_echec_1' => 'La connexion au servidor LDAP s’es encalada.',
21
-	'avis_connexion_ldap_echec_2' => 'Tornatz a la pagina anteriora, e verificatz leis informacions qu’avètz fornidas. ',
22
-	'avis_connexion_ldap_echec_3' => 'Alternativament, utilizetz pas lo supòrt LDAP per importar d’utilizaires.',
23
-	'avis_deplacement_rubrique' => 'Atention! Aquela rubrica conten @contient_breves@ brèvas@scb@: se la desplaçatz, voudretz ben oscar aquela casa de confirmacion.',
24
-	'avis_erreur_connexion_mysql' => 'Error de connexion SQL',
25
-	'avis_espace_interdit' => '<b>Espaci proïbit</b><p>SPIP es ja installat.', # MODIF
26
-	'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas pogut legir lei noms dei basas de donadas installadas.',
27
-	'avis_lecture_noms_bases_2' => 'Siá ges de basa es disponibla, siá la foncion que permet d’entierar lei basas es estada desactivada per de rasons de seguretat (aquò’s lo cas en cò de mai d’un aubergador).',
28
-	'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que pòrta vòstre nom de login siá utilizabla:',
29
-	'avis_non_acces_page' => 'Podètz pas accedir a aquela pagina.',
30
-	'avis_operation_echec' => 'L’operacion s’es encalada.',
31
-	'avis_suppression_base' => 'ATENCION, suprimir lei donadas es irreversible',
8
+    // A
9
+    'activer_plugin' => 'Activar l’ajuston',
10
+    'aide_non_disponible' => 'Aquela part de l’ajuda en linha es pas encara disponibla per aquesta lenga.',
11
+    'auteur' => 'Autor :',
12
+    'avis_acces_interdit' => 'Accès proïbit.',
13
+    'avis_article_modifie' => 'Atencion, @nom_auteur_modif@ a trabalhat sus aquel article fa @date_diff@ minutas',
14
+    'avis_aucun_resultat' => 'Ges de resultat.',
15
+    'avis_chemin_invalide_1' => 'Lo camin qu’avètz chausit',
16
+    'avis_chemin_invalide_2' => 'sembla pas valid. Vougatz tornar a la pagina anteriora per verificar leis informacions fornidas.',
17
+    'avis_connexion_echec_1' => 'La connexion au servidor SQL s’es encalada.', # MODIF
18
+    'avis_connexion_echec_2' => 'Tornatz a la pagina anteriora, e verificatz leis informacions qu’avètz fornidas.',
19
+    'avis_connexion_echec_3' => '<b>N.B.</b> Sus fòrça servidors, devètz <b>demandar</b> qu’activen vòstre accès a la basa SQL avans de la poder utilizar. Se vos podètz pas connectar, verificatz qu’agatz ben realizat aqueu procediment.', # MODIF
20
+    'avis_connexion_ldap_echec_1' => 'La connexion au servidor LDAP s’es encalada.',
21
+    'avis_connexion_ldap_echec_2' => 'Tornatz a la pagina anteriora, e verificatz leis informacions qu’avètz fornidas. ',
22
+    'avis_connexion_ldap_echec_3' => 'Alternativament, utilizetz pas lo supòrt LDAP per importar d’utilizaires.',
23
+    'avis_deplacement_rubrique' => 'Atention! Aquela rubrica conten @contient_breves@ brèvas@scb@: se la desplaçatz, voudretz ben oscar aquela casa de confirmacion.',
24
+    'avis_erreur_connexion_mysql' => 'Error de connexion SQL',
25
+    'avis_espace_interdit' => '<b>Espaci proïbit</b><p>SPIP es ja installat.', # MODIF
26
+    'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas pogut legir lei noms dei basas de donadas installadas.',
27
+    'avis_lecture_noms_bases_2' => 'Siá ges de basa es disponibla, siá la foncion que permet d’entierar lei basas es estada desactivada per de rasons de seguretat (aquò’s lo cas en cò de mai d’un aubergador).',
28
+    'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que pòrta vòstre nom de login siá utilizabla:',
29
+    'avis_non_acces_page' => 'Podètz pas accedir a aquela pagina.',
30
+    'avis_operation_echec' => 'L’operacion s’es encalada.',
31
+    'avis_suppression_base' => 'ATENCION, suprimir lei donadas es irreversible',
32 32
 
33
-	// B
34
-	'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>',
35
-	'bouton_ajouter' => 'Apondre',
36
-	'bouton_demande_publication' => 'Demandar la publicacion d’aquest article',
37
-	'bouton_desactive_tout' => 'Desactivar tot',
38
-	'bouton_effacer_tout' => 'O escafar tot',
39
-	'bouton_envoyer_message' => 'Messatge definitiu: mandar',
40
-	'bouton_modifier' => 'Modificar',
41
-	'bouton_radio_afficher' => 'Afichar',
42
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tiera dei redactors connectats',
43
-	'bouton_radio_envoi_annonces_adresse' => 'Mandar leis anoncis a l’adreiça:',
44
-	'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tiera dei novetats',
45
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Pas aparéisser dins la tiera dei redactors',
46
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Pas mandar d’anoncis editoriaus',
47
-	'bouton_redirection' => 'TORNAR DIRIGIR',
48
-	'bouton_relancer_installation' => 'Tornar lançar l’installacion',
49
-	'bouton_suivant' => 'Seguent',
50
-	'bouton_tenter_recuperation' => 'Assajar de reparar',
51
-	'bouton_test_proxy' => 'Assajar lo proxy',
52
-	'bouton_vider_cache' => 'Vujar l’escondedor',
33
+    // B
34
+    'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>',
35
+    'bouton_ajouter' => 'Apondre',
36
+    'bouton_demande_publication' => 'Demandar la publicacion d’aquest article',
37
+    'bouton_desactive_tout' => 'Desactivar tot',
38
+    'bouton_effacer_tout' => 'O escafar tot',
39
+    'bouton_envoyer_message' => 'Messatge definitiu: mandar',
40
+    'bouton_modifier' => 'Modificar',
41
+    'bouton_radio_afficher' => 'Afichar',
42
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tiera dei redactors connectats',
43
+    'bouton_radio_envoi_annonces_adresse' => 'Mandar leis anoncis a l’adreiça:',
44
+    'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tiera dei novetats',
45
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Pas aparéisser dins la tiera dei redactors',
46
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Pas mandar d’anoncis editoriaus',
47
+    'bouton_redirection' => 'TORNAR DIRIGIR',
48
+    'bouton_relancer_installation' => 'Tornar lançar l’installacion',
49
+    'bouton_suivant' => 'Seguent',
50
+    'bouton_tenter_recuperation' => 'Assajar de reparar',
51
+    'bouton_test_proxy' => 'Assajar lo proxy',
52
+    'bouton_vider_cache' => 'Vujar l’escondedor',
53 53
 
54
-	// C
55
-	'cache_modifiable_webmestre' => 'Lo webmèstre dau sit pòt modificar aquestei paramètres.',
56
-	'calendrier_synchro' => 'S’utilizatz un logiciau d’agenda compatible <b>iCal</b>, lo podètz sincronizar amb leis informacions d’aquest sit.',
54
+    // C
55
+    'cache_modifiable_webmestre' => 'Lo webmèstre dau sit pòt modificar aquestei paramètres.',
56
+    'calendrier_synchro' => 'S’utilizatz un logiciau d’agenda compatible <b>iCal</b>, lo podètz sincronizar amb leis informacions d’aquest sit.',
57 57
 
58
-	// D
59
-	'date_mot_heures' => 'oras',
58
+    // D
59
+    'date_mot_heures' => 'oras',
60 60
 
61
-	// E
62
-	'email' => 'e-mail',
63
-	'email_2' => 'e-mail:',
64
-	'entree_adresse_annuaire' => 'Adreiça de l’annuari',
65
-	'entree_adresse_email' => 'Vòstra adreiça e-mail',
66
-	'entree_base_donnee_1' => 'Adreiça de la basa de donadas',
67
-	'entree_base_donnee_2' => '(Sovent, aquela adreiça correspònd a la dau vòstre sit, de còps correspònd a la mençon "localhost", de còps, se laissa vueja completament.)',
68
-	'entree_biographie' => 'Biografia corta, en quauquei mots.',
69
-	'entree_chemin_acces' => '<b>Intrar</b> lo camin d’accès:',
70
-	'entree_cle_pgp' => 'Vòstra clau PGP',
71
-	'entree_contenu_rubrique' => '(Contengut de la rubrica en quauquei mots.)',
72
-	'entree_identifiants_connexion' => 'Vòstreis identificants de connexion...',
73
-	'entree_informations_connexion_ldap' => 'Vougatz intrar dins aqueu formulari leis informacions de connexion au vòstre annuari LDAP.
61
+    // E
62
+    'email' => 'e-mail',
63
+    'email_2' => 'e-mail:',
64
+    'entree_adresse_annuaire' => 'Adreiça de l’annuari',
65
+    'entree_adresse_email' => 'Vòstra adreiça e-mail',
66
+    'entree_base_donnee_1' => 'Adreiça de la basa de donadas',
67
+    'entree_base_donnee_2' => '(Sovent, aquela adreiça correspònd a la dau vòstre sit, de còps correspònd a la mençon "localhost", de còps, se laissa vueja completament.)',
68
+    'entree_biographie' => 'Biografia corta, en quauquei mots.',
69
+    'entree_chemin_acces' => '<b>Intrar</b> lo camin d’accès:',
70
+    'entree_cle_pgp' => 'Vòstra clau PGP',
71
+    'entree_contenu_rubrique' => '(Contengut de la rubrica en quauquei mots.)',
72
+    'entree_identifiants_connexion' => 'Vòstreis identificants de connexion...',
73
+    'entree_informations_connexion_ldap' => 'Vougatz intrar dins aqueu formulari leis informacions de connexion au vòstre annuari LDAP.
74 74
 L’administrator dau sistèma o de la ret vos deu poder fornir
75 75
  aqueleis informacions.',
76
-	'entree_infos_perso' => 'Quau siatz?',
77
-	'entree_interieur_rubrique' => 'Dintre la rubrica:',
78
-	'entree_liens_sites' => '<b>Liame ipertèxt</b> (referéncia, sit de vesitar...)',
79
-	'entree_login' => 'Lo vòstre login',
80
-	'entree_login_connexion_1' => 'Lo login de connexion',
81
-	'entree_login_connexion_2' => '(Correspònd de còps au vòstre login d’accès a l’FTP; de còps se laissa vuege)',
82
-	'entree_mot_passe' => 'Vòstre senhau',
83
-	'entree_mot_passe_1' => 'Senhau per la connexion',
84
-	'entree_mot_passe_2' => '(Correspònd de còps a vòstre senhau per l’FTP; de còps se laissa vuege)',
85
-	'entree_nom_fichier' => 'Vougatz intrar lo nom dau fichier @texte_compresse@:',
86
-	'entree_nom_pseudo' => 'Vòstre nom o vòstre pseudonim',
87
-	'entree_nom_pseudo_1' => '(Vòstre nom o vòstre pseudonim)',
88
-	'entree_nom_site' => 'Lo nom dau vòstre sit',
89
-	'entree_nouveau_passe' => 'Senhau novèu',
90
-	'entree_passe_ldap' => 'Senhau',
91
-	'entree_port_annuaire' => 'Lo numèro de pòrt de l’annuari',
92
-	'entree_signature' => 'Signatura',
93
-	'entree_titre_obligatoire' => '<b>Títol</b> [Obligatòri]<br />',
94
-	'entree_url' => 'L’adreiça (URL) dau vòstre sit',
76
+    'entree_infos_perso' => 'Quau siatz?',
77
+    'entree_interieur_rubrique' => 'Dintre la rubrica:',
78
+    'entree_liens_sites' => '<b>Liame ipertèxt</b> (referéncia, sit de vesitar...)',
79
+    'entree_login' => 'Lo vòstre login',
80
+    'entree_login_connexion_1' => 'Lo login de connexion',
81
+    'entree_login_connexion_2' => '(Correspònd de còps au vòstre login d’accès a l’FTP; de còps se laissa vuege)',
82
+    'entree_mot_passe' => 'Vòstre senhau',
83
+    'entree_mot_passe_1' => 'Senhau per la connexion',
84
+    'entree_mot_passe_2' => '(Correspònd de còps a vòstre senhau per l’FTP; de còps se laissa vuege)',
85
+    'entree_nom_fichier' => 'Vougatz intrar lo nom dau fichier @texte_compresse@:',
86
+    'entree_nom_pseudo' => 'Vòstre nom o vòstre pseudonim',
87
+    'entree_nom_pseudo_1' => '(Vòstre nom o vòstre pseudonim)',
88
+    'entree_nom_site' => 'Lo nom dau vòstre sit',
89
+    'entree_nouveau_passe' => 'Senhau novèu',
90
+    'entree_passe_ldap' => 'Senhau',
91
+    'entree_port_annuaire' => 'Lo numèro de pòrt de l’annuari',
92
+    'entree_signature' => 'Signatura',
93
+    'entree_titre_obligatoire' => '<b>Títol</b> [Obligatòri]<br />',
94
+    'entree_url' => 'L’adreiça (URL) dau vòstre sit',
95 95
 
96
-	// I
97
-	'ical_info1' => 'Aquela pagina mòstra de metòdes diferents per restar en contacte amb la vida d’aqueu sit.',
98
-	'ical_info2' => 'Per tenir mai d’informacions subre aquelei tecnicas, esitetz pas de consultar <a href="@spipnet@">la documentacion d’SPIP</a>.', # MODIF
99
-	'ical_info_calendrier' => 'I a dos calendiers a la vòstra disposicion. Lo primier es un plan dau sit qu’anóncia totei leis articles publicats. Lo segond conten leis anoncis editoriaus en mai de vòstrei darriers messatges privats: vos es reservat gràcias a una clau personala, que la podètz modificar en tot moment en renovant vòstre senhau. ',
100
-	'ical_methode_http' => 'Telecargament',
101
-	'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF
102
-	'ical_texte_prive' => 'Aqueu calendier, d’us estrictament personau, vos informa de l’activitat editoriala privada d’aqueu sit (òbras e rendètz-vos personaus, articles e brèvas prepausats...).',
103
-	'ical_texte_public' => 'Aqueu calendier vos permet de seguir l’activitat publica d’aqueu sit (articles e brèvas publicats).',
104
-	'ical_texte_rss' => 'Podètz sindicar lei novetats d’aquest sit dins quin legidor de fichiers que siá en format XML/RSS (Rich Site Summary). Es tanben lo format que permet a SPIP de legir lei novetats publicadas dins d’autrei sits en utilizant un format d’escambi compatible (sits sindicats). ',
105
-	'ical_titre_js' => 'Javascript',
106
-	'ical_titre_mailing' => 'Lista de corrier',
107
-	'ical_titre_rss' => 'Fichiers «backend»',
108
-	'icone_activer_cookie' => 'Activar lo cookie de correspondéncia',
109
-	'icone_admin_plugin' => 'Gestion deis ajustons',
110
-	'icone_afficher_auteurs' => 'Afichar leis autors',
111
-	'icone_afficher_visiteurs' => 'Afichar lei vesitaires',
112
-	'icone_arret_discussion' => 'Quitar aquela discussion',
113
-	'icone_calendrier' => 'Calendier',
114
-	'icone_creer_auteur' => 'Crear un autor nòu e l’associar a aquel article',
115
-	'icone_creer_mot_cle' => 'Crear un mot clau nòu e lo liar a aquel article',
116
-	'icone_creer_rubrique_2' => 'Crear una rubrica nòva',
117
-	'icone_modifier_article' => 'Modificar aquel article',
118
-	'icone_modifier_rubrique' => 'Modificar aquela rubrica',
119
-	'icone_retour' => 'Tornar',
120
-	'icone_retour_article' => 'Tornar a l’article',
121
-	'icone_supprimer_cookie' => 'Suprimir lo cookie de correspondéncia',
122
-	'icone_supprimer_rubrique' => 'Suprimir aquela rubrica',
123
-	'icone_supprimer_signature' => 'Suprimir aquela signatura',
124
-	'icone_valider_signature' => 'Validar aquela signatura',
125
-	'image_administrer_rubrique' => 'Podètz administrar aquela rubrica',
126
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
127
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
128
-	'info_1_article' => '1 article',
129
-	'info_activer_cookie' => 'Podètz activar un <b>cookie de correspondéncia</b>; aquò vos permetrà de passar aisat dau sit public au sit privat.',
130
-	'info_administrateur' => 'Administrator',
131
-	'info_administrateur_1' => 'Administrator',
132
-	'info_administrateur_2' => 'dau sit(<i>d’utilizar amb precaucion</i>)',
133
-	'info_administrateur_site_01' => 'Se siatz administrator/tritz dau sit, vougatz',
134
-	'info_administrateur_site_02' => 'clicar aqueu liame',
135
-	'info_administrateurs' => 'Administrators',
136
-	'info_administrer_rubrique' => 'Podètz administrar aquela rubrica',
137
-	'info_adresse' => 'a l’adreiça:',
138
-	'info_adresse_url' => 'Adreiça (URL) dau sit public',
139
-	'info_aide_en_ligne' => 'Ajuda en linha SPIP',
140
-	'info_ajout_image' => 'Quand apondètz d’imatges coma estacaments jonchs a un article, SPIP pòt crear automaticament per vos de vinhetas (miniaturas) deis imatges inserits. Aquò permet per exemple de crear automaticament una galariá o un pòrtfòlio.',
141
-	'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:',
142
-	'info_annonce_nouveautes' => 'Anonci dei novetats',
143
-	'info_article' => 'article',
144
-	'info_article_2' => 'articles',
145
-	'info_article_a_paraitre' => 'Leis articles pòstdatats per paréisser',
146
-	'info_articles_02' => 'articles',
147
-	'info_articles_2' => 'Articles',
148
-	'info_articles_auteur' => 'Los articles d’aquel autor',
149
-	'info_articles_trouves' => 'Articles trobats',
150
-	'info_attente_validation' => 'Vòstreis articles en espèra de validacion',
151
-	'info_aujourdhui' => 'uei:',
152
-	'info_auteurs' => 'Leis autors',
153
-	'info_auteurs_par_tri' => 'autors@partri@',
154
-	'info_auteurs_trouves' => 'Autors trobats',
155
-	'info_authentification_externe' => 'Autentificacion extèrna',
156
-	'info_avertissement' => 'Avís',
157
-	'info_base_installee' => 'L’estructura de vòstra basa de donadas es installada.',
158
-	'info_chapeau' => 'Capèu',
159
-	'info_chapeau_2' => 'Capèu:',
160
-	'info_chemin_acces_1' => 'Opcions: <b>camin d’accès dins l’annuari</b>',
161
-	'info_chemin_acces_2' => 'Ara devètz configurar lo camin d’accès ais informacions dins l’annuari.',
162
-	'info_chemin_acces_annuaire' => 'Opcions: <b>camin d’accès dins l’annuari',
163
-	'info_choix_base' => 'Tresena estapa:',
164
-	'info_classement_1' => '<sup>ier</sup> de @liste@',
165
-	'info_classement_2' => '<sup>nd</sup> de @liste@',
166
-	'info_code_acces' => 'Oblidetz pas vòstrei còdes d’accès pròpris!',
167
-	'info_config_suivi' => 'S’aquela adreiça correspònd a una lista de corrier, podètz indicar çai sota l’adreiça ont lei participants au sit se pòdon inscriure. Aquela adreiça pòt èstre una URL (per exemple la pagina d’inscripcion a la lista per lo web), o una adreiça e-mail tenent un subjècte especific (per exemple: <tt>@adresse_suivi@?subject=subscribe</tt>):',
168
-	'info_config_suivi_explication' => 'Vos podètz abonar a la lista de difusion d’aquest sit. Alora recebretz per e-mail leis anoncis d’articles e de brèvas que se prepausa a la publicacion.',
169
-	'info_confirmer_passe' => 'Confirmar aqueu senhau novèu:',
170
-	'info_connexion_base' => 'Segonda estapa: <b>Assai de connexion a la basa</b>',
171
-	'info_connexion_ldap_ok' => 'La connexion LDAP a capitat.</b><p> Podètz passar a l’estapa seguenta.</p>', # MODIF
172
-	'info_connexion_mysql' => 'Primiera estapa: <b>Vòstra connexion SQL</b>',
173
-	'info_connexion_ok' => 'La connexion a capitat.',
174
-	'info_contact' => 'Contacte',
175
-	'info_contenu_articles' => 'Contengut deis articles',
176
-	'info_creation_paragraphe' => '(Per crear de paragrafs, basta que laissetz de linhas vuejas.)', # MODIF
177
-	'info_creation_rubrique' => 'Avans de poder escriure d’articles,<br /> devètz crear aumens una rubrica.<br />',
178
-	'info_creation_tables' => 'Quatrena estapa: <b>Creacion dei taulas de la basa</b>',
179
-	'info_creer_base' => '<b>Crear</b> una basa de donadas novèla:',
180
-	'info_dans_rubrique' => 'Dins la rubrica:',
181
-	'info_date_publication_anterieure' => 'Data anteriora de publicacion:',
182
-	'info_date_referencement' => 'DATA DE REFERENCIAMENT D’AQUEU SIT:',
183
-	'info_derniere_etape' => 'Darriera estapa: <b>Es acabat!',
184
-	'info_descriptif' => 'Descriptiu:',
185
-	'info_discussion_cours' => 'Discussions en cors',
186
-	'info_ecrire_article' => 'Avans de poder escriure d’articles, vos cau crear aumens una rubrica.',
187
-	'info_email_envoi' => 'Adreiça e-mail de mandadís (opcionau)',
188
-	'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar leis e-mails (a fauta d’aquò, s’utilizarà l’adreiça destinatari coma adreiça de mandadís):',
189
-	'info_email_webmestre' => 'Adreiça e-mail dau responsable dau sit (opcionau)', # MODIF
190
-	'info_envoi_email_automatique' => 'Mandadís d’e-mails automatics',
191
-	'info_envoyer_maintenant' => 'Mandar ara',
192
-	'info_etape_suivante' => 'Passar a l’estapa seguenta',
193
-	'info_etape_suivante_1' => 'Podètz passar a l’estapa seguenta.',
194
-	'info_etape_suivante_2' => 'Podètz passar a l’estapa seguenta.',
195
-	'info_exportation_base' => 'exportacion de la basa vèrs @archive@',
196
-	'info_facilite_suivi_activite' => 'Per facilitar lo seguit de l’activitat editoriala dau sit, SPIP vos pòt fornir per e-mail, per exemple a una lista de corrier dei redactors, l’anonci dei demandas de publicacion e dei validacions d’articles.', # MODIF
197
-	'info_fichiers_authent' => 'Fichiers d’autentificacion « .htpasswd »',
198
-	'info_forums_abo_invites' => 'Vòstre sit web porgís de forums per leis abonats; dins lo sit public lei vesitaires son convidats a se registrar.',
199
-	'info_gauche_admin_tech' => '<b>A aquela pagina, ren que lei responsables dau sit i pòdon accedir.</b><p> Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.</p>', # MODIF
200
-	'info_gauche_admin_vider' => '<b>A aquela pagina, ren que lei responsables dau sit i pòdon accedir.</b><p> Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.</p>', # MODIF
201
-	'info_gauche_auteurs' => 'Trobaretz aicí totei leis autors dau sit. La color deis icònas n’indica l’estatut (administrator = verd; redactor = jaune).',
202
-	'info_gauche_auteurs_exterieurs' => 'Leis autors exteriors, sens accès au sit, son indicats per una icòna blava; leis autors escafats per un bordilhier.', # MODIF
203
-	'info_gauche_messagerie' => 'La messatjariá vos permet d’escambiar de messatges entre redactors, de servar de mementos (per vòstre usatge personau) o d’afichar d’anoncis sus la pagina d’acuelh de l’espaci privat (se siatz administrator/tritz).',
204
-	'info_gauche_statistiques_referers' => 'Aquela pagina presenta la lista dei <i>referidors</i>, valent a dire dei sits que contenon de liames menant vèrs vòstre sit pròpri, mai unicament per ièr e uei: aquela lista s’actualiza cada 24 oras.',
205
-	'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí lei vesitaires registrats
96
+    // I
97
+    'ical_info1' => 'Aquela pagina mòstra de metòdes diferents per restar en contacte amb la vida d’aqueu sit.',
98
+    'ical_info2' => 'Per tenir mai d’informacions subre aquelei tecnicas, esitetz pas de consultar <a href="@spipnet@">la documentacion d’SPIP</a>.', # MODIF
99
+    'ical_info_calendrier' => 'I a dos calendiers a la vòstra disposicion. Lo primier es un plan dau sit qu’anóncia totei leis articles publicats. Lo segond conten leis anoncis editoriaus en mai de vòstrei darriers messatges privats: vos es reservat gràcias a una clau personala, que la podètz modificar en tot moment en renovant vòstre senhau. ',
100
+    'ical_methode_http' => 'Telecargament',
101
+    'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF
102
+    'ical_texte_prive' => 'Aqueu calendier, d’us estrictament personau, vos informa de l’activitat editoriala privada d’aqueu sit (òbras e rendètz-vos personaus, articles e brèvas prepausats...).',
103
+    'ical_texte_public' => 'Aqueu calendier vos permet de seguir l’activitat publica d’aqueu sit (articles e brèvas publicats).',
104
+    'ical_texte_rss' => 'Podètz sindicar lei novetats d’aquest sit dins quin legidor de fichiers que siá en format XML/RSS (Rich Site Summary). Es tanben lo format que permet a SPIP de legir lei novetats publicadas dins d’autrei sits en utilizant un format d’escambi compatible (sits sindicats). ',
105
+    'ical_titre_js' => 'Javascript',
106
+    'ical_titre_mailing' => 'Lista de corrier',
107
+    'ical_titre_rss' => 'Fichiers «backend»',
108
+    'icone_activer_cookie' => 'Activar lo cookie de correspondéncia',
109
+    'icone_admin_plugin' => 'Gestion deis ajustons',
110
+    'icone_afficher_auteurs' => 'Afichar leis autors',
111
+    'icone_afficher_visiteurs' => 'Afichar lei vesitaires',
112
+    'icone_arret_discussion' => 'Quitar aquela discussion',
113
+    'icone_calendrier' => 'Calendier',
114
+    'icone_creer_auteur' => 'Crear un autor nòu e l’associar a aquel article',
115
+    'icone_creer_mot_cle' => 'Crear un mot clau nòu e lo liar a aquel article',
116
+    'icone_creer_rubrique_2' => 'Crear una rubrica nòva',
117
+    'icone_modifier_article' => 'Modificar aquel article',
118
+    'icone_modifier_rubrique' => 'Modificar aquela rubrica',
119
+    'icone_retour' => 'Tornar',
120
+    'icone_retour_article' => 'Tornar a l’article',
121
+    'icone_supprimer_cookie' => 'Suprimir lo cookie de correspondéncia',
122
+    'icone_supprimer_rubrique' => 'Suprimir aquela rubrica',
123
+    'icone_supprimer_signature' => 'Suprimir aquela signatura',
124
+    'icone_valider_signature' => 'Validar aquela signatura',
125
+    'image_administrer_rubrique' => 'Podètz administrar aquela rubrica',
126
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
127
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
128
+    'info_1_article' => '1 article',
129
+    'info_activer_cookie' => 'Podètz activar un <b>cookie de correspondéncia</b>; aquò vos permetrà de passar aisat dau sit public au sit privat.',
130
+    'info_administrateur' => 'Administrator',
131
+    'info_administrateur_1' => 'Administrator',
132
+    'info_administrateur_2' => 'dau sit(<i>d’utilizar amb precaucion</i>)',
133
+    'info_administrateur_site_01' => 'Se siatz administrator/tritz dau sit, vougatz',
134
+    'info_administrateur_site_02' => 'clicar aqueu liame',
135
+    'info_administrateurs' => 'Administrators',
136
+    'info_administrer_rubrique' => 'Podètz administrar aquela rubrica',
137
+    'info_adresse' => 'a l’adreiça:',
138
+    'info_adresse_url' => 'Adreiça (URL) dau sit public',
139
+    'info_aide_en_ligne' => 'Ajuda en linha SPIP',
140
+    'info_ajout_image' => 'Quand apondètz d’imatges coma estacaments jonchs a un article, SPIP pòt crear automaticament per vos de vinhetas (miniaturas) deis imatges inserits. Aquò permet per exemple de crear automaticament una galariá o un pòrtfòlio.',
141
+    'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:',
142
+    'info_annonce_nouveautes' => 'Anonci dei novetats',
143
+    'info_article' => 'article',
144
+    'info_article_2' => 'articles',
145
+    'info_article_a_paraitre' => 'Leis articles pòstdatats per paréisser',
146
+    'info_articles_02' => 'articles',
147
+    'info_articles_2' => 'Articles',
148
+    'info_articles_auteur' => 'Los articles d’aquel autor',
149
+    'info_articles_trouves' => 'Articles trobats',
150
+    'info_attente_validation' => 'Vòstreis articles en espèra de validacion',
151
+    'info_aujourdhui' => 'uei:',
152
+    'info_auteurs' => 'Leis autors',
153
+    'info_auteurs_par_tri' => 'autors@partri@',
154
+    'info_auteurs_trouves' => 'Autors trobats',
155
+    'info_authentification_externe' => 'Autentificacion extèrna',
156
+    'info_avertissement' => 'Avís',
157
+    'info_base_installee' => 'L’estructura de vòstra basa de donadas es installada.',
158
+    'info_chapeau' => 'Capèu',
159
+    'info_chapeau_2' => 'Capèu:',
160
+    'info_chemin_acces_1' => 'Opcions: <b>camin d’accès dins l’annuari</b>',
161
+    'info_chemin_acces_2' => 'Ara devètz configurar lo camin d’accès ais informacions dins l’annuari.',
162
+    'info_chemin_acces_annuaire' => 'Opcions: <b>camin d’accès dins l’annuari',
163
+    'info_choix_base' => 'Tresena estapa:',
164
+    'info_classement_1' => '<sup>ier</sup> de @liste@',
165
+    'info_classement_2' => '<sup>nd</sup> de @liste@',
166
+    'info_code_acces' => 'Oblidetz pas vòstrei còdes d’accès pròpris!',
167
+    'info_config_suivi' => 'S’aquela adreiça correspònd a una lista de corrier, podètz indicar çai sota l’adreiça ont lei participants au sit se pòdon inscriure. Aquela adreiça pòt èstre una URL (per exemple la pagina d’inscripcion a la lista per lo web), o una adreiça e-mail tenent un subjècte especific (per exemple: <tt>@adresse_suivi@?subject=subscribe</tt>):',
168
+    'info_config_suivi_explication' => 'Vos podètz abonar a la lista de difusion d’aquest sit. Alora recebretz per e-mail leis anoncis d’articles e de brèvas que se prepausa a la publicacion.',
169
+    'info_confirmer_passe' => 'Confirmar aqueu senhau novèu:',
170
+    'info_connexion_base' => 'Segonda estapa: <b>Assai de connexion a la basa</b>',
171
+    'info_connexion_ldap_ok' => 'La connexion LDAP a capitat.</b><p> Podètz passar a l’estapa seguenta.</p>', # MODIF
172
+    'info_connexion_mysql' => 'Primiera estapa: <b>Vòstra connexion SQL</b>',
173
+    'info_connexion_ok' => 'La connexion a capitat.',
174
+    'info_contact' => 'Contacte',
175
+    'info_contenu_articles' => 'Contengut deis articles',
176
+    'info_creation_paragraphe' => '(Per crear de paragrafs, basta que laissetz de linhas vuejas.)', # MODIF
177
+    'info_creation_rubrique' => 'Avans de poder escriure d’articles,<br /> devètz crear aumens una rubrica.<br />',
178
+    'info_creation_tables' => 'Quatrena estapa: <b>Creacion dei taulas de la basa</b>',
179
+    'info_creer_base' => '<b>Crear</b> una basa de donadas novèla:',
180
+    'info_dans_rubrique' => 'Dins la rubrica:',
181
+    'info_date_publication_anterieure' => 'Data anteriora de publicacion:',
182
+    'info_date_referencement' => 'DATA DE REFERENCIAMENT D’AQUEU SIT:',
183
+    'info_derniere_etape' => 'Darriera estapa: <b>Es acabat!',
184
+    'info_descriptif' => 'Descriptiu:',
185
+    'info_discussion_cours' => 'Discussions en cors',
186
+    'info_ecrire_article' => 'Avans de poder escriure d’articles, vos cau crear aumens una rubrica.',
187
+    'info_email_envoi' => 'Adreiça e-mail de mandadís (opcionau)',
188
+    'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar leis e-mails (a fauta d’aquò, s’utilizarà l’adreiça destinatari coma adreiça de mandadís):',
189
+    'info_email_webmestre' => 'Adreiça e-mail dau responsable dau sit (opcionau)', # MODIF
190
+    'info_envoi_email_automatique' => 'Mandadís d’e-mails automatics',
191
+    'info_envoyer_maintenant' => 'Mandar ara',
192
+    'info_etape_suivante' => 'Passar a l’estapa seguenta',
193
+    'info_etape_suivante_1' => 'Podètz passar a l’estapa seguenta.',
194
+    'info_etape_suivante_2' => 'Podètz passar a l’estapa seguenta.',
195
+    'info_exportation_base' => 'exportacion de la basa vèrs @archive@',
196
+    'info_facilite_suivi_activite' => 'Per facilitar lo seguit de l’activitat editoriala dau sit, SPIP vos pòt fornir per e-mail, per exemple a una lista de corrier dei redactors, l’anonci dei demandas de publicacion e dei validacions d’articles.', # MODIF
197
+    'info_fichiers_authent' => 'Fichiers d’autentificacion « .htpasswd »',
198
+    'info_forums_abo_invites' => 'Vòstre sit web porgís de forums per leis abonats; dins lo sit public lei vesitaires son convidats a se registrar.',
199
+    'info_gauche_admin_tech' => '<b>A aquela pagina, ren que lei responsables dau sit i pòdon accedir.</b><p> Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.</p>', # MODIF
200
+    'info_gauche_admin_vider' => '<b>A aquela pagina, ren que lei responsables dau sit i pòdon accedir.</b><p> Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.</p>', # MODIF
201
+    'info_gauche_auteurs' => 'Trobaretz aicí totei leis autors dau sit. La color deis icònas n’indica l’estatut (administrator = verd; redactor = jaune).',
202
+    'info_gauche_auteurs_exterieurs' => 'Leis autors exteriors, sens accès au sit, son indicats per una icòna blava; leis autors escafats per un bordilhier.', # MODIF
203
+    'info_gauche_messagerie' => 'La messatjariá vos permet d’escambiar de messatges entre redactors, de servar de mementos (per vòstre usatge personau) o d’afichar d’anoncis sus la pagina d’acuelh de l’espaci privat (se siatz administrator/tritz).',
204
+    'info_gauche_statistiques_referers' => 'Aquela pagina presenta la lista dei <i>referidors</i>, valent a dire dei sits que contenon de liames menant vèrs vòstre sit pròpri, mai unicament per ièr e uei: aquela lista s’actualiza cada 24 oras.',
205
+    'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí lei vesitaires registrats
206 206
  dins l’espaci public dau sit (forums amb abonament).',
207
-	'info_generation_miniatures_images' => 'Congreacion de miniaturas deis imatges',
208
-	'info_hebergeur_desactiver_envoi_email' => 'D’uneis aubergadors desactivan lo mandadís automatic
207
+    'info_generation_miniatures_images' => 'Congreacion de miniaturas deis imatges',
208
+    'info_hebergeur_desactiver_envoi_email' => 'D’uneis aubergadors desactivan lo mandadís automatic
209 209
  d’e-mails dempuei sei servidors. En aqueu cas, lei foncionalitats seguentas
210 210
  d’SPIP foncionaràn pas.',
211
-	'info_hier' => 'ièr:',
212
-	'info_identification_publique' => 'Vòstra identitat publica...',
213
-	'info_image_process' => 'Vougatz seleccionar lo melhor metòde de fabricacion dei vinhetas en clicant sus l’imatge correspondent.',
214
-	'info_images_auto' => 'Imatges calculats automaticament',
215
-	'info_informations_personnelles' => 'Cinquena estapa: <b>Informacions personalas</b>',
216
-	'info_inscription_automatique' => 'Inscripcion automatica de redactors novèus',
217
-	'info_jeu_caractere' => 'Jòc de caractèrs dau sit',
218
-	'info_jours' => 'jorns',
219
-	'info_laisser_champs_vides' => 'laissar aquelei camps vueges)',
220
-	'info_langues' => 'Lengas dau sit',
221
-	'info_ldap_ok' => 'L’autentificacion LDAP es installada.',
222
-	'info_lien_hypertexte' => 'Liame ipertèxt:',
223
-	'info_liste_redacteurs_connectes' => 'Tiera dei redactors connectats',
224
-	'info_login_existant' => 'Aqueu login ja existís.',
225
-	'info_login_trop_court' => 'Login tròp cort.',
226
-	'info_maximum' => 'maximum:',
227
-	'info_meme_rubrique' => 'Dins la meteissa rubrica',
228
-	'info_message_en_redaction' => 'Vòstrei messatges en cors de redaccion',
229
-	'info_message_technique' => 'Messatge tecnic:',
230
-	'info_messagerie_interne' => 'Messatjariá intèrna',
231
-	'info_mise_a_niveau_base' => 'Mesa a nivèu de vòstra basa SQL',
232
-	'info_mise_a_niveau_base_2' => '{{Atencion!}} Avètz installada una version
211
+    'info_hier' => 'ièr:',
212
+    'info_identification_publique' => 'Vòstra identitat publica...',
213
+    'info_image_process' => 'Vougatz seleccionar lo melhor metòde de fabricacion dei vinhetas en clicant sus l’imatge correspondent.',
214
+    'info_images_auto' => 'Imatges calculats automaticament',
215
+    'info_informations_personnelles' => 'Cinquena estapa: <b>Informacions personalas</b>',
216
+    'info_inscription_automatique' => 'Inscripcion automatica de redactors novèus',
217
+    'info_jeu_caractere' => 'Jòc de caractèrs dau sit',
218
+    'info_jours' => 'jorns',
219
+    'info_laisser_champs_vides' => 'laissar aquelei camps vueges)',
220
+    'info_langues' => 'Lengas dau sit',
221
+    'info_ldap_ok' => 'L’autentificacion LDAP es installada.',
222
+    'info_lien_hypertexte' => 'Liame ipertèxt:',
223
+    'info_liste_redacteurs_connectes' => 'Tiera dei redactors connectats',
224
+    'info_login_existant' => 'Aqueu login ja existís.',
225
+    'info_login_trop_court' => 'Login tròp cort.',
226
+    'info_maximum' => 'maximum:',
227
+    'info_meme_rubrique' => 'Dins la meteissa rubrica',
228
+    'info_message_en_redaction' => 'Vòstrei messatges en cors de redaccion',
229
+    'info_message_technique' => 'Messatge tecnic:',
230
+    'info_messagerie_interne' => 'Messatjariá intèrna',
231
+    'info_mise_a_niveau_base' => 'Mesa a nivèu de vòstra basa SQL',
232
+    'info_mise_a_niveau_base_2' => '{{Atencion!}} Avètz installada una version
233 233
   dei fichiers SPIP {anteriora} a la que i aviá
234 234
   avans sus aquest sit: riscatz de pèrdre vòstra basa de donadas
235 235
    e vòstre sit foncionarà pus.<br />{{Tornatz installar lei
236 236
   fichiers d’SPIP.}}',
237
-	'info_modifier_rubrique' => 'Modificar la rubrica:',
238
-	'info_modifier_titre' => 'Modificar: @titre@',
239
-	'info_mon_site_spip' => 'Mon sit SPIP',
240
-	'info_moyenne' => 'mejana:',
241
-	'info_multi_cet_article' => 'Lenga d’aquest article:',
242
-	'info_multi_langues_choisies' => 'Vougatz seleccionar çai sota lei lengas que son a posita dei redactors de vòstre sit.
237
+    'info_modifier_rubrique' => 'Modificar la rubrica:',
238
+    'info_modifier_titre' => 'Modificar: @titre@',
239
+    'info_mon_site_spip' => 'Mon sit SPIP',
240
+    'info_moyenne' => 'mejana:',
241
+    'info_multi_cet_article' => 'Lenga d’aquest article:',
242
+    'info_multi_langues_choisies' => 'Vougatz seleccionar çai sota lei lengas que son a posita dei redactors de vòstre sit.
243 243
   Lei lengas ja emplegadas dins vòstre sit (afichadas d’en primier) se pòdon pas desactivar.',
244
-	'info_multi_secteurs' => '... ren que per lei rubricas a la raiç dau sit?',
245
-	'info_nom' => 'Nom',
246
-	'info_nom_destinataire' => 'Nom dau destinatari',
247
-	'info_nom_site' => 'Nom dau vòstre sit',
248
-	'info_nombre_articles' => '@nb_articles@ articles,',
249
-	'info_nombre_rubriques' => '@nb_rubriques@ rubricas,',
250
-	'info_nombre_sites' => '@nb_sites@ sits,',
251
-	'info_non_deplacer' => 'De pas desplaçar...',
252
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP pòt mandar, regularament, l’anonci dei darrierei novetats dau sit
244
+    'info_multi_secteurs' => '... ren que per lei rubricas a la raiç dau sit?',
245
+    'info_nom' => 'Nom',
246
+    'info_nom_destinataire' => 'Nom dau destinatari',
247
+    'info_nom_site' => 'Nom dau vòstre sit',
248
+    'info_nombre_articles' => '@nb_articles@ articles,',
249
+    'info_nombre_rubriques' => '@nb_rubriques@ rubricas,',
250
+    'info_nombre_sites' => '@nb_sites@ sits,',
251
+    'info_non_deplacer' => 'De pas desplaçar...',
252
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP pòt mandar, regularament, l’anonci dei darrierei novetats dau sit
253 253
  (articles e brèvas publicats recentament).',
254
-	'info_non_envoi_liste_nouveautes' => 'Pas mandar la tiera dei novetats',
255
-	'info_non_modifiable' => 'se pòt pas modificar',
256
-	'info_non_suppression_mot_cle' => 'vòli pas suprimir aqueu mot clau.',
257
-	'info_notes' => 'Nòtas',
258
-	'info_nouvel_article' => 'Article nòu',
259
-	'info_nouvelle_traduction' => 'Revirada nòva:',
260
-	'info_numero_article' => 'ARTICLE NUMÈRO:',
261
-	'info_obligatoire_02' => '[Obligatòri]', # MODIF
262
-	'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion dei vesitaires dau sit public',
263
-	'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires',
264
-	'info_options_avancees' => 'OPCIONS AVANÇADAS',
265
-	'info_ou' => 'o... ',
266
-	'info_page_interdite' => 'Pagina proïbida',
267
-	'info_par_nombre_article' => '(per nombre d’articles)',
268
-	'info_passe_trop_court' => 'Mot de santa Clara tròp cort.',
269
-	'info_passes_identiques' => 'Lei dos mots de santa Clara son pas identics.',
270
-	'info_plus_cinq_car' => 'mai de 5 caractèrs',
271
-	'info_plus_cinq_car_2' => '(mai de 5 caractèrs)',
272
-	'info_plus_trois_car' => '(mai de 3 caractèrs)',
273
-	'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@',
274
-	'info_post_scriptum' => 'Post-scriptum',
275
-	'info_post_scriptum_2' => 'Post-scriptum:',
276
-	'info_pour' => 'per',
277
-	'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totei leis articles e brèvas (que tenon aumens l’estatut "prepausat"). La cau dobrir, aquela possibilitat, ren qu’ais administrators, a totei lei redactors, o en degun?', # MODIF
278
-	'info_procedez_par_etape' => 'procedissètz estapa per estapa',
279
-	'info_procedure_maj_version' => 'Cau lançar la procedura d’actualizacion per adaptar
254
+    'info_non_envoi_liste_nouveautes' => 'Pas mandar la tiera dei novetats',
255
+    'info_non_modifiable' => 'se pòt pas modificar',
256
+    'info_non_suppression_mot_cle' => 'vòli pas suprimir aqueu mot clau.',
257
+    'info_notes' => 'Nòtas',
258
+    'info_nouvel_article' => 'Article nòu',
259
+    'info_nouvelle_traduction' => 'Revirada nòva:',
260
+    'info_numero_article' => 'ARTICLE NUMÈRO:',
261
+    'info_obligatoire_02' => '[Obligatòri]', # MODIF
262
+    'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion dei vesitaires dau sit public',
263
+    'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires',
264
+    'info_options_avancees' => 'OPCIONS AVANÇADAS',
265
+    'info_ou' => 'o... ',
266
+    'info_page_interdite' => 'Pagina proïbida',
267
+    'info_par_nombre_article' => '(per nombre d’articles)',
268
+    'info_passe_trop_court' => 'Mot de santa Clara tròp cort.',
269
+    'info_passes_identiques' => 'Lei dos mots de santa Clara son pas identics.',
270
+    'info_plus_cinq_car' => 'mai de 5 caractèrs',
271
+    'info_plus_cinq_car_2' => '(mai de 5 caractèrs)',
272
+    'info_plus_trois_car' => '(mai de 3 caractèrs)',
273
+    'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@',
274
+    'info_post_scriptum' => 'Post-scriptum',
275
+    'info_post_scriptum_2' => 'Post-scriptum:',
276
+    'info_pour' => 'per',
277
+    'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totei leis articles e brèvas (que tenon aumens l’estatut "prepausat"). La cau dobrir, aquela possibilitat, ren qu’ais administrators, a totei lei redactors, o en degun?', # MODIF
278
+    'info_procedez_par_etape' => 'procedissètz estapa per estapa',
279
+    'info_procedure_maj_version' => 'Cau lançar la procedura d’actualizacion per adaptar
280 280
  la basa de donadas a la version novèla d’SPIP.',
281
-	'info_ps' => 'P.S.',
282
-	'info_publier' => 'publicar',
283
-	'info_publies' => 'Vòstreis articles publicats en linha',
284
-	'info_question_accepter_visiteurs' => 'S’ais esqueletas de vòstre sit web se prevei lo registrament de vesitaires sens accès a l’espaci privat, vougatz activar l’opcion seguenta:',
285
-	'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que de redactors novèus s’inscrigan
281
+    'info_ps' => 'P.S.',
282
+    'info_publier' => 'publicar',
283
+    'info_publies' => 'Vòstreis articles publicats en linha',
284
+    'info_question_accepter_visiteurs' => 'S’ais esqueletas de vòstre sit web se prevei lo registrament de vesitaires sens accès a l’espaci privat, vougatz activar l’opcion seguenta:',
285
+    'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que de redactors novèus s’inscrigan
286 286
  a partir dau sit public? S’o acceptatz, lei vesitaires se poiràn inscriure
287 287
  dieumercé un formulari automatizat e alora accediràn a l’espaci privat per
288 288
  prepausar d’articles.<blockquote><i> Durant la fasa d’inscripcion, leis utilizaires recebon un e-mail automatic
289 289
  que li baila un còde d’accès au sit privat.
290 290
 D’uneis aubergadors autorizan pas lo mandadís d’e-mails dempuei sei servidors: en aqueu cas, l’inscripcion automatica es
291 291
  impossibla.', # MODIF
292
-	'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
293
-	'info_racine_site' => 'Raiç dau sit',
294
-	'info_recharger_page' => 'Vougatz tornar cargar aquela pagina dins un momenton.',
295
-	'info_recherche_auteur_zero' => '<b>Ges de resultat trobat per "@cherche_auteur@".',
296
-	'info_recommencer' => 'Vougatz tornar començar.',
297
-	'info_redacteur_1' => 'Redactor',
298
-	'info_redacteur_2' => 'qu’accedís a l’espaci privat (<i>recomandat</i>)',
299
-	'info_redacteurs' => 'Redactors',
300
-	'info_redaction_en_cours' => 'EN CORS DE REDACCION',
301
-	'info_redirection' => 'Redireccion',
302
-	'info_refuses' => 'Vòstreis articles refusats',
303
-	'info_reglage_ldap' => 'Opcions: <b>Reglatge de l’importacion LDAP</b>',
304
-	'info_renvoi_article' => '<b>Redireccion.</b> Aquel article remanda a la pagina:',
305
-	'info_reserve_admin' => 'Ren que leis administrators pòdon modificar aquela adreiça.',
306
-	'info_restreindre_rubrique' => 'Restrénher la gestion a la rubrica:',
307
-	'info_resultat_recherche' => 'Resultats de la cèrca:',
308
-	'info_rubriques' => 'Rubricas',
309
-	'info_rubriques_02' => 'rubricas',
310
-	'info_rubriques_trouvees' => 'Rubricas trobadas',
311
-	'info_sans_titre' => 'Sensa títol',
312
-	'info_selection_chemin_acces' => '<b>Seleccionatz</b> çai sota lo camin d’accès dins l’annuari:',
313
-	'info_signatures' => 'signaturas',
314
-	'info_site' => 'Sit',
315
-	'info_site_2' => 'sit: ',
316
-	'info_site_min' => 'sit',
317
-	'info_site_reference_2' => 'Sit referenciat',
318
-	'info_site_web' => 'SIT WEB:', # MODIF
319
-	'info_sites' => 'sits',
320
-	'info_sites_lies_mot' => 'Lei sits referenciats ligats a aqueu mot clau',
321
-	'info_sites_proxy' => 'Utilizar un proxy',
322
-	'info_sites_trouves' => 'Sits trobats',
323
-	'info_sous_titre' => 'Sostítol:',
324
-	'info_statut_administrateur' => 'Administrator',
325
-	'info_statut_auteur' => 'Estatut d’aquel autor:', # MODIF
326
-	'info_statut_auteur_a_confirmer' => 'Inscripcion de confirmar',
327
-	'info_statut_auteur_autre' => 'Autre estatut :',
328
-	'info_statut_redacteur' => 'Redactor',
329
-	'info_statut_utilisateurs_1' => 'Estatut predefinit deis utilizaires importats',
330
-	'info_statut_utilisateurs_2' => 'Chausissètz l’estatut d’atribuir ai personas presentas dins l’annuari LDAP quora se connèctan per lo primier còp. Poiretz puei modificar aquel estatut per cada autor un cas per un.',
331
-	'info_suivi_activite' => 'Seguit de l’activitat editoriala',
332
-	'info_surtitre' => 'Subretítol:',
333
-	'info_taille_maximale_vignette' => 'Talha maximala dei vinhetas congreadas per lo sistèma:',
334
-	'info_terminer_installation' => 'Ara podètz acabar la procedura d’installacion estandard.',
335
-	'info_texte' => 'Tèxt',
336
-	'info_texte_explicatif' => 'Tèxt explicatiu',
337
-	'info_texte_long' => '(lo tèxt es lòng: apareis doncas en tròç distints que se tornaràn empegar un còp validats.)',
338
-	'info_texte_message' => 'Tèxt dau vòstre messatge:', # MODIF
339
-	'info_texte_message_02' => 'Tèxt dau messatge',
340
-	'info_titre' => 'Títol:',
341
-	'info_total' => 'totau: ',
342
-	'info_tous_articles_en_redaction' => 'Totei leis articles en cors de redaccion',
343
-	'info_tous_articles_presents' => 'Totei leis articles publicats dins aquela rubrica',
344
-	'info_tous_les' => 'totei lei:',
345
-	'info_tout_site' => 'Tot lo sit',
346
-	'info_tout_site2' => 'An pas revirat l’article dins aquela lenga.',
347
-	'info_tout_site3' => 'An revirat l’article dins aquela lenga, mai an portat puei de modificacions a l’article de referéncia. Cau actualizar la revirada.',
348
-	'info_tout_site4' => 'An revirat l’article dins aquela lenga, e la revirada es actualizada.',
349
-	'info_tout_site5' => 'Article originau.',
350
-	'info_tout_site6' => '<b>Atencion:</b> ren que leis articles originaus s’afichan.
292
+    'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
293
+    'info_racine_site' => 'Raiç dau sit',
294
+    'info_recharger_page' => 'Vougatz tornar cargar aquela pagina dins un momenton.',
295
+    'info_recherche_auteur_zero' => '<b>Ges de resultat trobat per "@cherche_auteur@".',
296
+    'info_recommencer' => 'Vougatz tornar començar.',
297
+    'info_redacteur_1' => 'Redactor',
298
+    'info_redacteur_2' => 'qu’accedís a l’espaci privat (<i>recomandat</i>)',
299
+    'info_redacteurs' => 'Redactors',
300
+    'info_redaction_en_cours' => 'EN CORS DE REDACCION',
301
+    'info_redirection' => 'Redireccion',
302
+    'info_refuses' => 'Vòstreis articles refusats',
303
+    'info_reglage_ldap' => 'Opcions: <b>Reglatge de l’importacion LDAP</b>',
304
+    'info_renvoi_article' => '<b>Redireccion.</b> Aquel article remanda a la pagina:',
305
+    'info_reserve_admin' => 'Ren que leis administrators pòdon modificar aquela adreiça.',
306
+    'info_restreindre_rubrique' => 'Restrénher la gestion a la rubrica:',
307
+    'info_resultat_recherche' => 'Resultats de la cèrca:',
308
+    'info_rubriques' => 'Rubricas',
309
+    'info_rubriques_02' => 'rubricas',
310
+    'info_rubriques_trouvees' => 'Rubricas trobadas',
311
+    'info_sans_titre' => 'Sensa títol',
312
+    'info_selection_chemin_acces' => '<b>Seleccionatz</b> çai sota lo camin d’accès dins l’annuari:',
313
+    'info_signatures' => 'signaturas',
314
+    'info_site' => 'Sit',
315
+    'info_site_2' => 'sit: ',
316
+    'info_site_min' => 'sit',
317
+    'info_site_reference_2' => 'Sit referenciat',
318
+    'info_site_web' => 'SIT WEB:', # MODIF
319
+    'info_sites' => 'sits',
320
+    'info_sites_lies_mot' => 'Lei sits referenciats ligats a aqueu mot clau',
321
+    'info_sites_proxy' => 'Utilizar un proxy',
322
+    'info_sites_trouves' => 'Sits trobats',
323
+    'info_sous_titre' => 'Sostítol:',
324
+    'info_statut_administrateur' => 'Administrator',
325
+    'info_statut_auteur' => 'Estatut d’aquel autor:', # MODIF
326
+    'info_statut_auteur_a_confirmer' => 'Inscripcion de confirmar',
327
+    'info_statut_auteur_autre' => 'Autre estatut :',
328
+    'info_statut_redacteur' => 'Redactor',
329
+    'info_statut_utilisateurs_1' => 'Estatut predefinit deis utilizaires importats',
330
+    'info_statut_utilisateurs_2' => 'Chausissètz l’estatut d’atribuir ai personas presentas dins l’annuari LDAP quora se connèctan per lo primier còp. Poiretz puei modificar aquel estatut per cada autor un cas per un.',
331
+    'info_suivi_activite' => 'Seguit de l’activitat editoriala',
332
+    'info_surtitre' => 'Subretítol:',
333
+    'info_taille_maximale_vignette' => 'Talha maximala dei vinhetas congreadas per lo sistèma:',
334
+    'info_terminer_installation' => 'Ara podètz acabar la procedura d’installacion estandard.',
335
+    'info_texte' => 'Tèxt',
336
+    'info_texte_explicatif' => 'Tèxt explicatiu',
337
+    'info_texte_long' => '(lo tèxt es lòng: apareis doncas en tròç distints que se tornaràn empegar un còp validats.)',
338
+    'info_texte_message' => 'Tèxt dau vòstre messatge:', # MODIF
339
+    'info_texte_message_02' => 'Tèxt dau messatge',
340
+    'info_titre' => 'Títol:',
341
+    'info_total' => 'totau: ',
342
+    'info_tous_articles_en_redaction' => 'Totei leis articles en cors de redaccion',
343
+    'info_tous_articles_presents' => 'Totei leis articles publicats dins aquela rubrica',
344
+    'info_tous_les' => 'totei lei:',
345
+    'info_tout_site' => 'Tot lo sit',
346
+    'info_tout_site2' => 'An pas revirat l’article dins aquela lenga.',
347
+    'info_tout_site3' => 'An revirat l’article dins aquela lenga, mai an portat puei de modificacions a l’article de referéncia. Cau actualizar la revirada.',
348
+    'info_tout_site4' => 'An revirat l’article dins aquela lenga, e la revirada es actualizada.',
349
+    'info_tout_site5' => 'Article originau.',
350
+    'info_tout_site6' => '<b>Atencion:</b> ren que leis articles originaus s’afichan.
351 351
 Lei reviradas s’assòcian a l’originau,
352 352
 una color indica lor estat:',
353
-	'info_travail_colaboratif' => 'Trabalh collaboratiu subre leis articles',
354
-	'info_un_article' => 'un article, ',
355
-	'info_un_site' => 'un sit, ',
356
-	'info_une_rubrique' => 'una rubrica, ',
357
-	'info_une_rubrique_02' => '1 rubrica',
358
-	'info_url' => 'URL:',
359
-	'info_urlref' => 'Liame ipertèxt:',
360
-	'info_utilisation_spip' => 'Ara podètz començar d’utilizar lo sistèma de publicacion assistida...',
361
-	'info_visites_par_mois' => 'Afichatge per mes:',
362
-	'info_visiteur_1' => 'Vesitaire',
363
-	'info_visiteur_2' => 'dau sit public',
364
-	'info_visiteurs' => 'Vesitaires',
365
-	'info_visiteurs_02' => 'Vesitaires dau sit public',
366
-	'install_echec_annonce' => 'L’installacion capitarà mau, o abotirà a un sit non foncionau...',
367
-	'install_extension_php_obligatoire' => 'SPIP exigís l’extension php:',
368
-	'install_select_langue' => 'Seleccionatz una lenga puei clicatz lo boton «seguent» per amodar la procedura d’installacion.',
369
-	'intem_redacteur' => 'redactor',
370
-	'item_accepter_inscriptions' => 'Acceptar leis inscripcions',
371
-	'item_activer_messages_avertissement' => 'Activar lei messatges d’avertiment',
372
-	'item_administrateur_2' => 'administrator',
373
-	'item_afficher_calendrier' => 'Afichar dins lo calendier',
374
-	'item_choix_administrateurs' => 'leis administrators',
375
-	'item_choix_generation_miniature' => 'Congrear automaticament lei miniaturas deis imatges.',
376
-	'item_choix_non_generation_miniature' => 'Congrear ges de miniaturas deis imatges.',
377
-	'item_choix_redacteurs' => 'lei redactors',
378
-	'item_choix_visiteurs' => 'lei vesitaires dau sit public',
379
-	'item_creer_fichiers_authent' => 'Crear de fichiers .htpasswd',
380
-	'item_login' => 'Login',
381
-	'item_mots_cles_association_articles' => 'ais articles',
382
-	'item_mots_cles_association_rubriques' => 'ai rubricas',
383
-	'item_mots_cles_association_sites' => 'ai sits referenciats o sindicats',
384
-	'item_non' => 'Non',
385
-	'item_non_accepter_inscriptions' => 'Pas acceptar leis inscripcions',
386
-	'item_non_activer_messages_avertissement' => 'Ges de messatge d’avertiment',
387
-	'item_non_afficher_calendrier' => 'De pas afichar dins lo calendier',
388
-	'item_non_creer_fichiers_authent' => 'Pas crear aquelei fichiers',
389
-	'item_non_publier_articles' => 'Pas publicar leis articles avans la data de publicacion prevista.',
390
-	'item_nouvel_auteur' => 'Autor nòu',
391
-	'item_nouvelle_rubrique' => 'Rubrica nòva',
392
-	'item_oui' => 'Òc',
393
-	'item_publier_articles' => 'Publicar leis articles, quina que siá sa data de publicacion',
394
-	'item_reponse_article' => 'Respònsa a l’article',
395
-	'item_visiteur' => 'vesitaire',
353
+    'info_travail_colaboratif' => 'Trabalh collaboratiu subre leis articles',
354
+    'info_un_article' => 'un article, ',
355
+    'info_un_site' => 'un sit, ',
356
+    'info_une_rubrique' => 'una rubrica, ',
357
+    'info_une_rubrique_02' => '1 rubrica',
358
+    'info_url' => 'URL:',
359
+    'info_urlref' => 'Liame ipertèxt:',
360
+    'info_utilisation_spip' => 'Ara podètz començar d’utilizar lo sistèma de publicacion assistida...',
361
+    'info_visites_par_mois' => 'Afichatge per mes:',
362
+    'info_visiteur_1' => 'Vesitaire',
363
+    'info_visiteur_2' => 'dau sit public',
364
+    'info_visiteurs' => 'Vesitaires',
365
+    'info_visiteurs_02' => 'Vesitaires dau sit public',
366
+    'install_echec_annonce' => 'L’installacion capitarà mau, o abotirà a un sit non foncionau...',
367
+    'install_extension_php_obligatoire' => 'SPIP exigís l’extension php:',
368
+    'install_select_langue' => 'Seleccionatz una lenga puei clicatz lo boton «seguent» per amodar la procedura d’installacion.',
369
+    'intem_redacteur' => 'redactor',
370
+    'item_accepter_inscriptions' => 'Acceptar leis inscripcions',
371
+    'item_activer_messages_avertissement' => 'Activar lei messatges d’avertiment',
372
+    'item_administrateur_2' => 'administrator',
373
+    'item_afficher_calendrier' => 'Afichar dins lo calendier',
374
+    'item_choix_administrateurs' => 'leis administrators',
375
+    'item_choix_generation_miniature' => 'Congrear automaticament lei miniaturas deis imatges.',
376
+    'item_choix_non_generation_miniature' => 'Congrear ges de miniaturas deis imatges.',
377
+    'item_choix_redacteurs' => 'lei redactors',
378
+    'item_choix_visiteurs' => 'lei vesitaires dau sit public',
379
+    'item_creer_fichiers_authent' => 'Crear de fichiers .htpasswd',
380
+    'item_login' => 'Login',
381
+    'item_mots_cles_association_articles' => 'ais articles',
382
+    'item_mots_cles_association_rubriques' => 'ai rubricas',
383
+    'item_mots_cles_association_sites' => 'ai sits referenciats o sindicats',
384
+    'item_non' => 'Non',
385
+    'item_non_accepter_inscriptions' => 'Pas acceptar leis inscripcions',
386
+    'item_non_activer_messages_avertissement' => 'Ges de messatge d’avertiment',
387
+    'item_non_afficher_calendrier' => 'De pas afichar dins lo calendier',
388
+    'item_non_creer_fichiers_authent' => 'Pas crear aquelei fichiers',
389
+    'item_non_publier_articles' => 'Pas publicar leis articles avans la data de publicacion prevista.',
390
+    'item_nouvel_auteur' => 'Autor nòu',
391
+    'item_nouvelle_rubrique' => 'Rubrica nòva',
392
+    'item_oui' => 'Òc',
393
+    'item_publier_articles' => 'Publicar leis articles, quina que siá sa data de publicacion',
394
+    'item_reponse_article' => 'Respònsa a l’article',
395
+    'item_visiteur' => 'vesitaire',
396 396
 
397
-	// J
398
-	'jour_non_connu_nc' => 'n.c.',
397
+    // J
398
+    'jour_non_connu_nc' => 'n.c.',
399 399
 
400
-	// L
401
-	'lien_ajouter_auteur' => 'Apondre aquel autor',
402
-	'lien_email' => 'e-mail',
403
-	'lien_nom_site' => 'NOM DAU SIT:',
404
-	'lien_retirer_auteur' => 'Levar l’autor',
405
-	'lien_site' => 'sit',
406
-	'lien_tout_deplier' => 'Desplegar tot',
407
-	'lien_tout_replier' => 'Tornar plegar',
408
-	'lien_trier_nom' => 'Triar per nom',
409
-	'lien_trier_nombre_articles' => 'Triar per nombre d’articles',
410
-	'lien_trier_statut' => 'Triar per estatut',
411
-	'lien_voir_en_ligne' => 'VEIRE EN LINHA:',
412
-	'logo_article' => 'LÒGO DE L’ARTICLE', # MODIF
413
-	'logo_auteur' => 'LÒGO DE L’AUTOR', # MODIF
414
-	'logo_rubrique' => 'LÒGO DE LA RUBRICA', # MODIF
415
-	'logo_site' => 'LÒGO D’AQUEU SIT', # MODIF
416
-	'logo_standard_rubrique' => 'LÒGO ESTANDARD DEI RUBRICAS', # MODIF
417
-	'logo_survol' => 'LÒGO PER LO SUBREVÒU', # MODIF
400
+    // L
401
+    'lien_ajouter_auteur' => 'Apondre aquel autor',
402
+    'lien_email' => 'e-mail',
403
+    'lien_nom_site' => 'NOM DAU SIT:',
404
+    'lien_retirer_auteur' => 'Levar l’autor',
405
+    'lien_site' => 'sit',
406
+    'lien_tout_deplier' => 'Desplegar tot',
407
+    'lien_tout_replier' => 'Tornar plegar',
408
+    'lien_trier_nom' => 'Triar per nom',
409
+    'lien_trier_nombre_articles' => 'Triar per nombre d’articles',
410
+    'lien_trier_statut' => 'Triar per estatut',
411
+    'lien_voir_en_ligne' => 'VEIRE EN LINHA:',
412
+    'logo_article' => 'LÒGO DE L’ARTICLE', # MODIF
413
+    'logo_auteur' => 'LÒGO DE L’AUTOR', # MODIF
414
+    'logo_rubrique' => 'LÒGO DE LA RUBRICA', # MODIF
415
+    'logo_site' => 'LÒGO D’AQUEU SIT', # MODIF
416
+    'logo_standard_rubrique' => 'LÒGO ESTANDARD DEI RUBRICAS', # MODIF
417
+    'logo_survol' => 'LÒGO PER LO SUBREVÒU', # MODIF
418 418
 
419
-	// M
420
-	'menu_aide_installation_choix_base' => 'Chausida de vòstra basa',
421
-	'module_fichier_langue' => 'Fichier de lenga',
422
-	'module_raccourci' => 'Acorcha',
423
-	'module_texte_affiche' => 'Tèxt afichat',
424
-	'module_texte_explicatif' => 'Podètz inserir leis acorchas seguentas dins leis esqueletas de vòstre sit public. Se reviraràn automaticament  dins lei diferentei lengas per lei qualas existís un fichier de lenga.',
425
-	'module_texte_traduction' => 'Lo fichier de lenga «@module@» es disponible en:',
426
-	'mois_non_connu' => 'non conegut',
419
+    // M
420
+    'menu_aide_installation_choix_base' => 'Chausida de vòstra basa',
421
+    'module_fichier_langue' => 'Fichier de lenga',
422
+    'module_raccourci' => 'Acorcha',
423
+    'module_texte_affiche' => 'Tèxt afichat',
424
+    'module_texte_explicatif' => 'Podètz inserir leis acorchas seguentas dins leis esqueletas de vòstre sit public. Se reviraràn automaticament  dins lei diferentei lengas per lei qualas existís un fichier de lenga.',
425
+    'module_texte_traduction' => 'Lo fichier de lenga «@module@» es disponible en:',
426
+    'mois_non_connu' => 'non conegut',
427 427
 
428
-	// O
429
-	'onglet_repartition_actuelle' => 'd’aquesta passa',
428
+    // O
429
+    'onglet_repartition_actuelle' => 'd’aquesta passa',
430 430
 
431
-	// P
432
-	'plugin_etat_developpement' => 'en cors de desvolopament',
433
-	'plugin_etat_experimental' => 'experimentau',
434
-	'plugin_etat_stable' => 'estable',
435
-	'plugin_etat_test' => 'a l’ensag',
436
-	'plugins_liste' => 'Tièra deis ajustons',
431
+    // P
432
+    'plugin_etat_developpement' => 'en cors de desvolopament',
433
+    'plugin_etat_experimental' => 'experimentau',
434
+    'plugin_etat_stable' => 'estable',
435
+    'plugin_etat_test' => 'a l’ensag',
436
+    'plugins_liste' => 'Tièra deis ajustons',
437 437
 
438
-	// R
439
-	'repertoire_plugins' => 'Repertòri :',
440
-	'required' => '[Obligatòri]', # MODIF
438
+    // R
439
+    'repertoire_plugins' => 'Repertòri :',
440
+    'required' => '[Obligatòri]', # MODIF
441 441
 
442
-	// S
443
-	'statut_admin_restreint' => '(admin. restrench)', # MODIF
442
+    // S
443
+    'statut_admin_restreint' => '(admin. restrench)', # MODIF
444 444
 
445
-	// T
446
-	'taille_cache_image' => 'Leis imatges qu’SPIP a calculat automaticament (vinhetas dei documents, títols presentats en forma grafica, foncions matematicas en format TeX...) ocupan dins lo repertòri @dir@ un totau de @taille@.',
447
-	'taille_cache_octets' => 'Ara la talha de l’escondedor compassa @octets@.', # MODIF
448
-	'taille_cache_vide' => 'L’escondedor es vuege.',
449
-	'taille_repertoire_cache' => 'Talha dau repertòri escondedor',
450
-	'text_article_propose_publication' => 'Article prepausat per la publicacion. Esitetz pas de donar vòstre vejaire gràcias au forum estacat a aquel article (en bas de pagina).', # MODIF
451
-	'texte_acces_ldap_anonyme_1' => 'D’unei servidors LDAP accèptan ges d’accès anonim. En aqueu cas, cau especificar un identificant d’accès iniciau per poder puei cercar d’informacions dins l’annuari. Pasmens, lei camps seguents se poiràn laissar vueges dins la màger part dei cas.',
452
-	'texte_admin_effacer_01' => 'Aquela comanda escafa <i>tot</i> lo contengut de la basa de donadas,
445
+    // T
446
+    'taille_cache_image' => 'Leis imatges qu’SPIP a calculat automaticament (vinhetas dei documents, títols presentats en forma grafica, foncions matematicas en format TeX...) ocupan dins lo repertòri @dir@ un totau de @taille@.',
447
+    'taille_cache_octets' => 'Ara la talha de l’escondedor compassa @octets@.', # MODIF
448
+    'taille_cache_vide' => 'L’escondedor es vuege.',
449
+    'taille_repertoire_cache' => 'Talha dau repertòri escondedor',
450
+    'text_article_propose_publication' => 'Article prepausat per la publicacion. Esitetz pas de donar vòstre vejaire gràcias au forum estacat a aquel article (en bas de pagina).', # MODIF
451
+    'texte_acces_ldap_anonyme_1' => 'D’unei servidors LDAP accèptan ges d’accès anonim. En aqueu cas, cau especificar un identificant d’accès iniciau per poder puei cercar d’informacions dins l’annuari. Pasmens, lei camps seguents se poiràn laissar vueges dins la màger part dei cas.',
452
+    'texte_admin_effacer_01' => 'Aquela comanda escafa <i>tot</i> lo contengut de la basa de donadas,
453 453
  inclús <i>totei</i> leis accès redactors e administrators. Un còp que l’auretz executada, auretz de tornar lançar l’installacion d’SPIP per tornar crear una basa novèla e mai un primier accès administrator.',
454
-	'texte_adresse_annuaire_1' => '(Se vòstre annuari es installat sus la meteissa maquina qu’aqueu sit web, s’agís probable de "localhost".)',
455
-	'texte_ajout_auteur' => 'L’autor seguent es estat apondut a l’article:',
456
-	'texte_annuaire_ldap_1' => 'S’accedissètz a un annuari (LDAP), lo podètz utilizar per importar automaticament d’utilizaires sota SPIP.',
457
-	'texte_article_statut' => 'Aquel article es:',
458
-	'texte_article_virtuel' => 'Article virtuau',
459
-	'texte_article_virtuel_reference' => '<b>Article virtuau:</b> article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL. Per suprimir la redireccion, escafatz l’URL çai subre.',
460
-	'texte_aucun_resultat_auteur' => 'Ges de resultat per "@cherche_auteur@"',
461
-	'texte_auteur_messagerie' => 'Aquest sit vos pòt indicar de contunha la tiera dei redactors connectats, çò que vos permet d’escambiar de messatges en dirècte. Podètz decidir de pas aparéisser dins aquela lista (siatz "invisible/a" per leis autreis utilizaires).',
462
-	'texte_auteurs' => 'LEIS AUTORS',
463
-	'texte_choix_base_1' => 'Chausissètz vòstra basa:',
464
-	'texte_choix_base_2' => 'Lo servidor SQL conten mai d’una basa de donadas.',
465
-	'texte_choix_base_3' => '<b>Chausissètz</b> çai sota la que vòstre aubergador vos a atribuida:',
466
-	'texte_compte_element' => '@count@ element',
467
-	'texte_compte_elements' => '@count@ elements',
468
-	'texte_connexion_mysql' => 'Consultatz leis informacions que vòstre aubergador fornís: i devètz trobar, se vòstre aubergador supòrta SQL, lei còdes de connexion au servidor SQL.', # MODIF
469
-	'texte_contenu_article' => '(Contengut de l’article en quauquei mots.)',
470
-	'texte_contenu_articles' => 'Segon la maqueta que vòstre sit a adoptada, podètz decidir
454
+    'texte_adresse_annuaire_1' => '(Se vòstre annuari es installat sus la meteissa maquina qu’aqueu sit web, s’agís probable de "localhost".)',
455
+    'texte_ajout_auteur' => 'L’autor seguent es estat apondut a l’article:',
456
+    'texte_annuaire_ldap_1' => 'S’accedissètz a un annuari (LDAP), lo podètz utilizar per importar automaticament d’utilizaires sota SPIP.',
457
+    'texte_article_statut' => 'Aquel article es:',
458
+    'texte_article_virtuel' => 'Article virtuau',
459
+    'texte_article_virtuel_reference' => '<b>Article virtuau:</b> article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL. Per suprimir la redireccion, escafatz l’URL çai subre.',
460
+    'texte_aucun_resultat_auteur' => 'Ges de resultat per "@cherche_auteur@"',
461
+    'texte_auteur_messagerie' => 'Aquest sit vos pòt indicar de contunha la tiera dei redactors connectats, çò que vos permet d’escambiar de messatges en dirècte. Podètz decidir de pas aparéisser dins aquela lista (siatz "invisible/a" per leis autreis utilizaires).',
462
+    'texte_auteurs' => 'LEIS AUTORS',
463
+    'texte_choix_base_1' => 'Chausissètz vòstra basa:',
464
+    'texte_choix_base_2' => 'Lo servidor SQL conten mai d’una basa de donadas.',
465
+    'texte_choix_base_3' => '<b>Chausissètz</b> çai sota la que vòstre aubergador vos a atribuida:',
466
+    'texte_compte_element' => '@count@ element',
467
+    'texte_compte_elements' => '@count@ elements',
468
+    'texte_connexion_mysql' => 'Consultatz leis informacions que vòstre aubergador fornís: i devètz trobar, se vòstre aubergador supòrta SQL, lei còdes de connexion au servidor SQL.', # MODIF
469
+    'texte_contenu_article' => '(Contengut de l’article en quauquei mots.)',
470
+    'texte_contenu_articles' => 'Segon la maqueta que vòstre sit a adoptada, podètz decidir
471 471
  que certaneis elements deis articles s’utilizen pas.
472 472
  Utilizatz la tiera çai sota per indicar quineis elements son disponibles.',
473
-	'texte_crash_base' => 'Se vòstra basa de donadas s’es
473
+    'texte_crash_base' => 'Se vòstra basa de donadas s’es
474 474
  encalada, podètz assajar una reparacion
475 475
  automatica.',
476
-	'texte_creer_rubrique' => 'Avans de poder escriure d’articles,<br /> devètz crear una rubrica.',
477
-	'texte_date_creation_article' => 'DATA DE CREACION DE L’ARTICLE:',
478
-	'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA :',
479
-	'texte_date_publication_anterieure_nonaffichee' => 'Afichar ges de data de publicacion anteriora.',
480
-	'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :',
481
-	'texte_descriptif_rapide' => 'Descriptiu rapid',
482
-	'texte_effacer_base' => 'Escafar la basa de donadas SPIP',
483
-	'texte_en_cours_validation' => 'Se prepausa de publicar leis articles e brèvas çai sota. Esitetz pas de donar vòstre vejaire gràcias ai forums que i son estacats.', # MODIF
484
-	'texte_enrichir_mise_a_jour' => 'Podètz enriquir la compaginacion de vòstre tèxt en utilizant d’"acorchas tipograficas".',
485
-	'texte_fichier_authent' => '<b>Deu crear, SPIP, de fichiers especiaus  <tt>.htpasswd</tt>
476
+    'texte_creer_rubrique' => 'Avans de poder escriure d’articles,<br /> devètz crear una rubrica.',
477
+    'texte_date_creation_article' => 'DATA DE CREACION DE L’ARTICLE:',
478
+    'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA :',
479
+    'texte_date_publication_anterieure_nonaffichee' => 'Afichar ges de data de publicacion anteriora.',
480
+    'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :',
481
+    'texte_descriptif_rapide' => 'Descriptiu rapid',
482
+    'texte_effacer_base' => 'Escafar la basa de donadas SPIP',
483
+    'texte_en_cours_validation' => 'Se prepausa de publicar leis articles e brèvas çai sota. Esitetz pas de donar vòstre vejaire gràcias ai forums que i son estacats.', # MODIF
484
+    'texte_enrichir_mise_a_jour' => 'Podètz enriquir la compaginacion de vòstre tèxt en utilizant d’"acorchas tipograficas".',
485
+    'texte_fichier_authent' => '<b>Deu crear, SPIP, de fichiers especiaus  <tt>.htpasswd</tt>
486 486
   e <tt>.htpasswd-admin</tt> dins lo repertòri @dossier@?</b><p>
487 487
   Aquelei fichiers vos pòdon servir per restrénher l’accès ais autors
488 488
   e administrators alhors dins vòstre sit
@@ -490,46 +490,46 @@  discard block
 block discarded – undo
490 490
  Se vos sèrv pas, podètz laissar aquesta opcion
491 491
   a sa valor predefinida (ges de creacion
492 492
   dei fichiers).</p>', # MODIF
493
-	'texte_informations_personnelles_1' => 'Ara lo sistèma vos crearà un accès personalizat au sit.',
494
-	'texte_informations_personnelles_2' => '(Nòta: se s’agís d’una reïnstallacion, e se vòstre accès fonciona encara, podètz', # MODIF
495
-	'texte_introductif_article' => '(Tèxt introductiu de l’article.)',
496
-	'texte_jeu_caractere' => 'Aquesta opcion es utila se vòstre sit deu afichar d’alfabets
493
+    'texte_informations_personnelles_1' => 'Ara lo sistèma vos crearà un accès personalizat au sit.',
494
+    'texte_informations_personnelles_2' => '(Nòta: se s’agís d’una reïnstallacion, e se vòstre accès fonciona encara, podètz', # MODIF
495
+    'texte_introductif_article' => '(Tèxt introductiu de l’article.)',
496
+    'texte_jeu_caractere' => 'Aquesta opcion es utila se vòstre sit deu afichar d’alfabets
497 497
  diferents de l’alfabet latin (o "occidentau") e sei derivats.
498 498
  En aqueu cas, cau cambiar lo reglatge predefinit per fin d’utilizar
499 499
  un jòc de caractèrs apropriat. Oblidetz pas tanpauc d’adaptar
500 500
  lo sit public en consequéncia (balisa <tt>#CHARSET</tt>).',
501
-	'texte_jeu_caractere_3' => 'Vòstre sit es per ara installat amb lo jòc de caractèrs :',
502
-	'texte_login_ldap_1' => '(Laissar vuege per un accès anonim, o picar lo camin complet, per exemple «<tt>uid=fabre, ou=usanciers, dc=mon-domeni, dc=com</tt>».)',
503
-	'texte_login_precaution' => 'Atencion! Aquò’s lo login amb lo quau siatz ara connectat/ada. 
501
+    'texte_jeu_caractere_3' => 'Vòstre sit es per ara installat amb lo jòc de caractèrs :',
502
+    'texte_login_ldap_1' => '(Laissar vuege per un accès anonim, o picar lo camin complet, per exemple «<tt>uid=fabre, ou=usanciers, dc=mon-domeni, dc=com</tt>».)',
503
+    'texte_login_precaution' => 'Atencion! Aquò’s lo login amb lo quau siatz ara connectat/ada. 
504 504
  Utilizatz aquest formulari amb precaucion...',
505
-	'texte_mise_a_niveau_base_1' => 'Venètz d’actualizar lei fichiers SPIP.
505
+    'texte_mise_a_niveau_base_1' => 'Venètz d’actualizar lei fichiers SPIP.
506 506
  Ara cau metre a nivèu la basa de donadas
507 507
  dau sit.',
508
-	'texte_modifier_article' => 'Modificar l’article:',
509
-	'texte_multilinguisme' => 'Se desiratz de gerir d’articles en mai d’una lenga, amb una navigacion complèxa, podètz apondre un menut per chausir la lenga deis articles e/o dei rubricas, en foncion de l’organizacion de vòstre sit.', # MODIF
510
-	'texte_multilinguisme_trad' => 'Podètz tanben activar un sistèma de gestion dei liames entre lei diferentei reviradas d’un article.', # MODIF
511
-	'texte_non_compresse' => '<i>non comprimit</i> (per amòr que vòstre servidor supòrta pas aquela foncionalitat)',
512
-	'texte_nouvelle_version_spip_1' => 'Avètz installada una version novèla d’SPIP.',
513
-	'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualizacion mai completa que de costuma. Se siatz webmèstre/webmèstra dau sit, vougatz escafar lo fichier <tt>inc_connect.php3</tt> dau repertòri <tt>ecrire</tt> e tornar prene l’installacion per fin d’actualizar vòstrei paramètres de connexion a la basa de donadas.<p> (NB: s’avètz demembrat vòstrei paramètres de connexion, espepissatz lo fichier  <tt>inc_connect.php3</tt> avans de lo suprimir...)</p>', # MODIF
514
-	'texte_operation_echec' => 'Tornatz a la pagina precedenta, chausissètz una autra basa o creatz-ne’n una novèla. Verificatz leis informacions que vòstre aubergador a fornidas.',
515
-	'texte_plus_trois_car' => 'mai de 3 caractèrs',
516
-	'texte_plusieurs_articles' => 'Mai d’un autor trobat per "@cherche_auteur@":',
517
-	'texte_port_annuaire' => '(La valor indicada coma predefinida conven en generau.)',
518
-	'texte_proposer_publication' => 'Quora auretz acabat vòstre article,<br /> poiretz prepausar que siá publicat.',
519
-	'texte_proxy' => 'Dins d’unei cas (intranet, rets protegidas...),
508
+    'texte_modifier_article' => 'Modificar l’article:',
509
+    'texte_multilinguisme' => 'Se desiratz de gerir d’articles en mai d’una lenga, amb una navigacion complèxa, podètz apondre un menut per chausir la lenga deis articles e/o dei rubricas, en foncion de l’organizacion de vòstre sit.', # MODIF
510
+    'texte_multilinguisme_trad' => 'Podètz tanben activar un sistèma de gestion dei liames entre lei diferentei reviradas d’un article.', # MODIF
511
+    'texte_non_compresse' => '<i>non comprimit</i> (per amòr que vòstre servidor supòrta pas aquela foncionalitat)',
512
+    'texte_nouvelle_version_spip_1' => 'Avètz installada una version novèla d’SPIP.',
513
+    'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualizacion mai completa que de costuma. Se siatz webmèstre/webmèstra dau sit, vougatz escafar lo fichier <tt>inc_connect.php3</tt> dau repertòri <tt>ecrire</tt> e tornar prene l’installacion per fin d’actualizar vòstrei paramètres de connexion a la basa de donadas.<p> (NB: s’avètz demembrat vòstrei paramètres de connexion, espepissatz lo fichier  <tt>inc_connect.php3</tt> avans de lo suprimir...)</p>', # MODIF
514
+    'texte_operation_echec' => 'Tornatz a la pagina precedenta, chausissètz una autra basa o creatz-ne’n una novèla. Verificatz leis informacions que vòstre aubergador a fornidas.',
515
+    'texte_plus_trois_car' => 'mai de 3 caractèrs',
516
+    'texte_plusieurs_articles' => 'Mai d’un autor trobat per "@cherche_auteur@":',
517
+    'texte_port_annuaire' => '(La valor indicada coma predefinida conven en generau.)',
518
+    'texte_proposer_publication' => 'Quora auretz acabat vòstre article,<br /> poiretz prepausar que siá publicat.',
519
+    'texte_proxy' => 'Dins d’unei cas (intranet, rets protegidas...),
520 520
   se pòt que cauga utilizar un <i>proxy HTTP</i> per aténher lei sits sindicats.
521 521
   En aqueu cas, marcatz çai sota son adreiça, sota la forma
522 522
   <tt><html>http://proxy:8080</html></tt>. En generau,
523 523
   laissaretz vueja aquela casa.',
524
-	'texte_publication_articles_post_dates' => 'Coma SPIP se deu comportar fàcia ais articles que sa
524
+    'texte_publication_articles_post_dates' => 'Coma SPIP se deu comportar fàcia ais articles que sa
525 525
   data de publicacion es fixada a una 
526 526
   escasença futura?',
527
-	'texte_rappel_selection_champs' => '[Oblidetz pas de seleccionar aqueu camp correctament.]',
528
-	'texte_recalcul_page' => 'Se volètz
527
+    'texte_rappel_selection_champs' => '[Oblidetz pas de seleccionar aqueu camp correctament.]',
528
+    'texte_recalcul_page' => 'Se volètz
529 529
 tornar calcular ren qu’una pagina, passatz puslèu per l’espaci public e utilizatz lo  boton "tornar calcular".',
530
-	'texte_recuperer_base' => 'Reparar la basa de donadas',
531
-	'texte_reference_mais_redirige' => 'article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL.',
532
-	'texte_requetes_echouent' => '<b>Quora d’unei requistas SQL s’encalan
530
+    'texte_recuperer_base' => 'Reparar la basa de donadas',
531
+    'texte_reference_mais_redirige' => 'article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL.',
532
+    'texte_requetes_echouent' => '<b>Quora d’unei requistas SQL s’encalan
533 533
   sistematicament e sensa rason aparenta, se pòt
534 534
   qu’aquò venga ben de la basa de donadas.  </b><p>
535 535
   SQL ten la facultat de reparar sei
@@ -539,73 +539,73 @@  discard block
 block discarded – undo
539 539
  benlèu d’indicis de çò que va pas...</p><p>
540 540
   Se lo problèma persistís, contactatz vòstre
541 541
   aubergador.</p>', # MODIF
542
-	'texte_selection_langue_principale' => 'Podètz seleccionar çai sota la "lenga principala" dau sit. Aquela chausida vos obliga pas -grand gaug- d’escriure vòstreis articles dins la lenga seleccionada, mai permet de determinar:
542
+    'texte_selection_langue_principale' => 'Podètz seleccionar çai sota la "lenga principala" dau sit. Aquela chausida vos obliga pas -grand gaug- d’escriure vòstreis articles dins la lenga seleccionada, mai permet de determinar:
543 543
  <ul><li> lo format predefinit dei datas sus lo sit public;</li>
544 544
  <li> la natura dau motor tipografic que SPIP deu utilizar per lo rendut dei tèxts;</li>
545 545
  <li> la lenga utilizada dins lei formularis dau sit public;</li>
546 546
  <li> la lenga presentada coma predefinida dins l’espaci privat.</li></ul>',
547
-	'texte_sous_titre' => 'Sostítol',
548
-	'texte_statistiques_visites' => '(barras escuras:  dimenge / corba escura: evolucion de la mejana)',
549
-	'texte_statut_attente_validation' => 'en espèra de validacion',
550
-	'texte_statut_publies' => 'publicats en linha',
551
-	'texte_statut_refuses' => 'refusats',
552
-	'texte_suppression_fichiers' => 'Utilizatz aquela comanda per suprimir totei lei fichiers que se tròban
547
+    'texte_sous_titre' => 'Sostítol',
548
+    'texte_statistiques_visites' => '(barras escuras:  dimenge / corba escura: evolucion de la mejana)',
549
+    'texte_statut_attente_validation' => 'en espèra de validacion',
550
+    'texte_statut_publies' => 'publicats en linha',
551
+    'texte_statut_refuses' => 'refusats',
552
+    'texte_suppression_fichiers' => 'Utilizatz aquela comanda per suprimir totei lei fichiers que se tròban
553 553
 dins l’escondedor SPIP. Aquò permet per exemple de forçar un calcul nòu de totei lei paginas
554 554
 s’avètz bravament modificat lo grafisme o l’estructura dau sit.',
555
-	'texte_sur_titre' => 'Subretítol',
556
-	'texte_table_ok' => ': aquesta taula es condrecha.',
557
-	'texte_tentative_recuperation' => 'Assai de reparacion',
558
-	'texte_tenter_reparation' => 'Assajar de reparar la basa de donadas',
559
-	'texte_test_proxy' => 'Per assajar aqueu proxy, indicatz aicí l’adreiça d’un sit web
555
+    'texte_sur_titre' => 'Subretítol',
556
+    'texte_table_ok' => ': aquesta taula es condrecha.',
557
+    'texte_tentative_recuperation' => 'Assai de reparacion',
558
+    'texte_tenter_reparation' => 'Assajar de reparar la basa de donadas',
559
+    'texte_test_proxy' => 'Per assajar aqueu proxy, indicatz aicí l’adreiça d’un sit web
560 560
     que lo voudriatz esprovar.',
561
-	'texte_titre_02' => 'Títol:',
562
-	'texte_titre_obligatoire' => '<b>Títol</b> [Obligatòri]',
563
-	'texte_travail_article' => '@nom_auteur_modif@ a trabalhat sus aquel article fa @date_diff@ minutas',
564
-	'texte_travail_collaboratif' => 'Quora es frequent que mai d’un redactor 
561
+    'texte_titre_02' => 'Títol:',
562
+    'texte_titre_obligatoire' => '<b>Títol</b> [Obligatòri]',
563
+    'texte_travail_article' => '@nom_auteur_modif@ a trabalhat sus aquel article fa @date_diff@ minutas',
564
+    'texte_travail_collaboratif' => 'Quora es frequent que mai d’un redactor 
565 565
   trabalhe sus lo meteis article, lo sistèma
566 566
   pòt afichar leis articles recentament "dobèrts"
567 567
   per fin d’evitar lei modificacions simultanèas.
568 568
   Aquela opcion es desactivada de maniera predefinida
569 569
   per fin d’evitar d’afichar de messatges d’avertiment
570 570
   intempestius.',
571
-	'texte_vide' => 'vuege',
572
-	'texte_vider_cache' => 'Vujar l’escondedor',
573
-	'titre_admin_tech' => 'Mantenença tecnica',
574
-	'titre_admin_vider' => 'Mantenença tecnica',
575
-	'titre_cadre_afficher_article' => 'Afichar leis articles',
576
-	'titre_cadre_afficher_traductions' => 'Afichar l’estat dei reviradas per aquela lenga',
577
-	'titre_cadre_ajouter_auteur' => 'APONDRE UN AUTOR:',
578
-	'titre_cadre_interieur_rubrique' => 'Dintre la rubrica',
579
-	'titre_cadre_numero_auteur' => 'AUTOR NUMÈRO',
580
-	'titre_cadre_signature_obligatoire' => '<b>Signatura</b> [Obligatòria]<br />',
581
-	'titre_config_fonctions' => 'Configuracion dau sit',
582
-	'titre_configuration' => 'Configuracion dau sit',
583
-	'titre_connexion_ldap' => 'Opcions: <b>Vòstra connexion LDAP</b>',
584
-	'titre_groupe_mots' => 'GROP DE MOTS:',
585
-	'titre_langue_article' => 'LENGA DE L’ARTICLE', # MODIF
586
-	'titre_langue_rubrique' => 'LENGA DE LA RUBRICA', # MODIF
587
-	'titre_langue_trad_article' => 'LENGA E REVIRADAS DE L’ARTICLE',
588
-	'titre_les_articles' => 'LEIS ARTICLES',
589
-	'titre_naviguer_dans_le_site' => 'Navigar per lo sit...',
590
-	'titre_nouvelle_rubrique' => 'Rubrica novèla',
591
-	'titre_numero_rubrique' => 'RUBRICA NUMÈRO:',
592
-	'titre_page_articles_edit' => 'Modificar: @titre@',
593
-	'titre_page_articles_page' => 'Leis articles',
594
-	'titre_page_articles_tous' => 'Tot lo sit',
595
-	'titre_page_calendrier' => 'Calendier @nom_mois@ de @annee@',
596
-	'titre_page_config_contenu' => 'Configuracion dau sit',
597
-	'titre_page_delete_all' => 'supression totala e irreversibla',
598
-	'titre_page_recherche' => 'Resultats de la cèrca @recherche@',
599
-	'titre_page_statistiques_referers' => 'Estadisticas (liames intrants)',
600
-	'titre_page_upgrade' => 'Mesa a nivèu d’SPIP',
601
-	'titre_publication_articles_post_dates' => 'Publicacion deis articles pòstdatats',
602
-	'titre_reparation' => 'Reparacion',
603
-	'titre_suivi_petition' => 'Seguit dei peticions',
604
-	'trad_article_traduction' => 'Totei lei versions d’aquel article:',
605
-	'trad_delier' => 'Cessar de liar aquest article a sei reviradas ', # MODIF
606
-	'trad_lier' => 'Aquest article es una revirada de l’article numèro:',
607
-	'trad_new' => 'Escriure una revirada novèla d’aquest article', # MODIF
571
+    'texte_vide' => 'vuege',
572
+    'texte_vider_cache' => 'Vujar l’escondedor',
573
+    'titre_admin_tech' => 'Mantenença tecnica',
574
+    'titre_admin_vider' => 'Mantenença tecnica',
575
+    'titre_cadre_afficher_article' => 'Afichar leis articles',
576
+    'titre_cadre_afficher_traductions' => 'Afichar l’estat dei reviradas per aquela lenga',
577
+    'titre_cadre_ajouter_auteur' => 'APONDRE UN AUTOR:',
578
+    'titre_cadre_interieur_rubrique' => 'Dintre la rubrica',
579
+    'titre_cadre_numero_auteur' => 'AUTOR NUMÈRO',
580
+    'titre_cadre_signature_obligatoire' => '<b>Signatura</b> [Obligatòria]<br />',
581
+    'titre_config_fonctions' => 'Configuracion dau sit',
582
+    'titre_configuration' => 'Configuracion dau sit',
583
+    'titre_connexion_ldap' => 'Opcions: <b>Vòstra connexion LDAP</b>',
584
+    'titre_groupe_mots' => 'GROP DE MOTS:',
585
+    'titre_langue_article' => 'LENGA DE L’ARTICLE', # MODIF
586
+    'titre_langue_rubrique' => 'LENGA DE LA RUBRICA', # MODIF
587
+    'titre_langue_trad_article' => 'LENGA E REVIRADAS DE L’ARTICLE',
588
+    'titre_les_articles' => 'LEIS ARTICLES',
589
+    'titre_naviguer_dans_le_site' => 'Navigar per lo sit...',
590
+    'titre_nouvelle_rubrique' => 'Rubrica novèla',
591
+    'titre_numero_rubrique' => 'RUBRICA NUMÈRO:',
592
+    'titre_page_articles_edit' => 'Modificar: @titre@',
593
+    'titre_page_articles_page' => 'Leis articles',
594
+    'titre_page_articles_tous' => 'Tot lo sit',
595
+    'titre_page_calendrier' => 'Calendier @nom_mois@ de @annee@',
596
+    'titre_page_config_contenu' => 'Configuracion dau sit',
597
+    'titre_page_delete_all' => 'supression totala e irreversibla',
598
+    'titre_page_recherche' => 'Resultats de la cèrca @recherche@',
599
+    'titre_page_statistiques_referers' => 'Estadisticas (liames intrants)',
600
+    'titre_page_upgrade' => 'Mesa a nivèu d’SPIP',
601
+    'titre_publication_articles_post_dates' => 'Publicacion deis articles pòstdatats',
602
+    'titre_reparation' => 'Reparacion',
603
+    'titre_suivi_petition' => 'Seguit dei peticions',
604
+    'trad_article_traduction' => 'Totei lei versions d’aquel article:',
605
+    'trad_delier' => 'Cessar de liar aquest article a sei reviradas ', # MODIF
606
+    'trad_lier' => 'Aquest article es una revirada de l’article numèro:',
607
+    'trad_new' => 'Escriure una revirada novèla d’aquest article', # MODIF
608 608
 
609
-	// V
610
-	'version' => 'Version :',
609
+    // V
610
+    'version' => 'Version :',
611 611
 ];
Please login to merge, or discard this patch.
ecrire/lang/public_da.php 1 patch
Indentation   +82 added lines, -82 removed lines patch added patch discarded remove patch
@@ -5,99 +5,99 @@
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'accueil_site' => 'Hjemmeside', # MODIF
10
-	'articles' => 'Artikler',
11
-	'articles_auteur' => 'Denne forfatters artikler',
12
-	'articles_populaires' => 'De mest læste artikler',
13
-	'articles_rubrique' => 'Dette områdes artikler',
14
-	'aucun_article' => 'Der er ingen artikel på denne adresse',
15
-	'aucun_auteur' => 'Der er ingen forfatter på denne adresse',
16
-	'aucun_site' => 'Der er intet websted på denne adresse',
17
-	'aucune_breve' => 'Der er ingen nyhed på denne adresse',
18
-	'aucune_rubrique' => 'Der er ikke noget afsnit på denne adresse',
19
-	'autres_breves' => 'Andre nyheder',
20
-	'autres_groupes_mots_clefs' => 'Andre grupper af nøgleord',
21
-	'autres_sites' => 'Andre websteder',
8
+    // A
9
+    'accueil_site' => 'Hjemmeside', # MODIF
10
+    'articles' => 'Artikler',
11
+    'articles_auteur' => 'Denne forfatters artikler',
12
+    'articles_populaires' => 'De mest læste artikler',
13
+    'articles_rubrique' => 'Dette områdes artikler',
14
+    'aucun_article' => 'Der er ingen artikel på denne adresse',
15
+    'aucun_auteur' => 'Der er ingen forfatter på denne adresse',
16
+    'aucun_site' => 'Der er intet websted på denne adresse',
17
+    'aucune_breve' => 'Der er ingen nyhed på denne adresse',
18
+    'aucune_rubrique' => 'Der er ikke noget afsnit på denne adresse',
19
+    'autres_breves' => 'Andre nyheder',
20
+    'autres_groupes_mots_clefs' => 'Andre grupper af nøgleord',
21
+    'autres_sites' => 'Andre websteder',
22 22
 
23
-	// B
24
-	'bonjour' => 'Hej',
23
+    // B
24
+    'bonjour' => 'Hej',
25 25
 
26
-	// C
27
-	'commenter_site' => 'Kommentar til dette websted',
26
+    // C
27
+    'commenter_site' => 'Kommentar til dette websted',
28 28
 
29
-	// D
30
-	'date' => 'Dato',
31
-	'dernier_ajout' => 'Seneste tilføjelse',
32
-	'dernieres_breves' => 'Seneste nyhed',
33
-	'derniers_articles' => 'Seneste artikler',
34
-	'derniers_commentaires' => 'Seneste kommentarer',
35
-	'derniers_messages_forum' => 'Seneste indlæg offentliggjort i forummer',
29
+    // D
30
+    'date' => 'Dato',
31
+    'dernier_ajout' => 'Seneste tilføjelse',
32
+    'dernieres_breves' => 'Seneste nyhed',
33
+    'derniers_articles' => 'Seneste artikler',
34
+    'derniers_commentaires' => 'Seneste kommentarer',
35
+    'derniers_messages_forum' => 'Seneste indlæg offentliggjort i forummer',
36 36
 
37
-	// E
38
-	'edition_mode_texte' => 'Tekstudgave',
39
-	'en_reponse' => 'Svaradresse:',
40
-	'en_resume' => 'Opsummering',
41
-	'envoyer_message' => 'Lav indlæg',
42
-	'espace_prive' => 'Privat område',
37
+    // E
38
+    'edition_mode_texte' => 'Tekstudgave',
39
+    'en_reponse' => 'Svaradresse:',
40
+    'en_resume' => 'Opsummering',
41
+    'envoyer_message' => 'Lav indlæg',
42
+    'espace_prive' => 'Privat område',
43 43
 
44
-	// H
45
-	'hierarchie_site' => 'Webstedets struktur',
44
+    // H
45
+    'hierarchie_site' => 'Webstedets struktur',
46 46
 
47
-	// J
48
-	'jours' => 'dage',
47
+    // J
48
+    'jours' => 'dage',
49 49
 
50
-	// M
51
-	'meme_auteur' => 'Af samme forfatter',
52
-	'meme_rubrique' => 'I samme afsnit',
53
-	'memes_auteurs' => 'Af samme forfattere',
54
-	'message' => 'Indlæg',
55
-	'messages_forum' => 'Forumindlæg', # MODIF
56
-	'messages_recents' => 'Seneste forumindlæg',
57
-	'mots_clefs' => 'Nøgleord',
58
-	'mots_clefs_meme_groupe' => 'Nøgleord i samme gruppe',
50
+    // M
51
+    'meme_auteur' => 'Af samme forfatter',
52
+    'meme_rubrique' => 'I samme afsnit',
53
+    'memes_auteurs' => 'Af samme forfattere',
54
+    'message' => 'Indlæg',
55
+    'messages_forum' => 'Forumindlæg', # MODIF
56
+    'messages_recents' => 'Seneste forumindlæg',
57
+    'mots_clefs' => 'Nøgleord',
58
+    'mots_clefs_meme_groupe' => 'Nøgleord i samme gruppe',
59 59
 
60
-	// N
61
-	'navigation' => 'Navigering',
62
-	'nom' => 'Navn',
63
-	'nouveautes' => 'Hvad nyt',
64
-	'nouveautes_web' => 'Hvad nyt på Internettet',
65
-	'nouveaux_articles' => 'Nye artikler',
66
-	'nouvelles_breves' => 'Nyheder',
60
+    // N
61
+    'navigation' => 'Navigering',
62
+    'nom' => 'Navn',
63
+    'nouveautes' => 'Hvad nyt',
64
+    'nouveautes_web' => 'Hvad nyt på Internettet',
65
+    'nouveaux_articles' => 'Nye artikler',
66
+    'nouvelles_breves' => 'Nyheder',
67 67
 
68
-	// P
69
-	'page_precedente' => 'foregående side',
70
-	'page_suivante' => 'næste side',
71
-	'par_auteur' => 'af',
72
-	'participer_site' => 'Du kan deltage aktivt på dette websted og skrive dine egne artikler ved at tilmelde dig nedenfor. Du vil da straks modtage en email med en adgangskode til webstedets private område.',
73
-	'plan_site' => 'Indholdsoversigt',
74
-	'popularite' => 'Popularitet',
75
-	'poster_message' => 'Indlæg',
68
+    // P
69
+    'page_precedente' => 'foregående side',
70
+    'page_suivante' => 'næste side',
71
+    'par_auteur' => 'af',
72
+    'participer_site' => 'Du kan deltage aktivt på dette websted og skrive dine egne artikler ved at tilmelde dig nedenfor. Du vil da straks modtage en email med en adgangskode til webstedets private område.',
73
+    'plan_site' => 'Indholdsoversigt',
74
+    'popularite' => 'Popularitet',
75
+    'poster_message' => 'Indlæg',
76 76
 
77
-	// R
78
-	'repondre_article' => 'Lav et svar til denne artikel',
79
-	'repondre_breve' => 'Lav et svar på denne nyhed',
80
-	'resultats_recherche' => 'Søgeresultater',
81
-	'retour_debut_forums' => 'Tilbage til starten på forummet',
82
-	'rubrique' => 'Afsnit',
83
-	'rubriques' => 'Afsnit',
77
+    // R
78
+    'repondre_article' => 'Lav et svar til denne artikel',
79
+    'repondre_breve' => 'Lav et svar på denne nyhed',
80
+    'resultats_recherche' => 'Søgeresultater',
81
+    'retour_debut_forums' => 'Tilbage til starten på forummet',
82
+    'rubrique' => 'Afsnit',
83
+    'rubriques' => 'Afsnit',
84 84
 
85
-	// S
86
-	'signatures_petition' => 'Underskrifter',
87
-	'site_realise_avec_spip' => 'Websted lavet med SPIP',
88
-	'sites_web' => 'Websteder',
89
-	'sous_rubriques' => 'Underafsnit',
90
-	'suite' => 'fortsæt',
91
-	'sur_web' => 'På Internettet',
92
-	'syndiquer_rubrique' => 'Syndiker dette afsnit',
93
-	'syndiquer_site' => 'Syndiker hele webstedet',
85
+    // S
86
+    'signatures_petition' => 'Underskrifter',
87
+    'site_realise_avec_spip' => 'Websted lavet med SPIP',
88
+    'sites_web' => 'Websteder',
89
+    'sous_rubriques' => 'Underafsnit',
90
+    'suite' => 'fortsæt',
91
+    'sur_web' => 'På Internettet',
92
+    'syndiquer_rubrique' => 'Syndiker dette afsnit',
93
+    'syndiquer_site' => 'Syndiker hele webstedet',
94 94
 
95
-	// T
96
-	'texte_lettre_information' => 'Her er webstedets nyhedsbrev',
97
-	'texte_lettre_information_2' => 'Dette brev opsummerer artikler og nyheder offentlliggjort siden', # MODIF
95
+    // T
96
+    'texte_lettre_information' => 'Her er webstedets nyhedsbrev',
97
+    'texte_lettre_information_2' => 'Dette brev opsummerer artikler og nyheder offentlliggjort siden', # MODIF
98 98
 
99
-	// V
100
-	'ver_imprimer' => 'Printbar version',
101
-	'voir_en_ligne' => 'Se online',
102
-	'voir_squelette' => 'Hent skabelonen til denne side',
99
+    // V
100
+    'ver_imprimer' => 'Printbar version',
101
+    'voir_en_ligne' => 'Se online',
102
+    'voir_squelette' => 'Hent skabelonen til denne side',
103 103
 ];
Please login to merge, or discard this patch.
ecrire/lang/public_cpf_hat.php 1 patch
Indentation   +83 added lines, -83 removed lines patch added patch discarded remove patch
@@ -5,100 +5,100 @@
 block discarded – undo
5 5
 
6 6
 return [
7 7
 
8
-	// A
9
-	'accueil_site' => 'Akey sit la', # MODIF
10
-	'articles' => 'Atik yo',
11
-	'articles_auteur' => 'Tout atik lotè a',
12
-	'articles_populaires' => 'Atik yo ki plis popilè',
13
-	'articles_rubrique' => 'Atik yo nan ribrik sa-a',
14
-	'aucun_article' => 'Gen pa oken atik sou ladrès la',
15
-	'aucun_auteur' => 'Gen pa oken lotè sou ladrès la',
16
-	'aucun_site' => 'Gen pa oken sit sou ladrès la',
17
-	'aucune_breve' => 'Gen pa oken tinouvèl sou ladrès la',
18
-	'aucune_rubrique' => 'Gen pa oken ribrik sou ladrès la',
19
-	'autres_breves' => 'Lòt tinouvèl yo',
20
-	'autres_groupes_mots_clefs' => 'Lòt gwoup mokle yo',
21
-	'autres_sites' => 'Lòt sit yo',
8
+    // A
9
+    'accueil_site' => 'Akey sit la', # MODIF
10
+    'articles' => 'Atik yo',
11
+    'articles_auteur' => 'Tout atik lotè a',
12
+    'articles_populaires' => 'Atik yo ki plis popilè',
13
+    'articles_rubrique' => 'Atik yo nan ribrik sa-a',
14
+    'aucun_article' => 'Gen pa oken atik sou ladrès la',
15
+    'aucun_auteur' => 'Gen pa oken lotè sou ladrès la',
16
+    'aucun_site' => 'Gen pa oken sit sou ladrès la',
17
+    'aucune_breve' => 'Gen pa oken tinouvèl sou ladrès la',
18
+    'aucune_rubrique' => 'Gen pa oken ribrik sou ladrès la',
19
+    'autres_breves' => 'Lòt tinouvèl yo',
20
+    'autres_groupes_mots_clefs' => 'Lòt gwoup mokle yo',
21
+    'autres_sites' => 'Lòt sit yo',
22 22
 
23
-	// B
24
-	'bonjour' => 'Bonjou',
23
+    // B
24
+    'bonjour' => 'Bonjou',
25 25
 
26
-	// C
27
-	'commenter_site' => 'Lès yon komantè sou sit la',
26
+    // C
27
+    'commenter_site' => 'Lès yon komantè sou sit la',
28 28
 
29
-	// D
30
-	'date' => 'Dat',
31
-	'dernier_ajout' => 'Dènye bagay ki ajoute',
32
-	'dernieres_breves' => 'Dènye tinouvèl yo',
33
-	'derniers_articles' => 'Dènye atik yo',
34
-	'derniers_commentaires' => 'Dènye komantè yo',
35
-	'derniers_messages_forum' => 'Dènye mesaj yo ki te piblye nan fowom yo',
29
+    // D
30
+    'date' => 'Dat',
31
+    'dernier_ajout' => 'Dènye bagay ki ajoute',
32
+    'dernieres_breves' => 'Dènye tinouvèl yo',
33
+    'derniers_articles' => 'Dènye atik yo',
34
+    'derniers_commentaires' => 'Dènye komantè yo',
35
+    'derniers_messages_forum' => 'Dènye mesaj yo ki te piblye nan fowom yo',
36 36
 
37
-	// E
38
-	'edition_mode_texte' => 'Ledisyon modtèks pou',
39
-	'en_reponse' => 'Pou réponn a :',
40
-	'en_resume' => 'Nan kèk mo',
41
-	'envoyer_message' => 'Voye yon mesaj',
42
-	'espace_prive' => 'Espas privé',
37
+    // E
38
+    'edition_mode_texte' => 'Ledisyon modtèks pou',
39
+    'en_reponse' => 'Pou réponn a :',
40
+    'en_resume' => 'Nan kèk mo',
41
+    'envoyer_message' => 'Voye yon mesaj',
42
+    'espace_prive' => 'Espas privé',
43 43
 
44
-	// H
45
-	'hierarchie_site' => 'Estrikti sit sa-a',
44
+    // H
45
+    'hierarchie_site' => 'Estrikti sit sa-a',
46 46
 
47
-	// J
48
-	'jours' => 'jou yo',
47
+    // J
48
+    'jours' => 'jou yo',
49 49
 
50
-	// M
51
-	'meme_auteur' => 'Mèm lotè ki ekri ankò',
52
-	'meme_rubrique' => 'Andan mèm ribrik',
53
-	'memes_auteurs' => 'Mèm lotè yo ki ekri ankò',
54
-	'message' => 'Mesaj',
55
-	'messages_forum' => 'Mesaj yo nan fowom ', # MODIF
56
-	'messages_recents' => 'Mesaj yo nan fowom ki plis resan',
57
-	'mots_clefs' => 'Mokle yo',
58
-	'mots_clefs_meme_groupe' => 'Mokle yo nan mèm gwoup',
50
+    // M
51
+    'meme_auteur' => 'Mèm lotè ki ekri ankò',
52
+    'meme_rubrique' => 'Andan mèm ribrik',
53
+    'memes_auteurs' => 'Mèm lotè yo ki ekri ankò',
54
+    'message' => 'Mesaj',
55
+    'messages_forum' => 'Mesaj yo nan fowom ', # MODIF
56
+    'messages_recents' => 'Mesaj yo nan fowom ki plis resan',
57
+    'mots_clefs' => 'Mokle yo',
58
+    'mots_clefs_meme_groupe' => 'Mokle yo nan mèm gwoup',
59 59
 
60
-	// N
61
-	'navigation' => 'Toune-vire',
62
-	'nom' => 'Kouman rele',
63
-	'nouveautes' => 'Nouvèlté yo',
64
-	'nouveautes_web' => 'Kisa nouvo sou wèb la',
65
-	'nouveaux_articles' => 'Nouvo atik yo',
66
-	'nouvelles_breves' => 'Nouvo tinouvèl yo',
60
+    // N
61
+    'navigation' => 'Toune-vire',
62
+    'nom' => 'Kouman rele',
63
+    'nouveautes' => 'Nouvèlté yo',
64
+    'nouveautes_web' => 'Kisa nouvo sou wèb la',
65
+    'nouveaux_articles' => 'Nouvo atik yo',
66
+    'nouvelles_breves' => 'Nouvo tinouvèl yo',
67 67
 
68
-	// P
69
-	'page_precedente' => 'paj dèyè',
70
-	'page_suivante' => 'paj swivan',
71
-	'par_auteur' => 'pa',
72
-	'participer_site' => 'Ou se kapab soutni vi sit la ek pwopoze ou pwop atik aw. Pou soutni kon sa enskri a w isit anba. Ou ke gen touswit ou kod laksè nan espas privé sit la.',
73
-	'plan_site' => 'Kat sit la',
74
-	'popularite' => 'Kouman se popilè',
75
-	'poster_message' => 'Voye yon mesaj',
76
-	'proposer_site' => 'Ou se kapab pwopoze yon sit pou ajoute nan ribrik la :',
68
+    // P
69
+    'page_precedente' => 'paj dèyè',
70
+    'page_suivante' => 'paj swivan',
71
+    'par_auteur' => 'pa',
72
+    'participer_site' => 'Ou se kapab soutni vi sit la ek pwopoze ou pwop atik aw. Pou soutni kon sa enskri a w isit anba. Ou ke gen touswit ou kod laksè nan espas privé sit la.',
73
+    'plan_site' => 'Kat sit la',
74
+    'popularite' => 'Kouman se popilè',
75
+    'poster_message' => 'Voye yon mesaj',
76
+    'proposer_site' => 'Ou se kapab pwopoze yon sit pou ajoute nan ribrik la :',
77 77
 
78
-	// R
79
-	'repondre_article' => 'Reponn sou atik la',
80
-	'repondre_breve' => 'Reponn sou tinouvèl la',
81
-	'resultats_recherche' => 'Rezilta pou ou chèche',
82
-	'retour_debut_forums' => 'Tounyen nan koumansman fowom sa-yo',
83
-	'rubrique' => 'Ribrik',
84
-	'rubriques' => 'Ribrik yo',
78
+    // R
79
+    'repondre_article' => 'Reponn sou atik la',
80
+    'repondre_breve' => 'Reponn sou tinouvèl la',
81
+    'resultats_recherche' => 'Rezilta pou ou chèche',
82
+    'retour_debut_forums' => 'Tounyen nan koumansman fowom sa-yo',
83
+    'rubrique' => 'Ribrik',
84
+    'rubriques' => 'Ribrik yo',
85 85
 
86
-	// S
87
-	'signatures_petition' => 'Siyati yo',
88
-	'site_realise_avec_spip' => 'Sit la  se sit ki te fè ak SPIP',
89
-	'sites_web' => 'Sitwèb yo',
90
-	'sous_rubriques' => 'Souribrik yo',
91
-	'suite' => 'swit',
92
-	'sur_web' => 'Sou wèb',
93
-	'syndiquer_rubrique' => 'Sindike ribrik la',
94
-	'syndiquer_site' => 'Sindike tout sit la mèm',
86
+    // S
87
+    'signatures_petition' => 'Siyati yo',
88
+    'site_realise_avec_spip' => 'Sit la  se sit ki te fè ak SPIP',
89
+    'sites_web' => 'Sitwèb yo',
90
+    'sous_rubriques' => 'Souribrik yo',
91
+    'suite' => 'swit',
92
+    'sur_web' => 'Sou wèb',
93
+    'syndiquer_rubrique' => 'Sindike ribrik la',
94
+    'syndiquer_site' => 'Sindike tout sit la mèm',
95 95
 
96
-	// T
97
-	'texte_lettre_information' => 'Tala lèt-enfòmasyon sit la ',
98
-	'texte_lettre_information_2' => 'Lèt la ka ramase tout atik ek tinouvèl yo  te pibliye depi', # MODIF
96
+    // T
97
+    'texte_lettre_information' => 'Tala lèt-enfòmasyon sit la ',
98
+    'texte_lettre_information_2' => 'Lèt la ka ramase tout atik ek tinouvèl yo  te pibliye depi', # MODIF
99 99
 
100
-	// V
101
-	'ver_imprimer' => 'Vèsyon pou enprime',
102
-	'voir_en_ligne' => 'Gad an liy',
103
-	'voir_squelette' => 'kou je sou léskelèt paj-la',
100
+    // V
101
+    'ver_imprimer' => 'Vèsyon pou enprime',
102
+    'voir_en_ligne' => 'Gad an liy',
103
+    'voir_squelette' => 'kou je sou léskelèt paj-la',
104 104
 ];
Please login to merge, or discard this patch.