Completed
Push — master ( 37aa61...be7234 )
by cam
01:24
created
ecrire/xml/indenter.php 1 patch
Indentation   +44 added lines, -44 removed lines patch added patch discarded remove patch
@@ -10,54 +10,54 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 class IndenteurXML {
17
-	public function debutElement($phraseur, $name, $attrs) {
18
-		xml_debutElement($this, $name, $attrs);
19
-	}
20
-
21
-	public function finElement($phraseur, $name) {
22
-		xml_finElement($this, $name);
23
-	}
24
-
25
-	public function textElement($phraseur, $data) {
26
-		xml_textElement($this, $data);
27
-	}
28
-
29
-	public function piElement($phraseur, $target, $data) {
30
-		xml_PiElement($this, $target, $data);
31
-	}
32
-
33
-	public function defaultElement($phraseur, $data) {
34
-		xml_defaultElement($this, $data);
35
-	}
36
-
37
-	public function phraserTout($phraseur, $data) {
38
-		xml_parsestring($this, $data);
39
-	}
40
-
41
-	public $depth = '';
42
-	public $res = '';
43
-	public $err = [];
44
-	public $contenu = [];
45
-	public $ouvrant = [];
46
-	public $reperes = [];
47
-	public $entete = '';
48
-	public $page = '';
49
-	public $dtc = null;
50
-	public $sax = null;
17
+    public function debutElement($phraseur, $name, $attrs) {
18
+        xml_debutElement($this, $name, $attrs);
19
+    }
20
+
21
+    public function finElement($phraseur, $name) {
22
+        xml_finElement($this, $name);
23
+    }
24
+
25
+    public function textElement($phraseur, $data) {
26
+        xml_textElement($this, $data);
27
+    }
28
+
29
+    public function piElement($phraseur, $target, $data) {
30
+        xml_PiElement($this, $target, $data);
31
+    }
32
+
33
+    public function defaultElement($phraseur, $data) {
34
+        xml_defaultElement($this, $data);
35
+    }
36
+
37
+    public function phraserTout($phraseur, $data) {
38
+        xml_parsestring($this, $data);
39
+    }
40
+
41
+    public $depth = '';
42
+    public $res = '';
43
+    public $err = [];
44
+    public $contenu = [];
45
+    public $ouvrant = [];
46
+    public $reperes = [];
47
+    public $entete = '';
48
+    public $page = '';
49
+    public $dtc = null;
50
+    public $sax = null;
51 51
 }
52 52
 
53 53
 function xml_indenter_dist($page, $apply = false) {
54
-	$sax = charger_fonction('sax', 'xml');
55
-	$f = new IndenteurXML();
56
-	$sax($page, $apply, $f);
57
-	if (!$f->err) {
58
-		return $f->entete . $f->res;
59
-	}
60
-	spip_log('indentation impossible ' . (is_countable($f->err) ? count($f->err) : 0) . ' erreurs de validation');
61
-
62
-	return $f->entete . $f->page;
54
+    $sax = charger_fonction('sax', 'xml');
55
+    $f = new IndenteurXML();
56
+    $sax($page, $apply, $f);
57
+    if (!$f->err) {
58
+        return $f->entete . $f->res;
59
+    }
60
+    spip_log('indentation impossible ' . (is_countable($f->err) ? count($f->err) : 0) . ' erreurs de validation');
61
+
62
+    return $f->entete . $f->page;
63 63
 }
Please login to merge, or discard this patch.
ecrire/req/sqlite3.php 1 patch
Indentation   +8 added lines, -8 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
 
@@ -20,18 +20,18 @@  discard block
 block discarded – undo
20 20
 
21 21
 
22 22
 function req_sqlite3_dist($addr, $port, $login, #[\SensitiveParameter] $pass, $db = '', $prefixe = '') {
23
-	return req_sqlite_dist($addr, $port, $login, $pass, $db, $prefixe, $sqlite_version = 3);
23
+    return req_sqlite_dist($addr, $port, $login, $pass, $db, $prefixe, $sqlite_version = 3);
24 24
 }
25 25
 
26 26
 
27 27
 function spip_sqlite3_constantes() {
28
-	if (!defined('SPIP_SQLITE3_ASSOC')) {
29
-		define('SPIP_SQLITE3_ASSOC', PDO::FETCH_ASSOC);
30
-		define('SPIP_SQLITE3_NUM', PDO::FETCH_NUM);
31
-		define('SPIP_SQLITE3_BOTH', PDO::FETCH_BOTH);
32
-	}
28
+    if (!defined('SPIP_SQLITE3_ASSOC')) {
29
+        define('SPIP_SQLITE3_ASSOC', PDO::FETCH_ASSOC);
30
+        define('SPIP_SQLITE3_NUM', PDO::FETCH_NUM);
31
+        define('SPIP_SQLITE3_BOTH', PDO::FETCH_BOTH);
32
+    }
33 33
 }
34 34
 
35 35
 function spip_versions_sqlite3() {
36
-	return _sqlite_charger_version(3) ? 3 : false;
36
+    return _sqlite_charger_version(3) ? 3 : false;
37 37
 }
Please login to merge, or discard this patch.
ecrire/req/mysql.php 1 patch
Indentation   +884 added lines, -884 removed lines patch added patch discarded remove patch
@@ -19,11 +19,11 @@  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
 if (!defined('_MYSQL_NOPLANES')) {
26
-	define('_MYSQL_NOPLANES', true);
26
+    define('_MYSQL_NOPLANES', true);
27 27
 }
28 28
 
29 29
 /**
@@ -40,112 +40,112 @@  discard block
 block discarded – undo
40 40
  *     - tableau décrivant la connexion sinon
41 41
  */
42 42
 function req_mysql_dist($host, $port, $login, #[\SensitiveParameter] $pass, $db = '', $prefixe = '') {
43
-	if (!extension_loaded(\mysqli::class)) {
44
-		return false;
45
-	}
46
-
47
-	// si port est fourni mais pas host, c'est un socket -> compat avec vieille syntaxe de mysql_connect() et anciens fichiers connect.php
48
-	try {
49
-		if (
50
-			$port and !is_numeric($socket = $port)
51
-			and (!$host or $host === 'localhost')
52
-		) {
53
-			$link = @mysqli_connect($host, $login, $pass, '', null, $socket);
54
-		} elseif ($port) {
55
-			$link = @mysqli_connect($host, $login, $pass, '', $port);
56
-		} else {
57
-			$link = @mysqli_connect($host, $login, $pass);
58
-		}
59
-	} catch (\mysqli_sql_exception $e) {
60
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
61
-		$link = false;
62
-	}
63
-
64
-	if (!$link) {
65
-		spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
66
-
67
-		return false;
68
-	}
69
-	$last = '';
70
-	if (!$db) {
71
-		$ok = $link;
72
-		$db = 'spip';
73
-	} else {
74
-		$ok = mysqli_select_db($link, $db);
75
-		if (
76
-			defined('_MYSQL_SET_SQL_MODE')
77
-			or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
78
-		) {
79
-			mysqli_query($link, $last = "set sql_mode=''");
80
-		}
81
-	}
82
-
83
-	spip_log(
84
-		"Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
85
-		_LOG_DEBUG
86
-	);
87
-
88
-	return !$ok ? false : [
89
-		'db' => $db,
90
-		'last' => $last,
91
-		'prefixe' => $prefixe ?: $db,
92
-		'link' => $link,
93
-		'total_requetes' => 0,
94
-	];
43
+    if (!extension_loaded(\mysqli::class)) {
44
+        return false;
45
+    }
46
+
47
+    // si port est fourni mais pas host, c'est un socket -> compat avec vieille syntaxe de mysql_connect() et anciens fichiers connect.php
48
+    try {
49
+        if (
50
+            $port and !is_numeric($socket = $port)
51
+            and (!$host or $host === 'localhost')
52
+        ) {
53
+            $link = @mysqli_connect($host, $login, $pass, '', null, $socket);
54
+        } elseif ($port) {
55
+            $link = @mysqli_connect($host, $login, $pass, '', $port);
56
+        } else {
57
+            $link = @mysqli_connect($host, $login, $pass);
58
+        }
59
+    } catch (\mysqli_sql_exception $e) {
60
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
61
+        $link = false;
62
+    }
63
+
64
+    if (!$link) {
65
+        spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
66
+
67
+        return false;
68
+    }
69
+    $last = '';
70
+    if (!$db) {
71
+        $ok = $link;
72
+        $db = 'spip';
73
+    } else {
74
+        $ok = mysqli_select_db($link, $db);
75
+        if (
76
+            defined('_MYSQL_SET_SQL_MODE')
77
+            or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
78
+        ) {
79
+            mysqli_query($link, $last = "set sql_mode=''");
80
+        }
81
+    }
82
+
83
+    spip_log(
84
+        "Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
85
+        _LOG_DEBUG
86
+    );
87
+
88
+    return !$ok ? false : [
89
+        'db' => $db,
90
+        'last' => $last,
91
+        'prefixe' => $prefixe ?: $db,
92
+        'link' => $link,
93
+        'total_requetes' => 0,
94
+    ];
95 95
 }
96 96
 
97 97
 
98 98
 $GLOBALS['spip_mysql_functions_1'] = [
99
-	'alter' => 'spip_mysql_alter',
100
-	'count' => 'spip_mysql_count',
101
-	'countsel' => 'spip_mysql_countsel',
102
-	'create' => 'spip_mysql_create',
103
-	'create_base' => 'spip_mysql_create_base',
104
-	'create_view' => 'spip_mysql_create_view',
105
-	'date_proche' => 'spip_mysql_date_proche',
106
-	'delete' => 'spip_mysql_delete',
107
-	'drop_table' => 'spip_mysql_drop_table',
108
-	'drop_view' => 'spip_mysql_drop_view',
109
-	'errno' => 'spip_mysql_errno',
110
-	'error' => 'spip_mysql_error',
111
-	'explain' => 'spip_mysql_explain',
112
-	'fetch' => 'spip_mysql_fetch',
113
-	'seek' => 'spip_mysql_seek',
114
-	'free' => 'spip_mysql_free',
115
-	'hex' => 'spip_mysql_hex',
116
-	'in' => 'spip_mysql_in',
117
-	'insert' => 'spip_mysql_insert',
118
-	'insertq' => 'spip_mysql_insertq',
119
-	'insertq_multi' => 'spip_mysql_insertq_multi',
120
-	'listdbs' => 'spip_mysql_listdbs',
121
-	'multi' => 'spip_mysql_multi',
122
-	'optimize' => 'spip_mysql_optimize',
123
-	'query' => 'spip_mysql_query',
124
-	'quote' => 'spip_mysql_quote',
125
-	'replace' => 'spip_mysql_replace',
126
-	'replace_multi' => 'spip_mysql_replace_multi',
127
-	'repair' => 'spip_mysql_repair',
128
-	'select' => 'spip_mysql_select',
129
-	'selectdb' => 'spip_mysql_selectdb',
130
-	'set_charset' => 'spip_mysql_set_charset',
131
-	'get_charset' => 'spip_mysql_get_charset',
132
-	'showbase' => 'spip_mysql_showbase',
133
-	'showtable' => 'spip_mysql_showtable',
134
-	'table_exists' => 'spip_mysql_table_exists',
135
-	'update' => 'spip_mysql_update',
136
-	'updateq' => 'spip_mysql_updateq',
137
-
138
-	// association de chaque nom http d'un charset aux couples MySQL
139
-	'charsets' => [
140
-		'cp1250' => ['charset' => 'cp1250', 'collation' => 'cp1250_general_ci'],
141
-		'cp1251' => ['charset' => 'cp1251', 'collation' => 'cp1251_general_ci'],
142
-		'cp1256' => ['charset' => 'cp1256', 'collation' => 'cp1256_general_ci'],
143
-		'iso-8859-1' => ['charset' => 'latin1', 'collation' => 'latin1_swedish_ci'],
99
+    'alter' => 'spip_mysql_alter',
100
+    'count' => 'spip_mysql_count',
101
+    'countsel' => 'spip_mysql_countsel',
102
+    'create' => 'spip_mysql_create',
103
+    'create_base' => 'spip_mysql_create_base',
104
+    'create_view' => 'spip_mysql_create_view',
105
+    'date_proche' => 'spip_mysql_date_proche',
106
+    'delete' => 'spip_mysql_delete',
107
+    'drop_table' => 'spip_mysql_drop_table',
108
+    'drop_view' => 'spip_mysql_drop_view',
109
+    'errno' => 'spip_mysql_errno',
110
+    'error' => 'spip_mysql_error',
111
+    'explain' => 'spip_mysql_explain',
112
+    'fetch' => 'spip_mysql_fetch',
113
+    'seek' => 'spip_mysql_seek',
114
+    'free' => 'spip_mysql_free',
115
+    'hex' => 'spip_mysql_hex',
116
+    'in' => 'spip_mysql_in',
117
+    'insert' => 'spip_mysql_insert',
118
+    'insertq' => 'spip_mysql_insertq',
119
+    'insertq_multi' => 'spip_mysql_insertq_multi',
120
+    'listdbs' => 'spip_mysql_listdbs',
121
+    'multi' => 'spip_mysql_multi',
122
+    'optimize' => 'spip_mysql_optimize',
123
+    'query' => 'spip_mysql_query',
124
+    'quote' => 'spip_mysql_quote',
125
+    'replace' => 'spip_mysql_replace',
126
+    'replace_multi' => 'spip_mysql_replace_multi',
127
+    'repair' => 'spip_mysql_repair',
128
+    'select' => 'spip_mysql_select',
129
+    'selectdb' => 'spip_mysql_selectdb',
130
+    'set_charset' => 'spip_mysql_set_charset',
131
+    'get_charset' => 'spip_mysql_get_charset',
132
+    'showbase' => 'spip_mysql_showbase',
133
+    'showtable' => 'spip_mysql_showtable',
134
+    'table_exists' => 'spip_mysql_table_exists',
135
+    'update' => 'spip_mysql_update',
136
+    'updateq' => 'spip_mysql_updateq',
137
+
138
+    // association de chaque nom http d'un charset aux couples MySQL
139
+    'charsets' => [
140
+        'cp1250' => ['charset' => 'cp1250', 'collation' => 'cp1250_general_ci'],
141
+        'cp1251' => ['charset' => 'cp1251', 'collation' => 'cp1251_general_ci'],
142
+        'cp1256' => ['charset' => 'cp1256', 'collation' => 'cp1256_general_ci'],
143
+        'iso-8859-1' => ['charset' => 'latin1', 'collation' => 'latin1_swedish_ci'],
144 144
 //'iso-8859-6'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
145
-		'iso-8859-9' => ['charset' => 'latin5', 'collation' => 'latin5_turkish_ci'],
145
+        'iso-8859-9' => ['charset' => 'latin5', 'collation' => 'latin5_turkish_ci'],
146 146
 //'iso-8859-15'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
147
-		'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci']
148
-	]
147
+        'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci']
148
+    ]
149 149
 ];
150 150
 
151 151
 
@@ -156,9 +156,9 @@  discard block
 block discarded – undo
156 156
  * @return Object Information de connexion pour mysqli
157 157
  */
158 158
 function _mysql_link($serveur = '') {
159
-	$link = &$GLOBALS['connexions'][$serveur ?: 0]['link'];
159
+    $link = &$GLOBALS['connexions'][$serveur ?: 0]['link'];
160 160
 
161
-	return $link;
161
+    return $link;
162 162
 }
163 163
 
164 164
 
@@ -171,10 +171,10 @@  discard block
 block discarded – undo
171 171
  * @return mysqli_result|bool Jeu de résultats pour fetch()
172 172
  */
173 173
 function spip_mysql_set_charset($charset, $serveur = '', $requeter = true) {
174
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
175
-	spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
174
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
175
+    spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
176 176
 
177
-	return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
177
+    return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
178 178
 }
179 179
 
180 180
 
@@ -187,11 +187,11 @@  discard block
 block discarded – undo
187 187
  * @return array Description du charset (son nom est dans 'charset')
188 188
  */
189 189
 function spip_mysql_get_charset($charset = [], $serveur = '', $requeter = true) {
190
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
191
-	$connexion['last'] = $c = 'SHOW CHARACTER SET'
192
-		. (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
190
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
191
+    $connexion['last'] = $c = 'SHOW CHARACTER SET'
192
+        . (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
193 193
 
194
-	return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
194
+    return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
195 195
 }
196 196
 
197 197
 /**
@@ -207,80 +207,80 @@  discard block
 block discarded – undo
207 207
  */
208 208
 function spip_mysql_query($query, $serveur = '', $requeter = true) {
209 209
 
210
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
211
-	$prefixe = $connexion['prefixe'];
212
-	$link = $connexion['link'];
213
-	$db = $connexion['db'];
214
-
215
-	$query = _mysql_traite_query($query, $db, $prefixe);
216
-
217
-	// renvoyer la requete inerte si demandee
218
-	if (!$requeter) {
219
-		return $query;
220
-	}
221
-
222
-	if (isset($_GET['var_profile']) or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
223
-		include_spip('public/tracer');
224
-		$t = trace_query_start();
225
-	} else {
226
-		$t = 0;
227
-	}
228
-
229
-	$connexion['last'] = $query;
230
-	$connexion['total_requetes']++;
231
-
232
-	// ajouter un debug utile dans log/mysql-slow.log ?
233
-	$debug = '';
234
-	if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
235
-		if (isset($GLOBALS['debug']['aucasou'])) {
236
-			[, $id, , $infos] = $GLOBALS['debug']['aucasou'];
237
-			$debug .= "BOUCLE$id @ " . ($infos[0] ?? '') . ' | ';
238
-		}
239
-		if (isset($_SERVER['REQUEST_URI'])) {
240
-			$debug .= $_SERVER['REQUEST_URI'];
241
-		}
242
-		if (!empty($GLOBALS['ip'])) {
243
-			$debug .= ' + ' . $GLOBALS['ip'];
244
-		}
245
-		$debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
246
-	}
247
-	try {
248
-		$r = mysqli_query($link, $query . $debug);
249
-	} catch (\mysqli_sql_exception $e) {
250
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
251
-		$r = false;
252
-		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
253
-		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
254
-	}
255
-
256
-	//Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
257
-	if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
258
-		if ($e == 2006) { //Si Gone Away on relance une connexion vierge
259
-			//Fermer la connexion defaillante
260
-			mysqli_close($connexion['link']);
261
-			unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
262
-			//Relancer une connexion vierge
263
-			spip_connect($serveur);
264
-			$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
265
-			$link = $connexion['link'];
266
-			//On retente au cas où
267
-			try {
268
-				$r = mysqli_query($link, $query . $debug);
269
-			} catch (\mysqli_sql_exception $e) {
270
-				spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
271
-				$r = false;
272
-				// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
273
-				// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
274
-			}
275
-		}
276
-	}
277
-
278
-	// Log de l'erreur eventuelle
279
-	if ($e = spip_mysql_errno($serveur)) {
280
-		// et du fautif
281
-		$e .= spip_mysql_error($query, $serveur);
282
-	}
283
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
210
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
211
+    $prefixe = $connexion['prefixe'];
212
+    $link = $connexion['link'];
213
+    $db = $connexion['db'];
214
+
215
+    $query = _mysql_traite_query($query, $db, $prefixe);
216
+
217
+    // renvoyer la requete inerte si demandee
218
+    if (!$requeter) {
219
+        return $query;
220
+    }
221
+
222
+    if (isset($_GET['var_profile']) or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
223
+        include_spip('public/tracer');
224
+        $t = trace_query_start();
225
+    } else {
226
+        $t = 0;
227
+    }
228
+
229
+    $connexion['last'] = $query;
230
+    $connexion['total_requetes']++;
231
+
232
+    // ajouter un debug utile dans log/mysql-slow.log ?
233
+    $debug = '';
234
+    if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
235
+        if (isset($GLOBALS['debug']['aucasou'])) {
236
+            [, $id, , $infos] = $GLOBALS['debug']['aucasou'];
237
+            $debug .= "BOUCLE$id @ " . ($infos[0] ?? '') . ' | ';
238
+        }
239
+        if (isset($_SERVER['REQUEST_URI'])) {
240
+            $debug .= $_SERVER['REQUEST_URI'];
241
+        }
242
+        if (!empty($GLOBALS['ip'])) {
243
+            $debug .= ' + ' . $GLOBALS['ip'];
244
+        }
245
+        $debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
246
+    }
247
+    try {
248
+        $r = mysqli_query($link, $query . $debug);
249
+    } catch (\mysqli_sql_exception $e) {
250
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
251
+        $r = false;
252
+        // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
253
+        // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
254
+    }
255
+
256
+    //Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
257
+    if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
258
+        if ($e == 2006) { //Si Gone Away on relance une connexion vierge
259
+            //Fermer la connexion defaillante
260
+            mysqli_close($connexion['link']);
261
+            unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
262
+            //Relancer une connexion vierge
263
+            spip_connect($serveur);
264
+            $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
265
+            $link = $connexion['link'];
266
+            //On retente au cas où
267
+            try {
268
+                $r = mysqli_query($link, $query . $debug);
269
+            } catch (\mysqli_sql_exception $e) {
270
+                spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
271
+                $r = false;
272
+                // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
273
+                // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
274
+            }
275
+        }
276
+    }
277
+
278
+    // Log de l'erreur eventuelle
279
+    if ($e = spip_mysql_errno($serveur)) {
280
+        // et du fautif
281
+        $e .= spip_mysql_error($query, $serveur);
282
+    }
283
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
284 284
 }
285 285
 
286 286
 /**
@@ -295,12 +295,12 @@  discard block
 block discarded – undo
295 295
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
296 296
  */
297 297
 function spip_mysql_alter($query, $serveur = '', $requeter = true) {
298
-	// ici on supprime les ` entourant le nom de table pour permettre
299
-	// la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
300
-	// d'utiliser ceux-ci, copie-colle de phpmyadmin
301
-	$query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
298
+    // ici on supprime les ` entourant le nom de table pour permettre
299
+    // la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
300
+    // d'utiliser ceux-ci, copie-colle de phpmyadmin
301
+    $query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
302 302
 
303
-	return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
303
+    return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
304 304
 }
305 305
 
306 306
 
@@ -313,9 +313,9 @@  discard block
 block discarded – undo
313 313
  * @return bool            Toujours true
314 314
  */
315 315
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
316
-	spip_mysql_query('OPTIMIZE TABLE ' . $table);
316
+    spip_mysql_query('OPTIMIZE TABLE ' . $table);
317 317
 
318
-	return true;
318
+    return true;
319 319
 }
320 320
 
321 321
 
@@ -328,18 +328,18 @@  discard block
 block discarded – undo
328 328
  * @return array           Tableau de l'explication
329 329
  */
330 330
 function spip_mysql_explain($query, $serveur = '', $requeter = true) {
331
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
332
-		return [];
333
-	}
334
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
335
-	$prefixe = $connexion['prefixe'];
336
-	$link = $connexion['link'];
337
-	$db = $connexion['db'];
338
-
339
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
340
-	$r = mysqli_query($link, $query);
341
-
342
-	return spip_mysql_fetch($r, null, $serveur);
331
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
332
+        return [];
333
+    }
334
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
335
+    $prefixe = $connexion['prefixe'];
336
+    $link = $connexion['link'];
337
+    $db = $connexion['db'];
338
+
339
+    $query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
340
+    $r = mysqli_query($link, $query);
341
+
342
+    return spip_mysql_fetch($r, null, $serveur);
343 343
 }
344 344
 
345 345
 
@@ -368,35 +368,35 @@  discard block
 block discarded – undo
368 368
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
369 369
  */
370 370
 function spip_mysql_select(
371
-	$select,
372
-	$from,
373
-	$where = '',
374
-	$groupby = '',
375
-	$orderby = '',
376
-	$limit = '',
377
-	$having = '',
378
-	$serveur = '',
379
-	$requeter = true
371
+    $select,
372
+    $from,
373
+    $where = '',
374
+    $groupby = '',
375
+    $orderby = '',
376
+    $limit = '',
377
+    $having = '',
378
+    $serveur = '',
379
+    $requeter = true
380 380
 ) {
381 381
 
382 382
 
383
-	$from = (!is_array($from) ? $from : spip_mysql_select_as($from));
384
-	$query =
385
-		calculer_mysql_expression('SELECT', $select, ', ')
386
-		. calculer_mysql_expression('FROM', $from, ', ')
387
-		. calculer_mysql_expression('WHERE', $where)
388
-		. calculer_mysql_expression('GROUP BY', $groupby, ',')
389
-		. calculer_mysql_expression('HAVING', $having)
390
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
391
-		. ($limit ? "\nLIMIT $limit" : '');
383
+    $from = (!is_array($from) ? $from : spip_mysql_select_as($from));
384
+    $query =
385
+        calculer_mysql_expression('SELECT', $select, ', ')
386
+        . calculer_mysql_expression('FROM', $from, ', ')
387
+        . calculer_mysql_expression('WHERE', $where)
388
+        . calculer_mysql_expression('GROUP BY', $groupby, ',')
389
+        . calculer_mysql_expression('HAVING', $having)
390
+        . ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
391
+        . ($limit ? "\nLIMIT $limit" : '');
392 392
 
393
-	// renvoyer la requete inerte si demandee
394
-	if ($requeter === false) {
395
-		return $query;
396
-	}
397
-	$r = spip_mysql_query($query, $serveur, $requeter);
393
+    // renvoyer la requete inerte si demandee
394
+    if ($requeter === false) {
395
+        return $query;
396
+    }
397
+    $r = spip_mysql_query($query, $serveur, $requeter);
398 398
 
399
-	return $r ?: $query;
399
+    return $r ?: $query;
400 400
 }
401 401
 
402 402
 
@@ -413,7 +413,7 @@  discard block
 block discarded – undo
413 413
  * @return string texte du orderby préparé
414 414
  */
415 415
 function spip_mysql_order($orderby) {
416
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
416
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
417 417
 }
418 418
 
419 419
 
@@ -436,26 +436,26 @@  discard block
 block discarded – undo
436 436
  *     Contrainte pour clause WHERE
437 437
  */
438 438
 function calculer_mysql_where($v) {
439
-	if (!is_array($v)) {
440
-		return $v;
441
-	}
442
-
443
-	$op = array_shift($v);
444
-	if (!($n = count($v))) {
445
-		return $op;
446
-	} else {
447
-		$arg = calculer_mysql_where(array_shift($v));
448
-		if ($n == 1) {
449
-			return "$op($arg)";
450
-		} else {
451
-			$arg2 = calculer_mysql_where(array_shift($v));
452
-			if ($n == 2) {
453
-				return "($arg $op $arg2)";
454
-			} else {
455
-				return "($arg $op ($arg2) : $v[0])";
456
-			}
457
-		}
458
-	}
439
+    if (!is_array($v)) {
440
+        return $v;
441
+    }
442
+
443
+    $op = array_shift($v);
444
+    if (!($n = count($v))) {
445
+        return $op;
446
+    } else {
447
+        $arg = calculer_mysql_where(array_shift($v));
448
+        if ($n == 1) {
449
+            return "$op($arg)";
450
+        } else {
451
+            $arg2 = calculer_mysql_where(array_shift($v));
452
+            if ($n == 2) {
453
+                return "($arg $op $arg2)";
454
+            } else {
455
+                return "($arg $op ($arg2) : $v[0])";
456
+            }
457
+        }
458
+    }
459 459
 }
460 460
 
461 461
 /**
@@ -470,21 +470,21 @@  discard block
 block discarded – undo
470 470
  * @return string            texte de l'expression, une partie donc, du texte la requête.
471 471
  */
472 472
 function calculer_mysql_expression($expression, $v, $join = 'AND') {
473
-	if (empty($v)) {
474
-		return '';
475
-	}
476
-
477
-	$exp = "\n$expression ";
478
-
479
-	if (!is_array($v)) {
480
-		return $exp . $v;
481
-	} else {
482
-		if (strtoupper($join) === 'AND') {
483
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
484
-		} else {
485
-			return $exp . join($join, $v);
486
-		}
487
-	}
473
+    if (empty($v)) {
474
+        return '';
475
+    }
476
+
477
+    $exp = "\n$expression ";
478
+
479
+    if (!is_array($v)) {
480
+        return $exp . $v;
481
+    } else {
482
+        if (strtoupper($join) === 'AND') {
483
+            return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
484
+        } else {
485
+            return $exp . join($join, $v);
486
+        }
487
+    }
488 488
 }
489 489
 
490 490
 
@@ -495,26 +495,26 @@  discard block
 block discarded – undo
495 495
  * @return string Sélection de colonnes pour une clause SELECT
496 496
  */
497 497
 function spip_mysql_select_as($args) {
498
-	$res = '';
499
-	foreach ($args as $k => $v) {
500
-		if (substr($k, -1) == '@') {
501
-			// c'est une jointure qui se refere au from precedent
502
-			// pas de virgule
503
-			$res .= '  ' . $v;
504
-		} else {
505
-			if (!is_numeric($k)) {
506
-				$p = strpos($v, ' ');
507
-				if ($p) {
508
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
509
-				} else {
510
-					$v .= " AS `$k`";
511
-				}
512
-			}
513
-			$res .= ', ' . $v;
514
-		}
515
-	}
516
-
517
-	return substr($res, 2);
498
+    $res = '';
499
+    foreach ($args as $k => $v) {
500
+        if (substr($k, -1) == '@') {
501
+            // c'est une jointure qui se refere au from precedent
502
+            // pas de virgule
503
+            $res .= '  ' . $v;
504
+        } else {
505
+            if (!is_numeric($k)) {
506
+                $p = strpos($v, ' ');
507
+                if ($p) {
508
+                    $v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
509
+                } else {
510
+                    $v .= " AS `$k`";
511
+                }
512
+            }
513
+            $res .= ', ' . $v;
514
+        }
515
+    }
516
+
517
+    return substr($res, 2);
518 518
 }
519 519
 
520 520
 
@@ -539,58 +539,58 @@  discard block
 block discarded – undo
539 539
  */
540 540
 function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) {
541 541
 
542
-	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
543
-		$pref = '`' . $db . '`.';
544
-	} else {
545
-		$pref = '';
546
-	}
547
-
548
-	if ($prefixe) {
549
-		$pref .= $prefixe . '_';
550
-	}
551
-
552
-	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
553
-		$suite = '';
554
-	} else {
555
-		$suite = strstr($query, (string) $regs[0]);
556
-		$query = substr($query, 0, -strlen($suite));
557
-		// propager le prefixe en cas de requete imbriquee
558
-		// il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
559
-		// modifier une requete qui est en fait juste du texte dans un champ
560
-		if (stripos($suite, 'SELECT') !== false) {
561
-			if ($echappe_textes) {
562
-				[$suite_echap, $textes] = query_echappe_textes($suite);
563
-			}
564
-			else {
565
-				$suite_echap = $suite;
566
-			}
567
-			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
568
-				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
569
-				if ($echappe_textes) {
570
-					$suite = query_reinjecte_textes($suite_echap, $textes);
571
-				}
572
-				else {
573
-					$suite = $suite_echap;
574
-				}
575
-			}
576
-		}
577
-	}
578
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
579
-
580
-	// en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
581
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
582
-	if (
583
-		defined('_MYSQL_NOPLANES')
584
-		and _MYSQL_NOPLANES
585
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
586
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
587
-	) {
588
-		include_spip('inc/charsets');
589
-		$r = utf8_noplanes($r);
590
-	}
591
-
592
-	#spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
593
-	return $r;
542
+    if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
543
+        $pref = '`' . $db . '`.';
544
+    } else {
545
+        $pref = '';
546
+    }
547
+
548
+    if ($prefixe) {
549
+        $pref .= $prefixe . '_';
550
+    }
551
+
552
+    if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
553
+        $suite = '';
554
+    } else {
555
+        $suite = strstr($query, (string) $regs[0]);
556
+        $query = substr($query, 0, -strlen($suite));
557
+        // propager le prefixe en cas de requete imbriquee
558
+        // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
559
+        // modifier une requete qui est en fait juste du texte dans un champ
560
+        if (stripos($suite, 'SELECT') !== false) {
561
+            if ($echappe_textes) {
562
+                [$suite_echap, $textes] = query_echappe_textes($suite);
563
+            }
564
+            else {
565
+                $suite_echap = $suite;
566
+            }
567
+            if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
568
+                $suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
569
+                if ($echappe_textes) {
570
+                    $suite = query_reinjecte_textes($suite_echap, $textes);
571
+                }
572
+                else {
573
+                    $suite = $suite_echap;
574
+                }
575
+            }
576
+        }
577
+    }
578
+    $r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
579
+
580
+    // en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
581
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
582
+    if (
583
+        defined('_MYSQL_NOPLANES')
584
+        and _MYSQL_NOPLANES
585
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
586
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
587
+    ) {
588
+        include_spip('inc/charsets');
589
+        $r = utf8_noplanes($r);
590
+    }
591
+
592
+    #spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
593
+    return $r;
594 594
 }
595 595
 
596 596
 /**
@@ -608,17 +608,17 @@  discard block
 block discarded – undo
608 608
  *     - False en cas d'erreur.
609 609
  **/
610 610
 function spip_mysql_selectdb($db, $serveur = '', $requeter = true) {
611
-	$link = _mysql_link($serveur);
612
-	try {
613
-		$ok = mysqli_select_db($link, $db);
614
-	} catch (\mysqli_sql_exception $e) {
615
-		$ok = false;
616
-	}
617
-	if (!$ok) {
618
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
619
-	}
620
-
621
-	return $ok;
611
+    $link = _mysql_link($serveur);
612
+    try {
613
+        $ok = mysqli_select_db($link, $db);
614
+    } catch (\mysqli_sql_exception $e) {
615
+        $ok = false;
616
+    }
617
+    if (!$ok) {
618
+        spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
619
+    }
620
+
621
+    return $ok;
622 622
 }
623 623
 
624 624
 
@@ -639,14 +639,14 @@  discard block
 block discarded – undo
639 639
  *     Liste de noms de bases de données
640 640
  **/
641 641
 function spip_mysql_listdbs($serveur = '', $requeter = true) {
642
-	$dbs = [];
643
-	if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
644
-		while ($row = mysqli_fetch_assoc($res)) {
645
-			$dbs[] = $row['Database'];
646
-		}
647
-	}
648
-
649
-	return $dbs;
642
+    $dbs = [];
643
+    if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
644
+        while ($row = mysqli_fetch_assoc($res)) {
645
+            $dbs[] = $row['Database'];
646
+        }
647
+    }
648
+
649
+    return $dbs;
650 650
 }
651 651
 
652 652
 
@@ -669,73 +669,73 @@  discard block
 block discarded – undo
669 669
  *     - true si la requête réussie, false sinon.
670 670
  */
671 671
 function spip_mysql_create(
672
-	$nom,
673
-	$champs,
674
-	$cles,
675
-	$autoinc = false,
676
-	$temporary = false,
677
-	$serveur = '',
678
-	$requeter = true
672
+    $nom,
673
+    $champs,
674
+    $cles,
675
+    $autoinc = false,
676
+    $temporary = false,
677
+    $serveur = '',
678
+    $requeter = true
679 679
 ) {
680 680
 
681
-	$query = '';
682
-	$keys = '';
683
-	$s = '';
684
-	$p = '';
685
-
686
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
687
-	// sans les renseigner (laisse le compilo recuperer la description)
688
-	if (!is_array($champs) || !is_array($cles)) {
689
-		return;
690
-	}
691
-
692
-	$res = spip_mysql_query('SELECT version() as v', $serveur);
693
-	if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
694
-		spip_mysql_query("SET sql_mode=''", $serveur);
695
-	}
696
-
697
-	foreach ($cles as $k => $v) {
698
-		$keys .= "$s\n\t\t$k ($v)";
699
-		if ($k == 'PRIMARY KEY') {
700
-			$p = $v;
701
-		}
702
-		$s = ',';
703
-	}
704
-	$s = '';
705
-
706
-	$character_set = '';
707
-	if (@$GLOBALS['meta']['charset_sql_base']) {
708
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
709
-	}
710
-	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
711
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
712
-	}
713
-
714
-	foreach ($champs as $k => $v) {
715
-		$v = _mysql_remplacements_definitions_table($v);
716
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
717
-			if (
718
-				preg_match(',(char|text),i', $defs[1])
719
-				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
720
-			) {
721
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
722
-			}
723
-		}
724
-
725
-		$query .= "$s\n\t\t$k $v"
726
-			. (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
727
-				? ' auto_increment'
728
-				: ''
729
-			);
730
-		$s = ',';
731
-	}
732
-	$temporary = $temporary ? 'TEMPORARY' : '';
733
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
734
-		. (defined('_MYSQL_ENGINE') ? ' ENGINE=' . _MYSQL_ENGINE : '')
735
-		. ($character_set ? " DEFAULT $character_set" : '')
736
-		. "\n";
737
-
738
-	return spip_mysql_query($q, $serveur);
681
+    $query = '';
682
+    $keys = '';
683
+    $s = '';
684
+    $p = '';
685
+
686
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
687
+    // sans les renseigner (laisse le compilo recuperer la description)
688
+    if (!is_array($champs) || !is_array($cles)) {
689
+        return;
690
+    }
691
+
692
+    $res = spip_mysql_query('SELECT version() as v', $serveur);
693
+    if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
694
+        spip_mysql_query("SET sql_mode=''", $serveur);
695
+    }
696
+
697
+    foreach ($cles as $k => $v) {
698
+        $keys .= "$s\n\t\t$k ($v)";
699
+        if ($k == 'PRIMARY KEY') {
700
+            $p = $v;
701
+        }
702
+        $s = ',';
703
+    }
704
+    $s = '';
705
+
706
+    $character_set = '';
707
+    if (@$GLOBALS['meta']['charset_sql_base']) {
708
+        $character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
709
+    }
710
+    if (@$GLOBALS['meta']['charset_collation_sql_base']) {
711
+        $character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
712
+    }
713
+
714
+    foreach ($champs as $k => $v) {
715
+        $v = _mysql_remplacements_definitions_table($v);
716
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
717
+            if (
718
+                preg_match(',(char|text),i', $defs[1])
719
+                and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
720
+            ) {
721
+                $v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
722
+            }
723
+        }
724
+
725
+        $query .= "$s\n\t\t$k $v"
726
+            . (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
727
+                ? ' auto_increment'
728
+                : ''
729
+            );
730
+        $s = ',';
731
+    }
732
+    $temporary = $temporary ? 'TEMPORARY' : '';
733
+    $q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
734
+        . (defined('_MYSQL_ENGINE') ? ' ENGINE=' . _MYSQL_ENGINE : '')
735
+        . ($character_set ? " DEFAULT $character_set" : '')
736
+        . "\n";
737
+
738
+    return spip_mysql_query($q, $serveur);
739 739
 }
740 740
 
741 741
 
@@ -748,25 +748,25 @@  discard block
 block discarded – undo
748 748
  *     Définition SQL adaptée pour MySQL d'un champ de table
749 749
  */
750 750
 function _mysql_remplacements_definitions_table($query) {
751
-	// quelques remplacements
752
-	$num = '(\s*\([0-9]*\))?';
753
-	$enum = '(\s*\([^\)]*\))?';
754
-
755
-	$remplace = [
756
-		'/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
757
-		'/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
758
-	];
759
-
760
-	if (is_string($query)) {
761
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
762
-	} elseif (is_array($query)) {
763
-		$keys = array_keys($remplace);
764
-		foreach ($query as $k => $q) {
765
-			$query[$k] = preg_replace($keys, $remplace, $q);
766
-		}
767
-	}
768
-
769
-	return $query;
751
+    // quelques remplacements
752
+    $num = '(\s*\([0-9]*\))?';
753
+    $enum = '(\s*\([^\)]*\))?';
754
+
755
+    $remplace = [
756
+        '/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
757
+        '/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
758
+    ];
759
+
760
+    if (is_string($query)) {
761
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
762
+    } elseif (is_array($query)) {
763
+        $keys = array_keys($remplace);
764
+        foreach ($query as $k => $q) {
765
+            $query[$k] = preg_replace($keys, $remplace, $q);
766
+        }
767
+    }
768
+
769
+    return $query;
770 770
 }
771 771
 
772 772
 
@@ -779,7 +779,7 @@  discard block
 block discarded – undo
779 779
  * @return bool true si la base est créee.
780 780
  **/
781 781
 function spip_mysql_create_base($nom, $serveur = '', $requeter = true) {
782
-	return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
782
+    return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
783 783
 }
784 784
 
785 785
 
@@ -800,19 +800,19 @@  discard block
 block discarded – undo
800 800
  *     - string texte de la requête si $requeter vaut false
801 801
  */
802 802
 function spip_mysql_create_view($nom, $query_select, $serveur = '', $requeter = true) {
803
-	if (!$query_select) {
804
-		return false;
805
-	}
806
-	// vue deja presente
807
-	if (sql_showtable($nom, false, $serveur)) {
808
-		spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
803
+    if (!$query_select) {
804
+        return false;
805
+    }
806
+    // vue deja presente
807
+    if (sql_showtable($nom, false, $serveur)) {
808
+        spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
809 809
 
810
-		return false;
811
-	}
810
+        return false;
811
+    }
812 812
 
813
-	$query = "CREATE VIEW $nom AS " . $query_select;
813
+    $query = "CREATE VIEW $nom AS " . $query_select;
814 814
 
815
-	return spip_mysql_query($query, $serveur, $requeter);
815
+    return spip_mysql_query($query, $serveur, $requeter);
816 816
 }
817 817
 
818 818
 
@@ -828,11 +828,11 @@  discard block
 block discarded – undo
828 828
  *     - true si la requête a réussie, false sinon
829 829
  */
830 830
 function spip_mysql_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
831
-	if ($exist) {
832
-		$exist = ' IF EXISTS';
833
-	}
831
+    if ($exist) {
832
+        $exist = ' IF EXISTS';
833
+    }
834 834
 
835
-	return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
835
+    return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
836 836
 }
837 837
 
838 838
 /**
@@ -847,11 +847,11 @@  discard block
 block discarded – undo
847 847
  *     - true si la requête a réussie, false sinon
848 848
  */
849 849
 function spip_mysql_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
850
-	if ($exist) {
851
-		$exist = ' IF EXISTS';
852
-	}
850
+    if ($exist) {
851
+        $exist = ' IF EXISTS';
852
+    }
853 853
 
854
-	return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
854
+    return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
855 855
 }
856 856
 
857 857
 /**
@@ -868,7 +868,7 @@  discard block
 block discarded – undo
868 868
  *     Ressource à utiliser avec sql_fetch()
869 869
  **/
870 870
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
871
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
871
+    return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
872 872
 }
873 873
 
874 874
 /**
@@ -884,18 +884,18 @@  discard block
 block discarded – undo
884 884
  *     - true si la requête a réussie, false sinon
885 885
  */
886 886
 function spip_mysql_repair($table, $serveur = '', $requeter = true) {
887
-	$table_status = spip_mysql_fetch(spip_mysql_query('SHOW TABLE STATUS WHERE Name = ' . _q($table), $serveur, true));
888
-	$engine = $table_status['Engine'];
889
-	if ($engine == 'InnoDB') {
890
-		if (spip_mysql_alter("TABLE $table ENGINE = InnoDB", $serveur, $requeter)) {
891
-			return [' OK '];
892
-		}
893
-	} elseif ($engine == 'MyISAM') {
894
-		return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
895
-	} else {
896
-		spip_log("spip_mysql_repair impossible pour la table $table engine $engine", 'mysql.' . _LOG_DEBUG);
897
-	}
898
-	return false;
887
+    $table_status = spip_mysql_fetch(spip_mysql_query('SHOW TABLE STATUS WHERE Name = ' . _q($table), $serveur, true));
888
+    $engine = $table_status['Engine'];
889
+    if ($engine == 'InnoDB') {
890
+        if (spip_mysql_alter("TABLE $table ENGINE = InnoDB", $serveur, $requeter)) {
891
+            return [' OK '];
892
+        }
893
+    } elseif ($engine == 'MyISAM') {
894
+        return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
895
+    } else {
896
+        spip_log("spip_mysql_repair impossible pour la table $table engine $engine", 'mysql.' . _LOG_DEBUG);
897
+    }
898
+    return false;
899 899
 }
900 900
 
901 901
 /**
@@ -913,12 +913,12 @@  discard block
 block discarded – undo
913 913
  *     - string : requete sql, si $requeter = true
914 914
  **/
915 915
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
916
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
917
-	if (!$requeter) {
918
-		return $r;
919
-	}
920
-	$res = spip_mysql_fetch($r);
921
-	return (bool) $res;
916
+    $r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
917
+    if (!$requeter) {
918
+        return $r;
919
+    }
920
+    $res = spip_mysql_fetch($r);
921
+    return (bool) $res;
922 922
 }
923 923
 
924 924
 define('_MYSQL_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -941,86 +941,86 @@  discard block
 block discarded – undo
941 941
  *     - array description de la table sinon
942 942
  */
943 943
 function spip_mysql_showtable($nom_table, $serveur = '', $requeter = true) {
944
-	$s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
945
-	if (!$s) {
946
-		return '';
947
-	}
948
-	if (!$requeter) {
949
-		return $s;
950
-	}
951
-
952
-	[, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
953
-	if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
954
-		$desc = $r[1];
955
-		// extraction d'une KEY éventuelle en prenant garde de ne pas
956
-		// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
957
-		if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
958
-			$namedkeys = $r[2];
959
-			$desc = $r[1];
960
-		} else {
961
-			$namedkeys = '';
962
-		}
963
-
964
-		$fields = [];
965
-		foreach (preg_split('/,\s*`/', $desc) as $v) {
966
-			preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
967
-			$fields[strtolower($r[1])] = $r[2];
968
-		}
969
-		$keys = [];
970
-
971
-		foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
972
-			if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
973
-				$k = str_replace('`', '', trim($r[1]));
974
-				$t = strtolower(str_replace('`', '', $r[2]));
975
-				if ($k && !isset($keys[$k])) {
976
-					$keys[$k] = $t;
977
-				} else {
978
-					$keys[] = $t;
979
-				}
980
-			}
981
-		}
982
-		spip_mysql_free($s);
983
-
984
-		return ['field' => $fields, 'key' => $keys];
985
-	}
986
-
987
-	$res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
988
-	if ($res) {
989
-		$nfields = [];
990
-		$nkeys = [];
991
-		while ($val = spip_mysql_fetch($res)) {
992
-			$nfields[$val['Field']] = $val['Type'];
993
-			if ($val['Null'] == 'NO') {
994
-				$nfields[$val['Field']] .= ' NOT NULL';
995
-			}
996
-			if ($val['Default'] === '0' || $val['Default']) {
997
-				if (preg_match('/[A-Z_]/', $val['Default'])) {
998
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
999
-				} else {
1000
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
1001
-				}
1002
-			}
1003
-			if ($val['Extra']) {
1004
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
1005
-			}
1006
-			if ($val['Key'] == 'PRI') {
1007
-				$nkeys['PRIMARY KEY'] = $val['Field'];
1008
-			} else {
1009
-				if ($val['Key'] == 'MUL') {
1010
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
1011
-				} else {
1012
-					if ($val['Key'] == 'UNI') {
1013
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
1014
-					}
1015
-				}
1016
-			}
1017
-		}
1018
-		spip_mysql_free($res);
1019
-
1020
-		return ['field' => $nfields, 'key' => $nkeys];
1021
-	}
1022
-
1023
-	return '';
944
+    $s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
945
+    if (!$s) {
946
+        return '';
947
+    }
948
+    if (!$requeter) {
949
+        return $s;
950
+    }
951
+
952
+    [, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
953
+    if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
954
+        $desc = $r[1];
955
+        // extraction d'une KEY éventuelle en prenant garde de ne pas
956
+        // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
957
+        if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
958
+            $namedkeys = $r[2];
959
+            $desc = $r[1];
960
+        } else {
961
+            $namedkeys = '';
962
+        }
963
+
964
+        $fields = [];
965
+        foreach (preg_split('/,\s*`/', $desc) as $v) {
966
+            preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
967
+            $fields[strtolower($r[1])] = $r[2];
968
+        }
969
+        $keys = [];
970
+
971
+        foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
972
+            if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
973
+                $k = str_replace('`', '', trim($r[1]));
974
+                $t = strtolower(str_replace('`', '', $r[2]));
975
+                if ($k && !isset($keys[$k])) {
976
+                    $keys[$k] = $t;
977
+                } else {
978
+                    $keys[] = $t;
979
+                }
980
+            }
981
+        }
982
+        spip_mysql_free($s);
983
+
984
+        return ['field' => $fields, 'key' => $keys];
985
+    }
986
+
987
+    $res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
988
+    if ($res) {
989
+        $nfields = [];
990
+        $nkeys = [];
991
+        while ($val = spip_mysql_fetch($res)) {
992
+            $nfields[$val['Field']] = $val['Type'];
993
+            if ($val['Null'] == 'NO') {
994
+                $nfields[$val['Field']] .= ' NOT NULL';
995
+            }
996
+            if ($val['Default'] === '0' || $val['Default']) {
997
+                if (preg_match('/[A-Z_]/', $val['Default'])) {
998
+                    $nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
999
+                } else {
1000
+                    $nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
1001
+                }
1002
+            }
1003
+            if ($val['Extra']) {
1004
+                $nfields[$val['Field']] .= ' ' . $val['Extra'];
1005
+            }
1006
+            if ($val['Key'] == 'PRI') {
1007
+                $nkeys['PRIMARY KEY'] = $val['Field'];
1008
+            } else {
1009
+                if ($val['Key'] == 'MUL') {
1010
+                    $nkeys['KEY ' . $val['Field']] = $val['Field'];
1011
+                } else {
1012
+                    if ($val['Key'] == 'UNI') {
1013
+                        $nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
1014
+                    }
1015
+                }
1016
+            }
1017
+        }
1018
+        spip_mysql_free($res);
1019
+
1020
+        return ['field' => $nfields, 'key' => $nkeys];
1021
+    }
1022
+
1023
+    return '';
1024 1024
 }
1025 1025
 
1026 1026
 
@@ -1039,13 +1039,13 @@  discard block
 block discarded – undo
1039 1039
  *     - false Erreur
1040 1040
  */
1041 1041
 function spip_mysql_fetch($r, $t = '', $serveur = '', $requeter = true) {
1042
-	if (!$t) {
1043
-		$t = \MYSQLI_ASSOC;
1044
-	}
1045
-	if ($r) {
1046
-		return mysqli_fetch_array($r, $t);
1047
-	}
1048
-	return false;
1042
+    if (!$t) {
1043
+        $t = \MYSQLI_ASSOC;
1044
+    }
1045
+    if ($r) {
1046
+        return mysqli_fetch_array($r, $t);
1047
+    }
1048
+    return false;
1049 1049
 }
1050 1050
 
1051 1051
 /**
@@ -1058,10 +1058,10 @@  discard block
 block discarded – undo
1058 1058
  * @return bool True si déplacement réussi, false sinon.
1059 1059
  **/
1060 1060
 function spip_mysql_seek($r, $row_number, $serveur = '', $requeter = true) {
1061
-	if ($r and mysqli_num_rows($r)) {
1062
-		return mysqli_data_seek($r, $row_number);
1063
-	}
1064
-	return false;
1061
+    if ($r and mysqli_num_rows($r)) {
1062
+        return mysqli_data_seek($r, $row_number);
1063
+    }
1064
+    return false;
1065 1065
 }
1066 1066
 
1067 1067
 
@@ -1079,26 +1079,26 @@  discard block
 block discarded – undo
1079 1079
  *     - int Nombre de lignes (0 si la requête n'a pas réussie)
1080 1080
  **/
1081 1081
 function spip_mysql_countsel(
1082
-	$from = [],
1083
-	$where = [],
1084
-	$groupby = '',
1085
-	$having = [],
1086
-	$serveur = '',
1087
-	$requeter = true
1082
+    $from = [],
1083
+    $where = [],
1084
+    $groupby = '',
1085
+    $having = [],
1086
+    $serveur = '',
1087
+    $requeter = true
1088 1088
 ) {
1089
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1090
-
1091
-	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1092
-	if (!$requeter) {
1093
-		return $r;
1094
-	}
1095
-	if (!$r instanceof mysqli_result) {
1096
-		return 0;
1097
-	}
1098
-	[$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1099
-	mysqli_free_result($r);
1100
-
1101
-	return intval($c);
1089
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1090
+
1091
+    $r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1092
+    if (!$requeter) {
1093
+        return $r;
1094
+    }
1095
+    if (!$r instanceof mysqli_result) {
1096
+        return 0;
1097
+    }
1098
+    [$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1099
+    mysqli_free_result($r);
1100
+
1101
+    return intval($c);
1102 1102
 }
1103 1103
 
1104 1104
 
@@ -1121,16 +1121,16 @@  discard block
 block discarded – undo
1121 1121
  *     Erreur eventuelle
1122 1122
  **/
1123 1123
 function spip_mysql_error($query = '', $serveur = '', $requeter = true) {
1124
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1125
-	$s = mysqli_error($link);
1126
-	if ($s) {
1127
-		$trace = debug_backtrace();
1128
-		if ($trace[0]['function'] != 'spip_mysql_error') {
1129
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1130
-		}
1131
-	}
1132
-
1133
-	return $s;
1124
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1125
+    $s = mysqli_error($link);
1126
+    if ($s) {
1127
+        $trace = debug_backtrace();
1128
+        if ($trace[0]['function'] != 'spip_mysql_error') {
1129
+            spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1130
+        }
1131
+    }
1132
+
1133
+    return $s;
1134 1134
 }
1135 1135
 
1136 1136
 
@@ -1145,18 +1145,18 @@  discard block
 block discarded – undo
1145 1145
  *     0, pas d'erreur. Autre, numéro de l'erreur.
1146 1146
  **/
1147 1147
 function spip_mysql_errno($serveur = '', $requeter = true) {
1148
-	$link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1149
-	$s = mysqli_errno($link);
1150
-	// 2006 MySQL server has gone away
1151
-	// 2013 Lost connection to MySQL server during query
1152
-	if (in_array($s, [2006, 2013])) {
1153
-		define('spip_interdire_cache', true);
1154
-	}
1155
-	if ($s) {
1156
-		spip_log("Erreur mysql $s", _LOG_ERREUR);
1157
-	}
1158
-
1159
-	return $s;
1148
+    $link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1149
+    $s = mysqli_errno($link);
1150
+    // 2006 MySQL server has gone away
1151
+    // 2013 Lost connection to MySQL server during query
1152
+    if (in_array($s, [2006, 2013])) {
1153
+        define('spip_interdire_cache', true);
1154
+    }
1155
+    if ($s) {
1156
+        spip_log("Erreur mysql $s", _LOG_ERREUR);
1157
+    }
1158
+
1159
+    return $s;
1160 1160
 }
1161 1161
 
1162 1162
 
@@ -1170,9 +1170,9 @@  discard block
 block discarded – undo
1170 1170
  * @return int               Nombre de lignes
1171 1171
  */
1172 1172
 function spip_mysql_count($r, $serveur = '', $requeter = true) {
1173
-	if ($r) {
1174
-		return mysqli_num_rows($r);
1175
-	}
1173
+    if ($r) {
1174
+        return mysqli_num_rows($r);
1175
+    }
1176 1176
 }
1177 1177
 
1178 1178
 
@@ -1188,11 +1188,11 @@  discard block
 block discarded – undo
1188 1188
  * @return bool              True si réussi
1189 1189
  */
1190 1190
 function spip_mysql_free($r, $serveur = '', $requeter = true) {
1191
-	if ($r instanceof mysqli_result) {
1192
-		mysqli_free_result($r);
1193
-		return true;
1194
-	}
1195
-	return false;
1191
+    if ($r instanceof mysqli_result) {
1192
+        mysqli_free_result($r);
1193
+        return true;
1194
+    }
1195
+    return false;
1196 1196
 }
1197 1197
 
1198 1198
 
@@ -1220,59 +1220,59 @@  discard block
 block discarded – undo
1220 1220
  **/
1221 1221
 function spip_mysql_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1222 1222
 
1223
-	$e = null;
1224
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1225
-	$link = $connexion['link'];
1226
-	$table = prefixer_table_spip($table, $connexion['prefixe']);
1227
-
1228
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1229
-	if (
1230
-		defined('_MYSQL_NOPLANES')
1231
-		and _MYSQL_NOPLANES
1232
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
1233
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1234
-	) {
1235
-		include_spip('inc/charsets');
1236
-		$valeurs = utf8_noplanes($valeurs);
1237
-	}
1238
-
1239
-	$query = "INSERT INTO $table $champs VALUES $valeurs";
1240
-	if (!$requeter) {
1241
-		return $query;
1242
-	}
1243
-
1244
-	if (isset($_GET['var_profile'])) {
1245
-		include_spip('public/tracer');
1246
-		$t = trace_query_start();
1247
-		$e = '';
1248
-	} else {
1249
-		$t = 0;
1250
-	}
1251
-
1252
-	$connexion['last'] = $query;
1253
-	#spip_log($query, 'mysql.'._LOG_DEBUG);
1254
-	$r = false;
1255
-	$insert = false;
1256
-	try {
1257
-		$insert = mysqli_query($link, $query);
1258
-	} catch (\mysqli_sql_exception $e) {
1259
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1260
-		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1261
-		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1262
-	}
1263
-	if ($insert) {
1264
-		$r = mysqli_insert_id($link);
1265
-	} else {
1266
-		// Log de l'erreur eventuelle
1267
-		if ($e = spip_mysql_errno($serveur)) {
1268
-			// et du fautif
1269
-			$e .= spip_mysql_error($query, $serveur);
1270
-		}
1271
-	}
1272
-
1273
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1274
-
1275
-	// return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1223
+    $e = null;
1224
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1225
+    $link = $connexion['link'];
1226
+    $table = prefixer_table_spip($table, $connexion['prefixe']);
1227
+
1228
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1229
+    if (
1230
+        defined('_MYSQL_NOPLANES')
1231
+        and _MYSQL_NOPLANES
1232
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
1233
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1234
+    ) {
1235
+        include_spip('inc/charsets');
1236
+        $valeurs = utf8_noplanes($valeurs);
1237
+    }
1238
+
1239
+    $query = "INSERT INTO $table $champs VALUES $valeurs";
1240
+    if (!$requeter) {
1241
+        return $query;
1242
+    }
1243
+
1244
+    if (isset($_GET['var_profile'])) {
1245
+        include_spip('public/tracer');
1246
+        $t = trace_query_start();
1247
+        $e = '';
1248
+    } else {
1249
+        $t = 0;
1250
+    }
1251
+
1252
+    $connexion['last'] = $query;
1253
+    #spip_log($query, 'mysql.'._LOG_DEBUG);
1254
+    $r = false;
1255
+    $insert = false;
1256
+    try {
1257
+        $insert = mysqli_query($link, $query);
1258
+    } catch (\mysqli_sql_exception $e) {
1259
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1260
+        // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1261
+        // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1262
+    }
1263
+    if ($insert) {
1264
+        $r = mysqli_insert_id($link);
1265
+    } else {
1266
+        // Log de l'erreur eventuelle
1267
+        if ($e = spip_mysql_errno($serveur)) {
1268
+            // et du fautif
1269
+            $e .= spip_mysql_error($query, $serveur);
1270
+        }
1271
+    }
1272
+
1273
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1274
+
1275
+    // return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1276 1276
 }
1277 1277
 
1278 1278
 /**
@@ -1297,26 +1297,26 @@  discard block
 block discarded – undo
1297 1297
  **/
1298 1298
 function spip_mysql_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
1299 1299
 
1300
-	if (!$desc) {
1301
-		$desc = description_table($table, $serveur);
1302
-	}
1303
-	if (!$desc) {
1304
-		$couples = [];
1305
-	}
1306
-	$fields = $desc['field'] ?? [];
1307
-
1308
-	foreach ($couples as $champ => $val) {
1309
-		$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1310
-	}
1311
-
1312
-	return spip_mysql_insert(
1313
-		$table,
1314
-		'(' . join(',', array_keys($couples)) . ')',
1315
-		'(' . join(',', $couples) . ')',
1316
-		$desc,
1317
-		$serveur,
1318
-		$requeter
1319
-	);
1300
+    if (!$desc) {
1301
+        $desc = description_table($table, $serveur);
1302
+    }
1303
+    if (!$desc) {
1304
+        $couples = [];
1305
+    }
1306
+    $fields = $desc['field'] ?? [];
1307
+
1308
+    foreach ($couples as $champ => $val) {
1309
+        $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1310
+    }
1311
+
1312
+    return spip_mysql_insert(
1313
+        $table,
1314
+        '(' . join(',', array_keys($couples)) . ')',
1315
+        '(' . join(',', $couples) . ')',
1316
+        $desc,
1317
+        $serveur,
1318
+        $requeter
1319
+    );
1320 1320
 }
1321 1321
 
1322 1322
 
@@ -1341,34 +1341,34 @@  discard block
 block discarded – undo
1341 1341
  **/
1342 1342
 function spip_mysql_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
1343 1343
 
1344
-	if (!$desc) {
1345
-		$desc = description_table($table, $serveur);
1346
-	}
1347
-	if (!$desc) {
1348
-		$tab_couples = [];
1349
-	}
1350
-	$fields = $desc['field'] ?? [];
1351
-
1352
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1353
-	$valeurs = [];
1354
-	$r = false;
1355
-
1356
-	// Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1357
-	foreach ($tab_couples as $couples) {
1358
-		foreach ($couples as $champ => $val) {
1359
-			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1360
-		}
1361
-		$valeurs[] = '(' . join(',', $couples) . ')';
1362
-		if (count($valeurs) >= 100) {
1363
-			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1364
-			$valeurs = [];
1365
-		}
1366
-	}
1367
-	if (count($valeurs)) {
1368
-		$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1369
-	}
1370
-
1371
-	return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1344
+    if (!$desc) {
1345
+        $desc = description_table($table, $serveur);
1346
+    }
1347
+    if (!$desc) {
1348
+        $tab_couples = [];
1349
+    }
1350
+    $fields = $desc['field'] ?? [];
1351
+
1352
+    $cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1353
+    $valeurs = [];
1354
+    $r = false;
1355
+
1356
+    // Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1357
+    foreach ($tab_couples as $couples) {
1358
+        foreach ($couples as $champ => $val) {
1359
+            $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1360
+        }
1361
+        $valeurs[] = '(' . join(',', $couples) . ')';
1362
+        if (count($valeurs) >= 100) {
1363
+            $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1364
+            $valeurs = [];
1365
+        }
1366
+    }
1367
+    if (count($valeurs)) {
1368
+        $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1369
+    }
1370
+
1371
+    return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1372 1372
 }
1373 1373
 
1374 1374
 /**
@@ -1393,20 +1393,20 @@  discard block
 block discarded – undo
1393 1393
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1394 1394
  */
1395 1395
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1396
-	$set = [];
1397
-	foreach ($champs as $champ => $val) {
1398
-		$set[] = $champ . "=$val";
1399
-	}
1400
-	if (!empty($set)) {
1401
-		return spip_mysql_query(
1402
-			calculer_mysql_expression('UPDATE', $table, ',')
1403
-			. calculer_mysql_expression('SET', $set, ',')
1404
-			. calculer_mysql_expression('WHERE', $where),
1405
-			$serveur,
1406
-			$requeter
1407
-		);
1408
-	}
1409
-	return false;
1396
+    $set = [];
1397
+    foreach ($champs as $champ => $val) {
1398
+        $set[] = $champ . "=$val";
1399
+    }
1400
+    if (!empty($set)) {
1401
+        return spip_mysql_query(
1402
+            calculer_mysql_expression('UPDATE', $table, ',')
1403
+            . calculer_mysql_expression('SET', $set, ',')
1404
+            . calculer_mysql_expression('WHERE', $where),
1405
+            $serveur,
1406
+            $requeter
1407
+        );
1408
+    }
1409
+    return false;
1410 1410
 }
1411 1411
 
1412 1412
 /**
@@ -1439,29 +1439,29 @@  discard block
 block discarded – undo
1439 1439
  */
1440 1440
 function spip_mysql_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1441 1441
 
1442
-	if (!$champs) {
1443
-		return;
1444
-	}
1445
-	if (!$desc) {
1446
-		$desc = description_table($table, $serveur);
1447
-	}
1448
-	if (!$desc) {
1449
-		$champs = [];
1450
-	} else {
1451
-		$fields = $desc['field'];
1452
-	}
1453
-	$set = [];
1454
-	foreach ($champs as $champ => $val) {
1455
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1456
-	}
1457
-
1458
-	return spip_mysql_query(
1459
-		calculer_mysql_expression('UPDATE', $table, ',')
1460
-		. calculer_mysql_expression('SET', $set, ',')
1461
-		. calculer_mysql_expression('WHERE', $where),
1462
-		$serveur,
1463
-		$requeter
1464
-	);
1442
+    if (!$champs) {
1443
+        return;
1444
+    }
1445
+    if (!$desc) {
1446
+        $desc = description_table($table, $serveur);
1447
+    }
1448
+    if (!$desc) {
1449
+        $champs = [];
1450
+    } else {
1451
+        $fields = $desc['field'];
1452
+    }
1453
+    $set = [];
1454
+    foreach ($champs as $champ => $val) {
1455
+        $set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1456
+    }
1457
+
1458
+    return spip_mysql_query(
1459
+        calculer_mysql_expression('UPDATE', $table, ',')
1460
+        . calculer_mysql_expression('SET', $set, ',')
1461
+        . calculer_mysql_expression('WHERE', $where),
1462
+        $serveur,
1463
+        $requeter
1464
+    );
1465 1465
 }
1466 1466
 
1467 1467
 /**
@@ -1477,22 +1477,22 @@  discard block
 block discarded – undo
1477 1477
  *     - false en cas d'erreur.
1478 1478
  **/
1479 1479
 function spip_mysql_delete($table, $where = '', $serveur = '', $requeter = true) {
1480
-	$res = spip_mysql_query(
1481
-		calculer_mysql_expression('DELETE FROM', $table, ',')
1482
-		. calculer_mysql_expression('WHERE', $where),
1483
-		$serveur,
1484
-		$requeter
1485
-	);
1486
-	if (!$requeter) {
1487
-		return $res;
1488
-	}
1489
-	if ($res) {
1490
-		$link = _mysql_link($serveur);
1491
-
1492
-		return mysqli_affected_rows($link);
1493
-	} else {
1494
-		return false;
1495
-	}
1480
+    $res = spip_mysql_query(
1481
+        calculer_mysql_expression('DELETE FROM', $table, ',')
1482
+        . calculer_mysql_expression('WHERE', $where),
1483
+        $serveur,
1484
+        $requeter
1485
+    );
1486
+    if (!$requeter) {
1487
+        return $res;
1488
+    }
1489
+    if ($res) {
1490
+        $link = _mysql_link($serveur);
1491
+
1492
+        return mysqli_affected_rows($link);
1493
+    } else {
1494
+        return false;
1495
+    }
1496 1496
 }
1497 1497
 
1498 1498
 
@@ -1521,10 +1521,10 @@  discard block
 block discarded – undo
1521 1521
  *     - false en cas d'erreur.
1522 1522
  **/
1523 1523
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1524
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1525
-		',',
1526
-		array_map('_q', $couples)
1527
-	) . ')', $serveur, $requeter);
1524
+    return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1525
+        ',',
1526
+        array_map('_q', $couples)
1527
+    ) . ')', $serveur, $requeter);
1528 1528
 }
1529 1529
 
1530 1530
 
@@ -1553,14 +1553,14 @@  discard block
 block discarded – undo
1553 1553
  *     - false en cas d'erreur.
1554 1554
  **/
1555 1555
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1556
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1557
-	$valeurs = [];
1558
-	foreach ($tab_couples as $couples) {
1559
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1560
-	}
1561
-	$valeurs = implode(', ', $valeurs);
1562
-
1563
-	return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1556
+    $cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1557
+    $valeurs = [];
1558
+    foreach ($tab_couples as $couples) {
1559
+        $valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1560
+    }
1561
+    $valeurs = implode(', ', $valeurs);
1562
+
1563
+    return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1564 1564
 }
1565 1565
 
1566 1566
 
@@ -1575,32 +1575,32 @@  discard block
 block discarded – undo
1575 1575
  * @return string       texte de sélection pour la requête
1576 1576
  */
1577 1577
 function spip_mysql_multi($objet, $lang) {
1578
-	$lengthlang = strlen("[$lang]");
1579
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1580
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1581
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1582
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1583
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1584
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1585
-	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1586
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1587
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1588
-	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1589
-	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1590
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1591
-		'     TRIM(' . $objet . '), ' .
1592
-		'     CONCAT( ' .
1593
-		"          $debutchaine, " .
1594
-		'          IF( ' .
1595
-		"               $poslang = 0, " .
1596
-		"                     $chainemulti, " .
1597
-		"               $chainelang" .
1598
-		'          ), ' .
1599
-		"          $finchaine" .
1600
-		'     ) ' .
1601
-		'))) AS multi';
1602
-
1603
-	return $retour;
1578
+    $lengthlang = strlen("[$lang]");
1579
+    $posmulti = 'INSTR(' . $objet . ", '<multi>')";
1580
+    $posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1581
+    $debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1582
+    $finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1583
+    $chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1584
+    $poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1585
+    $poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1586
+    $chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1587
+    $posfinlang = 'INSTR(' . $chainelang . ", '[')";
1588
+    $chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1589
+    //$chainelang = "LEFT($chainelang,$posfinlang-1)";
1590
+    $retour = "(TRIM(IF($posmulti = 0 , " .
1591
+        '     TRIM(' . $objet . '), ' .
1592
+        '     CONCAT( ' .
1593
+        "          $debutchaine, " .
1594
+        '          IF( ' .
1595
+        "               $poslang = 0, " .
1596
+        "                     $chainemulti, " .
1597
+        "               $chainelang" .
1598
+        '          ), ' .
1599
+        "          $finchaine" .
1600
+        '     ) ' .
1601
+        '))) AS multi';
1602
+
1603
+    return $retour;
1604 1604
 }
1605 1605
 
1606 1606
 /**
@@ -1614,7 +1614,7 @@  discard block
 block discarded – undo
1614 1614
  *     Valeur hexadécimale pour MySQL
1615 1615
  **/
1616 1616
 function spip_mysql_hex($v) {
1617
-	return '0x' . $v;
1617
+    return '0x' . $v;
1618 1618
 }
1619 1619
 
1620 1620
 /**
@@ -1630,15 +1630,15 @@  discard block
 block discarded – undo
1630 1630
  *    Donnée prête à être utilisée par le gestionnaire SQL
1631 1631
  */
1632 1632
 function spip_mysql_quote($v, $type = '') {
1633
-	if (!is_array($v)) {
1634
-		return spip_mysql_cite($v, $type);
1635
-	}
1636
-
1637
-	// si c'est un tableau, le parcourir en propageant le type
1638
-	foreach ($v as $k => $r) {
1639
-		$v[$k] = spip_mysql_quote($r, $type);
1640
-	}
1641
-	return implode(',', $v);
1633
+    if (!is_array($v)) {
1634
+        return spip_mysql_cite($v, $type);
1635
+    }
1636
+
1637
+    // si c'est un tableau, le parcourir en propageant le type
1638
+    foreach ($v as $k => $r) {
1639
+        $v[$k] = spip_mysql_quote($r, $type);
1640
+    }
1641
+    return implode(',', $v);
1642 1642
 }
1643 1643
 
1644 1644
 /**
@@ -1654,18 +1654,18 @@  discard block
 block discarded – undo
1654 1654
  *     Expression SQL
1655 1655
  **/
1656 1656
 function spip_mysql_date_proche($champ, $interval, $unite) {
1657
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1658
-	return '('
1659
-	. $champ
1660
-	. (($interval <= 0) ? '>' : '<')
1661
-	. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1662
-	. '('
1663
-	. ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1664
-	. ', INTERVAL '
1665
-	. (($interval > 0) ? $interval : (0 - $interval))
1666
-	. ' '
1667
-	. $unite
1668
-	. '))';
1657
+    $use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1658
+    return '('
1659
+    . $champ
1660
+    . (($interval <= 0) ? '>' : '<')
1661
+    . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1662
+    . '('
1663
+    . ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1664
+    . ', INTERVAL '
1665
+    . (($interval > 0) ? $interval : (0 - $interval))
1666
+    . ' '
1667
+    . $unite
1668
+    . '))';
1669 1669
 }
1670 1670
 
1671 1671
 
@@ -1689,7 +1689,7 @@  discard block
 block discarded – undo
1689 1689
  *     Expression de requête SQL
1690 1690
  **/
1691 1691
 function spip_mysql_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1692
-	return "($val $not IN ($valeurs))";
1692
+    return "($val $not IN ($valeurs))";
1693 1693
 }
1694 1694
 
1695 1695
 
@@ -1701,39 +1701,39 @@  discard block
 block discarded – undo
1701 1701
  * @return string|number     texte ou nombre échappé
1702 1702
  */
1703 1703
 function spip_mysql_cite($v, $type) {
1704
-	if (!$type) {
1705
-		if (is_bool($v)) {
1706
-			return strval(intval($v));
1707
-		} elseif (is_numeric($v)) {
1708
-			return strval($v);
1709
-		} elseif ($v === null) {
1710
-			return "''";
1711
-		}
1712
-		return "'" . addslashes($v) . "'";
1713
-	}
1714
-
1715
-	if ($v === null) {
1716
-		if (stripos($type, 'NOT NULL') === false) {
1717
-			// null php se traduit en NULL SQL
1718
-			return 'NULL';
1719
-		} else {
1720
-			return "''";
1721
-		}
1722
-	} elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1723
-		return $v;
1724
-	} elseif (sql_test_int($type)) {
1725
-		if (
1726
-			is_numeric($v)
1727
-			or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1728
-		) {
1729
-			return $v;
1730
-		} else {
1731
-			// si pas numerique, forcer le intval
1732
-			return intval($v);
1733
-		}
1734
-	}
1735
-
1736
-	return ("'" . addslashes($v) . "'");
1704
+    if (!$type) {
1705
+        if (is_bool($v)) {
1706
+            return strval(intval($v));
1707
+        } elseif (is_numeric($v)) {
1708
+            return strval($v);
1709
+        } elseif ($v === null) {
1710
+            return "''";
1711
+        }
1712
+        return "'" . addslashes($v) . "'";
1713
+    }
1714
+
1715
+    if ($v === null) {
1716
+        if (stripos($type, 'NOT NULL') === false) {
1717
+            // null php se traduit en NULL SQL
1718
+            return 'NULL';
1719
+        } else {
1720
+            return "''";
1721
+        }
1722
+    } elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1723
+        return $v;
1724
+    } elseif (sql_test_int($type)) {
1725
+        if (
1726
+            is_numeric($v)
1727
+            or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1728
+        ) {
1729
+            return $v;
1730
+        } else {
1731
+            // si pas numerique, forcer le intval
1732
+            return intval($v);
1733
+        }
1734
+    }
1735
+
1736
+    return ("'" . addslashes($v) . "'");
1737 1737
 }
1738 1738
 
1739 1739
 /**
@@ -1743,7 +1743,7 @@  discard block
 block discarded – undo
1743 1743
  *     True si on a les fonctions, false sinon
1744 1744
  */
1745 1745
 function spip_versions_mysql() {
1746
-	return function_exists('mysqli_query');
1746
+    return function_exists('mysqli_query');
1747 1747
 }
1748 1748
 
1749 1749
 
@@ -1756,20 +1756,20 @@  discard block
 block discarded – undo
1756 1756
  *     - chaîne : code compilé pour le faire désactiver par SPIP sinon
1757 1757
  */
1758 1758
 function test_rappel_nom_base_mysql($server_db) {
1759
-	$GLOBALS['mysql_rappel_nom_base'] = true;
1760
-	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1761
-	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1759
+    $GLOBALS['mysql_rappel_nom_base'] = true;
1760
+    sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1761
+    $ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1762 1762
 
1763
-	if ($ok) {
1764
-		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1763
+    if ($ok) {
1764
+        sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1765 1765
 
1766
-		return '';
1767
-	} else {
1768
-		$GLOBALS['mysql_rappel_nom_base'] = false;
1766
+        return '';
1767
+    } else {
1768
+        $GLOBALS['mysql_rappel_nom_base'] = false;
1769 1769
 
1770
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1771
-		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1772
-	}
1770
+        return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1771
+        "/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1772
+    }
1773 1773
 }
1774 1774
 
1775 1775
 /**
@@ -1783,13 +1783,13 @@  discard block
 block discarded – undo
1783 1783
  *     - chaîne : code compilé pour l'indiquer le résultat du test à SPIP
1784 1784
  */
1785 1785
 function test_sql_mode_mysql($server_db) {
1786
-	$res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1787
-	$row = sql_fetch($res, $server_db);
1788
-	if (version_compare($row['v'], '5.0.0', '>=')) {
1789
-		defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1786
+    $res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1787
+    $row = sql_fetch($res, $server_db);
1788
+    if (version_compare($row['v'], '5.0.0', '>=')) {
1789
+        defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1790 1790
 
1791
-		return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1792
-	}
1791
+        return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1792
+    }
1793 1793
 
1794
-	return '';
1794
+    return '';
1795 1795
 }
Please login to merge, or discard this patch.
ecrire/install/etape_.php 1 patch
Indentation   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  */
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -25,20 +25,20 @@  discard block
 block discarded – undo
25 25
  * @uses info_copyright()
26 26
  **/
27 27
 function install_etape__dist() {
28
-	utiliser_langue_visiteur();
29
-	$menu_langues = menu_langues('var_lang_ecrire');
30
-	if (!$menu_langues) {
31
-		redirige_url_ecrire('install', 'etape=chmod');
32
-	} else {
33
-		include_spip('inc/presentation'); // pour info_copyright
28
+    utiliser_langue_visiteur();
29
+    $menu_langues = menu_langues('var_lang_ecrire');
30
+    if (!$menu_langues) {
31
+        redirige_url_ecrire('install', 'etape=chmod');
32
+    } else {
33
+        include_spip('inc/presentation'); // pour info_copyright
34 34
 
35
-		$res = "<div class='petit-centre'><img alt='SPIP' class='logo' src='" . chemin_image('logo-spip.png') . "' />\n" .
36
-			"<p class='small'>" . info_copyright() . "</p></div>\n" .
37
-			'<p>' . _T('install_select_langue') . '</p>' .
38
-			'<div>' . $menu_langues . "</div>\n" .
39
-			generer_form_ecrire('install', "<input type='hidden' name='etape' value='chmod' />" . bouton_suivant());
35
+        $res = "<div class='petit-centre'><img alt='SPIP' class='logo' src='" . chemin_image('logo-spip.png') . "' />\n" .
36
+            "<p class='small'>" . info_copyright() . "</p></div>\n" .
37
+            '<p>' . _T('install_select_langue') . '</p>' .
38
+            '<div>' . $menu_langues . "</div>\n" .
39
+            generer_form_ecrire('install', "<input type='hidden' name='etape' value='chmod' />" . bouton_suivant());
40 40
 
41
-		$minipage = new Spip\Afficher\Minipage\Installation();
42
-		echo $minipage->page($res);
43
-	}
41
+        $minipage = new Spip\Afficher\Minipage\Installation();
42
+        echo $minipage->page($res);
43
+    }
44 44
 }
Please login to merge, or discard this patch.
ecrire/install/etape_ldap1.php 1 patch
Indentation   +72 added lines, -72 removed lines patch added patch discarded remove patch
@@ -10,89 +10,89 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 function install_etape_ldap1_dist() {
17
-	$adresse_ldap = defined('_INSTALL_HOST_LDAP')
18
-		? _INSTALL_HOST_LDAP
19
-		: 'localhost';
17
+    $adresse_ldap = defined('_INSTALL_HOST_LDAP')
18
+        ? _INSTALL_HOST_LDAP
19
+        : 'localhost';
20 20
 
21
-	$port_ldap = defined('_INSTALL_PORT_LDAP')
22
-		? _INSTALL_PORT_LDAP
23
-		: 389;
21
+    $port_ldap = defined('_INSTALL_PORT_LDAP')
22
+        ? _INSTALL_PORT_LDAP
23
+        : 389;
24 24
 
25
-	$tls_ldap = defined('_INSTALL_TLS_LDAP')
26
-		? _INSTALL_TLS_LDAP
27
-		: 'non';
25
+    $tls_ldap = defined('_INSTALL_TLS_LDAP')
26
+        ? _INSTALL_TLS_LDAP
27
+        : 'non';
28 28
 
29
-	$protocole_ldap = defined('_INSTALL_PROTOCOLE_LDAP')
30
-		? _INSTALL_PROTOCOLE_LDAP
31
-		: 3; // on essaie 2 en cas d'echec
29
+    $protocole_ldap = defined('_INSTALL_PROTOCOLE_LDAP')
30
+        ? _INSTALL_PROTOCOLE_LDAP
31
+        : 3; // on essaie 2 en cas d'echec
32 32
 
33
-	$login_ldap = defined('_INSTALL_USER_LDAP')
34
-		? _INSTALL_USER_LDAP
35
-		: '';
33
+    $login_ldap = defined('_INSTALL_USER_LDAP')
34
+        ? _INSTALL_USER_LDAP
35
+        : '';
36 36
 
37
-	$pass_ldap = defined('_INSTALL_PASS_LDAP')
38
-		? _INSTALL_PASS_LDAP
39
-		: '';
37
+    $pass_ldap = defined('_INSTALL_PASS_LDAP')
38
+        ? _INSTALL_PASS_LDAP
39
+        : '';
40 40
 
41
-	$minipage = new Spip\Afficher\Minipage\Installation();
42
-	echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']);
41
+    $minipage = new Spip\Afficher\Minipage\Installation();
42
+    echo $minipage->installDebutPage(['onload' => 'document.getElementById(\'suivant\').focus();return false;']);
43 43
 
44
-	echo info_etape(
45
-		_T('titre_connexion_ldap'),
46
-		info_progression_etape(1, 'etape_ldap', 'install/')
47
-	);
44
+    echo info_etape(
45
+        _T('titre_connexion_ldap'),
46
+        info_progression_etape(1, 'etape_ldap', 'install/')
47
+    );
48 48
 
49
-	echo generer_form_ecrire('install', (
50
-		"\n<input type='hidden' name='etape' value='ldap2' />"
51
-		. fieldset(
52
-			_T('entree_adresse_annuaire'),
53
-			[
54
-				'adresse_ldap' => [
55
-					'label' => _T('texte_adresse_annuaire_1'),
56
-					'valeur' => $adresse_ldap
57
-				],
58
-				'port_ldap' => [
59
-					'label' => _T('entree_port_annuaire') . '<br />' . _T('texte_port_annuaire'),
60
-					'valeur' => $port_ldap
61
-				],
62
-				'tls_ldap' => [
63
-					'label' => '<b>' . _T('tls_ldap') . '</b>',
64
-					'valeur' => $tls_ldap,
65
-					'alternatives' => [
66
-						'non' => _T('item_non'),
67
-						'oui' => _T('item_oui')
68
-					]
69
-				],
70
-				'protocole_ldap' => [
71
-					'label' => _T('protocole_ldap'),
72
-					'valeur' => $protocole_ldap,
73
-					'alternatives' => [
74
-						'3' => '3',
75
-						'2' => '2'
76
-					]
77
-				]
78
-			]
79
-		)
49
+    echo generer_form_ecrire('install', (
50
+        "\n<input type='hidden' name='etape' value='ldap2' />"
51
+        . fieldset(
52
+            _T('entree_adresse_annuaire'),
53
+            [
54
+                'adresse_ldap' => [
55
+                    'label' => _T('texte_adresse_annuaire_1'),
56
+                    'valeur' => $adresse_ldap
57
+                ],
58
+                'port_ldap' => [
59
+                    'label' => _T('entree_port_annuaire') . '<br />' . _T('texte_port_annuaire'),
60
+                    'valeur' => $port_ldap
61
+                ],
62
+                'tls_ldap' => [
63
+                    'label' => '<b>' . _T('tls_ldap') . '</b>',
64
+                    'valeur' => $tls_ldap,
65
+                    'alternatives' => [
66
+                        'non' => _T('item_non'),
67
+                        'oui' => _T('item_oui')
68
+                    ]
69
+                ],
70
+                'protocole_ldap' => [
71
+                    'label' => _T('protocole_ldap'),
72
+                    'valeur' => $protocole_ldap,
73
+                    'alternatives' => [
74
+                        '3' => '3',
75
+                        '2' => '2'
76
+                    ]
77
+                ]
78
+            ]
79
+        )
80 80
 
81
-		. "\n<p>" . _T('texte_acces_ldap_anonyme_1') . '</p>'
82
-		. fieldset(
83
-			_T('connexion_ldap'),
84
-			[
85
-				'login_ldap' => [
86
-					'label' => _T('texte_login_ldap_1'),
87
-					'valeur' => $login_ldap
88
-				],
89
-				'pass_ldap' => [
90
-					'label' => _T('entree_passe_ldap'),
91
-					'valeur' => $pass_ldap
92
-				]
93
-			]
94
-		)
95
-		. bouton_suivant()));
81
+        . "\n<p>" . _T('texte_acces_ldap_anonyme_1') . '</p>'
82
+        . fieldset(
83
+            _T('connexion_ldap'),
84
+            [
85
+                'login_ldap' => [
86
+                    'label' => _T('texte_login_ldap_1'),
87
+                    'valeur' => $login_ldap
88
+                ],
89
+                'pass_ldap' => [
90
+                    'label' => _T('entree_passe_ldap'),
91
+                    'valeur' => $pass_ldap
92
+                ]
93
+            ]
94
+        )
95
+        . bouton_suivant()));
96 96
 
97
-	echo $minipage->installFinPage();
97
+    echo $minipage->installFinPage();
98 98
 }
Please login to merge, or discard this patch.
ecrire/src/Afficher/Minipage/Page.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -16,5 +16,5 @@
 block discarded – undo
16 16
  * Présentation des pages simplifiées publiques pour envoyer un message à un utilisateur
17 17
  **/
18 18
 class Page extends AbstractPage {
19
-	public const TYPE = 'public';
19
+    public const TYPE = 'public';
20 20
 }
Please login to merge, or discard this patch.
ecrire/lang/spip_en.php 1 patch
Indentation   +673 added lines, -673 removed lines patch added patch discarded remove patch
@@ -4,248 +4,248 @@  discard block
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'access_interface_graphique' => 'Back to the full graphic interface',
14
-	'access_mode_texte' => 'Show the simplified text interface',
15
-	'admin_debug' => 'debug',
16
-	'admin_modifier_article' => 'Modify this article',
17
-	'admin_modifier_auteur' => 'Modify this author',
18
-	'admin_modifier_breve' => 'Modify this news item',
19
-	'admin_modifier_mot' => 'Modify this keyword',
20
-	'admin_modifier_rubrique' => 'Modify this section',
21
-	'admin_recalculer' => 'Re-process this page',
22
-	'afficher_calendrier' => 'Show the calendar',
23
-	'afficher_trad' => 'show translations',
24
-	'alerte_maj_impossible' => '<b>Warning!</b> Failed to update the SQL database to version @version@. This may be due to a permissions problem on the database. Please contact your ISP.',
25
-	'alerte_modif_info_concourante' => 'WARNING: This information has been modified elsewhere. The current value is :',
26
-	'analyse_xml' => 'XML parsing',
27
-	'annuler' => 'Cancel',
28
-	'antispam_champ_vide' => 'Please leave this field empty:',
29
-	'articles_recents' => 'Most recent articles',
30
-	'attention_champ_mini_nb_caractères' => 'Warning! At least @nb@ characters',
31
-	'avis_1_erreur_saisie' => 'Your entry contains an error, please check your information.',
32
-	'avis_archive_incorrect' => 'archive is not a valid SPIP file',
33
-	'avis_archive_invalide' => 'archive file is not valid',
34
-	'avis_attention' => 'CAUTION!',
35
-	'avis_champ_incorrect_type_objet' => 'Invalid field name @name@ for object of type @type@',
36
-	'avis_colonne_inexistante' => 'Column @col@ does not exist',
37
-	'avis_erreur' => 'Error: see below',
38
-	'avis_erreur_connexion' => 'Connection error',
39
-	'avis_erreur_cookie' => 'cookie problem',
40
-	'avis_erreur_fonction_contexte' => 'Programming error. This function cannot be called in this context.',
41
-	'avis_erreur_mysql' => 'SQL error',
42
-	'avis_erreur_sauvegarde' => 'Error in backup (@type@ @id_objet@)!',
43
-	'avis_erreur_visiteur' => 'Problem entering the private area',
44
-	'avis_nb_erreurs_saisie' => 'Your entry contains @nb@ errors, please check your information.',
12
+    // A
13
+    'access_interface_graphique' => 'Back to the full graphic interface',
14
+    'access_mode_texte' => 'Show the simplified text interface',
15
+    'admin_debug' => 'debug',
16
+    'admin_modifier_article' => 'Modify this article',
17
+    'admin_modifier_auteur' => 'Modify this author',
18
+    'admin_modifier_breve' => 'Modify this news item',
19
+    'admin_modifier_mot' => 'Modify this keyword',
20
+    'admin_modifier_rubrique' => 'Modify this section',
21
+    'admin_recalculer' => 'Re-process this page',
22
+    'afficher_calendrier' => 'Show the calendar',
23
+    'afficher_trad' => 'show translations',
24
+    'alerte_maj_impossible' => '<b>Warning!</b> Failed to update the SQL database to version @version@. This may be due to a permissions problem on the database. Please contact your ISP.',
25
+    'alerte_modif_info_concourante' => 'WARNING: This information has been modified elsewhere. The current value is :',
26
+    'analyse_xml' => 'XML parsing',
27
+    'annuler' => 'Cancel',
28
+    'antispam_champ_vide' => 'Please leave this field empty:',
29
+    'articles_recents' => 'Most recent articles',
30
+    'attention_champ_mini_nb_caractères' => 'Warning! At least @nb@ characters',
31
+    'avis_1_erreur_saisie' => 'Your entry contains an error, please check your information.',
32
+    'avis_archive_incorrect' => 'archive is not a valid SPIP file',
33
+    'avis_archive_invalide' => 'archive file is not valid',
34
+    'avis_attention' => 'CAUTION!',
35
+    'avis_champ_incorrect_type_objet' => 'Invalid field name @name@ for object of type @type@',
36
+    'avis_colonne_inexistante' => 'Column @col@ does not exist',
37
+    'avis_erreur' => 'Error: see below',
38
+    'avis_erreur_connexion' => 'Connection error',
39
+    'avis_erreur_cookie' => 'cookie problem',
40
+    'avis_erreur_fonction_contexte' => 'Programming error. This function cannot be called in this context.',
41
+    'avis_erreur_mysql' => 'SQL error',
42
+    'avis_erreur_sauvegarde' => 'Error in backup (@type@ @id_objet@)!',
43
+    'avis_erreur_visiteur' => 'Problem entering the private area',
44
+    'avis_nb_erreurs_saisie' => 'Your entry contains @nb@ errors, please check your information.',
45 45
 
46
-	// B
47
-	'barre_a_accent_grave' => 'Insert a capital A with grave accent',
48
-	'barre_aide' => 'Use the typographic short cuts to refine your layout',
49
-	'barre_e_accent_aigu' => 'Insert a capital E with acute accent',
50
-	'barre_eo' => 'Insert an oe-ligature',
51
-	'barre_eo_maj' => 'Insert a capital EO-ligature',
52
-	'barre_euro' => 'Insert a € symbol',
53
-	'barre_gras' => 'Put in {{bold type}}',
54
-	'barre_guillemets' => 'Place between "double quotes"',
55
-	'barre_guillemets_simples' => 'Place between ‘single quotes’',
56
-	'barre_intertitre' => 'Turn into a {{{subheading}}}',
57
-	'barre_italic' => 'Put in {italics}',
58
-	'barre_lien' => 'Turn into a [hyperlink->http://...]',
59
-	'barre_lien_input' => 'Please enter the link address. You may use either an external URL (http://www.mysite.com) or reference another article on this site by simplying entering its number.',
60
-	'barre_note' => 'Turn into a [[Footnote]]',
61
-	'barre_paragraphe' => 'Create a paragraph',
62
-	'barre_quote' => '<quote>Quote a message</quote>',
63
-	'bouton_changer' => 'Change',
64
-	'bouton_chercher' => 'Search',
65
-	'bouton_choisir' => 'Select',
66
-	'bouton_deplacer' => 'Move',
67
-	'bouton_download' => 'Download',
68
-	'bouton_enregistrer' => 'Save',
69
-	'bouton_radio_desactiver_messagerie_interne' => 'Disable internal messaging',
70
-	'bouton_radio_envoi_annonces' => 'Send editorial announcements',
71
-	'bouton_radio_non_envoi_annonces' => 'Do not send any announcements',
72
-	'bouton_radio_non_envoi_liste_nouveautes' => 'Do not send latest news list',
73
-	'bouton_recharger_page' => 'reload this page',
74
-	'bouton_telecharger' => 'Upload',
75
-	'bouton_upload' => 'Upload',
76
-	'bouton_valider' => 'Submit',
46
+    // B
47
+    'barre_a_accent_grave' => 'Insert a capital A with grave accent',
48
+    'barre_aide' => 'Use the typographic short cuts to refine your layout',
49
+    'barre_e_accent_aigu' => 'Insert a capital E with acute accent',
50
+    'barre_eo' => 'Insert an oe-ligature',
51
+    'barre_eo_maj' => 'Insert a capital EO-ligature',
52
+    'barre_euro' => 'Insert a € symbol',
53
+    'barre_gras' => 'Put in {{bold type}}',
54
+    'barre_guillemets' => 'Place between "double quotes"',
55
+    'barre_guillemets_simples' => 'Place between ‘single quotes’',
56
+    'barre_intertitre' => 'Turn into a {{{subheading}}}',
57
+    'barre_italic' => 'Put in {italics}',
58
+    'barre_lien' => 'Turn into a [hyperlink->http://...]',
59
+    'barre_lien_input' => 'Please enter the link address. You may use either an external URL (http://www.mysite.com) or reference another article on this site by simplying entering its number.',
60
+    'barre_note' => 'Turn into a [[Footnote]]',
61
+    'barre_paragraphe' => 'Create a paragraph',
62
+    'barre_quote' => '<quote>Quote a message</quote>',
63
+    'bouton_changer' => 'Change',
64
+    'bouton_chercher' => 'Search',
65
+    'bouton_choisir' => 'Select',
66
+    'bouton_deplacer' => 'Move',
67
+    'bouton_download' => 'Download',
68
+    'bouton_enregistrer' => 'Save',
69
+    'bouton_radio_desactiver_messagerie_interne' => 'Disable internal messaging',
70
+    'bouton_radio_envoi_annonces' => 'Send editorial announcements',
71
+    'bouton_radio_non_envoi_annonces' => 'Do not send any announcements',
72
+    'bouton_radio_non_envoi_liste_nouveautes' => 'Do not send latest news list',
73
+    'bouton_recharger_page' => 'reload this page',
74
+    'bouton_telecharger' => 'Upload',
75
+    'bouton_upload' => 'Upload',
76
+    'bouton_valider' => 'Submit',
77 77
 
78
-	// C
79
-	'cal_apresmidi' => 'afternoon (p.m.)',
80
-	'cal_jour_entier' => 'entire day',
81
-	'cal_matin' => 'morning (a.m.)',
82
-	'cal_par_jour' => 'daily calendar',
83
-	'cal_par_mois' => 'monthly calendar',
84
-	'cal_par_semaine' => 'weekly calendar',
85
-	'choix_couleur_interface' => 'colour',
86
-	'choix_interface' => 'choice of interface',
87
-	'colonne' => 'Column',
88
-	'confirm_changer_statut' => 'Warning: You are about to change this article’s status. Do you wish to continue?',
89
-	'correcte' => 'correct',
78
+    // C
79
+    'cal_apresmidi' => 'afternoon (p.m.)',
80
+    'cal_jour_entier' => 'entire day',
81
+    'cal_matin' => 'morning (a.m.)',
82
+    'cal_par_jour' => 'daily calendar',
83
+    'cal_par_mois' => 'monthly calendar',
84
+    'cal_par_semaine' => 'weekly calendar',
85
+    'choix_couleur_interface' => 'colour',
86
+    'choix_interface' => 'choice of interface',
87
+    'colonne' => 'Column',
88
+    'confirm_changer_statut' => 'Warning: You are about to change this article’s status. Do you wish to continue?',
89
+    'correcte' => 'correct',
90 90
 
91
-	// D
92
-	'date_aujourdhui' => 'today',
93
-	'date_avant_jc' => 'B.C.',
94
-	'date_dans' => 'in @delai@',
95
-	'date_de_mois_1' => '@j@ @nommois@',
96
-	'date_de_mois_10' => '@j@ @nommois@',
97
-	'date_de_mois_11' => '@j@ @nommois@',
98
-	'date_de_mois_12' => '@j@ @nommois@',
99
-	'date_de_mois_2' => '@j@ @nommois@',
100
-	'date_de_mois_3' => '@j@ @nommois@',
101
-	'date_de_mois_4' => '@j@ @nommois@',
102
-	'date_de_mois_5' => '@j@ @nommois@',
103
-	'date_de_mois_6' => '@j@ @nommois@',
104
-	'date_de_mois_7' => '@j@ @nommois@',
105
-	'date_de_mois_8' => '@j@ @nommois@',
106
-	'date_de_mois_9' => '@j@ @nommois@',
107
-	'date_demain' => 'tomorrow',
108
-	'date_fmt_heures_minutes' => '@h@:@m@',
109
-	'date_fmt_heures_minutes_court' => '@h@:@m@',
110
-	'date_fmt_jour' => '@nomjour@ @jour@',
111
-	'date_fmt_jour_heure' => '@jour@ at @heure@',
112
-	'date_fmt_jour_heure_debut_fin' => '@jour@ from @heure_debut@ to @heure_fin@',
113
-	'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ from @heure_debut@@dtabbr@ to @dtend@@heure_fin@@dtabbr@',
114
-	'date_fmt_jour_mois' => '@jourmois@',
115
-	'date_fmt_jour_mois_annee' => '@jourmois@ @annee@',
116
-	'date_fmt_mois_annee' => '@nommois@ @annee@',
117
-	'date_fmt_nomjour' => '@nomjour@ @date@',
118
-	'date_fmt_nomjour_date' => 'on @nomjour@ @date@',
119
-	'date_fmt_periode' => 'From @date_debut@ to @date_fin@',
120
-	'date_fmt_periode_abbr' => 'From @dtart@@date_debut@@dtabbr@ to @dtend@@date_fin@@dtabbr@',
121
-	'date_fmt_periode_from' => 'From',
122
-	'date_fmt_periode_to' => 'to',
123
-	'date_fmt_saison_annee' => '@saison@ @annee@',
124
-	'date_heures' => 'hours',
125
-	'date_hier' => 'yesterday',
126
-	'date_il_y_a' => '@delai@ ago',
127
-	'date_jnum1' => '1',
128
-	'date_jnum10' => '10',
129
-	'date_jnum11' => '11',
130
-	'date_jnum12' => '12',
131
-	'date_jnum13' => '13',
132
-	'date_jnum14' => '14',
133
-	'date_jnum15' => '15',
134
-	'date_jnum16' => '16',
135
-	'date_jnum17' => '17',
136
-	'date_jnum18' => '18',
137
-	'date_jnum19' => '19',
138
-	'date_jnum2' => '2',
139
-	'date_jnum20' => '20',
140
-	'date_jnum21' => '21',
141
-	'date_jnum22' => '22',
142
-	'date_jnum23' => '23',
143
-	'date_jnum24' => '24',
144
-	'date_jnum25' => '25',
145
-	'date_jnum26' => '26',
146
-	'date_jnum27' => '27',
147
-	'date_jnum28' => '28',
148
-	'date_jnum29' => '29',
149
-	'date_jnum3' => '3',
150
-	'date_jnum30' => '30',
151
-	'date_jnum31' => '31',
152
-	'date_jnum4' => '4',
153
-	'date_jnum5' => '5',
154
-	'date_jnum6' => '6',
155
-	'date_jnum7' => '7',
156
-	'date_jnum8' => '8',
157
-	'date_jnum9' => '9',
158
-	'date_jour_1' => 'Sunday',
159
-	'date_jour_1_abbr' => 'Sun.',
160
-	'date_jour_1_initiale' => 'S.',
161
-	'date_jour_2' => 'Monday',
162
-	'date_jour_2_abbr' => 'Mon.',
163
-	'date_jour_2_initiale' => 'M.',
164
-	'date_jour_3' => 'Tuesday',
165
-	'date_jour_3_abbr' => 'Tue.',
166
-	'date_jour_3_initiale' => 'T.',
167
-	'date_jour_4' => 'Wednesday',
168
-	'date_jour_4_abbr' => 'Wed.',
169
-	'date_jour_4_initiale' => 'W.',
170
-	'date_jour_5' => 'Thursday',
171
-	'date_jour_5_abbr' => 'Thu.',
172
-	'date_jour_5_initiale' => 'T.',
173
-	'date_jour_6' => 'Friday',
174
-	'date_jour_6_abbr' => 'Fri.',
175
-	'date_jour_6_initiale' => 'F.',
176
-	'date_jour_7' => 'Saturday',
177
-	'date_jour_7_abbr' => 'Sat.',
178
-	'date_jour_7_initiale' => 'S.',
179
-	'date_jours' => 'days',
180
-	'date_minutes' => 'minutes',
181
-	'date_mois' => 'months',
182
-	'date_mois_1' => 'January',
183
-	'date_mois_10' => 'October',
184
-	'date_mois_10_abbr' => 'Oct',
185
-	'date_mois_11' => 'November',
186
-	'date_mois_11_abbr' => 'Nov',
187
-	'date_mois_12' => 'December',
188
-	'date_mois_12_abbr' => 'Dec',
189
-	'date_mois_1_abbr' => 'Jan',
190
-	'date_mois_2' => 'February',
191
-	'date_mois_2_abbr' => 'Feb',
192
-	'date_mois_3' => 'March',
193
-	'date_mois_3_abbr' => 'Mar',
194
-	'date_mois_4' => 'April',
195
-	'date_mois_4_abbr' => 'Apr',
196
-	'date_mois_5' => 'May',
197
-	'date_mois_5_abbr' => 'May',
198
-	'date_mois_6' => 'June',
199
-	'date_mois_6_abbr' => 'Jun',
200
-	'date_mois_7' => 'July',
201
-	'date_mois_7_abbr' => 'Jul',
202
-	'date_mois_8' => 'August',
203
-	'date_mois_8_abbr' => 'Aug',
204
-	'date_mois_9' => 'September',
205
-	'date_mois_9_abbr' => 'Sep',
206
-	'date_saison_1' => 'winter',
207
-	'date_saison_2' => 'spring',
208
-	'date_saison_3' => 'summer',
209
-	'date_saison_4' => 'autumn',
210
-	'date_secondes' => 'seconds',
211
-	'date_semaines' => 'weeks',
212
-	'date_un_mois' => 'month',
213
-	'date_une_heure' => 'hour',
214
-	'date_une_minute' => 'minute',
215
-	'date_une_seconde' => 'second',
216
-	'date_une_semaine' => 'week',
217
-	'dirs_commencer' => ' in order to start installation for real',
218
-	'dirs_preliminaire' => 'Preliminary: <b>Setting up access permissions</b>',
219
-	'dirs_probleme_droits' => 'Problem with access permissions',
220
-	'dirs_repertoires_absents' => '<p><b>The following directories were not found: </b></p><ul>@bad_dirs@.</ul>
91
+    // D
92
+    'date_aujourdhui' => 'today',
93
+    'date_avant_jc' => 'B.C.',
94
+    'date_dans' => 'in @delai@',
95
+    'date_de_mois_1' => '@j@ @nommois@',
96
+    'date_de_mois_10' => '@j@ @nommois@',
97
+    'date_de_mois_11' => '@j@ @nommois@',
98
+    'date_de_mois_12' => '@j@ @nommois@',
99
+    'date_de_mois_2' => '@j@ @nommois@',
100
+    'date_de_mois_3' => '@j@ @nommois@',
101
+    'date_de_mois_4' => '@j@ @nommois@',
102
+    'date_de_mois_5' => '@j@ @nommois@',
103
+    'date_de_mois_6' => '@j@ @nommois@',
104
+    'date_de_mois_7' => '@j@ @nommois@',
105
+    'date_de_mois_8' => '@j@ @nommois@',
106
+    'date_de_mois_9' => '@j@ @nommois@',
107
+    'date_demain' => 'tomorrow',
108
+    'date_fmt_heures_minutes' => '@h@:@m@',
109
+    'date_fmt_heures_minutes_court' => '@h@:@m@',
110
+    'date_fmt_jour' => '@nomjour@ @jour@',
111
+    'date_fmt_jour_heure' => '@jour@ at @heure@',
112
+    'date_fmt_jour_heure_debut_fin' => '@jour@ from @heure_debut@ to @heure_fin@',
113
+    'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ from @heure_debut@@dtabbr@ to @dtend@@heure_fin@@dtabbr@',
114
+    'date_fmt_jour_mois' => '@jourmois@',
115
+    'date_fmt_jour_mois_annee' => '@jourmois@ @annee@',
116
+    'date_fmt_mois_annee' => '@nommois@ @annee@',
117
+    'date_fmt_nomjour' => '@nomjour@ @date@',
118
+    'date_fmt_nomjour_date' => 'on @nomjour@ @date@',
119
+    'date_fmt_periode' => 'From @date_debut@ to @date_fin@',
120
+    'date_fmt_periode_abbr' => 'From @dtart@@date_debut@@dtabbr@ to @dtend@@date_fin@@dtabbr@',
121
+    'date_fmt_periode_from' => 'From',
122
+    'date_fmt_periode_to' => 'to',
123
+    'date_fmt_saison_annee' => '@saison@ @annee@',
124
+    'date_heures' => 'hours',
125
+    'date_hier' => 'yesterday',
126
+    'date_il_y_a' => '@delai@ ago',
127
+    'date_jnum1' => '1',
128
+    'date_jnum10' => '10',
129
+    'date_jnum11' => '11',
130
+    'date_jnum12' => '12',
131
+    'date_jnum13' => '13',
132
+    'date_jnum14' => '14',
133
+    'date_jnum15' => '15',
134
+    'date_jnum16' => '16',
135
+    'date_jnum17' => '17',
136
+    'date_jnum18' => '18',
137
+    'date_jnum19' => '19',
138
+    'date_jnum2' => '2',
139
+    'date_jnum20' => '20',
140
+    'date_jnum21' => '21',
141
+    'date_jnum22' => '22',
142
+    'date_jnum23' => '23',
143
+    'date_jnum24' => '24',
144
+    'date_jnum25' => '25',
145
+    'date_jnum26' => '26',
146
+    'date_jnum27' => '27',
147
+    'date_jnum28' => '28',
148
+    'date_jnum29' => '29',
149
+    'date_jnum3' => '3',
150
+    'date_jnum30' => '30',
151
+    'date_jnum31' => '31',
152
+    'date_jnum4' => '4',
153
+    'date_jnum5' => '5',
154
+    'date_jnum6' => '6',
155
+    'date_jnum7' => '7',
156
+    'date_jnum8' => '8',
157
+    'date_jnum9' => '9',
158
+    'date_jour_1' => 'Sunday',
159
+    'date_jour_1_abbr' => 'Sun.',
160
+    'date_jour_1_initiale' => 'S.',
161
+    'date_jour_2' => 'Monday',
162
+    'date_jour_2_abbr' => 'Mon.',
163
+    'date_jour_2_initiale' => 'M.',
164
+    'date_jour_3' => 'Tuesday',
165
+    'date_jour_3_abbr' => 'Tue.',
166
+    'date_jour_3_initiale' => 'T.',
167
+    'date_jour_4' => 'Wednesday',
168
+    'date_jour_4_abbr' => 'Wed.',
169
+    'date_jour_4_initiale' => 'W.',
170
+    'date_jour_5' => 'Thursday',
171
+    'date_jour_5_abbr' => 'Thu.',
172
+    'date_jour_5_initiale' => 'T.',
173
+    'date_jour_6' => 'Friday',
174
+    'date_jour_6_abbr' => 'Fri.',
175
+    'date_jour_6_initiale' => 'F.',
176
+    'date_jour_7' => 'Saturday',
177
+    'date_jour_7_abbr' => 'Sat.',
178
+    'date_jour_7_initiale' => 'S.',
179
+    'date_jours' => 'days',
180
+    'date_minutes' => 'minutes',
181
+    'date_mois' => 'months',
182
+    'date_mois_1' => 'January',
183
+    'date_mois_10' => 'October',
184
+    'date_mois_10_abbr' => 'Oct',
185
+    'date_mois_11' => 'November',
186
+    'date_mois_11_abbr' => 'Nov',
187
+    'date_mois_12' => 'December',
188
+    'date_mois_12_abbr' => 'Dec',
189
+    'date_mois_1_abbr' => 'Jan',
190
+    'date_mois_2' => 'February',
191
+    'date_mois_2_abbr' => 'Feb',
192
+    'date_mois_3' => 'March',
193
+    'date_mois_3_abbr' => 'Mar',
194
+    'date_mois_4' => 'April',
195
+    'date_mois_4_abbr' => 'Apr',
196
+    'date_mois_5' => 'May',
197
+    'date_mois_5_abbr' => 'May',
198
+    'date_mois_6' => 'June',
199
+    'date_mois_6_abbr' => 'Jun',
200
+    'date_mois_7' => 'July',
201
+    'date_mois_7_abbr' => 'Jul',
202
+    'date_mois_8' => 'August',
203
+    'date_mois_8_abbr' => 'Aug',
204
+    'date_mois_9' => 'September',
205
+    'date_mois_9_abbr' => 'Sep',
206
+    'date_saison_1' => 'winter',
207
+    'date_saison_2' => 'spring',
208
+    'date_saison_3' => 'summer',
209
+    'date_saison_4' => 'autumn',
210
+    'date_secondes' => 'seconds',
211
+    'date_semaines' => 'weeks',
212
+    'date_un_mois' => 'month',
213
+    'date_une_heure' => 'hour',
214
+    'date_une_minute' => 'minute',
215
+    'date_une_seconde' => 'second',
216
+    'date_une_semaine' => 'week',
217
+    'dirs_commencer' => ' in order to start installation for real',
218
+    'dirs_preliminaire' => 'Preliminary: <b>Setting up access permissions</b>',
219
+    'dirs_probleme_droits' => 'Problem with access permissions',
220
+    'dirs_repertoires_absents' => '<p><b>The following directories were not found: </b></p><ul>@bad_dirs@.</ul>
221 221
   <p>It is possible that this is due to inappropriate lower or upper case letters in directory names.
222 222
   Please check that the case of the letters in the names of these directories match what is displayed
223 223
   above. If they don’t, correct the directory names using your FTP client.</p>
224 224
   <p>Once this is done, you can',
225
-	'dirs_repertoires_suivants' => '<p><b>The following directories do not have write permission: </b></p><ul>@bad_dirs@</ul>
225
+    'dirs_repertoires_suivants' => '<p><b>The following directories do not have write permission: </b></p><ul>@bad_dirs@</ul>
226 226
 <p>To change this, use your FTP client to set access permissions for each
227 227
  of these directories. The procedure is detailed in the installation guide.</p>
228 228
   <p>Once you have done this, you can ',
229
-	'double_occurrence' => 'Two instances of @balise@',
229
+    'double_occurrence' => 'Two instances of @balise@',
230 230
 
231
-	// E
232
-	'en_cours' => 'processing',
233
-	'envoi_via_le_site' => 'Sent via the site',
234
-	'erreur' => 'Error',
235
-	'erreur_balise_non_fermee' => 'last tag not closed:',
236
-	'erreur_technique_ajaxform' => 'Ooops. An unexpected error prevented to submit the form. You can try again.',
237
-	'erreur_technique_enregistrement_champs' => 'A technical error prevented the right registration of the field @champs@.',
238
-	'erreur_technique_enregistrement_impossible' => 'A technical error prevented the registration.',
239
-	'erreur_texte' => 'error(s)',
240
-	'etape' => 'Step',
231
+    // E
232
+    'en_cours' => 'processing',
233
+    'envoi_via_le_site' => 'Sent via the site',
234
+    'erreur' => 'Error',
235
+    'erreur_balise_non_fermee' => 'last tag not closed:',
236
+    'erreur_technique_ajaxform' => 'Ooops. An unexpected error prevented to submit the form. You can try again.',
237
+    'erreur_technique_enregistrement_champs' => 'A technical error prevented the right registration of the field @champs@.',
238
+    'erreur_technique_enregistrement_impossible' => 'A technical error prevented the registration.',
239
+    'erreur_texte' => 'error(s)',
240
+    'etape' => 'Step',
241 241
 
242
-	// F
243
-	'fichier_introuvable' => 'File not found: @fichier@',
244
-	'fonction_introuvable' => 'Function @fonction@() not found.',
245
-	'form_auteur_confirmation' => 'Please confirm your email address',
246
-	'form_auteur_email_modifie' => 'Your email address has been changed.',
247
-	'form_auteur_envoi_mail_confirmation' => 'A confirmation email has been sent to @email@. You must visit the URL mentioned in the message to validate your email address.',
248
-	'form_auteur_mail_confirmation' => 'Hello,
242
+    // F
243
+    'fichier_introuvable' => 'File not found: @fichier@',
244
+    'fonction_introuvable' => 'Function @fonction@() not found.',
245
+    'form_auteur_confirmation' => 'Please confirm your email address',
246
+    'form_auteur_email_modifie' => 'Your email address has been changed.',
247
+    'form_auteur_envoi_mail_confirmation' => 'A confirmation email has been sent to @email@. You must visit the URL mentioned in the message to validate your email address.',
248
+    'form_auteur_mail_confirmation' => 'Hello,
249 249
 
250 250
 You have asked to change your email address.
251 251
 To confirm your new address, you need to connect to
@@ -253,347 +253,347 @@  discard block
 block discarded – undo
253 253
 
254 254
     @url@
255 255
 ',
256
-	'form_deja_inscrit' => 'You are already registered.',
257
-	'form_email_non_valide' => 'Your email address is not valid.',
258
-	'form_forum_access_refuse' => 'You no longer have access to this site.',
259
-	'form_forum_bonjour' => 'Hello @nom@,',
260
-	'form_forum_confirmer_email' => 'To confirm your email address, follow this link: @url_confirm@',
261
-	'form_forum_email_deja_enregistre' => 'This email address is already registered. Enter your usual password.',
262
-	'form_forum_identifiant_mail' => 'Your new identifier has just been emailed to you.',
263
-	'form_forum_identifiants' => 'Personal identifiers',
264
-	'form_forum_indiquer_nom_email' => 'Enter your name and email address here. You will receive your personal identifier shortly by email.',
265
-	'form_forum_login' => 'login:',
266
-	'form_forum_message_auto' => '(this is an automated message)',
267
-	'form_forum_pass' => 'password:',
268
-	'form_forum_probleme_mail' => 'Mail problem: the identifier could not be sent.',
269
-	'form_forum_voici1' => 'Here are your identifiers. You may now participate on the site
256
+    'form_deja_inscrit' => 'You are already registered.',
257
+    'form_email_non_valide' => 'Your email address is not valid.',
258
+    'form_forum_access_refuse' => 'You no longer have access to this site.',
259
+    'form_forum_bonjour' => 'Hello @nom@,',
260
+    'form_forum_confirmer_email' => 'To confirm your email address, follow this link: @url_confirm@',
261
+    'form_forum_email_deja_enregistre' => 'This email address is already registered. Enter your usual password.',
262
+    'form_forum_identifiant_mail' => 'Your new identifier has just been emailed to you.',
263
+    'form_forum_identifiants' => 'Personal identifiers',
264
+    'form_forum_indiquer_nom_email' => 'Enter your name and email address here. You will receive your personal identifier shortly by email.',
265
+    'form_forum_login' => 'login:',
266
+    'form_forum_message_auto' => '(this is an automated message)',
267
+    'form_forum_pass' => 'password:',
268
+    'form_forum_probleme_mail' => 'Mail problem: the identifier could not be sent.',
269
+    'form_forum_voici1' => 'Here are your identifiers. You may now participate on the site
270 270
 "@nom_site_spip@" (@adresse_site@):',
271
-	'form_forum_voici2' => 'Here are your identifiers for submitting articles to
271
+    'form_forum_voici2' => 'Here are your identifiers for submitting articles to
272 272
 the site "@nom_site_spip@" (@adresse_login@):',
273
-	'form_indiquer_email' => 'Please enter your email address.',
274
-	'form_indiquer_nom' => 'Please enter your name.',
275
-	'form_indiquer_nom_site' => 'Please enter the name of your site.',
276
-	'form_pet_deja_enregistre' => 'This site is already registered',
277
-	'form_pet_signature_pasprise' => 'Your signature has been ignored.',
278
-	'form_prop_confirmer_envoi' => 'Confirm send',
279
-	'form_prop_description' => 'Description/comment',
280
-	'form_prop_enregistre' => 'Your suggestion has been recorded. It will appear online after being validated by the administrators of this site.',
281
-	'form_prop_envoyer' => 'Send a message',
282
-	'form_prop_indiquer_email' => 'Please enter a valid email address',
283
-	'form_prop_indiquer_nom_site' => 'Please enter the site’s name.',
284
-	'form_prop_indiquer_sujet' => 'Please enter a subject',
285
-	'form_prop_message_envoye' => 'Message sent',
286
-	'form_prop_non_enregistre' => 'Your suggestion has not been recorded.',
287
-	'form_prop_sujet' => 'Subject',
288
-	'form_prop_url_site' => 'Site URL',
289
-	'format_date_attendu' => 'Enter a date in jj/mm/aaaa format.',
290
-	'format_date_incorrecte' => 'The date or its format is incorrect.',
291
-	'format_heure_attendu' => 'Enter a time in hh:mm format.',
292
-	'format_heure_incorrecte' => 'The hour or its format is incorrect.',
293
-	'forum_non_inscrit' => 'Either you are not registered, or the address or password are wrong.',
294
-	'forum_par_auteur' => 'by @auteur@',
295
-	'forum_titre_erreur' => 'Error...',
273
+    'form_indiquer_email' => 'Please enter your email address.',
274
+    'form_indiquer_nom' => 'Please enter your name.',
275
+    'form_indiquer_nom_site' => 'Please enter the name of your site.',
276
+    'form_pet_deja_enregistre' => 'This site is already registered',
277
+    'form_pet_signature_pasprise' => 'Your signature has been ignored.',
278
+    'form_prop_confirmer_envoi' => 'Confirm send',
279
+    'form_prop_description' => 'Description/comment',
280
+    'form_prop_enregistre' => 'Your suggestion has been recorded. It will appear online after being validated by the administrators of this site.',
281
+    'form_prop_envoyer' => 'Send a message',
282
+    'form_prop_indiquer_email' => 'Please enter a valid email address',
283
+    'form_prop_indiquer_nom_site' => 'Please enter the site’s name.',
284
+    'form_prop_indiquer_sujet' => 'Please enter a subject',
285
+    'form_prop_message_envoye' => 'Message sent',
286
+    'form_prop_non_enregistre' => 'Your suggestion has not been recorded.',
287
+    'form_prop_sujet' => 'Subject',
288
+    'form_prop_url_site' => 'Site URL',
289
+    'format_date_attendu' => 'Enter a date in jj/mm/aaaa format.',
290
+    'format_date_incorrecte' => 'The date or its format is incorrect.',
291
+    'format_heure_attendu' => 'Enter a time in hh:mm format.',
292
+    'format_heure_incorrecte' => 'The hour or its format is incorrect.',
293
+    'forum_non_inscrit' => 'Either you are not registered, or the address or password are wrong.',
294
+    'forum_par_auteur' => 'by @auteur@',
295
+    'forum_titre_erreur' => 'Error...',
296 296
 
297
-	// I
298
-	'ical_texte_rss_articles' => 'The site’s backend file for articles is:',
299
-	'ical_texte_rss_articles2' => 'You can also get backend files for individual sections on the site:',
300
-	'ical_texte_rss_breves' => 'Furthermore, there is a file containing the site’s news items. By selecting a section number, you can choose to get news items in that section only.',
301
-	'icone_a_suivre' => 'Launch pad',
302
-	'icone_admin_site' => 'Site administration',
303
-	'icone_agenda' => 'Calendar',
304
-	'icone_aide_ligne' => 'Help',
305
-	'icone_articles' => 'Articles',
306
-	'icone_auteurs' => 'Authors',
307
-	'icone_brouteur' => 'Quick browsing',
308
-	'icone_configuration_site' => 'Configuration',
309
-	'icone_configurer_site' => 'Configure your site',
310
-	'icone_creer_nouvel_auteur' => 'Create a new author',
311
-	'icone_creer_rubrique' => 'Create a section',
312
-	'icone_creer_sous_rubrique' => 'Create a subsection',
313
-	'icone_deconnecter' => 'Log out',
314
-	'icone_discussions' => 'Discussions',
315
-	'icone_doc_rubrique' => 'Documents attached',
316
-	'icone_ecrire_article' => 'Write a new article',
317
-	'icone_edition_site' => 'Edit site',
318
-	'icone_gestion_langues' => 'Language options',
319
-	'icone_informations_personnelles' => 'Personal information',
320
-	'icone_interface_complet' => 'full interface',
321
-	'icone_interface_simple' => 'Simplified interface',
322
-	'icone_maintenance_site' => 'Site maintenance',
323
-	'icone_messagerie_personnelle' => 'Private messages',
324
-	'icone_repartition_debut' => 'Show distribution from the start',
325
-	'icone_rubriques' => 'Sections',
326
-	'icone_sauver_site' => 'Site backup',
327
-	'icone_site_entier' => 'The entire site',
328
-	'icone_sites_references' => 'Referenced sites',
329
-	'icone_statistiques' => 'Site statistics',
330
-	'icone_suivi_activite' => 'Follow site activity',
331
-	'icone_suivi_actualite' => 'Site statistics',
332
-	'icone_suivi_pettions' => 'Manage petitions',
333
-	'icone_suivi_revisions' => 'Article revisions',
334
-	'icone_supprimer_document' => 'Delete this document',
335
-	'icone_supprimer_image' => 'Delete this image',
336
-	'icone_tous_articles' => 'All your articles',
337
-	'icone_tous_auteur' => 'All authors',
338
-	'icone_tous_visiteur' => 'All visitors',
339
-	'icone_visiter_site' => 'View the public site',
340
-	'icone_voir_en_ligne' => 'View online',
341
-	'img_indisponible' => 'image unavailable',
342
-	'impossible' => 'impossible',
343
-	'info_a_suivre' => 'LAUNCH PAD»',
344
-	'info_acces_interdit' => 'Access forbidden',
345
-	'info_acces_refuse' => 'Access denied',
346
-	'info_action' => 'Action: @action@',
347
-	'info_administrer_rubriques' => 'You can manage this section and any subsections',
348
-	'info_adresse_non_indiquee' => 'You did not specify an address to test!',
349
-	'info_aide' => 'HELP:',
350
-	'info_ajouter_mot' => 'Add keyword',
351
-	'info_annonce' => 'ANNOUNCEMENT',
352
-	'info_annonces_generales' => 'General announcements:',
353
-	'info_article_propose' => 'Article submitted',
354
-	'info_article_publie' => 'Article published',
355
-	'info_article_redaction' => 'Article in progress',
356
-	'info_article_refuse' => 'Article rejected',
357
-	'info_article_supprime' => 'Article deleted',
358
-	'info_articles' => 'Articles',
359
-	'info_articles_a_valider' => 'Articles awaiting validation',
360
-	'info_articles_nb' => '@nb@ articles',
361
-	'info_articles_proposes' => 'Articles submitted',
362
-	'info_articles_un' => '1 article',
363
-	'info_auteurs_nombre' => 'author(s):',
364
-	'info_authentification_ftp' => 'Authentication (by FTP).',
365
-	'info_breves_2' => 'news',
366
-	'info_breves_nb' => '@nb@ news items',
367
-	'info_breves_un' => '1 news item',
368
-	'info_connexion_refusee' => 'Connection denied',
369
-	'info_contact_developpeur' => 'Please contact a developer.',
370
-	'info_contenance' => 'This site contains:',
371
-	'info_contribution' => 'contributions',
372
-	'info_copyright' => '@spip@ is free software distributed @lien_gpl@.',
373
-	'info_copyright_doc' => 'For more visit <a href="@spipnet@">@spipnet_affiche@</a>.',
374
-	'info_copyright_gpl' => 'under the GPL license',
375
-	'info_cours_edition' => 'In progress',
376
-	'info_creer_repertoire' => 'Please create a file or a directory called:',
377
-	'info_creer_repertoire_2' => 'inside the sub-directory <b>@repertoire@</b>, then',
378
-	'info_creer_vignette' => 'automatic thumbnail creation',
379
-	'info_creerdansrubrique_non_autorise' => 'You don’t have sufficient rights to create content in this section',
380
-	'info_deplier' => 'Unfold',
381
-	'info_descriptif_nombre' => 'description(s):',
382
-	'info_description' => 'Description:',
383
-	'info_description_2' => 'Description:',
384
-	'info_dimension' => 'Size:',
385
-	'info_documents_nb' => '@nb@ documents',
386
-	'info_documents_un' => '1 document',
387
-	'info_ecire_message_prive' => 'Write a private message',
388
-	'info_email_invalide' => 'Invalid email address.',
389
-	'info_en_cours_validation' => 'Your articles in progress',
390
-	'info_en_ligne' => 'Online now:',
391
-	'info_envoyer_message_prive' => 'Send a private message to this author',
392
-	'info_erreur_requete' => 'Error in query:',
393
-	'info_erreur_squelette2' => 'No <b>@fichier@</b> template available ...',
394
-	'info_erreur_systeme' => 'System error (errno @errsys@)',
395
-	'info_erreur_systeme2' => 'The hard disk may be full or the database damaged. <br />
297
+    // I
298
+    'ical_texte_rss_articles' => 'The site’s backend file for articles is:',
299
+    'ical_texte_rss_articles2' => 'You can also get backend files for individual sections on the site:',
300
+    'ical_texte_rss_breves' => 'Furthermore, there is a file containing the site’s news items. By selecting a section number, you can choose to get news items in that section only.',
301
+    'icone_a_suivre' => 'Launch pad',
302
+    'icone_admin_site' => 'Site administration',
303
+    'icone_agenda' => 'Calendar',
304
+    'icone_aide_ligne' => 'Help',
305
+    'icone_articles' => 'Articles',
306
+    'icone_auteurs' => 'Authors',
307
+    'icone_brouteur' => 'Quick browsing',
308
+    'icone_configuration_site' => 'Configuration',
309
+    'icone_configurer_site' => 'Configure your site',
310
+    'icone_creer_nouvel_auteur' => 'Create a new author',
311
+    'icone_creer_rubrique' => 'Create a section',
312
+    'icone_creer_sous_rubrique' => 'Create a subsection',
313
+    'icone_deconnecter' => 'Log out',
314
+    'icone_discussions' => 'Discussions',
315
+    'icone_doc_rubrique' => 'Documents attached',
316
+    'icone_ecrire_article' => 'Write a new article',
317
+    'icone_edition_site' => 'Edit site',
318
+    'icone_gestion_langues' => 'Language options',
319
+    'icone_informations_personnelles' => 'Personal information',
320
+    'icone_interface_complet' => 'full interface',
321
+    'icone_interface_simple' => 'Simplified interface',
322
+    'icone_maintenance_site' => 'Site maintenance',
323
+    'icone_messagerie_personnelle' => 'Private messages',
324
+    'icone_repartition_debut' => 'Show distribution from the start',
325
+    'icone_rubriques' => 'Sections',
326
+    'icone_sauver_site' => 'Site backup',
327
+    'icone_site_entier' => 'The entire site',
328
+    'icone_sites_references' => 'Referenced sites',
329
+    'icone_statistiques' => 'Site statistics',
330
+    'icone_suivi_activite' => 'Follow site activity',
331
+    'icone_suivi_actualite' => 'Site statistics',
332
+    'icone_suivi_pettions' => 'Manage petitions',
333
+    'icone_suivi_revisions' => 'Article revisions',
334
+    'icone_supprimer_document' => 'Delete this document',
335
+    'icone_supprimer_image' => 'Delete this image',
336
+    'icone_tous_articles' => 'All your articles',
337
+    'icone_tous_auteur' => 'All authors',
338
+    'icone_tous_visiteur' => 'All visitors',
339
+    'icone_visiter_site' => 'View the public site',
340
+    'icone_voir_en_ligne' => 'View online',
341
+    'img_indisponible' => 'image unavailable',
342
+    'impossible' => 'impossible',
343
+    'info_a_suivre' => 'LAUNCH PAD»',
344
+    'info_acces_interdit' => 'Access forbidden',
345
+    'info_acces_refuse' => 'Access denied',
346
+    'info_action' => 'Action: @action@',
347
+    'info_administrer_rubriques' => 'You can manage this section and any subsections',
348
+    'info_adresse_non_indiquee' => 'You did not specify an address to test!',
349
+    'info_aide' => 'HELP:',
350
+    'info_ajouter_mot' => 'Add keyword',
351
+    'info_annonce' => 'ANNOUNCEMENT',
352
+    'info_annonces_generales' => 'General announcements:',
353
+    'info_article_propose' => 'Article submitted',
354
+    'info_article_publie' => 'Article published',
355
+    'info_article_redaction' => 'Article in progress',
356
+    'info_article_refuse' => 'Article rejected',
357
+    'info_article_supprime' => 'Article deleted',
358
+    'info_articles' => 'Articles',
359
+    'info_articles_a_valider' => 'Articles awaiting validation',
360
+    'info_articles_nb' => '@nb@ articles',
361
+    'info_articles_proposes' => 'Articles submitted',
362
+    'info_articles_un' => '1 article',
363
+    'info_auteurs_nombre' => 'author(s):',
364
+    'info_authentification_ftp' => 'Authentication (by FTP).',
365
+    'info_breves_2' => 'news',
366
+    'info_breves_nb' => '@nb@ news items',
367
+    'info_breves_un' => '1 news item',
368
+    'info_connexion_refusee' => 'Connection denied',
369
+    'info_contact_developpeur' => 'Please contact a developer.',
370
+    'info_contenance' => 'This site contains:',
371
+    'info_contribution' => 'contributions',
372
+    'info_copyright' => '@spip@ is free software distributed @lien_gpl@.',
373
+    'info_copyright_doc' => 'For more visit <a href="@spipnet@">@spipnet_affiche@</a>.',
374
+    'info_copyright_gpl' => 'under the GPL license',
375
+    'info_cours_edition' => 'In progress',
376
+    'info_creer_repertoire' => 'Please create a file or a directory called:',
377
+    'info_creer_repertoire_2' => 'inside the sub-directory <b>@repertoire@</b>, then',
378
+    'info_creer_vignette' => 'automatic thumbnail creation',
379
+    'info_creerdansrubrique_non_autorise' => 'You don’t have sufficient rights to create content in this section',
380
+    'info_deplier' => 'Unfold',
381
+    'info_descriptif_nombre' => 'description(s):',
382
+    'info_description' => 'Description:',
383
+    'info_description_2' => 'Description:',
384
+    'info_dimension' => 'Size:',
385
+    'info_documents_nb' => '@nb@ documents',
386
+    'info_documents_un' => '1 document',
387
+    'info_ecire_message_prive' => 'Write a private message',
388
+    'info_email_invalide' => 'Invalid email address.',
389
+    'info_en_cours_validation' => 'Your articles in progress',
390
+    'info_en_ligne' => 'Online now:',
391
+    'info_envoyer_message_prive' => 'Send a private message to this author',
392
+    'info_erreur_requete' => 'Error in query:',
393
+    'info_erreur_squelette2' => 'No <b>@fichier@</b> template available ...',
394
+    'info_erreur_systeme' => 'System error (errno @errsys@)',
395
+    'info_erreur_systeme2' => 'The hard disk may be full or the database damaged. <br />
396 396
 <span style="color:red;">Try <a href=\'@script@\'>repairing the database</a>, or contact your service provider.</span>',
397
-	'info_fini' => 'Done!',
398
-	'info_format_image' => 'Image format to be used for vignettes: @gd_formats@.',
399
-	'info_format_non_defini' => 'undefined format',
400
-	'info_grand_ecran' => 'Large display',
401
-	'info_image_aide' => 'HELP',
402
-	'info_image_process_titre' => 'How to create thumbnails',
403
-	'info_impossible_lire_page' => '<b>Error!</b> The page <tt><html>@test_proxy@</html></tt> cannot be viewed through the proxy',
404
-	'info_installation_systeme_publication' => 'Installing publication system...',
405
-	'info_installer_documents' => 'You can automatically install all documents in the folder @upload@.',
406
-	'info_installer_ftp' => 'As an administrator, you can install files via FTP to the folder @upload@ in order to select them directly from here.',
407
-	'info_installer_images' => 'You can install images in the formats JPEG, GIF, and PNG.',
408
-	'info_installer_images_dossier' => 'Install images in folder @upload@ if you want to select them here.',
409
-	'info_interface_complete' => 'full interface',
410
-	'info_interface_simple' => 'Simplified interface',
411
-	'info_joindre_document_article' => 'You can attach the following types of document to your article',
412
-	'info_joindre_document_rubrique' => 'You can add documents of the following types to this section ',
413
-	'info_joindre_documents_article' => 'You can attach documents of the following types to your article:',
414
-	'info_l_article' => 'the article',
415
-	'info_la_breve' => 'the news item',
416
-	'info_la_rubrique' => 'the section',
417
-	'info_langue_principale' => 'Main language for site',
418
-	'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels',
419
-	'info_les_auteurs_1' => 'by @les_auteurs@',
420
-	'info_logo_format_interdit' => 'Only logos in these formats @formats@ are allowed.',
421
-	'info_logo_max_poids' => 'Logos must be less than @maxi@ (this file is @actuel@).',
422
-	'info_mail_fournisseur' => '[email protected]',
423
-	'info_message_2' => 'MESSAGE',
424
-	'info_message_supprime' => 'MESSAGE DELETED',
425
-	'info_messages_nb' => '@nb@ messages',
426
-	'info_messages_un' => '1 message',
427
-	'info_mise_en_ligne' => 'Published on:',
428
-	'info_modification_parametres_securite' => 'modifying security parameters',
429
-	'info_mois_courant' => 'During the month:',
430
-	'info_mot_cle_ajoute' => 'The following keyword was added to',
431
-	'info_multi_herit' => 'Default language',
432
-	'info_multi_langues_soulignees' => 'The <u>languages underlined</u> provide partial or total translations for all the interface texts. If you select these languages, many elements of the public site (dates, forms) will be translated automatically. As for the languages that are not underlined, those elements will be displayed using the site’s default language.',
433
-	'info_multilinguisme' => 'Multilingual',
434
-	'info_nom_non_utilisateurs_connectes' => 'Your name does not appear in the list of users online.',
435
-	'info_nom_utilisateurs_connectes' => 'Your name appears in the list of users online.',
436
-	'info_nombre_en_ligne' => 'Online now:',
437
-	'info_non_resultat' => 'No results for "@cherche_mot@"',
438
-	'info_non_utilisation_messagerie' => 'You are not using private messaging on this site.',
439
-	'info_nouveau_message' => 'YOU HAVE A NEW MESSAGE',
440
-	'info_nouveaux_messages' => 'YOU HAVE @total_messages@ NEW MESSAGES',
441
-	'info_numero_abbreviation' => 'No',
442
-	'info_obligatoire' => 'This information is required',
443
-	'info_page_actuelle' => 'Actual page',
444
-	'info_pense_bete' => 'MEMO',
445
-	'info_petit_ecran' => 'Small display',
446
-	'info_petition_close' => 'Petition closed',
447
-	'info_pixels' => 'pixels',
448
-	'info_plusieurs_mots_trouves' => 'Several keywords were found for "@cherche_mot@":',
449
-	'info_portfolio_automatique' => 'Automated portfolio:',
450
-	'info_premier_resultat' => '[First @debut_limit@ results out of @total@]',
451
-	'info_premier_resultat_sur' => '[First @debut_limit@ results out of @total@]',
452
-	'info_propose_1' => '[@nom_site_spip@] Submitted: @titre@',
453
-	'info_propose_2' => 'Article submitted
397
+    'info_fini' => 'Done!',
398
+    'info_format_image' => 'Image format to be used for vignettes: @gd_formats@.',
399
+    'info_format_non_defini' => 'undefined format',
400
+    'info_grand_ecran' => 'Large display',
401
+    'info_image_aide' => 'HELP',
402
+    'info_image_process_titre' => 'How to create thumbnails',
403
+    'info_impossible_lire_page' => '<b>Error!</b> The page <tt><html>@test_proxy@</html></tt> cannot be viewed through the proxy',
404
+    'info_installation_systeme_publication' => 'Installing publication system...',
405
+    'info_installer_documents' => 'You can automatically install all documents in the folder @upload@.',
406
+    'info_installer_ftp' => 'As an administrator, you can install files via FTP to the folder @upload@ in order to select them directly from here.',
407
+    'info_installer_images' => 'You can install images in the formats JPEG, GIF, and PNG.',
408
+    'info_installer_images_dossier' => 'Install images in folder @upload@ if you want to select them here.',
409
+    'info_interface_complete' => 'full interface',
410
+    'info_interface_simple' => 'Simplified interface',
411
+    'info_joindre_document_article' => 'You can attach the following types of document to your article',
412
+    'info_joindre_document_rubrique' => 'You can add documents of the following types to this section ',
413
+    'info_joindre_documents_article' => 'You can attach documents of the following types to your article:',
414
+    'info_l_article' => 'the article',
415
+    'info_la_breve' => 'the news item',
416
+    'info_la_rubrique' => 'the section',
417
+    'info_langue_principale' => 'Main language for site',
418
+    'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels',
419
+    'info_les_auteurs_1' => 'by @les_auteurs@',
420
+    'info_logo_format_interdit' => 'Only logos in these formats @formats@ are allowed.',
421
+    'info_logo_max_poids' => 'Logos must be less than @maxi@ (this file is @actuel@).',
422
+    'info_mail_fournisseur' => '[email protected]',
423
+    'info_message_2' => 'MESSAGE',
424
+    'info_message_supprime' => 'MESSAGE DELETED',
425
+    'info_messages_nb' => '@nb@ messages',
426
+    'info_messages_un' => '1 message',
427
+    'info_mise_en_ligne' => 'Published on:',
428
+    'info_modification_parametres_securite' => 'modifying security parameters',
429
+    'info_mois_courant' => 'During the month:',
430
+    'info_mot_cle_ajoute' => 'The following keyword was added to',
431
+    'info_multi_herit' => 'Default language',
432
+    'info_multi_langues_soulignees' => 'The <u>languages underlined</u> provide partial or total translations for all the interface texts. If you select these languages, many elements of the public site (dates, forms) will be translated automatically. As for the languages that are not underlined, those elements will be displayed using the site’s default language.',
433
+    'info_multilinguisme' => 'Multilingual',
434
+    'info_nom_non_utilisateurs_connectes' => 'Your name does not appear in the list of users online.',
435
+    'info_nom_utilisateurs_connectes' => 'Your name appears in the list of users online.',
436
+    'info_nombre_en_ligne' => 'Online now:',
437
+    'info_non_resultat' => 'No results for "@cherche_mot@"',
438
+    'info_non_utilisation_messagerie' => 'You are not using private messaging on this site.',
439
+    'info_nouveau_message' => 'YOU HAVE A NEW MESSAGE',
440
+    'info_nouveaux_messages' => 'YOU HAVE @total_messages@ NEW MESSAGES',
441
+    'info_numero_abbreviation' => 'No',
442
+    'info_obligatoire' => 'This information is required',
443
+    'info_page_actuelle' => 'Actual page',
444
+    'info_pense_bete' => 'MEMO',
445
+    'info_petit_ecran' => 'Small display',
446
+    'info_petition_close' => 'Petition closed',
447
+    'info_pixels' => 'pixels',
448
+    'info_plusieurs_mots_trouves' => 'Several keywords were found for "@cherche_mot@":',
449
+    'info_portfolio_automatique' => 'Automated portfolio:',
450
+    'info_premier_resultat' => '[First @debut_limit@ results out of @total@]',
451
+    'info_premier_resultat_sur' => '[First @debut_limit@ results out of @total@]',
452
+    'info_propose_1' => '[@nom_site_spip@] Submitted: @titre@',
453
+    'info_propose_2' => 'Article submitted
454 454
 -----------------',
455
-	'info_propose_3' => 'The article "@titre@" has been submitted for publication.',
456
-	'info_propose_4' => 'You are invited to review it and give your opinion',
457
-	'info_propose_5' => 'in the associated forum. It is available here:',
458
-	'info_publie_01' => 'The article "@titre@" was validated by @connect_nom@.',
459
-	'info_publie_1' => '[@nom_site_spip@] PUBLISHED: @titre@',
460
-	'info_publie_2' => 'Article published
455
+    'info_propose_3' => 'The article "@titre@" has been submitted for publication.',
456
+    'info_propose_4' => 'You are invited to review it and give your opinion',
457
+    'info_propose_5' => 'in the associated forum. It is available here:',
458
+    'info_publie_01' => 'The article "@titre@" was validated by @connect_nom@.',
459
+    'info_publie_1' => '[@nom_site_spip@] PUBLISHED: @titre@',
460
+    'info_publie_2' => 'Article published
461 461
 -----------------',
462
-	'info_rechercher' => 'Search',
463
-	'info_rechercher_02' => 'Search:',
464
-	'info_remplacer_vignette' => 'Replace the default vignette by a customised logo:',
465
-	'info_rubriques_nb' => '@nb@ sections',
466
-	'info_rubriques_un' => '1 section',
467
-	'info_sans_titre_2' => 'untitled',
468
-	'info_selectionner_fichier' => 'You can select a file from the folder @upload@',
469
-	'info_selectionner_fichier_2' => 'Select a file:',
470
-	'info_sites_nb' => '@nb@ sites',
471
-	'info_sites_un' => '1 site',
472
-	'info_supprimer_vignette' => 'delete the vignette',
473
-	'info_symbole_bleu' => 'A <b>blue</b> symbol indicates a <b>memo</b>: i.e. a message for your personal use.',
474
-	'info_symbole_jaune' => 'A <b>yellow</b> symbol indicates an <b>announcement to all editors</b>: it can be edited by all administrators, and is visible to all editors.',
475
-	'info_symbole_vert' => 'A <b>green</b> symbol indicates the <b>messages exchanged with other users</b> of the site.',
476
-	'info_telecharger_nouveau_logo' => 'Upload a new logo:',
477
-	'info_telecharger_ordinateur' => 'Upload from your computer:',
478
-	'info_tous_resultats_enregistres' => '[all the results are recorded]',
479
-	'info_tout_afficher' => 'Show all',
480
-	'info_travaux_texte' => 'This site is not yet set up. Please come back later...',
481
-	'info_travaux_titre' => 'Site under construction',
482
-	'info_trop_resultat' => 'Too many results for "@cherche_mot@"; please refine the search.',
483
-	'info_utilisation_messagerie_interne' => 'You are using the internal message system of this site.',
484
-	'info_valider_lien' => 'validate this link',
485
-	'info_verifier_image' => ', please make sure your images have been transferred correctly.',
486
-	'info_vignette_defaut' => 'Default vignette',
487
-	'info_vignette_personnalisee' => 'Custom vignette',
488
-	'info_visite' => 'visit:',
489
-	'info_vos_rendez_vous' => 'Your future appointments',
490
-	'infos_vos_pense_bete' => 'Your memos',
462
+    'info_rechercher' => 'Search',
463
+    'info_rechercher_02' => 'Search:',
464
+    'info_remplacer_vignette' => 'Replace the default vignette by a customised logo:',
465
+    'info_rubriques_nb' => '@nb@ sections',
466
+    'info_rubriques_un' => '1 section',
467
+    'info_sans_titre_2' => 'untitled',
468
+    'info_selectionner_fichier' => 'You can select a file from the folder @upload@',
469
+    'info_selectionner_fichier_2' => 'Select a file:',
470
+    'info_sites_nb' => '@nb@ sites',
471
+    'info_sites_un' => '1 site',
472
+    'info_supprimer_vignette' => 'delete the vignette',
473
+    'info_symbole_bleu' => 'A <b>blue</b> symbol indicates a <b>memo</b>: i.e. a message for your personal use.',
474
+    'info_symbole_jaune' => 'A <b>yellow</b> symbol indicates an <b>announcement to all editors</b>: it can be edited by all administrators, and is visible to all editors.',
475
+    'info_symbole_vert' => 'A <b>green</b> symbol indicates the <b>messages exchanged with other users</b> of the site.',
476
+    'info_telecharger_nouveau_logo' => 'Upload a new logo:',
477
+    'info_telecharger_ordinateur' => 'Upload from your computer:',
478
+    'info_tous_resultats_enregistres' => '[all the results are recorded]',
479
+    'info_tout_afficher' => 'Show all',
480
+    'info_travaux_texte' => 'This site is not yet set up. Please come back later...',
481
+    'info_travaux_titre' => 'Site under construction',
482
+    'info_trop_resultat' => 'Too many results for "@cherche_mot@"; please refine the search.',
483
+    'info_utilisation_messagerie_interne' => 'You are using the internal message system of this site.',
484
+    'info_valider_lien' => 'validate this link',
485
+    'info_verifier_image' => ', please make sure your images have been transferred correctly.',
486
+    'info_vignette_defaut' => 'Default vignette',
487
+    'info_vignette_personnalisee' => 'Custom vignette',
488
+    'info_visite' => 'visit:',
489
+    'info_vos_rendez_vous' => 'Your future appointments',
490
+    'infos_vos_pense_bete' => 'Your memos',
491 491
 
492
-	// L
493
-	'label_ajout_id_rapide' => 'Quick addition',
494
-	'label_poids_fichier' => 'Size',
495
-	'label_ponctuer' => '@label@:',
496
-	'lien_afficher_icones_seuls' => 'Show only icons',
497
-	'lien_afficher_texte_icones' => 'Show icons and text',
498
-	'lien_afficher_texte_seul' => 'Show only text',
499
-	'lien_aller_a_la_derniere_page' => 'Go to the last page',
500
-	'lien_aller_a_la_page_nb' => 'Go to page @nb@',
501
-	'lien_aller_a_la_page_precedente' => 'Go to the previous page',
502
-	'lien_aller_a_la_page_suivante' => 'Go to the next page',
503
-	'lien_aller_a_la_premiere_page' => 'Go to the first page',
504
-	'lien_liberer' => 'release',
505
-	'lien_liberer_tous' => 'Release all',
506
-	'lien_nouvea_pense_bete' => 'NEW MEMO',
507
-	'lien_nouveau_message' => 'NEW MESSAGE',
508
-	'lien_nouvelle_annonce' => 'NEW ANNOUNCEMENT',
509
-	'lien_petitions' => 'PETITION',
510
-	'lien_popularite' => 'popularity: @popularite@%',
511
-	'lien_racine_site' => 'SITE ROOT',
512
-	'lien_reessayer' => 'try again',
513
-	'lien_repondre_message' => 'Reply to this message',
514
-	'lien_supprimer' => 'delete',
515
-	'lien_tout_afficher' => 'Show all',
516
-	'lien_visite_site' => 'visit this site',
517
-	'lien_visites' => '@visites@ visits',
518
-	'lien_voir_auteur' => 'Check this author',
519
-	'ligne' => 'Line',
520
-	'login' => 'Connection',
521
-	'login_acces_prive' => 'access to the private area',
522
-	'login_autre_identifiant' => 'use a different ID',
523
-	'login_cookie_accepte' => 'Please configure your browser to accept them for this site.',
524
-	'login_cookie_oblige' => 'For secure identification, your browser must accept cookies.',
525
-	'login_deconnexion_ok' => 'Logged out.',
526
-	'login_erreur_pass' => 'Wrong password.',
527
-	'login_espace_prive' => 'private area',
528
-	'login_identifiant_inconnu' => 'The identifier "@login@" is unknown.',
529
-	'login_login' => 'Login:',
530
-	'login_login2' => 'Login or e-mail address:',
531
-	'login_login_pass_incorrect' => '(Wrong login or password).',
532
-	'login_motpasseoublie' => 'password forgotten?',
533
-	'login_non_securise' => 'Caution, this form is not secure.
492
+    // L
493
+    'label_ajout_id_rapide' => 'Quick addition',
494
+    'label_poids_fichier' => 'Size',
495
+    'label_ponctuer' => '@label@:',
496
+    'lien_afficher_icones_seuls' => 'Show only icons',
497
+    'lien_afficher_texte_icones' => 'Show icons and text',
498
+    'lien_afficher_texte_seul' => 'Show only text',
499
+    'lien_aller_a_la_derniere_page' => 'Go to the last page',
500
+    'lien_aller_a_la_page_nb' => 'Go to page @nb@',
501
+    'lien_aller_a_la_page_precedente' => 'Go to the previous page',
502
+    'lien_aller_a_la_page_suivante' => 'Go to the next page',
503
+    'lien_aller_a_la_premiere_page' => 'Go to the first page',
504
+    'lien_liberer' => 'release',
505
+    'lien_liberer_tous' => 'Release all',
506
+    'lien_nouvea_pense_bete' => 'NEW MEMO',
507
+    'lien_nouveau_message' => 'NEW MESSAGE',
508
+    'lien_nouvelle_annonce' => 'NEW ANNOUNCEMENT',
509
+    'lien_petitions' => 'PETITION',
510
+    'lien_popularite' => 'popularity: @popularite@%',
511
+    'lien_racine_site' => 'SITE ROOT',
512
+    'lien_reessayer' => 'try again',
513
+    'lien_repondre_message' => 'Reply to this message',
514
+    'lien_supprimer' => 'delete',
515
+    'lien_tout_afficher' => 'Show all',
516
+    'lien_visite_site' => 'visit this site',
517
+    'lien_visites' => '@visites@ visits',
518
+    'lien_voir_auteur' => 'Check this author',
519
+    'ligne' => 'Line',
520
+    'login' => 'Connection',
521
+    'login_acces_prive' => 'access to the private area',
522
+    'login_autre_identifiant' => 'use a different ID',
523
+    'login_cookie_accepte' => 'Please configure your browser to accept them for this site.',
524
+    'login_cookie_oblige' => 'For secure identification, your browser must accept cookies.',
525
+    'login_deconnexion_ok' => 'Logged out.',
526
+    'login_erreur_pass' => 'Wrong password.',
527
+    'login_espace_prive' => 'private area',
528
+    'login_identifiant_inconnu' => 'The identifier "@login@" is unknown.',
529
+    'login_login' => 'Login:',
530
+    'login_login2' => 'Login or e-mail address:',
531
+    'login_login_pass_incorrect' => '(Wrong login or password).',
532
+    'login_motpasseoublie' => 'password forgotten?',
533
+    'login_non_securise' => 'Caution, this form is not secure.
534 534
    If you do not want your password to be open to
535 535
    interception on the network, please activate Javascript
536 536
    in your browser and',
537
-	'login_nouvelle_tentative' => 'New attempt',
538
-	'login_par_ici' => 'You are registered... this way...',
539
-	'login_pass2' => 'Password:',
540
-	'login_preferez_refuser' => '<b>If you prefer to refuse cookies</b>, there is another, less secure, method of connection available:',
541
-	'login_recharger' => 'reload this page',
542
-	'login_rester_identifie' => 'Remember me',
543
-	'login_retour_public' => 'Back to the public site',
544
-	'login_retour_site' => 'Back to the public site',
545
-	'login_retoursitepublic' => 'back to the public site',
546
-	'login_sans_cookie' => 'Identification without cookie',
547
-	'login_securise' => 'Secure login',
548
-	'login_sinscrire' => 'Sign up',
549
-	'login_test_navigateur' => 'testing browser/reconnection',
550
-	'login_verifiez_navigateur' => '(However, check that your browser did not memorise your password...)',
537
+    'login_nouvelle_tentative' => 'New attempt',
538
+    'login_par_ici' => 'You are registered... this way...',
539
+    'login_pass2' => 'Password:',
540
+    'login_preferez_refuser' => '<b>If you prefer to refuse cookies</b>, there is another, less secure, method of connection available:',
541
+    'login_recharger' => 'reload this page',
542
+    'login_rester_identifie' => 'Remember me',
543
+    'login_retour_public' => 'Back to the public site',
544
+    'login_retour_site' => 'Back to the public site',
545
+    'login_retoursitepublic' => 'back to the public site',
546
+    'login_sans_cookie' => 'Identification without cookie',
547
+    'login_securise' => 'Secure login',
548
+    'login_sinscrire' => 'Sign up',
549
+    'login_test_navigateur' => 'testing browser/reconnection',
550
+    'login_verifiez_navigateur' => '(However, check that your browser did not memorise your password...)',
551 551
 
552
-	// M
553
-	'masquer_colonne' => 'Hide this column',
554
-	'masquer_trad' => 'hide translations',
555
-	'message_nouveaux_identifiants_echec' => 'New identifiers could not be created.',
556
-	'message_nouveaux_identifiants_echec_envoi' => 'The new connection identifiers could not be sent.',
557
-	'message_nouveaux_identifiants_ok' => 'The new connection identifiers were sent to @email@.',
558
-	'module_fichiers_langues' => 'Language files',
552
+    // M
553
+    'masquer_colonne' => 'Hide this column',
554
+    'masquer_trad' => 'hide translations',
555
+    'message_nouveaux_identifiants_echec' => 'New identifiers could not be created.',
556
+    'message_nouveaux_identifiants_echec_envoi' => 'The new connection identifiers could not be sent.',
557
+    'message_nouveaux_identifiants_ok' => 'The new connection identifiers were sent to @email@.',
558
+    'module_fichiers_langues' => 'Language files',
559 559
 
560
-	// N
561
-	'navigateur_pas_redirige' => 'If you are not automatically redirected, click here to continue.',
562
-	'numero' => 'Number',
560
+    // N
561
+    'navigateur_pas_redirige' => 'If you are not automatically redirected, click here to continue.',
562
+    'numero' => 'Number',
563 563
 
564
-	// O
565
-	'occurence' => 'Instance',
566
-	'onglet_affacer_base' => 'Delete the database',
567
-	'onglet_auteur' => 'The author',
568
-	'onglet_contenu_site' => 'Site content',
569
-	'onglet_evolution_visite_mod' => 'Trend in visits',
570
-	'onglet_fonctions_avances' => 'Advanced functions',
571
-	'onglet_informations_personnelles' => 'Personal Information',
572
-	'onglet_interactivite' => 'Interactivity',
573
-	'onglet_messagerie' => 'Messaging',
574
-	'onglet_repartition_rubrique' => 'Distribution by section',
575
-	'onglet_save_restaur_base' => 'Backup/restore the database',
576
-	'onglet_vider_cache' => 'Empty the cache',
564
+    // O
565
+    'occurence' => 'Instance',
566
+    'onglet_affacer_base' => 'Delete the database',
567
+    'onglet_auteur' => 'The author',
568
+    'onglet_contenu_site' => 'Site content',
569
+    'onglet_evolution_visite_mod' => 'Trend in visits',
570
+    'onglet_fonctions_avances' => 'Advanced functions',
571
+    'onglet_informations_personnelles' => 'Personal Information',
572
+    'onglet_interactivite' => 'Interactivity',
573
+    'onglet_messagerie' => 'Messaging',
574
+    'onglet_repartition_rubrique' => 'Distribution by section',
575
+    'onglet_save_restaur_base' => 'Backup/restore the database',
576
+    'onglet_vider_cache' => 'Empty the cache',
577 577
 
578
-	// P
579
-	'pass_choix_pass' => 'Please choose a new password:',
580
-	'pass_erreur' => 'Error',
581
-	'pass_erreur_acces_refuse' => '<b>Error:</b> you no longer have access to this site.',
582
-	'pass_erreur_code_inconnu' => '<b>Error:</b> this code does not match any visitors with access permission to this site.',
583
-	'pass_erreur_non_enregistre' => '<b>Error :</b> the address <tt>@email_oubli@</tt> is not registered on this site.',
584
-	'pass_erreur_non_valide' => '<b>Error :</b> the e-mail <tt>@email_oubli@</tt> is not valid!',
585
-	'pass_erreur_probleme_technique' => '<b>Error :</b> this e-mail could not be sent due to a technical problem.',
586
-	'pass_espace_prive_bla' => 'The private area of this site is open to
578
+    // P
579
+    'pass_choix_pass' => 'Please choose a new password:',
580
+    'pass_erreur' => 'Error',
581
+    'pass_erreur_acces_refuse' => '<b>Error:</b> you no longer have access to this site.',
582
+    'pass_erreur_code_inconnu' => '<b>Error:</b> this code does not match any visitors with access permission to this site.',
583
+    'pass_erreur_non_enregistre' => '<b>Error :</b> the address <tt>@email_oubli@</tt> is not registered on this site.',
584
+    'pass_erreur_non_valide' => '<b>Error :</b> the e-mail <tt>@email_oubli@</tt> is not valid!',
585
+    'pass_erreur_probleme_technique' => '<b>Error :</b> this e-mail could not be sent due to a technical problem.',
586
+    'pass_espace_prive_bla' => 'The private area of this site is open to
587 587
 visitors after registration. Once you have registered,
588 588
 you can review the articles in progress,
589 589
 submit articles and participate in forums.',
590
-	'pass_forum_bla' => 'You have requested to take part in a forum
590
+    'pass_forum_bla' => 'You have requested to take part in a forum
591 591
 reserved for registered visitors.',
592
-	'pass_indiquez_cidessous' => 'Enter the email address with which you
592
+    'pass_indiquez_cidessous' => 'Enter the email address with which you
593 593
 registered. You
594 594
 will receive an email explaining how you
595 595
 can retrieve your password.',
596
-	'pass_mail_passcookie' => '(this is an automated message)
596
+    'pass_mail_passcookie' => '(this is an automated message)
597 597
 
598 598
 To recover your access to the site
599 599
 @nom_site_spip@ (@adresse_site@)
@@ -604,150 +604,150 @@  discard block
 block discarded – undo
604 604
 You can then enter a new password
605 605
 and log in to the site.
606 606
 ',
607
-	'pass_mot_oublie' => 'Password forgotten',
608
-	'pass_nouveau_enregistre' => 'Your new password has been recorded.',
609
-	'pass_nouveau_pass' => 'New password',
610
-	'pass_ok' => 'OK',
611
-	'pass_oubli_mot' => 'Forgotten password',
612
-	'pass_procedure_changer' => 'In order to change your password, we have to check your identity first. Please enter the e-mail address associated with this account.',
613
-	'pass_quitter_fenetre' => 'Close this window',
614
-	'pass_rappel_login' => 'Reminder: your identifier (login) is "@login@".',
615
-	'pass_recevoir_mail' => 'A link to reset your password has been sent to your email address (if it is valid).',
616
-	'pass_retour_public' => 'Back to the public site',
617
-	'pass_rien_a_faire_ici' => 'Nothing to do here.',
618
-	'pass_vousinscrire' => 'Registering with the site',
619
-	'precedent' => 'previous',
620
-	'previsualisation' => 'Preview',
621
-	'previsualiser' => 'Show preview',
607
+    'pass_mot_oublie' => 'Password forgotten',
608
+    'pass_nouveau_enregistre' => 'Your new password has been recorded.',
609
+    'pass_nouveau_pass' => 'New password',
610
+    'pass_ok' => 'OK',
611
+    'pass_oubli_mot' => 'Forgotten password',
612
+    'pass_procedure_changer' => 'In order to change your password, we have to check your identity first. Please enter the e-mail address associated with this account.',
613
+    'pass_quitter_fenetre' => 'Close this window',
614
+    'pass_rappel_login' => 'Reminder: your identifier (login) is "@login@".',
615
+    'pass_recevoir_mail' => 'A link to reset your password has been sent to your email address (if it is valid).',
616
+    'pass_retour_public' => 'Back to the public site',
617
+    'pass_rien_a_faire_ici' => 'Nothing to do here.',
618
+    'pass_vousinscrire' => 'Registering with the site',
619
+    'precedent' => 'previous',
620
+    'previsualisation' => 'Preview',
621
+    'previsualiser' => 'Show preview',
622 622
 
623
-	// R
624
-	'retour' => 'Back',
623
+    // R
624
+    'retour' => 'Back',
625 625
 
626
-	// S
627
-	'spip_conforme_dtd' => 'SPIP finds this page to be in compliance with its DOCTYPE:',
628
-	'squelette' => 'template',
629
-	'squelette_inclus_ligne' => 'included template, line',
630
-	'squelette_ligne' => 'template, line',
631
-	'stats_visites_et_popularite' => '@visites@ visits; popularity: @popularite@',
632
-	'suivant' => 'next',
626
+    // S
627
+    'spip_conforme_dtd' => 'SPIP finds this page to be in compliance with its DOCTYPE:',
628
+    'squelette' => 'template',
629
+    'squelette_inclus_ligne' => 'included template, line',
630
+    'squelette_ligne' => 'template, line',
631
+    'stats_visites_et_popularite' => '@visites@ visits; popularity: @popularite@',
632
+    'suivant' => 'next',
633 633
 
634
-	// T
635
-	'taille_go' => '@taille@ Gb',
636
-	'taille_go_bi' => '@taille@ GiB',
637
-	'taille_ko' => '@taille@ kb',
638
-	'taille_ko_bi' => '@taille@ KiB',
639
-	'taille_mo' => '@taille@ Mb',
640
-	'taille_mo_bi' => '@taille@ MiB',
641
-	'taille_octets' => '@taille@ bytes',
642
-	'taille_octets_bi' => '@taille@ bytes',
643
-	'texte_actualite_site_1' => 'When you are more familiar with the interface, click on "',
644
-	'texte_actualite_site_2' => 'full interface',
645
-	'texte_actualite_site_3' => '" to make more features available.',
646
-	'texte_creation_automatique_vignette' => 'Automatic creation of preview vignettes is enabled. If you use this form to install,  images in the format(s) @gd_formats@, they will be coupled with a vignette whose maximum size is @taille_preview@ pixels.',
647
-	'texte_documents_associes' => 'The following documents are associated with the article,,
634
+    // T
635
+    'taille_go' => '@taille@ Gb',
636
+    'taille_go_bi' => '@taille@ GiB',
637
+    'taille_ko' => '@taille@ kb',
638
+    'taille_ko_bi' => '@taille@ KiB',
639
+    'taille_mo' => '@taille@ Mb',
640
+    'taille_mo_bi' => '@taille@ MiB',
641
+    'taille_octets' => '@taille@ bytes',
642
+    'taille_octets_bi' => '@taille@ bytes',
643
+    'texte_actualite_site_1' => 'When you are more familiar with the interface, click on "',
644
+    'texte_actualite_site_2' => 'full interface',
645
+    'texte_actualite_site_3' => '" to make more features available.',
646
+    'texte_creation_automatique_vignette' => 'Automatic creation of preview vignettes is enabled. If you use this form to install,  images in the format(s) @gd_formats@, they will be coupled with a vignette whose maximum size is @taille_preview@ pixels.',
647
+    'texte_documents_associes' => 'The following documents are associated with the article,,
648 648
     but they were not directly
649 649
     inserted. Depending on the layout of the public site,
650 650
     they may appear as attached documents.',
651
-	'texte_erreur_mise_niveau_base' => 'Database error during the upgrade.
651
+    'texte_erreur_mise_niveau_base' => 'Database error during the upgrade.
652 652
       The image <b>@fichier@</b> did not pass (article @id_article@).<p>
653 653
    Note this reference carefully, try the upgrade procedure again,
654 654
    and check afterwards that the images still appear
655 655
       in the articles.',
656
-	'texte_erreur_visiteur' => 'You have tried to enter the private area using an unauthorised login.',
657
-	'texte_inc_auth_1' => 'You used the login
656
+    'texte_erreur_visiteur' => 'You have tried to enter the private area using an unauthorised login.',
657
+    'texte_inc_auth_1' => 'You used the login
658 658
   <b>@auth_login@</b>, but it does not exist in the database.
659 659
   Try to',
660
-	'texte_inc_auth_2' => 'reconnect',
661
-	'texte_inc_auth_3' => ', having quit and
660
+    'texte_inc_auth_2' => 'reconnect',
661
+    'texte_inc_auth_3' => ', having quit and
662 662
   restarted your browser if necessary.',
663
-	'texte_inc_config' => 'Changes made to the options on these pages have a great effect on
663
+    'texte_inc_config' => 'Changes made to the options on these pages have a great effect on
664 664
   the functioning of the site. You are advised not to make any changes unless you are
665 665
  familiar with how SPIP works. <br /><br /><b>In
666 666
  general, you are strongly advised
667 667
  to let the main webmaster of the site deal with these pages.</b>',
668
-	'texte_inc_meta_1' => 'The system encountered an error when trying to write the file <code>@fichier@</code>. As a site administrator, please',
669
-	'texte_inc_meta_2' => 'verify write permissions',
670
-	'texte_inc_meta_3' => 'of the directory <code>@repertoire@</code>.',
671
-	'texte_statut_en_cours_redaction' => 'editing in progress',
672
-	'texte_statut_poubelle' => 'to the dustbin',
673
-	'texte_statut_propose_evaluation' => 'submitted for evaluation',
674
-	'texte_statut_publie' => 'published online',
675
-	'texte_statut_refuse' => 'rejected',
676
-	'titre_ajouter_mot_cle' => 'ADD A KEYWORD:',
677
-	'titre_cadre_raccourcis' => 'SHORTCUTS:',
678
-	'titre_changer_couleur_interface' => 'Changing interface colour',
679
-	'titre_image_admin_article' => 'You can administrate this article',
680
-	'titre_image_administrateur' => 'Administrator',
681
-	'titre_image_aide' => 'Help on this item',
682
-	'titre_image_auteur_supprime' => 'Author deleted',
683
-	'titre_image_redacteur' => 'Editor without access',
684
-	'titre_image_redacteur_02' => 'Editor',
685
-	'titre_image_selecteur' => 'Display list',
686
-	'titre_image_visiteur' => 'Visitor',
687
-	'titre_joindre_document' => 'ATTACH A DOCUMENT',
688
-	'titre_mots_cles' => 'KEYWORDS',
689
-	'titre_probleme_technique' => 'Warning: a technical problem (SQL server) is preventing access to this part of the site. Thank you for your patience.',
690
-	'titre_publier_document' => 'PUBLISH A DOCUMENT IN THIS SECTION',
691
-	'titre_signatures_attente' => 'Signatures awaiting validation',
692
-	'titre_signatures_confirmees' => 'Signatures confirmed',
693
-	'titre_statistiques' => 'Site statistics',
694
-	'titre_titre_document' => 'Document title:',
695
-	'todo' => 'to come',
696
-	'trad_definir_reference' => 'Choose "@titre@" as a reference for translations',
697
-	'trad_reference' => '(reference for translations)',
668
+    'texte_inc_meta_1' => 'The system encountered an error when trying to write the file <code>@fichier@</code>. As a site administrator, please',
669
+    'texte_inc_meta_2' => 'verify write permissions',
670
+    'texte_inc_meta_3' => 'of the directory <code>@repertoire@</code>.',
671
+    'texte_statut_en_cours_redaction' => 'editing in progress',
672
+    'texte_statut_poubelle' => 'to the dustbin',
673
+    'texte_statut_propose_evaluation' => 'submitted for evaluation',
674
+    'texte_statut_publie' => 'published online',
675
+    'texte_statut_refuse' => 'rejected',
676
+    'titre_ajouter_mot_cle' => 'ADD A KEYWORD:',
677
+    'titre_cadre_raccourcis' => 'SHORTCUTS:',
678
+    'titre_changer_couleur_interface' => 'Changing interface colour',
679
+    'titre_image_admin_article' => 'You can administrate this article',
680
+    'titre_image_administrateur' => 'Administrator',
681
+    'titre_image_aide' => 'Help on this item',
682
+    'titre_image_auteur_supprime' => 'Author deleted',
683
+    'titre_image_redacteur' => 'Editor without access',
684
+    'titre_image_redacteur_02' => 'Editor',
685
+    'titre_image_selecteur' => 'Display list',
686
+    'titre_image_visiteur' => 'Visitor',
687
+    'titre_joindre_document' => 'ATTACH A DOCUMENT',
688
+    'titre_mots_cles' => 'KEYWORDS',
689
+    'titre_probleme_technique' => 'Warning: a technical problem (SQL server) is preventing access to this part of the site. Thank you for your patience.',
690
+    'titre_publier_document' => 'PUBLISH A DOCUMENT IN THIS SECTION',
691
+    'titre_signatures_attente' => 'Signatures awaiting validation',
692
+    'titre_signatures_confirmees' => 'Signatures confirmed',
693
+    'titre_statistiques' => 'Site statistics',
694
+    'titre_titre_document' => 'Document title:',
695
+    'todo' => 'to come',
696
+    'trad_definir_reference' => 'Choose "@titre@" as a reference for translations',
697
+    'trad_reference' => '(reference for translations)',
698 698
 
699
-	// U
700
-	'upload_limit' => 'This file is too big for the server: the maximum size allowed for <i>upload</i> is @max@.',
699
+    // U
700
+    'upload_limit' => 'This file is too big for the server: the maximum size allowed for <i>upload</i> is @max@.',
701 701
 
702
-	// Z
703
-	'zbug_balise_b_aval' => ': B tag too late in loop',
704
-	'zbug_balise_inexistante' => 'Tag @balise@ wrongly declared for @from@',
705
-	'zbug_balise_sans_argument' => 'Missing argument in the @balise@ tag',
706
-	'zbug_boucle' => 'loop',
707
-	'zbug_boucle_recursive_undef' => 'undefined recursive loop: @nom@',
708
-	'zbug_calcul' => 'calculation',
709
-	'zbug_champ_hors_boucle' => 'Field @champ@ outside loop',
710
-	'zbug_champ_hors_critere' => 'Field @champ@ outside criterion @critere@',
711
-	'zbug_champ_hors_motif' => 'Field @champ@ outside context @motif@',
712
-	'zbug_code' => 'code',
713
-	'zbug_critere_inconnu' => 'Unknown criterion @critere@',
714
-	'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} on a table without atomic primary key',
715
-	'zbug_distant_interdit' => 'External data forbidden',
716
-	'zbug_doublon_table_sans_cle_primaire' => 'Duplicate entries on a table which does not have a simple primary key',
717
-	'zbug_doublon_table_sans_index' => 'Duplicate entries on a table without an index',
718
-	'zbug_erreur_boucle_double' => 'Loop @id@: double definition',
719
-	'zbug_erreur_boucle_fermant' => 'Loop @id@: missing closing tag',
720
-	'zbug_erreur_boucle_syntaxe' => 'Syntax error in loop (BOUCLE)',
721
-	'zbug_erreur_compilation' => 'Compilation error',
722
-	'zbug_erreur_execution_page' => 'Execution error',
723
-	'zbug_erreur_filtre' => 'Undefined filter @filtre@',
724
-	'zbug_erreur_filtre_nbarg_min' => '@filtre@ filter: @nb@ argument(s) missing',
725
-	'zbug_erreur_meme_parent' => '{meme_parent} only applies to loops (FORUMS) and (RUBRIQUES)',
726
-	'zbug_erreur_squelette' => 'Error(s) in template',
727
-	'zbug_hors_compilation' => 'Uncompiled',
728
-	'zbug_info_erreur_squelette' => 'Error in the site',
729
-	'zbug_inversion_ordre_inexistant' => 'Reversion of non-existent order',
730
-	'zbug_pagination_sans_critere' => '#PAGINATION tag without {pagination} criterion, or used in a recursive loop',
731
-	'zbug_parametres_inclus_incorrects' => 'Wrong inclusion parameter: @param@',
732
-	'zbug_profile' => 'Calculation time: @time@',
733
-	'zbug_resultat' => 'result',
734
-	'zbug_serveur_indefini' => 'Undefined SQL server',
735
-	'zbug_statistiques' => 'SQL query statistics in order of duration',
736
-	'zbug_table_inconnue' => 'Unknown SQL table "@table@"',
737
-	'zxml_connus_attributs' => 'known attributes',
738
-	'zxml_de' => 'from',
739
-	'zxml_inconnu_attribut' => 'unknown attribute',
740
-	'zxml_inconnu_balise' => 'unknown tag',
741
-	'zxml_inconnu_entite' => 'unknown entity',
742
-	'zxml_inconnu_id' => 'unknown ID',
743
-	'zxml_mais_de' => 'but from',
744
-	'zxml_non_conforme' => 'not true to the principle',
745
-	'zxml_non_fils' => 'is not a child of',
746
-	'zxml_nonvide_balise' => 'tag not empty',
747
-	'zxml_obligatoire_attribut' => 'required attribute absent in',
748
-	'zxml_succession_fils_incorrecte' => 'incorrect child inheritance',
749
-	'zxml_survoler' => 'to see the correct ones, hover with the cursor',
750
-	'zxml_valeur_attribut' => 'attribute value',
751
-	'zxml_vide_balise' => 'empty tag',
752
-	'zxml_vu' => 'seen before'
702
+    // Z
703
+    'zbug_balise_b_aval' => ': B tag too late in loop',
704
+    'zbug_balise_inexistante' => 'Tag @balise@ wrongly declared for @from@',
705
+    'zbug_balise_sans_argument' => 'Missing argument in the @balise@ tag',
706
+    'zbug_boucle' => 'loop',
707
+    'zbug_boucle_recursive_undef' => 'undefined recursive loop: @nom@',
708
+    'zbug_calcul' => 'calculation',
709
+    'zbug_champ_hors_boucle' => 'Field @champ@ outside loop',
710
+    'zbug_champ_hors_critere' => 'Field @champ@ outside criterion @critere@',
711
+    'zbug_champ_hors_motif' => 'Field @champ@ outside context @motif@',
712
+    'zbug_code' => 'code',
713
+    'zbug_critere_inconnu' => 'Unknown criterion @critere@',
714
+    'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} on a table without atomic primary key',
715
+    'zbug_distant_interdit' => 'External data forbidden',
716
+    'zbug_doublon_table_sans_cle_primaire' => 'Duplicate entries on a table which does not have a simple primary key',
717
+    'zbug_doublon_table_sans_index' => 'Duplicate entries on a table without an index',
718
+    'zbug_erreur_boucle_double' => 'Loop @id@: double definition',
719
+    'zbug_erreur_boucle_fermant' => 'Loop @id@: missing closing tag',
720
+    'zbug_erreur_boucle_syntaxe' => 'Syntax error in loop (BOUCLE)',
721
+    'zbug_erreur_compilation' => 'Compilation error',
722
+    'zbug_erreur_execution_page' => 'Execution error',
723
+    'zbug_erreur_filtre' => 'Undefined filter @filtre@',
724
+    'zbug_erreur_filtre_nbarg_min' => '@filtre@ filter: @nb@ argument(s) missing',
725
+    'zbug_erreur_meme_parent' => '{meme_parent} only applies to loops (FORUMS) and (RUBRIQUES)',
726
+    'zbug_erreur_squelette' => 'Error(s) in template',
727
+    'zbug_hors_compilation' => 'Uncompiled',
728
+    'zbug_info_erreur_squelette' => 'Error in the site',
729
+    'zbug_inversion_ordre_inexistant' => 'Reversion of non-existent order',
730
+    'zbug_pagination_sans_critere' => '#PAGINATION tag without {pagination} criterion, or used in a recursive loop',
731
+    'zbug_parametres_inclus_incorrects' => 'Wrong inclusion parameter: @param@',
732
+    'zbug_profile' => 'Calculation time: @time@',
733
+    'zbug_resultat' => 'result',
734
+    'zbug_serveur_indefini' => 'Undefined SQL server',
735
+    'zbug_statistiques' => 'SQL query statistics in order of duration',
736
+    'zbug_table_inconnue' => 'Unknown SQL table "@table@"',
737
+    'zxml_connus_attributs' => 'known attributes',
738
+    'zxml_de' => 'from',
739
+    'zxml_inconnu_attribut' => 'unknown attribute',
740
+    'zxml_inconnu_balise' => 'unknown tag',
741
+    'zxml_inconnu_entite' => 'unknown entity',
742
+    'zxml_inconnu_id' => 'unknown ID',
743
+    'zxml_mais_de' => 'but from',
744
+    'zxml_non_conforme' => 'not true to the principle',
745
+    'zxml_non_fils' => 'is not a child of',
746
+    'zxml_nonvide_balise' => 'tag not empty',
747
+    'zxml_obligatoire_attribut' => 'required attribute absent in',
748
+    'zxml_succession_fils_incorrecte' => 'incorrect child inheritance',
749
+    'zxml_survoler' => 'to see the correct ones, hover with the cursor',
750
+    'zxml_valeur_attribut' => 'attribute value',
751
+    'zxml_vide_balise' => 'empty tag',
752
+    'zxml_vu' => 'seen before'
753 753
 );
Please login to merge, or discard this patch.
ecrire/lang/spip_ar.php 1 patch
Indentation   +673 added lines, -673 removed lines patch added patch discarded remove patch
@@ -4,246 +4,246 @@  discard block
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'access_interface_graphique' => 'عودة إلى الواجهة الرسومية الكاملة',
14
-	'access_mode_texte' => 'عرض الواجهة النصية المبسّطة',
15
-	'admin_debug' => 'اكتشاف الأخطاء',
16
-	'admin_modifier_article' => 'تعديل هذا المقال',
17
-	'admin_modifier_auteur' => 'تغيير هذا المؤلف',
18
-	'admin_modifier_breve' => 'تعديل هذا الخبر',
19
-	'admin_modifier_mot' => 'تغيير هذا المفتاح',
20
-	'admin_modifier_rubrique' => 'تعديل هذا القسم',
21
-	'admin_recalculer' => 'إعادة تحديث هذه الصفحة',
22
-	'afficher_calendrier' => 'عرض الروزنامة',
23
-	'afficher_trad' => 'عرض الترجمات',
24
-	'alerte_maj_impossible' => '<b>تحذير!</b> ترقية قاعدة SQL إلى الإصدار @version@ متعذر. قد يكون السبب مشكلة في حقل التعديل. الرجاء الاتصال بمضيف موقعك.',
25
-	'alerte_modif_info_concourante' => 'تحذير:هذه المعلومة عُدلت في مكان آخر. القيمة الحالية هي:',
26
-	'analyse_xml' => 'تحليل XML',
27
-	'annuler' => 'إلغاء',
28
-	'antispam_champ_vide' => 'الرجاء الإبقاء على هذا الحقل فارغاً:',
29
-	'articles_recents' => 'أحدث المقالات',
30
-	'attention_champ_mini_nb_caractères' => 'تنبيه! @nb@ حروف على الأقل',
31
-	'avis_1_erreur_saisie' => 'هناك خطأ في إدخالك، الرجاء التدقيق في المعلومات.',
32
-	'avis_archive_incorrect' => 'ملف الأرشيف ليس ملف SPIP',
33
-	'avis_archive_invalide' => 'ملف الأرشيف غير صالح',
34
-	'avis_attention' => 'تحذير!',
35
-	'avis_champ_incorrect_type_objet' => 'إسم حقل @name@ غير صالح لنوع العنصر @type@',
36
-	'avis_colonne_inexistante' => 'العمود @col@ غير موجود',
37
-	'avis_erreur' => 'خطأ: انظر أدناه',
38
-	'avis_erreur_connexion' => 'خطأ اتصال',
39
-	'avis_erreur_cookie' => 'مشكلة في الكعكة',
40
-	'avis_erreur_fonction_contexte' => 'خطأ برمجة. لا يجب المناداة على هذه الوظيفة في هذا السياق.',
41
-	'avis_erreur_mysql' => 'خطأ SQL ',
42
-	'avis_erreur_sauvegarde' => 'خطأ في النسخة الاحتياطية (@type@ @id_objet@)!',
43
-	'avis_erreur_visiteur' => 'هناك مشكلة في الدخول إلى المجال الخاص',
44
-	'avis_nb_erreurs_saisie' => 'هناك @nb@ خطأ في إدخالك، الرجاء التدقيق في المعلومات.',
12
+    // A
13
+    'access_interface_graphique' => 'عودة إلى الواجهة الرسومية الكاملة',
14
+    'access_mode_texte' => 'عرض الواجهة النصية المبسّطة',
15
+    'admin_debug' => 'اكتشاف الأخطاء',
16
+    'admin_modifier_article' => 'تعديل هذا المقال',
17
+    'admin_modifier_auteur' => 'تغيير هذا المؤلف',
18
+    'admin_modifier_breve' => 'تعديل هذا الخبر',
19
+    'admin_modifier_mot' => 'تغيير هذا المفتاح',
20
+    'admin_modifier_rubrique' => 'تعديل هذا القسم',
21
+    'admin_recalculer' => 'إعادة تحديث هذه الصفحة',
22
+    'afficher_calendrier' => 'عرض الروزنامة',
23
+    'afficher_trad' => 'عرض الترجمات',
24
+    'alerte_maj_impossible' => '<b>تحذير!</b> ترقية قاعدة SQL إلى الإصدار @version@ متعذر. قد يكون السبب مشكلة في حقل التعديل. الرجاء الاتصال بمضيف موقعك.',
25
+    'alerte_modif_info_concourante' => 'تحذير:هذه المعلومة عُدلت في مكان آخر. القيمة الحالية هي:',
26
+    'analyse_xml' => 'تحليل XML',
27
+    'annuler' => 'إلغاء',
28
+    'antispam_champ_vide' => 'الرجاء الإبقاء على هذا الحقل فارغاً:',
29
+    'articles_recents' => 'أحدث المقالات',
30
+    'attention_champ_mini_nb_caractères' => 'تنبيه! @nb@ حروف على الأقل',
31
+    'avis_1_erreur_saisie' => 'هناك خطأ في إدخالك، الرجاء التدقيق في المعلومات.',
32
+    'avis_archive_incorrect' => 'ملف الأرشيف ليس ملف SPIP',
33
+    'avis_archive_invalide' => 'ملف الأرشيف غير صالح',
34
+    'avis_attention' => 'تحذير!',
35
+    'avis_champ_incorrect_type_objet' => 'إسم حقل @name@ غير صالح لنوع العنصر @type@',
36
+    'avis_colonne_inexistante' => 'العمود @col@ غير موجود',
37
+    'avis_erreur' => 'خطأ: انظر أدناه',
38
+    'avis_erreur_connexion' => 'خطأ اتصال',
39
+    'avis_erreur_cookie' => 'مشكلة في الكعكة',
40
+    'avis_erreur_fonction_contexte' => 'خطأ برمجة. لا يجب المناداة على هذه الوظيفة في هذا السياق.',
41
+    'avis_erreur_mysql' => 'خطأ SQL ',
42
+    'avis_erreur_sauvegarde' => 'خطأ في النسخة الاحتياطية (@type@ @id_objet@)!',
43
+    'avis_erreur_visiteur' => 'هناك مشكلة في الدخول إلى المجال الخاص',
44
+    'avis_nb_erreurs_saisie' => 'هناك @nb@ خطأ في إدخالك، الرجاء التدقيق في المعلومات.',
45 45
 
46
-	// B
47
-	'barre_a_accent_grave' => 'إدراج حرف A كبير مع نبر الإطالة',
48
-	'barre_aide' => 'استخدم شريط اختصارات الكتابة لإثراء تصميم صفحتك',
49
-	'barre_e_accent_aigu' => 'إدراج حرف E كبير مع نبر حاد',
50
-	'barre_eo' => 'إدراج E داخل O',
51
-	'barre_eo_maj' => 'إدراج E كبير داخل O كبير',
52
-	'barre_euro' => 'إدراج رمز €',
53
-	'barre_gras' => '{{غامق{{',
54
-	'barre_guillemets' => 'إحاطة «بعلامتي اقتباس مزدوجة»',
55
-	'barre_guillemets_simples' => 'وضع بين "علامتي اقتباس مزدوجة من المستوى الثاني"',
56
-	'barre_intertitre' => 'تحويل إلى {{{عنوان فقرة}}}',
57
-	'barre_italic' => '{مائل{',
58
-	'barre_lien' => 'تحويل إلى [وصلة هايبرتكست->http://...]',
59
-	'barre_lien_input' => 'الرجاء إدخال عنوان الوصلة (يمكنك إدخال عنوان نسيج على شكل http://www.mysite.com أو إدخال رقم مقال من الموقع الحالي فقط).',
60
-	'barre_note' => 'تحويل إلى [[حاشية]]',
61
-	'barre_paragraphe' => 'إنشاء فقرة',
62
-	'barre_quote' => '<quote>اقتباس رسالة</quote>',
63
-	'bouton_changer' => 'تغيير',
64
-	'bouton_chercher' => 'بحث',
65
-	'bouton_choisir' => 'تحديد',
66
-	'bouton_deplacer' => 'نقل',
67
-	'bouton_download' => 'تحميل',
68
-	'bouton_enregistrer' => 'إدخال',
69
-	'bouton_radio_desactiver_messagerie_interne' => 'إيقاف المراسلة الداخلية',
70
-	'bouton_radio_envoi_annonces' => 'إرسال إعلانات التحرير',
71
-	'bouton_radio_non_envoi_annonces' => 'عدم إرسال الإعلانات',
72
-	'bouton_radio_non_envoi_liste_nouveautes' => 'عدم إرسال قائمة بآخر الأخبار',
73
-	'bouton_recharger_page' => 'إعادة تحميل الصفحة',
74
-	'bouton_telecharger' => 'تحميل',
75
-	'bouton_upload' => 'تنزيل',
76
-	'bouton_valider' => 'إدخال',
46
+    // B
47
+    'barre_a_accent_grave' => 'إدراج حرف A كبير مع نبر الإطالة',
48
+    'barre_aide' => 'استخدم شريط اختصارات الكتابة لإثراء تصميم صفحتك',
49
+    'barre_e_accent_aigu' => 'إدراج حرف E كبير مع نبر حاد',
50
+    'barre_eo' => 'إدراج E داخل O',
51
+    'barre_eo_maj' => 'إدراج E كبير داخل O كبير',
52
+    'barre_euro' => 'إدراج رمز €',
53
+    'barre_gras' => '{{غامق{{',
54
+    'barre_guillemets' => 'إحاطة «بعلامتي اقتباس مزدوجة»',
55
+    'barre_guillemets_simples' => 'وضع بين "علامتي اقتباس مزدوجة من المستوى الثاني"',
56
+    'barre_intertitre' => 'تحويل إلى {{{عنوان فقرة}}}',
57
+    'barre_italic' => '{مائل{',
58
+    'barre_lien' => 'تحويل إلى [وصلة هايبرتكست->http://...]',
59
+    'barre_lien_input' => 'الرجاء إدخال عنوان الوصلة (يمكنك إدخال عنوان نسيج على شكل http://www.mysite.com أو إدخال رقم مقال من الموقع الحالي فقط).',
60
+    'barre_note' => 'تحويل إلى [[حاشية]]',
61
+    'barre_paragraphe' => 'إنشاء فقرة',
62
+    'barre_quote' => '<quote>اقتباس رسالة</quote>',
63
+    'bouton_changer' => 'تغيير',
64
+    'bouton_chercher' => 'بحث',
65
+    'bouton_choisir' => 'تحديد',
66
+    'bouton_deplacer' => 'نقل',
67
+    'bouton_download' => 'تحميل',
68
+    'bouton_enregistrer' => 'إدخال',
69
+    'bouton_radio_desactiver_messagerie_interne' => 'إيقاف المراسلة الداخلية',
70
+    'bouton_radio_envoi_annonces' => 'إرسال إعلانات التحرير',
71
+    'bouton_radio_non_envoi_annonces' => 'عدم إرسال الإعلانات',
72
+    'bouton_radio_non_envoi_liste_nouveautes' => 'عدم إرسال قائمة بآخر الأخبار',
73
+    'bouton_recharger_page' => 'إعادة تحميل الصفحة',
74
+    'bouton_telecharger' => 'تحميل',
75
+    'bouton_upload' => 'تنزيل',
76
+    'bouton_valider' => 'إدخال',
77 77
 
78
-	// C
79
-	'cal_apresmidi' => 'بعد الظهر',
80
-	'cal_jour_entier' => 'يوم كامل',
81
-	'cal_matin' => 'الصباح',
82
-	'cal_par_jour' => 'روزنامة يومية',
83
-	'cal_par_mois' => 'روزنامة شهرية',
84
-	'cal_par_semaine' => 'روزنامة أسبوعية',
85
-	'choix_couleur_interface' => 'اللون',
86
-	'choix_interface' => 'اختيار الواجهة',
87
-	'colonne' => 'عمود',
88
-	'confirm_changer_statut' => 'تحذير، لقد طلبت تغيير حالة هذا العنصر. هل تريد المتابعة؟',
89
-	'correcte' => 'صحيح',
78
+    // C
79
+    'cal_apresmidi' => 'بعد الظهر',
80
+    'cal_jour_entier' => 'يوم كامل',
81
+    'cal_matin' => 'الصباح',
82
+    'cal_par_jour' => 'روزنامة يومية',
83
+    'cal_par_mois' => 'روزنامة شهرية',
84
+    'cal_par_semaine' => 'روزنامة أسبوعية',
85
+    'choix_couleur_interface' => 'اللون',
86
+    'choix_interface' => 'اختيار الواجهة',
87
+    'colonne' => 'عمود',
88
+    'confirm_changer_statut' => 'تحذير، لقد طلبت تغيير حالة هذا العنصر. هل تريد المتابعة؟',
89
+    'correcte' => 'صحيح',
90 90
 
91
-	// D
92
-	'date_aujourdhui' => 'اليوم',
93
-	'date_avant_jc' => 'قبل الميلاد',
94
-	'date_dans' => 'بعد @delai@',
95
-	'date_de_mois_1' => '@j@ @nommois@',
96
-	'date_de_mois_10' => '@j@ @nommois@',
97
-	'date_de_mois_11' => '@j@ @nommois@',
98
-	'date_de_mois_12' => '@j@ @nommois@',
99
-	'date_de_mois_2' => '@j@ @nommois@',
100
-	'date_de_mois_3' => '@j@ @nommois@',
101
-	'date_de_mois_4' => '@j@ @nommois@',
102
-	'date_de_mois_5' => '@j@ @nommois@',
103
-	'date_de_mois_6' => '@j@ @nommois@',
104
-	'date_de_mois_7' => '@j@ @nommois@',
105
-	'date_de_mois_8' => '@j@ @nommois@',
106
-	'date_de_mois_9' => '@j@ @nommois@',
107
-	'date_demain' => 'غداً',
108
-	'date_fmt_heures_minutes' => '@h@  و@m@  دقيقة',
109
-	'date_fmt_heures_minutes_court' => '@h@h@m@',
110
-	'date_fmt_jour' => '@nomjour@ @jour@',
111
-	'date_fmt_jour_heure' => '@jour@ الساعة @heure@',
112
-	'date_fmt_jour_heure_debut_fin' => 'في @jour@ من @heure_debut@ الى @heure_fin@',
113
-	'date_fmt_jour_heure_debut_fin_abbr' => 'في @dtstart@@jour@ من @heure_debut@@dtabbr@ الى @dtend@@heure_fin@@dtabbr@',
114
-	'date_fmt_jour_mois' => '@jour@ @nommois@',
115
-	'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@',
116
-	'date_fmt_mois_annee' => '@nommois@ @annee@',
117
-	'date_fmt_nomjour' => '@nomjour@ @date@',
118
-	'date_fmt_nomjour_date' => 'في @nomjour@ @date@',
119
-	'date_fmt_periode' => 'من @date_debut@ الى @date_fin@',
120
-	'date_fmt_periode_abbr' => 'من @dtart@@date_debut@@dtabbr@ الى @dtend@@date_fin@@dtabbr@',
121
-	'date_fmt_periode_from' => 'من',
122
-	'date_fmt_periode_to' => 'الى',
123
-	'date_fmt_saison_annee' => '@saison@ @annee@',
124
-	'date_heures' => 'ساعة',
125
-	'date_hier' => 'البارحة',
126
-	'date_il_y_a' => 'منذ @delai@',
127
-	'date_jnum1' => '1',
128
-	'date_jnum10' => '10',
129
-	'date_jnum11' => '11',
130
-	'date_jnum12' => '12',
131
-	'date_jnum13' => '13',
132
-	'date_jnum14' => '14',
133
-	'date_jnum15' => '15',
134
-	'date_jnum16' => '16',
135
-	'date_jnum17' => '17',
136
-	'date_jnum18' => '18',
137
-	'date_jnum19' => '19',
138
-	'date_jnum2' => '2',
139
-	'date_jnum20' => '20',
140
-	'date_jnum21' => '21',
141
-	'date_jnum22' => '22',
142
-	'date_jnum23' => '23',
143
-	'date_jnum24' => '24',
144
-	'date_jnum25' => '25',
145
-	'date_jnum26' => '26',
146
-	'date_jnum27' => '27',
147
-	'date_jnum28' => '28',
148
-	'date_jnum29' => '29',
149
-	'date_jnum3' => '3',
150
-	'date_jnum30' => '30',
151
-	'date_jnum31' => '31',
152
-	'date_jnum4' => '4',
153
-	'date_jnum5' => '5',
154
-	'date_jnum6' => '6',
155
-	'date_jnum7' => '7',
156
-	'date_jnum8' => '8',
157
-	'date_jnum9' => '9',
158
-	'date_jour_1' => 'الأحد',
159
-	'date_jour_1_abbr' => 'أحد',
160
-	'date_jour_1_initiale' => 'أحد',
161
-	'date_jour_2' => 'الاثنين',
162
-	'date_jour_2_abbr' => 'اثنين',
163
-	'date_jour_2_initiale' => 'اثنين',
164
-	'date_jour_3' => 'الثلاثاء',
165
-	'date_jour_3_abbr' => 'ثلاثاء',
166
-	'date_jour_3_initiale' => 'ثلاثاء',
167
-	'date_jour_4' => 'الأربعاء',
168
-	'date_jour_4_abbr' => 'أربعاء',
169
-	'date_jour_4_initiale' => 'أربعاء',
170
-	'date_jour_5' => 'الخميس',
171
-	'date_jour_5_abbr' => 'خميس',
172
-	'date_jour_5_initiale' => 'خميس',
173
-	'date_jour_6' => 'الجمعة',
174
-	'date_jour_6_abbr' => 'جمعة',
175
-	'date_jour_6_initiale' => 'جمعة',
176
-	'date_jour_7' => 'السبت',
177
-	'date_jour_7_abbr' => 'سبت',
178
-	'date_jour_7_initiale' => 'سبت',
179
-	'date_jours' => 'يوم',
180
-	'date_minutes' => 'دقيقة',
181
-	'date_mois' => 'شهر',
182
-	'date_mois_1' => 'كانون الثاني (يناير)',
183
-	'date_mois_10' => 'تشرين الأول (أكتوبر)',
184
-	'date_mois_10_abbr' => 'ت١',
185
-	'date_mois_11' => 'تشرين الثاني (نوفمبر)',
186
-	'date_mois_11_abbr' => 'ت٢',
187
-	'date_mois_12' => 'كانون الأول (ديسمبر)',
188
-	'date_mois_12_abbr' => 'ك١',
189
-	'date_mois_1_abbr' => 'ك٢',
190
-	'date_mois_2' => 'شباط (فبراير)',
191
-	'date_mois_2_abbr' => 'شباط',
192
-	'date_mois_3' => 'آذار (مارس)',
193
-	'date_mois_3_abbr' => 'آذار',
194
-	'date_mois_4' => 'نيسان (أبريل)',
195
-	'date_mois_4_abbr' => 'نيسان',
196
-	'date_mois_5' => 'أيار (مايو)',
197
-	'date_mois_5_abbr' => 'أيار',
198
-	'date_mois_6' => 'حزيران (يونيو)',
199
-	'date_mois_6_abbr' => 'جزيران',
200
-	'date_mois_7' => 'تموز (يوليو)',
201
-	'date_mois_7_abbr' => 'تموز',
202
-	'date_mois_8' => 'آب (أغسطس)',
203
-	'date_mois_8_abbr' => 'آب',
204
-	'date_mois_9' => 'أيلول (سبتمبر)',
205
-	'date_mois_9_abbr' => 'أيلول',
206
-	'date_saison_1' => 'الشتاء',
207
-	'date_saison_2' => 'الربيع',
208
-	'date_saison_3' => 'الصيف',
209
-	'date_saison_4' => 'الخريف',
210
-	'date_secondes' => 'ثانية',
211
-	'date_semaines' => 'أسبوع',
212
-	'date_un_mois' => 'شهر',
213
-	'date_une_heure' => 'ساعة',
214
-	'date_une_minute' => 'دقيقة',
215
-	'date_une_seconde' => 'ثانية',
216
-	'date_une_semaine' => 'أسبوع',
217
-	'dirs_commencer' => 'للبدء فعلاً بعملية التثبيت',
218
-	'dirs_preliminaire' => 'تمهيد: <b>إعداد امتيازات الدخول</b>',
219
-	'dirs_probleme_droits' => 'مشكلة في امتيازات الدخول',
220
-	'dirs_repertoires_absents' => '<p><b>لم يتم العثور على الأدلة التالية: </b></p><ul>@bad_dirs@</ul>
91
+    // D
92
+    'date_aujourdhui' => 'اليوم',
93
+    'date_avant_jc' => 'قبل الميلاد',
94
+    'date_dans' => 'بعد @delai@',
95
+    'date_de_mois_1' => '@j@ @nommois@',
96
+    'date_de_mois_10' => '@j@ @nommois@',
97
+    'date_de_mois_11' => '@j@ @nommois@',
98
+    'date_de_mois_12' => '@j@ @nommois@',
99
+    'date_de_mois_2' => '@j@ @nommois@',
100
+    'date_de_mois_3' => '@j@ @nommois@',
101
+    'date_de_mois_4' => '@j@ @nommois@',
102
+    'date_de_mois_5' => '@j@ @nommois@',
103
+    'date_de_mois_6' => '@j@ @nommois@',
104
+    'date_de_mois_7' => '@j@ @nommois@',
105
+    'date_de_mois_8' => '@j@ @nommois@',
106
+    'date_de_mois_9' => '@j@ @nommois@',
107
+    'date_demain' => 'غداً',
108
+    'date_fmt_heures_minutes' => '@h@  و@m@  دقيقة',
109
+    'date_fmt_heures_minutes_court' => '@h@h@m@',
110
+    'date_fmt_jour' => '@nomjour@ @jour@',
111
+    'date_fmt_jour_heure' => '@jour@ الساعة @heure@',
112
+    'date_fmt_jour_heure_debut_fin' => 'في @jour@ من @heure_debut@ الى @heure_fin@',
113
+    'date_fmt_jour_heure_debut_fin_abbr' => 'في @dtstart@@jour@ من @heure_debut@@dtabbr@ الى @dtend@@heure_fin@@dtabbr@',
114
+    'date_fmt_jour_mois' => '@jour@ @nommois@',
115
+    'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@',
116
+    'date_fmt_mois_annee' => '@nommois@ @annee@',
117
+    'date_fmt_nomjour' => '@nomjour@ @date@',
118
+    'date_fmt_nomjour_date' => 'في @nomjour@ @date@',
119
+    'date_fmt_periode' => 'من @date_debut@ الى @date_fin@',
120
+    'date_fmt_periode_abbr' => 'من @dtart@@date_debut@@dtabbr@ الى @dtend@@date_fin@@dtabbr@',
121
+    'date_fmt_periode_from' => 'من',
122
+    'date_fmt_periode_to' => 'الى',
123
+    'date_fmt_saison_annee' => '@saison@ @annee@',
124
+    'date_heures' => 'ساعة',
125
+    'date_hier' => 'البارحة',
126
+    'date_il_y_a' => 'منذ @delai@',
127
+    'date_jnum1' => '1',
128
+    'date_jnum10' => '10',
129
+    'date_jnum11' => '11',
130
+    'date_jnum12' => '12',
131
+    'date_jnum13' => '13',
132
+    'date_jnum14' => '14',
133
+    'date_jnum15' => '15',
134
+    'date_jnum16' => '16',
135
+    'date_jnum17' => '17',
136
+    'date_jnum18' => '18',
137
+    'date_jnum19' => '19',
138
+    'date_jnum2' => '2',
139
+    'date_jnum20' => '20',
140
+    'date_jnum21' => '21',
141
+    'date_jnum22' => '22',
142
+    'date_jnum23' => '23',
143
+    'date_jnum24' => '24',
144
+    'date_jnum25' => '25',
145
+    'date_jnum26' => '26',
146
+    'date_jnum27' => '27',
147
+    'date_jnum28' => '28',
148
+    'date_jnum29' => '29',
149
+    'date_jnum3' => '3',
150
+    'date_jnum30' => '30',
151
+    'date_jnum31' => '31',
152
+    'date_jnum4' => '4',
153
+    'date_jnum5' => '5',
154
+    'date_jnum6' => '6',
155
+    'date_jnum7' => '7',
156
+    'date_jnum8' => '8',
157
+    'date_jnum9' => '9',
158
+    'date_jour_1' => 'الأحد',
159
+    'date_jour_1_abbr' => 'أحد',
160
+    'date_jour_1_initiale' => 'أحد',
161
+    'date_jour_2' => 'الاثنين',
162
+    'date_jour_2_abbr' => 'اثنين',
163
+    'date_jour_2_initiale' => 'اثنين',
164
+    'date_jour_3' => 'الثلاثاء',
165
+    'date_jour_3_abbr' => 'ثلاثاء',
166
+    'date_jour_3_initiale' => 'ثلاثاء',
167
+    'date_jour_4' => 'الأربعاء',
168
+    'date_jour_4_abbr' => 'أربعاء',
169
+    'date_jour_4_initiale' => 'أربعاء',
170
+    'date_jour_5' => 'الخميس',
171
+    'date_jour_5_abbr' => 'خميس',
172
+    'date_jour_5_initiale' => 'خميس',
173
+    'date_jour_6' => 'الجمعة',
174
+    'date_jour_6_abbr' => 'جمعة',
175
+    'date_jour_6_initiale' => 'جمعة',
176
+    'date_jour_7' => 'السبت',
177
+    'date_jour_7_abbr' => 'سبت',
178
+    'date_jour_7_initiale' => 'سبت',
179
+    'date_jours' => 'يوم',
180
+    'date_minutes' => 'دقيقة',
181
+    'date_mois' => 'شهر',
182
+    'date_mois_1' => 'كانون الثاني (يناير)',
183
+    'date_mois_10' => 'تشرين الأول (أكتوبر)',
184
+    'date_mois_10_abbr' => 'ت١',
185
+    'date_mois_11' => 'تشرين الثاني (نوفمبر)',
186
+    'date_mois_11_abbr' => 'ت٢',
187
+    'date_mois_12' => 'كانون الأول (ديسمبر)',
188
+    'date_mois_12_abbr' => 'ك١',
189
+    'date_mois_1_abbr' => 'ك٢',
190
+    'date_mois_2' => 'شباط (فبراير)',
191
+    'date_mois_2_abbr' => 'شباط',
192
+    'date_mois_3' => 'آذار (مارس)',
193
+    'date_mois_3_abbr' => 'آذار',
194
+    'date_mois_4' => 'نيسان (أبريل)',
195
+    'date_mois_4_abbr' => 'نيسان',
196
+    'date_mois_5' => 'أيار (مايو)',
197
+    'date_mois_5_abbr' => 'أيار',
198
+    'date_mois_6' => 'حزيران (يونيو)',
199
+    'date_mois_6_abbr' => 'جزيران',
200
+    'date_mois_7' => 'تموز (يوليو)',
201
+    'date_mois_7_abbr' => 'تموز',
202
+    'date_mois_8' => 'آب (أغسطس)',
203
+    'date_mois_8_abbr' => 'آب',
204
+    'date_mois_9' => 'أيلول (سبتمبر)',
205
+    'date_mois_9_abbr' => 'أيلول',
206
+    'date_saison_1' => 'الشتاء',
207
+    'date_saison_2' => 'الربيع',
208
+    'date_saison_3' => 'الصيف',
209
+    'date_saison_4' => 'الخريف',
210
+    'date_secondes' => 'ثانية',
211
+    'date_semaines' => 'أسبوع',
212
+    'date_un_mois' => 'شهر',
213
+    'date_une_heure' => 'ساعة',
214
+    'date_une_minute' => 'دقيقة',
215
+    'date_une_seconde' => 'ثانية',
216
+    'date_une_semaine' => 'أسبوع',
217
+    'dirs_commencer' => 'للبدء فعلاً بعملية التثبيت',
218
+    'dirs_preliminaire' => 'تمهيد: <b>إعداد امتيازات الدخول</b>',
219
+    'dirs_probleme_droits' => 'مشكلة في امتيازات الدخول',
220
+    'dirs_repertoires_absents' => '<p><b>لم يتم العثور على الأدلة التالية: </b></p><ul>@bad_dirs@</ul>
221 221
 <p>قد يكون السبب خطأ في اعتماد الحروف الكبيرة أو الصغيرة في أسمائها. الرجاء التأكد من أن الحروف الكبيرة والصغيرة في أسماء هذه الأدلة تناسب ما هو معروض أعلاه؛ إذا لم يكن الأمر كذلك، الرجاء إعادة تسمية الأدلة بواسطة برنامج FTP لتصحيح الخطأ.
222 222
 <p>بعد تنفيذ هذه العملية يمكنك </p>',
223
-	'dirs_repertoires_suivants' => '<p><b>الأدلة التالية ممنوعة على الكتابة: </b></p
223
+    'dirs_repertoires_suivants' => '<p><b>الأدلة التالية ممنوعة على الكتابة: </b></p
224 224
 <ul>@bad_dirs@</ul>
225 225
 <p>لحل هذه المشكلة، استخدم برنامج FTP لإعداد امتيازات الدخول لكل من هذه الأدلة. ويوضح دليل الاستخدام هذه العملية بالتفصيل.
226 226
 <p>بعد إتمام هذه العملية يمكنك</p>',
227
-	'double_occurrence' => 'ظهور مكرر لعلامة @balise@',
227
+    'double_occurrence' => 'ظهور مكرر لعلامة @balise@',
228 228
 
229
-	// E
230
-	'en_cours' => 'جاري',
231
-	'envoi_via_le_site' => 'إرسال عبر الموقع',
232
-	'erreur' => 'خطأ',
233
-	'erreur_balise_non_fermee' => 'آخر علامة غير مغلقة:',
234
-	'erreur_technique_ajaxform' => 'عفواً. حدث خطأ غير متوقع خلال إرسال الاستمارة. الرجاء المحاولة من جديد.',
235
-	'erreur_technique_enregistrement_champs' => 'خطأ تقني منع التسجيل السليم للحقل @champs@. ',
236
-	'erreur_technique_enregistrement_impossible' => 'خطأ تقني منع التسجيل.',
237
-	'erreur_texte' => 'خطأ (أخطاء)',
238
-	'etape' => 'خطوة',
229
+    // E
230
+    'en_cours' => 'جاري',
231
+    'envoi_via_le_site' => 'إرسال عبر الموقع',
232
+    'erreur' => 'خطأ',
233
+    'erreur_balise_non_fermee' => 'آخر علامة غير مغلقة:',
234
+    'erreur_technique_ajaxform' => 'عفواً. حدث خطأ غير متوقع خلال إرسال الاستمارة. الرجاء المحاولة من جديد.',
235
+    'erreur_technique_enregistrement_champs' => 'خطأ تقني منع التسجيل السليم للحقل @champs@. ',
236
+    'erreur_technique_enregistrement_impossible' => 'خطأ تقني منع التسجيل.',
237
+    'erreur_texte' => 'خطأ (أخطاء)',
238
+    'etape' => 'خطوة',
239 239
 
240
-	// F
241
-	'fichier_introuvable' => 'لا يمكن العثور على الملف @fichier@',
242
-	'fonction_introuvable' => 'دالة @fonction@() غير موجودة.',
243
-	'form_auteur_confirmation' => 'تأكيد عنوان البريد الالكتروني',
244
-	'form_auteur_email_modifie' => 'تغير عنوان بريدك.',
245
-	'form_auteur_envoi_mail_confirmation' => 'لفد تم ارسال بريد تأكيد الى @email@. عليك زيارة عنوان الموقع الموجود في الرسالة للتصديق على عنوان بريدك.',
246
-	'form_auteur_mail_confirmation' => 'أهلاً وسهلاً
240
+    // F
241
+    'fichier_introuvable' => 'لا يمكن العثور على الملف @fichier@',
242
+    'fonction_introuvable' => 'دالة @fonction@() غير موجودة.',
243
+    'form_auteur_confirmation' => 'تأكيد عنوان البريد الالكتروني',
244
+    'form_auteur_email_modifie' => 'تغير عنوان بريدك.',
245
+    'form_auteur_envoi_mail_confirmation' => 'لفد تم ارسال بريد تأكيد الى @email@. عليك زيارة عنوان الموقع الموجود في الرسالة للتصديق على عنوان بريدك.',
246
+    'form_auteur_mail_confirmation' => 'أهلاً وسهلاً
247 247
 
248 248
 لقد طلبت تغيير عنوان بريدك.
249 249
 للتصديق على العنوان الجديد، يكفي الاتصال
@@ -252,347 +252,347 @@  discard block
 block discarded – undo
252 252
 
253 253
     @url@
254 254
 ',
255
-	'form_deja_inscrit' => 'سبق لك التسجيل.',
256
-	'form_email_non_valide' => 'عنوانك البريدي غير صالح.',
257
-	'form_forum_access_refuse' => 'لم تعد تملك امتياز الدحول إلى هذا الموقع.',
258
-	'form_forum_bonjour' => 'مرحباً @nom@،',
259
-	'form_forum_confirmer_email' => 'لتأكيد عنوان بريدك، إذهب الى:@url_confirm@',
260
-	'form_forum_email_deja_enregistre' => 'سبق تسجيل هذا العنوان البريدي، يمكنك إذاً استخدام كلمة سرك الاعتيادية.',
261
-	'form_forum_identifiant_mail' => 'لقد تم إرسال معرّفك الجديد بالبريد الالكتروني.',
262
-	'form_forum_identifiants' => 'بيانات الاتصال الشخصية',
263
-	'form_forum_indiquer_nom_email' => 'قم بإدخال اسمك وعنوانك البريدي هنا. ستحصل على بيانات اتصالك قريباً في البريد الإلكتروني.',
264
-	'form_forum_login' => 'المعرّف:',
265
-	'form_forum_message_auto' => '(هذه رسالة آلية)',
266
-	'form_forum_pass' => 'كلمة السر:',
267
-	'form_forum_probleme_mail' => 'مشكلة بريد إلكتروني: لا يمكن إرسال بيانات الدخول.',
268
-	'form_forum_voici1' => 'هذه هي بياناتك للاشتراك في نشاط
255
+    'form_deja_inscrit' => 'سبق لك التسجيل.',
256
+    'form_email_non_valide' => 'عنوانك البريدي غير صالح.',
257
+    'form_forum_access_refuse' => 'لم تعد تملك امتياز الدحول إلى هذا الموقع.',
258
+    'form_forum_bonjour' => 'مرحباً @nom@،',
259
+    'form_forum_confirmer_email' => 'لتأكيد عنوان بريدك، إذهب الى:@url_confirm@',
260
+    'form_forum_email_deja_enregistre' => 'سبق تسجيل هذا العنوان البريدي، يمكنك إذاً استخدام كلمة سرك الاعتيادية.',
261
+    'form_forum_identifiant_mail' => 'لقد تم إرسال معرّفك الجديد بالبريد الالكتروني.',
262
+    'form_forum_identifiants' => 'بيانات الاتصال الشخصية',
263
+    'form_forum_indiquer_nom_email' => 'قم بإدخال اسمك وعنوانك البريدي هنا. ستحصل على بيانات اتصالك قريباً في البريد الإلكتروني.',
264
+    'form_forum_login' => 'المعرّف:',
265
+    'form_forum_message_auto' => '(هذه رسالة آلية)',
266
+    'form_forum_pass' => 'كلمة السر:',
267
+    'form_forum_probleme_mail' => 'مشكلة بريد إلكتروني: لا يمكن إرسال بيانات الدخول.',
268
+    'form_forum_voici1' => 'هذه هي بياناتك للاشتراك في نشاط
269 269
 الموقع  "@nom_site_spip@" (@adresse_site@):',
270
-	'form_forum_voici2' => 'هذه هي بياناتك لاقتراح مقالات
270
+    'form_forum_voici2' => 'هذه هي بياناتك لاقتراح مقالات
271 271
 للموقع  "@nom_site_spip@" (@adresse_login@):',
272
-	'form_indiquer_email' => 'الرجاء إدخال عنوانك الإلكتروني.',
273
-	'form_indiquer_nom' => 'الرجاء إدخال اسمك.',
274
-	'form_indiquer_nom_site' => 'الرجاء إدخال إسم موقعك.',
275
-	'form_pet_deja_enregistre' => 'سبق تسجيل هذا الموقع',
276
-	'form_pet_signature_pasprise' => 'تم تجاهل توقيعك.',
277
-	'form_prop_confirmer_envoi' => 'تأكيد الإرسال',
278
-	'form_prop_description' => 'وصف/تعليق',
279
-	'form_prop_enregistre' => 'تم تسجيل اقتراحك، سوف يظهر بعد تصديقه من قبل مسئولي هذا الموقع.',
280
-	'form_prop_envoyer' => 'ابعث برسالة',
281
-	'form_prop_indiquer_email' => 'الرجاء إدخال عنوان بريد إلكتروني صالح',
282
-	'form_prop_indiquer_nom_site' => 'الرجاء إدخال اسم الموقع.',
283
-	'form_prop_indiquer_sujet' => 'الرجاء إدخال موضوع',
284
-	'form_prop_message_envoye' => 'تم بعث الرسالة',
285
-	'form_prop_non_enregistre' => 'لم يتم تسجيل اقتراحك.',
286
-	'form_prop_sujet' => 'الموضوع',
287
-	'form_prop_url_site' => 'عنوان الموقع',
288
-	'format_date_attendu' => 'إدخال تاريخ بتنسيق jj/mm/aaaa.',
289
-	'format_date_incorrecte' => 'التاريخ او تنسيقه غير صحيح',
290
-	'format_heure_attendu' => 'إدخال ساعة بتنسيق hh:mm.',
291
-	'format_heure_incorrecte' => 'الساعة او تنسيقها غير صحيح',
292
-	'forum_non_inscrit' => 'إما انك غير مسجل أو هناك خطأ في العنوان أو كلمة السر.',
293
-	'forum_par_auteur' => 'من @auteur@',
294
-	'forum_titre_erreur' => 'خطأ...',
272
+    'form_indiquer_email' => 'الرجاء إدخال عنوانك الإلكتروني.',
273
+    'form_indiquer_nom' => 'الرجاء إدخال اسمك.',
274
+    'form_indiquer_nom_site' => 'الرجاء إدخال إسم موقعك.',
275
+    'form_pet_deja_enregistre' => 'سبق تسجيل هذا الموقع',
276
+    'form_pet_signature_pasprise' => 'تم تجاهل توقيعك.',
277
+    'form_prop_confirmer_envoi' => 'تأكيد الإرسال',
278
+    'form_prop_description' => 'وصف/تعليق',
279
+    'form_prop_enregistre' => 'تم تسجيل اقتراحك، سوف يظهر بعد تصديقه من قبل مسئولي هذا الموقع.',
280
+    'form_prop_envoyer' => 'ابعث برسالة',
281
+    'form_prop_indiquer_email' => 'الرجاء إدخال عنوان بريد إلكتروني صالح',
282
+    'form_prop_indiquer_nom_site' => 'الرجاء إدخال اسم الموقع.',
283
+    'form_prop_indiquer_sujet' => 'الرجاء إدخال موضوع',
284
+    'form_prop_message_envoye' => 'تم بعث الرسالة',
285
+    'form_prop_non_enregistre' => 'لم يتم تسجيل اقتراحك.',
286
+    'form_prop_sujet' => 'الموضوع',
287
+    'form_prop_url_site' => 'عنوان الموقع',
288
+    'format_date_attendu' => 'إدخال تاريخ بتنسيق jj/mm/aaaa.',
289
+    'format_date_incorrecte' => 'التاريخ او تنسيقه غير صحيح',
290
+    'format_heure_attendu' => 'إدخال ساعة بتنسيق hh:mm.',
291
+    'format_heure_incorrecte' => 'الساعة او تنسيقها غير صحيح',
292
+    'forum_non_inscrit' => 'إما انك غير مسجل أو هناك خطأ في العنوان أو كلمة السر.',
293
+    'forum_par_auteur' => 'من @auteur@',
294
+    'forum_titre_erreur' => 'خطأ...',
295 295
 
296
-	// I
297
-	'ical_texte_rss_articles' => 'يوجد ملف «الترخيص الخلفي» لمقالات هذا الموقع على العنوان: ',
298
-	'ical_texte_rss_articles2' => 'يمكنك أيضاً الحصول على ملفات «الترخيص الخلفي» لمقالات كل قسم في الموقع:',
299
-	'ical_texte_rss_breves' => 'يوجد كذلك ملف يحتوي على أخبار الموقع. وبإدخال رقم قسم ما، تحصل على أخبار هذا القسم فقط.',
300
-	'icone_a_suivre' => 'للمتابعة',
301
-	'icone_admin_site' => 'إدارة الموقع',
302
-	'icone_agenda' => 'المفكرة',
303
-	'icone_aide_ligne' => 'التعليمات الفورية',
304
-	'icone_articles' => 'المقالات',
305
-	'icone_auteurs' => 'المؤلفون',
306
-	'icone_brouteur' => 'تصفح سريع',
307
-	'icone_configuration_site' => 'إعداد',
308
-	'icone_configurer_site' => 'إعداد موقعك',
309
-	'icone_creer_nouvel_auteur' => 'إضافة مؤلف جديد',
310
-	'icone_creer_rubrique' => 'إنشاء قسم',
311
-	'icone_creer_sous_rubrique' => 'إنشاء قسم فرعي',
312
-	'icone_deconnecter' => 'خروج',
313
-	'icone_discussions' => 'نقاشات',
314
-	'icone_doc_rubrique' => 'مستندات الأقسام',
315
-	'icone_ecrire_article' => 'كتابة مقال جديد',
316
-	'icone_edition_site' => 'تحرير الموقع',
317
-	'icone_gestion_langues' => 'إدارة اللغات',
318
-	'icone_informations_personnelles' => 'المعلومات الشخصية',
319
-	'icone_interface_complet' => 'واجهة كاملة',
320
-	'icone_interface_simple' => 'واجهة مبسّطة',
321
-	'icone_maintenance_site' => 'صيانة الموقع',
322
-	'icone_messagerie_personnelle' => 'المراسلة الشخصية',
323
-	'icone_repartition_debut' => 'إظهار التوزيع منذ البداية',
324
-	'icone_rubriques' => 'الأقسام',
325
-	'icone_sauver_site' => 'نسخة احتياطية للموقع',
326
-	'icone_site_entier' => 'الموقع بالكامل',
327
-	'icone_sites_references' => 'المواقع المبوبة',
328
-	'icone_statistiques' => 'إحصاءات الموقع',
329
-	'icone_suivi_activite' => 'متابعة نشاط الموقع',
330
-	'icone_suivi_actualite' => 'تطور الموقع',
331
-	'icone_suivi_pettions' => 'متابعة/إدارة العرائض',
332
-	'icone_suivi_revisions' => 'تعديل المقالات',
333
-	'icone_supprimer_document' => 'حذف هذا المستند',
334
-	'icone_supprimer_image' => 'حذف هذه الصورة',
335
-	'icone_tous_articles' => 'كل مقالاتك',
336
-	'icone_tous_auteur' => 'جميع المؤلفين',
337
-	'icone_tous_visiteur' => 'جميع الزوار',
338
-	'icone_visiter_site' => 'تصفح الموقع العمومي',
339
-	'icone_voir_en_ligne' => 'عرض مباشر',
340
-	'img_indisponible' => 'صورة غير متوفرة',
341
-	'impossible' => 'مستحيل',
342
-	'info_a_suivre' => 'للمتابعة»',
343
-	'info_acces_interdit' => 'الدخول محظور',
344
-	'info_acces_refuse' => 'دخول محظور',
345
-	'info_action' => 'عملية: @action@',
346
-	'info_administrer_rubriques' => 'يمكنك إدارة هذا القسم وأقسامه الفرعية',
347
-	'info_adresse_non_indiquee' => 'لم تدخل أي عنوان لاختباره!',
348
-	'info_aide' => 'تعليمات :',
349
-	'info_ajouter_mot' => 'إضافة هذا المفتاح',
350
-	'info_annonce' => 'إعلان',
351
-	'info_annonces_generales' => 'إعلانات عامة:',
352
-	'info_article_propose' => 'مقال مقترح',
353
-	'info_article_publie' => 'مقال منشور',
354
-	'info_article_redaction' => 'مقال قيد التحرير',
355
-	'info_article_refuse' => 'مقال مرفوض',
356
-	'info_article_supprime' => 'مقال محذوف',
357
-	'info_articles' => 'المقالات',
358
-	'info_articles_a_valider' => 'مقالات معروضة للتصديق',
359
-	'info_articles_nb' => '@nb@ مقال',
360
-	'info_articles_proposes' => 'المقالات المعروضة',
361
-	'info_articles_un' => 'مقال واحد',
362
-	'info_auteurs_nombre' => 'مؤلف (مؤلفون):',
363
-	'info_authentification_ftp' => 'التحقق ( عبر بروتوكول FTP ).',
364
-	'info_breves_2' => 'خبر',
365
-	'info_breves_nb' => '@nb@ خبر',
366
-	'info_breves_un' => 'خبر واحد',
367
-	'info_connexion_refusee' => 'رفض الاتصال',
368
-	'info_contact_developpeur' => 'الرجاء الاتصال بمطوّر.',
369
-	'info_contenance' => 'هذا الموقع يحتوي على:',
370
-	'info_contribution' => 'مشاركة منتديات',
371
-	'info_copyright' => '@spip@ برنامج حر موزع @lien_gpl@.',
372
-	'info_copyright_doc' => 'لمزيد من المعلومات راجع الموقع<a href="@spipnet@">@spipnet_affiche@</a>.',
373
-	'info_copyright_gpl' => 'بموجب الترخيص العام GPL',
374
-	'info_cours_edition' => 'قيد التحرير',
375
-	'info_creer_repertoire' => 'الرجاء إنشاء ملف أو دليل باسم',
376
-	'info_creer_repertoire_2' => 'داخل الدليل الفرعي <b>@repertoire@</b>، ثم:',
377
-	'info_creer_vignette' => 'إنشاء آلي للمصغر',
378
-	'info_creerdansrubrique_non_autorise' => 'لا تملك الحقوق الكافية لإنشاء اي محتوى في هذا القسم',
379
-	'info_deplier' => 'بسط',
380
-	'info_descriptif_nombre' => 'الوصف:',
381
-	'info_description' => 'الوصف:',
382
-	'info_description_2' => 'الوصف:',
383
-	'info_dimension' => 'الحجم:',
384
-	'info_documents_nb' => '@nb@ مستند',
385
-	'info_documents_un' => 'مستند واحد',
386
-	'info_ecire_message_prive' => 'تحرير رسالة خاصة',
387
-	'info_email_invalide' => 'عنوان بريد غير صالح.',
388
-	'info_en_cours_validation' => 'مقالاتك قيد التحرير',
389
-	'info_en_ligne' => 'متصل حالياً:',
390
-	'info_envoyer_message_prive' => 'ابعث برسالة خاصة لهذا المؤلف',
391
-	'info_erreur_requete' => 'خطأ في الاستفسار:',
392
-	'info_erreur_squelette2' => 'لا توجد صفحة نموذجية <b>@fichier@</b> متاحة...',
393
-	'info_erreur_systeme' => 'خطأ في النظام (خطأ رقم @errsys@)',
394
-	'info_erreur_systeme2' => 'قد يكون القرص الصلب ممتلئاً أو قد تكون قاعدة البيانات معطلة.<br />
296
+    // I
297
+    'ical_texte_rss_articles' => 'يوجد ملف «الترخيص الخلفي» لمقالات هذا الموقع على العنوان: ',
298
+    'ical_texte_rss_articles2' => 'يمكنك أيضاً الحصول على ملفات «الترخيص الخلفي» لمقالات كل قسم في الموقع:',
299
+    'ical_texte_rss_breves' => 'يوجد كذلك ملف يحتوي على أخبار الموقع. وبإدخال رقم قسم ما، تحصل على أخبار هذا القسم فقط.',
300
+    'icone_a_suivre' => 'للمتابعة',
301
+    'icone_admin_site' => 'إدارة الموقع',
302
+    'icone_agenda' => 'المفكرة',
303
+    'icone_aide_ligne' => 'التعليمات الفورية',
304
+    'icone_articles' => 'المقالات',
305
+    'icone_auteurs' => 'المؤلفون',
306
+    'icone_brouteur' => 'تصفح سريع',
307
+    'icone_configuration_site' => 'إعداد',
308
+    'icone_configurer_site' => 'إعداد موقعك',
309
+    'icone_creer_nouvel_auteur' => 'إضافة مؤلف جديد',
310
+    'icone_creer_rubrique' => 'إنشاء قسم',
311
+    'icone_creer_sous_rubrique' => 'إنشاء قسم فرعي',
312
+    'icone_deconnecter' => 'خروج',
313
+    'icone_discussions' => 'نقاشات',
314
+    'icone_doc_rubrique' => 'مستندات الأقسام',
315
+    'icone_ecrire_article' => 'كتابة مقال جديد',
316
+    'icone_edition_site' => 'تحرير الموقع',
317
+    'icone_gestion_langues' => 'إدارة اللغات',
318
+    'icone_informations_personnelles' => 'المعلومات الشخصية',
319
+    'icone_interface_complet' => 'واجهة كاملة',
320
+    'icone_interface_simple' => 'واجهة مبسّطة',
321
+    'icone_maintenance_site' => 'صيانة الموقع',
322
+    'icone_messagerie_personnelle' => 'المراسلة الشخصية',
323
+    'icone_repartition_debut' => 'إظهار التوزيع منذ البداية',
324
+    'icone_rubriques' => 'الأقسام',
325
+    'icone_sauver_site' => 'نسخة احتياطية للموقع',
326
+    'icone_site_entier' => 'الموقع بالكامل',
327
+    'icone_sites_references' => 'المواقع المبوبة',
328
+    'icone_statistiques' => 'إحصاءات الموقع',
329
+    'icone_suivi_activite' => 'متابعة نشاط الموقع',
330
+    'icone_suivi_actualite' => 'تطور الموقع',
331
+    'icone_suivi_pettions' => 'متابعة/إدارة العرائض',
332
+    'icone_suivi_revisions' => 'تعديل المقالات',
333
+    'icone_supprimer_document' => 'حذف هذا المستند',
334
+    'icone_supprimer_image' => 'حذف هذه الصورة',
335
+    'icone_tous_articles' => 'كل مقالاتك',
336
+    'icone_tous_auteur' => 'جميع المؤلفين',
337
+    'icone_tous_visiteur' => 'جميع الزوار',
338
+    'icone_visiter_site' => 'تصفح الموقع العمومي',
339
+    'icone_voir_en_ligne' => 'عرض مباشر',
340
+    'img_indisponible' => 'صورة غير متوفرة',
341
+    'impossible' => 'مستحيل',
342
+    'info_a_suivre' => 'للمتابعة»',
343
+    'info_acces_interdit' => 'الدخول محظور',
344
+    'info_acces_refuse' => 'دخول محظور',
345
+    'info_action' => 'عملية: @action@',
346
+    'info_administrer_rubriques' => 'يمكنك إدارة هذا القسم وأقسامه الفرعية',
347
+    'info_adresse_non_indiquee' => 'لم تدخل أي عنوان لاختباره!',
348
+    'info_aide' => 'تعليمات :',
349
+    'info_ajouter_mot' => 'إضافة هذا المفتاح',
350
+    'info_annonce' => 'إعلان',
351
+    'info_annonces_generales' => 'إعلانات عامة:',
352
+    'info_article_propose' => 'مقال مقترح',
353
+    'info_article_publie' => 'مقال منشور',
354
+    'info_article_redaction' => 'مقال قيد التحرير',
355
+    'info_article_refuse' => 'مقال مرفوض',
356
+    'info_article_supprime' => 'مقال محذوف',
357
+    'info_articles' => 'المقالات',
358
+    'info_articles_a_valider' => 'مقالات معروضة للتصديق',
359
+    'info_articles_nb' => '@nb@ مقال',
360
+    'info_articles_proposes' => 'المقالات المعروضة',
361
+    'info_articles_un' => 'مقال واحد',
362
+    'info_auteurs_nombre' => 'مؤلف (مؤلفون):',
363
+    'info_authentification_ftp' => 'التحقق ( عبر بروتوكول FTP ).',
364
+    'info_breves_2' => 'خبر',
365
+    'info_breves_nb' => '@nb@ خبر',
366
+    'info_breves_un' => 'خبر واحد',
367
+    'info_connexion_refusee' => 'رفض الاتصال',
368
+    'info_contact_developpeur' => 'الرجاء الاتصال بمطوّر.',
369
+    'info_contenance' => 'هذا الموقع يحتوي على:',
370
+    'info_contribution' => 'مشاركة منتديات',
371
+    'info_copyright' => '@spip@ برنامج حر موزع @lien_gpl@.',
372
+    'info_copyright_doc' => 'لمزيد من المعلومات راجع الموقع<a href="@spipnet@">@spipnet_affiche@</a>.',
373
+    'info_copyright_gpl' => 'بموجب الترخيص العام GPL',
374
+    'info_cours_edition' => 'قيد التحرير',
375
+    'info_creer_repertoire' => 'الرجاء إنشاء ملف أو دليل باسم',
376
+    'info_creer_repertoire_2' => 'داخل الدليل الفرعي <b>@repertoire@</b>، ثم:',
377
+    'info_creer_vignette' => 'إنشاء آلي للمصغر',
378
+    'info_creerdansrubrique_non_autorise' => 'لا تملك الحقوق الكافية لإنشاء اي محتوى في هذا القسم',
379
+    'info_deplier' => 'بسط',
380
+    'info_descriptif_nombre' => 'الوصف:',
381
+    'info_description' => 'الوصف:',
382
+    'info_description_2' => 'الوصف:',
383
+    'info_dimension' => 'الحجم:',
384
+    'info_documents_nb' => '@nb@ مستند',
385
+    'info_documents_un' => 'مستند واحد',
386
+    'info_ecire_message_prive' => 'تحرير رسالة خاصة',
387
+    'info_email_invalide' => 'عنوان بريد غير صالح.',
388
+    'info_en_cours_validation' => 'مقالاتك قيد التحرير',
389
+    'info_en_ligne' => 'متصل حالياً:',
390
+    'info_envoyer_message_prive' => 'ابعث برسالة خاصة لهذا المؤلف',
391
+    'info_erreur_requete' => 'خطأ في الاستفسار:',
392
+    'info_erreur_squelette2' => 'لا توجد صفحة نموذجية <b>@fichier@</b> متاحة...',
393
+    'info_erreur_systeme' => 'خطأ في النظام (خطأ رقم @errsys@)',
394
+    'info_erreur_systeme2' => 'قد يكون القرص الصلب ممتلئاً أو قد تكون قاعدة البيانات معطلة.<br />
395 395
 <span style="color:red;">حاول <a href=\'@script@\'>إصلاح القاعدة</a>، أو الاتصال بمضيف موقعك.</font> ',
396
-	'info_fini' => 'انتهى!',
397
-	'info_format_image' => 'تنسيق ملفات الصور الذي يمكن استخدامه لإنشاء المصغرات: @gd_formats@ .',
398
-	'info_format_non_defini' => 'تنسيق غير معروف',
399
-	'info_grand_ecran' => 'شاشة كبيرة',
400
-	'info_image_aide' => 'تعليمات',
401
-	'info_image_process_titre' => 'طريقة إنشاء المصغرات',
402
-	'info_impossible_lire_page' => '<b>خطأ!</b> لا يمكن قراءة الصفحة <tt><html>@test_proxy@</html></tt> عبر الجهاز الوكيل',
403
-	'info_installation_systeme_publication' => 'تثبيت نظام النشر...',
404
-	'info_installer_documents' => 'يمكنك تثبيت كل المستندات الموجودة في المجلد @upload@ آلياً.',
405
-	'info_installer_ftp' => 'بصفتك مديراً، يمكنك تثبيت (بواسطة بروتوكول FTP) ملفات في المجلد@upload@  من أجل تحديدهم في ما بعد مباشرة من هنا.',
406
-	'info_installer_images' => 'يمكنك تثبيت صور بتنسيقات JPEG  وGIF  وPNG.',
407
-	'info_installer_images_dossier' => 'تثبيت صور في المجلد @upload@  للتمكن من تحديدها هنا.',
408
-	'info_interface_complete' => 'واجهة كاملة',
409
-	'info_interface_simple' => 'واجهة مبسّطة',
410
-	'info_joindre_document_article' => 'يمكنك إرفاق مقالك بمستندات من الأنواع',
411
-	'info_joindre_document_rubrique' => 'يمكنك إضافة مستندات من الأنواع التالية إلى هذا القسم',
412
-	'info_joindre_documents_article' => 'يمكنك إرفاق مستندات من الأنواع التالية بمقالك :',
413
-	'info_l_article' => 'المقال',
414
-	'info_la_breve' => 'الخبر',
415
-	'info_la_rubrique' => 'القسم',
416
-	'info_langue_principale' => 'اللغة الأساسية للموقع',
417
-	'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@  نقطة',
418
-	'info_les_auteurs_1' => 'من @les_auteurs@',
419
-	'info_logo_format_interdit' => 'الرموز بتنسيق @formats@ هي الوحيدة المسموح بها.',
420
-	'info_logo_max_poids' => 'يجب ألا يتعدى حجم الرموز @maxi@ (يبلغ حجم الملف الحالي @actuel@). ',
421
-	'info_mail_fournisseur' => '[email protected]',
422
-	'info_message_2' => 'رسالة',
423
-	'info_message_supprime' => 'تم حذف المشاركة',
424
-	'info_messages_nb' => '@nb@ رسالة',
425
-	'info_messages_un' => 'رسالة واحدة',
426
-	'info_mise_en_ligne' => 'تاريخ النشر:',
427
-	'info_modification_parametres_securite' => 'تعديل إعدادات الأمان',
428
-	'info_mois_courant' => 'في بحر الشهر:',
429
-	'info_mot_cle_ajoute' => 'تمت إضافة المفتاح التالي إلى',
430
-	'info_multi_herit' => 'اللغة الافتراضية',
431
-	'info_multi_langues_soulignees' => '<u>اللغات التي تحتها خط</u> تتمتع بترجمة كاملة او جزئية لكل نصوص الواجهة. فإذا حددت هذه اللغات، سيتم ترجمة العديد من عناصر الموقع العمومي (التواريخ والاستمارات) آلياً. أما بالنسبة للغات التي ليس تحتها خط، فستظهر هذه العناصر في لغة الموقع الأساسية.',
432
-	'info_multilinguisme' => 'تعدد اللغات',
433
-	'info_nom_non_utilisateurs_connectes' => 'اسمك لا يظهر في قائمة المستخدمين المتصلين.',
434
-	'info_nom_utilisateurs_connectes' => 'اسمك يظهر في قائمة المستخدمين المتصلين.',
435
-	'info_nombre_en_ligne' => 'متصل حالياً:',
436
-	'info_non_resultat' => 'لا توجد نتائج لـ "@cherche_mot@"',
437
-	'info_non_utilisation_messagerie' => 'أنت لا تستخدم المراسلة الداخلية في هذا الموقع.',
438
-	'info_nouveau_message' => 'وصلت رسالة جديدة',
439
-	'info_nouveaux_messages' => 'وصلت @total_messages@  رسالة جديدة',
440
-	'info_numero_abbreviation' => 'رقم',
441
-	'info_obligatoire' => 'هذه المعلومة إجبارية',
442
-	'info_page_actuelle' => 'الصفحة الحالية',
443
-	'info_pense_bete' => 'مذكرة',
444
-	'info_petit_ecran' => 'شاشة صغيرة',
445
-	'info_petition_close' => 'عريضة مقفلة',
446
-	'info_pixels' => 'نقطة',
447
-	'info_plusieurs_mots_trouves' => 'تم العثور على عدة مفاتيح لـ "@cherche_mot@" :',
448
-	'info_portfolio_automatique' => 'محفظة آلية:',
449
-	'info_premier_resultat' => '[النتائج الـ@debut_limit@  الأولى من أصل @total@]',
450
-	'info_premier_resultat_sur' => '[النتائج الـ@debut_limit@  الأولى من أصل @total@]',
451
-	'info_propose_1' => '[@nom_site_spip@] يقترح: @titre@',
452
-	'info_propose_2' => 'مقال معروض
396
+    'info_fini' => 'انتهى!',
397
+    'info_format_image' => 'تنسيق ملفات الصور الذي يمكن استخدامه لإنشاء المصغرات: @gd_formats@ .',
398
+    'info_format_non_defini' => 'تنسيق غير معروف',
399
+    'info_grand_ecran' => 'شاشة كبيرة',
400
+    'info_image_aide' => 'تعليمات',
401
+    'info_image_process_titre' => 'طريقة إنشاء المصغرات',
402
+    'info_impossible_lire_page' => '<b>خطأ!</b> لا يمكن قراءة الصفحة <tt><html>@test_proxy@</html></tt> عبر الجهاز الوكيل',
403
+    'info_installation_systeme_publication' => 'تثبيت نظام النشر...',
404
+    'info_installer_documents' => 'يمكنك تثبيت كل المستندات الموجودة في المجلد @upload@ آلياً.',
405
+    'info_installer_ftp' => 'بصفتك مديراً، يمكنك تثبيت (بواسطة بروتوكول FTP) ملفات في المجلد@upload@  من أجل تحديدهم في ما بعد مباشرة من هنا.',
406
+    'info_installer_images' => 'يمكنك تثبيت صور بتنسيقات JPEG  وGIF  وPNG.',
407
+    'info_installer_images_dossier' => 'تثبيت صور في المجلد @upload@  للتمكن من تحديدها هنا.',
408
+    'info_interface_complete' => 'واجهة كاملة',
409
+    'info_interface_simple' => 'واجهة مبسّطة',
410
+    'info_joindre_document_article' => 'يمكنك إرفاق مقالك بمستندات من الأنواع',
411
+    'info_joindre_document_rubrique' => 'يمكنك إضافة مستندات من الأنواع التالية إلى هذا القسم',
412
+    'info_joindre_documents_article' => 'يمكنك إرفاق مستندات من الأنواع التالية بمقالك :',
413
+    'info_l_article' => 'المقال',
414
+    'info_la_breve' => 'الخبر',
415
+    'info_la_rubrique' => 'القسم',
416
+    'info_langue_principale' => 'اللغة الأساسية للموقع',
417
+    'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@  نقطة',
418
+    'info_les_auteurs_1' => 'من @les_auteurs@',
419
+    'info_logo_format_interdit' => 'الرموز بتنسيق @formats@ هي الوحيدة المسموح بها.',
420
+    'info_logo_max_poids' => 'يجب ألا يتعدى حجم الرموز @maxi@ (يبلغ حجم الملف الحالي @actuel@). ',
421
+    'info_mail_fournisseur' => '[email protected]',
422
+    'info_message_2' => 'رسالة',
423
+    'info_message_supprime' => 'تم حذف المشاركة',
424
+    'info_messages_nb' => '@nb@ رسالة',
425
+    'info_messages_un' => 'رسالة واحدة',
426
+    'info_mise_en_ligne' => 'تاريخ النشر:',
427
+    'info_modification_parametres_securite' => 'تعديل إعدادات الأمان',
428
+    'info_mois_courant' => 'في بحر الشهر:',
429
+    'info_mot_cle_ajoute' => 'تمت إضافة المفتاح التالي إلى',
430
+    'info_multi_herit' => 'اللغة الافتراضية',
431
+    'info_multi_langues_soulignees' => '<u>اللغات التي تحتها خط</u> تتمتع بترجمة كاملة او جزئية لكل نصوص الواجهة. فإذا حددت هذه اللغات، سيتم ترجمة العديد من عناصر الموقع العمومي (التواريخ والاستمارات) آلياً. أما بالنسبة للغات التي ليس تحتها خط، فستظهر هذه العناصر في لغة الموقع الأساسية.',
432
+    'info_multilinguisme' => 'تعدد اللغات',
433
+    'info_nom_non_utilisateurs_connectes' => 'اسمك لا يظهر في قائمة المستخدمين المتصلين.',
434
+    'info_nom_utilisateurs_connectes' => 'اسمك يظهر في قائمة المستخدمين المتصلين.',
435
+    'info_nombre_en_ligne' => 'متصل حالياً:',
436
+    'info_non_resultat' => 'لا توجد نتائج لـ "@cherche_mot@"',
437
+    'info_non_utilisation_messagerie' => 'أنت لا تستخدم المراسلة الداخلية في هذا الموقع.',
438
+    'info_nouveau_message' => 'وصلت رسالة جديدة',
439
+    'info_nouveaux_messages' => 'وصلت @total_messages@  رسالة جديدة',
440
+    'info_numero_abbreviation' => 'رقم',
441
+    'info_obligatoire' => 'هذه المعلومة إجبارية',
442
+    'info_page_actuelle' => 'الصفحة الحالية',
443
+    'info_pense_bete' => 'مذكرة',
444
+    'info_petit_ecran' => 'شاشة صغيرة',
445
+    'info_petition_close' => 'عريضة مقفلة',
446
+    'info_pixels' => 'نقطة',
447
+    'info_plusieurs_mots_trouves' => 'تم العثور على عدة مفاتيح لـ "@cherche_mot@" :',
448
+    'info_portfolio_automatique' => 'محفظة آلية:',
449
+    'info_premier_resultat' => '[النتائج الـ@debut_limit@  الأولى من أصل @total@]',
450
+    'info_premier_resultat_sur' => '[النتائج الـ@debut_limit@  الأولى من أصل @total@]',
451
+    'info_propose_1' => '[@nom_site_spip@] يقترح: @titre@',
452
+    'info_propose_2' => 'مقال معروض
453 453
 ----------',
454
-	'info_propose_3' => 'المقال "@titre@" معروض للنشر.',
455
-	'info_propose_4' => 'أنت مدعو لمراجعته وإبداء رأيك',
456
-	'info_propose_5' => 'في المنتدى المرتبط به. إنه موجود على العنوان:',
457
-	'info_publie_01' => 'تم التصديق على المقال "@titre@"  من قبل @connect_nom@ .',
458
-	'info_publie_1' => '[@nom_site_spip@] ينشر: @titre@',
459
-	'info_publie_2' => 'مقال منشور
454
+    'info_propose_3' => 'المقال "@titre@" معروض للنشر.',
455
+    'info_propose_4' => 'أنت مدعو لمراجعته وإبداء رأيك',
456
+    'info_propose_5' => 'في المنتدى المرتبط به. إنه موجود على العنوان:',
457
+    'info_publie_01' => 'تم التصديق على المقال "@titre@"  من قبل @connect_nom@ .',
458
+    'info_publie_1' => '[@nom_site_spip@] ينشر: @titre@',
459
+    'info_publie_2' => 'مقال منشور
460 460
 ----------',
461
-	'info_rechercher' => 'بحث',
462
-	'info_rechercher_02' => 'بحث:',
463
-	'info_remplacer_vignette' => 'استبدال المصغر الافتراضي برمز شخصي:',
464
-	'info_rubriques_nb' => '@nb@ قسم',
465
-	'info_rubriques_un' => 'قسم واحد',
466
-	'info_sans_titre_2' => 'بدون عنوان',
467
-	'info_selectionner_fichier' => 'يمكنك تحديد ملف من المجلد @upload@:',
468
-	'info_selectionner_fichier_2' => 'تحديد ملف:',
469
-	'info_sites_nb' => '@nb@ موقع',
470
-	'info_sites_un' => 'موقع واحد',
471
-	'info_supprimer_vignette' => 'حذف المصغر',
472
-	'info_symbole_bleu' => 'الرمز <b>أزرق</b> يرمز إلى <b>مذكرة</b>: أي رسالة لاستخدامك الشخصي.',
473
-	'info_symbole_jaune' => 'الرمز <b>أصفر</b> يرمز إلى <b>إعلان لجميع المحررين</b>: يمكن لجميع المدراء تحريره وهو ظاهر لجميع المحررين.',
474
-	'info_symbole_vert' => 'الرمز <b>أخضر</b>  يرمز إلى <b>الرسائل المتبادلة بين مستخدمي</b> الموقع.',
475
-	'info_telecharger_nouveau_logo' => 'تحميل رمز جديد:',
476
-	'info_telecharger_ordinateur' => 'تحميل من جهازك:',
477
-	'info_tous_resultats_enregistres' => '[تم تسجيل كل النتائج]',
478
-	'info_tout_afficher' => 'إظهار الكل',
479
-	'info_travaux_texte' => 'هذا الموقع قيد الإعداد. برجاء العودة في وقت لاحق...',
480
-	'info_travaux_titre' => 'موقع قيد التصميم',
481
-	'info_trop_resultat' => 'تم العثور على عدد كبير جداً من النتائج لـ "@cherche_mot@" ، الرجاء زيادة دقة البحث.',
482
-	'info_utilisation_messagerie_interne' => 'أنت تستخدم المراسلة الداخلية في هذا الموقع.',
483
-	'info_valider_lien' => 'التصديق على هذه الوصلة',
484
-	'info_verifier_image' => '، الرجاء التأكد من أنه تم نقل الصور بشكل سليم.',
485
-	'info_vignette_defaut' => 'المصغر الافتراضي',
486
-	'info_vignette_personnalisee' => 'مصغر شخصي',
487
-	'info_visite' => 'زيارة:',
488
-	'info_vos_rendez_vous' => 'مواعيدك القادمة',
489
-	'infos_vos_pense_bete' => 'مذكراتك',
461
+    'info_rechercher' => 'بحث',
462
+    'info_rechercher_02' => 'بحث:',
463
+    'info_remplacer_vignette' => 'استبدال المصغر الافتراضي برمز شخصي:',
464
+    'info_rubriques_nb' => '@nb@ قسم',
465
+    'info_rubriques_un' => 'قسم واحد',
466
+    'info_sans_titre_2' => 'بدون عنوان',
467
+    'info_selectionner_fichier' => 'يمكنك تحديد ملف من المجلد @upload@:',
468
+    'info_selectionner_fichier_2' => 'تحديد ملف:',
469
+    'info_sites_nb' => '@nb@ موقع',
470
+    'info_sites_un' => 'موقع واحد',
471
+    'info_supprimer_vignette' => 'حذف المصغر',
472
+    'info_symbole_bleu' => 'الرمز <b>أزرق</b> يرمز إلى <b>مذكرة</b>: أي رسالة لاستخدامك الشخصي.',
473
+    'info_symbole_jaune' => 'الرمز <b>أصفر</b> يرمز إلى <b>إعلان لجميع المحررين</b>: يمكن لجميع المدراء تحريره وهو ظاهر لجميع المحررين.',
474
+    'info_symbole_vert' => 'الرمز <b>أخضر</b>  يرمز إلى <b>الرسائل المتبادلة بين مستخدمي</b> الموقع.',
475
+    'info_telecharger_nouveau_logo' => 'تحميل رمز جديد:',
476
+    'info_telecharger_ordinateur' => 'تحميل من جهازك:',
477
+    'info_tous_resultats_enregistres' => '[تم تسجيل كل النتائج]',
478
+    'info_tout_afficher' => 'إظهار الكل',
479
+    'info_travaux_texte' => 'هذا الموقع قيد الإعداد. برجاء العودة في وقت لاحق...',
480
+    'info_travaux_titre' => 'موقع قيد التصميم',
481
+    'info_trop_resultat' => 'تم العثور على عدد كبير جداً من النتائج لـ "@cherche_mot@" ، الرجاء زيادة دقة البحث.',
482
+    'info_utilisation_messagerie_interne' => 'أنت تستخدم المراسلة الداخلية في هذا الموقع.',
483
+    'info_valider_lien' => 'التصديق على هذه الوصلة',
484
+    'info_verifier_image' => '، الرجاء التأكد من أنه تم نقل الصور بشكل سليم.',
485
+    'info_vignette_defaut' => 'المصغر الافتراضي',
486
+    'info_vignette_personnalisee' => 'مصغر شخصي',
487
+    'info_visite' => 'زيارة:',
488
+    'info_vos_rendez_vous' => 'مواعيدك القادمة',
489
+    'infos_vos_pense_bete' => 'مذكراتك',
490 490
 
491
-	// L
492
-	'label_ajout_id_rapide' => 'إضافة سريعة',
493
-	'label_poids_fichier' => 'الحجم',
494
-	'label_ponctuer' => '@label@ :',
495
-	'lien_afficher_icones_seuls' => 'عرض الرموز فقط',
496
-	'lien_afficher_texte_icones' => 'عرض الرموز والعناوين',
497
-	'lien_afficher_texte_seul' => 'عرض العناوين فقط',
498
-	'lien_aller_a_la_derniere_page' => 'الذهاب الى الصفحة الأخيرة',
499
-	'lien_aller_a_la_page_nb' => 'الذهاب الى الصفحة @nb@',
500
-	'lien_aller_a_la_page_precedente' => 'الذهاب الى الصفحة الالسابقة',
501
-	'lien_aller_a_la_page_suivante' => 'الذهاب الى الصفحة التالية',
502
-	'lien_aller_a_la_premiere_page' => 'الذهاب الى الصفحة الأولى',
503
-	'lien_liberer' => 'فك الحجز',
504
-	'lien_liberer_tous' => 'فك حجز الكل',
505
-	'lien_nouvea_pense_bete' => 'مذكرة جديدة',
506
-	'lien_nouveau_message' => 'رسالة جديدة',
507
-	'lien_nouvelle_annonce' => 'إعلان جديد',
508
-	'lien_petitions' => 'عريضة',
509
-	'lien_popularite' => 'شعبية: @popularite@%',
510
-	'lien_racine_site' => 'أصل الموقع',
511
-	'lien_reessayer' => 'إعادة المحاولة',
512
-	'lien_repondre_message' => 'الرد على هذه المشاركة',
513
-	'lien_supprimer' => 'حذف',
514
-	'lien_tout_afficher' => 'إظهار الكل',
515
-	'lien_visite_site' => 'زيارة هذا الموقع',
516
-	'lien_visites' => '@visites@ زيارة',
517
-	'lien_voir_auteur' => 'مراجعة هذا المؤلف',
518
-	'ligne' => 'سطر',
519
-	'login' => 'الدخول',
520
-	'login_acces_prive' => 'الدخول إلى المجال الخاص',
521
-	'login_autre_identifiant' => 'الاتصال بمعرّف آخر',
522
-	'login_cookie_accepte' => 'الرجاء تهيئ برنامج التصفح ليتقبلها (من هذا الموقع على الأقل)',
523
-	'login_cookie_oblige' => 'للتعريف عن نفسك بشكل آمن في هذا الموقع، يجب قبول الكعكات (cookies).',
524
-	'login_deconnexion_ok' => 'تم قطع الاتصال.',
525
-	'login_erreur_pass' => 'خطأ في كلمة السر.',
526
-	'login_espace_prive' => 'المجال الخاص',
527
-	'login_identifiant_inconnu' => 'المعرّف «@login@» غير معروف.',
528
-	'login_login' => 'المعرّف:',
529
-	'login_login2' => 'المعرّف او عنوان البريد الالكتروني:',
530
-	'login_login_pass_incorrect' => '(خطأ في المعرّف أو كلمة السر).',
531
-	'login_motpasseoublie' => 'هل نسيت كلمة السر؟',
532
-	'login_non_securise' => 'لطفا، هذه الاستمارة غير آمنة.
491
+    // L
492
+    'label_ajout_id_rapide' => 'إضافة سريعة',
493
+    'label_poids_fichier' => 'الحجم',
494
+    'label_ponctuer' => '@label@ :',
495
+    'lien_afficher_icones_seuls' => 'عرض الرموز فقط',
496
+    'lien_afficher_texte_icones' => 'عرض الرموز والعناوين',
497
+    'lien_afficher_texte_seul' => 'عرض العناوين فقط',
498
+    'lien_aller_a_la_derniere_page' => 'الذهاب الى الصفحة الأخيرة',
499
+    'lien_aller_a_la_page_nb' => 'الذهاب الى الصفحة @nb@',
500
+    'lien_aller_a_la_page_precedente' => 'الذهاب الى الصفحة الالسابقة',
501
+    'lien_aller_a_la_page_suivante' => 'الذهاب الى الصفحة التالية',
502
+    'lien_aller_a_la_premiere_page' => 'الذهاب الى الصفحة الأولى',
503
+    'lien_liberer' => 'فك الحجز',
504
+    'lien_liberer_tous' => 'فك حجز الكل',
505
+    'lien_nouvea_pense_bete' => 'مذكرة جديدة',
506
+    'lien_nouveau_message' => 'رسالة جديدة',
507
+    'lien_nouvelle_annonce' => 'إعلان جديد',
508
+    'lien_petitions' => 'عريضة',
509
+    'lien_popularite' => 'شعبية: @popularite@%',
510
+    'lien_racine_site' => 'أصل الموقع',
511
+    'lien_reessayer' => 'إعادة المحاولة',
512
+    'lien_repondre_message' => 'الرد على هذه المشاركة',
513
+    'lien_supprimer' => 'حذف',
514
+    'lien_tout_afficher' => 'إظهار الكل',
515
+    'lien_visite_site' => 'زيارة هذا الموقع',
516
+    'lien_visites' => '@visites@ زيارة',
517
+    'lien_voir_auteur' => 'مراجعة هذا المؤلف',
518
+    'ligne' => 'سطر',
519
+    'login' => 'الدخول',
520
+    'login_acces_prive' => 'الدخول إلى المجال الخاص',
521
+    'login_autre_identifiant' => 'الاتصال بمعرّف آخر',
522
+    'login_cookie_accepte' => 'الرجاء تهيئ برنامج التصفح ليتقبلها (من هذا الموقع على الأقل)',
523
+    'login_cookie_oblige' => 'للتعريف عن نفسك بشكل آمن في هذا الموقع، يجب قبول الكعكات (cookies).',
524
+    'login_deconnexion_ok' => 'تم قطع الاتصال.',
525
+    'login_erreur_pass' => 'خطأ في كلمة السر.',
526
+    'login_espace_prive' => 'المجال الخاص',
527
+    'login_identifiant_inconnu' => 'المعرّف «@login@» غير معروف.',
528
+    'login_login' => 'المعرّف:',
529
+    'login_login2' => 'المعرّف او عنوان البريد الالكتروني:',
530
+    'login_login_pass_incorrect' => '(خطأ في المعرّف أو كلمة السر).',
531
+    'login_motpasseoublie' => 'هل نسيت كلمة السر؟',
532
+    'login_non_securise' => 'لطفا، هذه الاستمارة غير آمنة.
533 533
    إذا كنت ترغب أن تكون كلمة سرك
534 534
    آمنة على الشبكة، يجب تفعيل جافاسكريبت 
535 535
    في برنامج التصفح',
536
-	'login_nouvelle_tentative' => 'محاولة جديدة',
537
-	'login_par_ici' => 'أنت مسجّل... توجه من هنا...',
538
-	'login_pass2' => 'كلمة السر:',
539
-	'login_preferez_refuser' => '<b>إذا كنت تفضل عدم قبول الكعكات</b>، يمكنك استخدام طريقة دخول أخرى (أقل أماناً):',
540
-	'login_recharger' => 'وإعادة تحميل الصفحة',
541
-	'login_rester_identifie' => 'تذكروني',
542
-	'login_retour_public' => 'عودة إلى الموقع العام',
543
-	'login_retour_site' => 'عودة إلى الموقع العام',
544
-	'login_retoursitepublic' => 'عودة إلى الموقع العام',
545
-	'login_sans_cookie' => 'تعريف بدون الكعكة',
546
-	'login_securise' => 'تعريف مؤمّن',
547
-	'login_sinscrire' => 'تسجيل',
548
-	'login_test_navigateur' => 'تجربة المتصفح/إعادة الاتصال',
549
-	'login_verifiez_navigateur' => '(على أي حال، تأكد من أن المتصفح لم يقم بحفظ كلمة سرك...)',
536
+    'login_nouvelle_tentative' => 'محاولة جديدة',
537
+    'login_par_ici' => 'أنت مسجّل... توجه من هنا...',
538
+    'login_pass2' => 'كلمة السر:',
539
+    'login_preferez_refuser' => '<b>إذا كنت تفضل عدم قبول الكعكات</b>، يمكنك استخدام طريقة دخول أخرى (أقل أماناً):',
540
+    'login_recharger' => 'وإعادة تحميل الصفحة',
541
+    'login_rester_identifie' => 'تذكروني',
542
+    'login_retour_public' => 'عودة إلى الموقع العام',
543
+    'login_retour_site' => 'عودة إلى الموقع العام',
544
+    'login_retoursitepublic' => 'عودة إلى الموقع العام',
545
+    'login_sans_cookie' => 'تعريف بدون الكعكة',
546
+    'login_securise' => 'تعريف مؤمّن',
547
+    'login_sinscrire' => 'تسجيل',
548
+    'login_test_navigateur' => 'تجربة المتصفح/إعادة الاتصال',
549
+    'login_verifiez_navigateur' => '(على أي حال، تأكد من أن المتصفح لم يقم بحفظ كلمة سرك...)',
550 550
 
551
-	// M
552
-	'masquer_colonne' => 'حجب هذا العمود',
553
-	'masquer_trad' => 'حجب الترجمات',
554
-	'message_nouveaux_identifiants_echec' => 'لا يمكن إنشاء معرف وكلمة سر جديدين.',
555
-	'message_nouveaux_identifiants_echec_envoi' => 'مشكلة في إرسال المعرف وكلمة السر الجديدين.',
556
-	'message_nouveaux_identifiants_ok' => 'تم إرسال المعرف وكلمة السر الجديدين الى @email@.',
557
-	'module_fichiers_langues' => 'ملفات اللغة',
551
+    // M
552
+    'masquer_colonne' => 'حجب هذا العمود',
553
+    'masquer_trad' => 'حجب الترجمات',
554
+    'message_nouveaux_identifiants_echec' => 'لا يمكن إنشاء معرف وكلمة سر جديدين.',
555
+    'message_nouveaux_identifiants_echec_envoi' => 'مشكلة في إرسال المعرف وكلمة السر الجديدين.',
556
+    'message_nouveaux_identifiants_ok' => 'تم إرسال المعرف وكلمة السر الجديدين الى @email@.',
557
+    'module_fichiers_langues' => 'ملفات اللغة',
558 558
 
559
-	// N
560
-	'navigateur_pas_redirige' => 'إذا لم تتم إعادة توجيه متصفحك، انقر هنا للمتابعة.',
561
-	'numero' => 'رقم',
559
+    // N
560
+    'navigateur_pas_redirige' => 'إذا لم تتم إعادة توجيه متصفحك، انقر هنا للمتابعة.',
561
+    'numero' => 'رقم',
562 562
 
563
-	// O
564
-	'occurence' => 'ظهور',
565
-	'onglet_affacer_base' => 'حذف قاعدة البيانات',
566
-	'onglet_auteur' => 'المؤلف',
567
-	'onglet_contenu_site' => 'محتوى الموقع',
568
-	'onglet_evolution_visite_mod' => 'تطور',
569
-	'onglet_fonctions_avances' => 'الوظائف المتطورة',
570
-	'onglet_informations_personnelles' => 'المعلومات الشخصية',
571
-	'onglet_interactivite' => 'التفاعلية',
572
-	'onglet_messagerie' => 'المراسلة',
573
-	'onglet_repartition_rubrique' => 'التوزيع حسب الأقسام',
574
-	'onglet_save_restaur_base' => 'نسخ احتياطي / استرجاع القاعدة',
575
-	'onglet_vider_cache' => 'تفريغ الذاكرة المخبأة',
563
+    // O
564
+    'occurence' => 'ظهور',
565
+    'onglet_affacer_base' => 'حذف قاعدة البيانات',
566
+    'onglet_auteur' => 'المؤلف',
567
+    'onglet_contenu_site' => 'محتوى الموقع',
568
+    'onglet_evolution_visite_mod' => 'تطور',
569
+    'onglet_fonctions_avances' => 'الوظائف المتطورة',
570
+    'onglet_informations_personnelles' => 'المعلومات الشخصية',
571
+    'onglet_interactivite' => 'التفاعلية',
572
+    'onglet_messagerie' => 'المراسلة',
573
+    'onglet_repartition_rubrique' => 'التوزيع حسب الأقسام',
574
+    'onglet_save_restaur_base' => 'نسخ احتياطي / استرجاع القاعدة',
575
+    'onglet_vider_cache' => 'تفريغ الذاكرة المخبأة',
576 576
 
577
-	// P
578
-	'pass_choix_pass' => 'الرجاء اختيار كلمة السر الجديدة:',
579
-	'pass_erreur' => 'خطأ',
580
-	'pass_erreur_acces_refuse' => '<b>خطأ:< b> لم تعد تملك حق الدخول إلى هذا الموقع.',
581
-	'pass_erreur_code_inconnu' => '<b>خطأ:< b> هذا المعرّف لا يتناسب مع أي من الزوار الذين يتمتعون بحق الدخول إلى هذا الموقع.',
582
-	'pass_erreur_non_enregistre' => '<b>خطأ:< b>  العنوان <tt>@email_oubli@</tt> ليس مسجلاً في هذا الموقع.',
583
-	'pass_erreur_non_valide' => '<b>خطأ:< b>  العنوان <tt>@email_oubli@</tt> ليس صالحاً.',
584
-	'pass_erreur_probleme_technique' => '<b>خطأ:< b>  لم يتم بعث هذه الرسالة بسبب مشكلة تقنية.',
585
-	'pass_espace_prive_bla' => 'المجال الخاص لهذا الموقع مفتوح
577
+    // P
578
+    'pass_choix_pass' => 'الرجاء اختيار كلمة السر الجديدة:',
579
+    'pass_erreur' => 'خطأ',
580
+    'pass_erreur_acces_refuse' => '<b>خطأ:< b> لم تعد تملك حق الدخول إلى هذا الموقع.',
581
+    'pass_erreur_code_inconnu' => '<b>خطأ:< b> هذا المعرّف لا يتناسب مع أي من الزوار الذين يتمتعون بحق الدخول إلى هذا الموقع.',
582
+    'pass_erreur_non_enregistre' => '<b>خطأ:< b>  العنوان <tt>@email_oubli@</tt> ليس مسجلاً في هذا الموقع.',
583
+    'pass_erreur_non_valide' => '<b>خطأ:< b>  العنوان <tt>@email_oubli@</tt> ليس صالحاً.',
584
+    'pass_erreur_probleme_technique' => '<b>خطأ:< b>  لم يتم بعث هذه الرسالة بسبب مشكلة تقنية.',
585
+    'pass_espace_prive_bla' => 'المجال الخاص لهذا الموقع مفتوح
586 586
 للزوار بعد تسجيلهم. بعد تسجيلك
587 587
 يمكنك مراجعة المقالات قيد التحرير
588 588
 واقتراح مقالات والمشاركة في كل المنتديات.',
589
-	'pass_forum_bla' => 'طلبت المشاركة في منتدى
589
+    'pass_forum_bla' => 'طلبت المشاركة في منتدى
590 590
 محصور بالزوار المسجلين.',
591
-	'pass_indiquez_cidessous' => 'قم بإدخال العنوان الإلكتروني الذي 
591
+    'pass_indiquez_cidessous' => 'قم بإدخال العنوان الإلكتروني الذي 
592 592
 تسجلت بواستطه سابقاً.
593 593
 ستحصل على رسالة تفسر لك كيفية
594 594
 استعادة دخولك.',
595
-	'pass_mail_passcookie' => '(هذه رسالة آلية)
595
+    'pass_mail_passcookie' => '(هذه رسالة آلية)
596 596
 لاستعادة دخولك إلى الموقع
597 597
 @nom_site_spip@  (@adresse_site@)
598 598
 
@@ -604,150 +604,150 @@  discard block
 block discarded – undo
604 604
 وإعادة الاتصال بالموقع.
605 605
 
606 606
 ',
607
-	'pass_mot_oublie' => 'نسيان كلمة السر',
608
-	'pass_nouveau_enregistre' => 'تم تسجيل كلمة سرك الجديدة.',
609
-	'pass_nouveau_pass' => 'كلمة السر الجديدة',
610
-	'pass_ok' => 'موافق',
611
-	'pass_oubli_mot' => 'نسيان كلمة السر',
612
-	'pass_procedure_changer' => 'من أجل تغيير كلمة السر، قم بأدخال عنوان البريد الالكتروني المرتبط بحسابك.',
613
-	'pass_quitter_fenetre' => 'إقفال هذه النافذة',
614
-	'pass_rappel_login' => 'تذكير: معرّفك هو «@login@».',
615
-	'pass_recevoir_mail' => 'تم ارسال رابط لإعادة تأصيل كلمة السر الى عنوان البريد لديك (اذا كان صالحاً).',
616
-	'pass_retour_public' => 'عودة إلى الموقع العام',
617
-	'pass_rien_a_faire_ici' => 'لا شغل لك هنا.',
618
-	'pass_vousinscrire' => 'تسجيلك في الموقع',
619
-	'precedent' => 'السابق',
620
-	'previsualisation' => 'عرض مسبق',
621
-	'previsualiser' => 'عرض مسبق',
607
+    'pass_mot_oublie' => 'نسيان كلمة السر',
608
+    'pass_nouveau_enregistre' => 'تم تسجيل كلمة سرك الجديدة.',
609
+    'pass_nouveau_pass' => 'كلمة السر الجديدة',
610
+    'pass_ok' => 'موافق',
611
+    'pass_oubli_mot' => 'نسيان كلمة السر',
612
+    'pass_procedure_changer' => 'من أجل تغيير كلمة السر، قم بأدخال عنوان البريد الالكتروني المرتبط بحسابك.',
613
+    'pass_quitter_fenetre' => 'إقفال هذه النافذة',
614
+    'pass_rappel_login' => 'تذكير: معرّفك هو «@login@».',
615
+    'pass_recevoir_mail' => 'تم ارسال رابط لإعادة تأصيل كلمة السر الى عنوان البريد لديك (اذا كان صالحاً).',
616
+    'pass_retour_public' => 'عودة إلى الموقع العام',
617
+    'pass_rien_a_faire_ici' => 'لا شغل لك هنا.',
618
+    'pass_vousinscrire' => 'تسجيلك في الموقع',
619
+    'precedent' => 'السابق',
620
+    'previsualisation' => 'عرض مسبق',
621
+    'previsualiser' => 'عرض مسبق',
622 622
 
623
-	// R
624
-	'retour' => 'عودة',
623
+    // R
624
+    'retour' => 'عودة',
625 625
 
626
-	// S
627
-	'spip_conforme_dtd' => 'يعتبر SPIP أن هذا المستند مطابق لتحديد DOCTYPE:',
628
-	'squelette' => 'صفحة نموذجية',
629
-	'squelette_inclus_ligne' => 'صفحة نموذجية مدمجة، سطر',
630
-	'squelette_ligne' => 'صفحة نموذجية، سطر',
631
-	'stats_visites_et_popularite' => '@visites@ زيارة؛ شعبية: @popularite@',
632
-	'suivant' => 'التالي',
626
+    // S
627
+    'spip_conforme_dtd' => 'يعتبر SPIP أن هذا المستند مطابق لتحديد DOCTYPE:',
628
+    'squelette' => 'صفحة نموذجية',
629
+    'squelette_inclus_ligne' => 'صفحة نموذجية مدمجة، سطر',
630
+    'squelette_ligne' => 'صفحة نموذجية، سطر',
631
+    'stats_visites_et_popularite' => '@visites@ زيارة؛ شعبية: @popularite@',
632
+    'suivant' => 'التالي',
633 633
 
634
-	// T
635
-	'taille_go' => '@taille@ غيغابايت',
636
-	'taille_go_bi' => '@taille@ غيغيبايت',
637
-	'taille_ko' => '@taille@ كيلوبايت',
638
-	'taille_ko_bi' => '@taille@ كيليبايت',
639
-	'taille_mo' => '@taille@ ميغابايت',
640
-	'taille_mo_bi' => '@taille@ ميغيبايت',
641
-	'taille_octets' => '@taille@ بايت',
642
-	'taille_octets_bi' => '@taille@ بايت',
643
-	'texte_actualite_site_1' => 'عندما تتأقلم مع واجهة النظام انقر على «',
644
-	'texte_actualite_site_2' => 'الواجهة الكاملة',
645
-	'texte_actualite_site_3' => '»  لإتاحة المزيد من الوظائف.',
646
-	'texte_creation_automatique_vignette' => 'لقد تم تفعيل الإنشاء الآلي لمصغرات المعاينة. إذا استخدمت هذه الاستمارة لإدخال صور بتنسيق (أو تنسيقات) @gd_formats@، سيتم تزويدها بمصغر لا يزيد حجمه عن @taille_preview@  نقطة. ',
647
-	'texte_documents_associes' => 'المستندات التالية ترافق المقال،
634
+    // T
635
+    'taille_go' => '@taille@ غيغابايت',
636
+    'taille_go_bi' => '@taille@ غيغيبايت',
637
+    'taille_ko' => '@taille@ كيلوبايت',
638
+    'taille_ko_bi' => '@taille@ كيليبايت',
639
+    'taille_mo' => '@taille@ ميغابايت',
640
+    'taille_mo_bi' => '@taille@ ميغيبايت',
641
+    'taille_octets' => '@taille@ بايت',
642
+    'taille_octets_bi' => '@taille@ بايت',
643
+    'texte_actualite_site_1' => 'عندما تتأقلم مع واجهة النظام انقر على «',
644
+    'texte_actualite_site_2' => 'الواجهة الكاملة',
645
+    'texte_actualite_site_3' => '»  لإتاحة المزيد من الوظائف.',
646
+    'texte_creation_automatique_vignette' => 'لقد تم تفعيل الإنشاء الآلي لمصغرات المعاينة. إذا استخدمت هذه الاستمارة لإدخال صور بتنسيق (أو تنسيقات) @gd_formats@، سيتم تزويدها بمصغر لا يزيد حجمه عن @taille_preview@  نقطة. ',
647
+    'texte_documents_associes' => 'المستندات التالية ترافق المقال،
648 648
     لكنها لم تُدرج
649 649
     مباشرة. بالاعتماد على تصميم الموقع العمومي،
650 650
     قد تظهر على شكل مستندات مرفقة.',
651
-	'texte_erreur_mise_niveau_base' => 'خطأ في قاعدة البيانات خلال الترقية.
651
+    'texte_erreur_mise_niveau_base' => 'خطأ في قاعدة البيانات خلال الترقية.
652 652
      تعذر تمرير الصورة <b>@fichier@</b>  (المقال @id_article@). 
653 653
      سجل هذا المرجع وحاول إعادة عملية
654 654
      الترقية، وأخيراً تأكد من أن الصور لا تزال تظهر
655 655
      في المقالات.',
656
-	'texte_erreur_visiteur' => 'حاولت الدخول إلى المجال الخاص بمعرّف لا يسمح بذلك.',
657
-	'texte_inc_auth_1' => 'عرّفت عن نفسك
656
+    'texte_erreur_visiteur' => 'حاولت الدخول إلى المجال الخاص بمعرّف لا يسمح بذلك.',
657
+    'texte_inc_auth_1' => 'عرّفت عن نفسك
658 658
 بالمعرّف <b>@auth_login@</b>، لكنه غير (لم يعد) موجود في قاعدة البيانات.
659 659
   حاول  ',
660
-	'texte_inc_auth_2' => 'إعادة الاتصال',
661
-	'texte_inc_auth_3' => '، بعد إنهاء المتصفح ثم
660
+    'texte_inc_auth_2' => 'إعادة الاتصال',
661
+    'texte_inc_auth_3' => '، بعد إنهاء المتصفح ثم
662 662
 إعادة تشغيله إذا اقتضت الحاجة.',
663
-	'texte_inc_config' => 'التغييرات الداخلة على هذه الصفحة تؤثر بشكل ملحوظ على
663
+    'texte_inc_config' => 'التغييرات الداخلة على هذه الصفحة تؤثر بشكل ملحوظ على
664 664
 تشغيل الموقع. يستحسن عدم إدخال تغييرات قبل
665 665
 التأقلم مع نظام SPIP  للنشر. <br /><br /><b>بشكل
666 666
 عام، ننصحك
667 667
 بحصر التعامل مع هذه الصفحات بالمسؤول الأساسي عن تصميم الموقع.</b>',
668
-	'texte_inc_meta_1' => 'واجه النظام خطأً خلال كتابة الملف <code>@fichier@</code>. بصفتك أحد مدراء الموقع، الرجاء',
669
-	'texte_inc_meta_2' => 'التأكد من حقوق الكتابة',
670
-	'texte_inc_meta_3' => 'الخاصة بالدليل <code>@repertoire@</code>. ',
671
-	'texte_statut_en_cours_redaction' => 'قيد التحرير',
672
-	'texte_statut_poubelle' => 'إلى المهملات',
673
-	'texte_statut_propose_evaluation' => 'معروض للتقييم',
674
-	'texte_statut_publie' => 'منشور',
675
-	'texte_statut_refuse' => 'مرفوض',
676
-	'titre_ajouter_mot_cle' => 'إضافة مفتاح:',
677
-	'titre_cadre_raccourcis' => 'اختصارات:',
678
-	'titre_changer_couleur_interface' => 'تغيير لون الواجهة',
679
-	'titre_image_admin_article' => 'أنت مخول إدارة هذا المقال',
680
-	'titre_image_administrateur' => 'مدير',
681
-	'titre_image_aide' => 'تعليمات حول هذا العنصر',
682
-	'titre_image_auteur_supprime' => 'مؤلف محذوف',
683
-	'titre_image_redacteur' => 'محرر دون إذن دخول',
684
-	'titre_image_redacteur_02' => 'محرر',
685
-	'titre_image_selecteur' => 'عرض القائمة',
686
-	'titre_image_visiteur' => 'زائر',
687
-	'titre_joindre_document' => 'إرفاق مستند',
688
-	'titre_mots_cles' => 'المفاتيح',
689
-	'titre_probleme_technique' => 'تحذير: مشكلة تقنية (خادم SQL) تمنع الدخول إلى هذا الجزء من الموقع. شكراً على تفهمكم.',
690
-	'titre_publier_document' => 'نشر مستند في هذا القسم',
691
-	'titre_signatures_attente' => 'تواقيع بانتظار التصديق',
692
-	'titre_signatures_confirmees' => 'توقيعات مصدّقة',
693
-	'titre_statistiques' => 'إحصاءات الموقع',
694
-	'titre_titre_document' => 'اسم المستند: ',
695
-	'todo' => 'قريباً',
696
-	'trad_definir_reference' => 'اختيار "@titre@" كمرجع للترجمات',
697
-	'trad_reference' => '(مرجع الترجمات)',
668
+    'texte_inc_meta_1' => 'واجه النظام خطأً خلال كتابة الملف <code>@fichier@</code>. بصفتك أحد مدراء الموقع، الرجاء',
669
+    'texte_inc_meta_2' => 'التأكد من حقوق الكتابة',
670
+    'texte_inc_meta_3' => 'الخاصة بالدليل <code>@repertoire@</code>. ',
671
+    'texte_statut_en_cours_redaction' => 'قيد التحرير',
672
+    'texte_statut_poubelle' => 'إلى المهملات',
673
+    'texte_statut_propose_evaluation' => 'معروض للتقييم',
674
+    'texte_statut_publie' => 'منشور',
675
+    'texte_statut_refuse' => 'مرفوض',
676
+    'titre_ajouter_mot_cle' => 'إضافة مفتاح:',
677
+    'titre_cadre_raccourcis' => 'اختصارات:',
678
+    'titre_changer_couleur_interface' => 'تغيير لون الواجهة',
679
+    'titre_image_admin_article' => 'أنت مخول إدارة هذا المقال',
680
+    'titre_image_administrateur' => 'مدير',
681
+    'titre_image_aide' => 'تعليمات حول هذا العنصر',
682
+    'titre_image_auteur_supprime' => 'مؤلف محذوف',
683
+    'titre_image_redacteur' => 'محرر دون إذن دخول',
684
+    'titre_image_redacteur_02' => 'محرر',
685
+    'titre_image_selecteur' => 'عرض القائمة',
686
+    'titre_image_visiteur' => 'زائر',
687
+    'titre_joindre_document' => 'إرفاق مستند',
688
+    'titre_mots_cles' => 'المفاتيح',
689
+    'titre_probleme_technique' => 'تحذير: مشكلة تقنية (خادم SQL) تمنع الدخول إلى هذا الجزء من الموقع. شكراً على تفهمكم.',
690
+    'titre_publier_document' => 'نشر مستند في هذا القسم',
691
+    'titre_signatures_attente' => 'تواقيع بانتظار التصديق',
692
+    'titre_signatures_confirmees' => 'توقيعات مصدّقة',
693
+    'titre_statistiques' => 'إحصاءات الموقع',
694
+    'titre_titre_document' => 'اسم المستند: ',
695
+    'todo' => 'قريباً',
696
+    'trad_definir_reference' => 'اختيار "@titre@" كمرجع للترجمات',
697
+    'trad_reference' => '(مرجع الترجمات)',
698 698
 
699
-	// U
700
-	'upload_limit' => 'حجم هذا الملف أكبر مما يتحمل جهاز الخدمة: الحجم الأقصى المسموح به <b>للتنزيل</b> هو @max@.',
699
+    // U
700
+    'upload_limit' => 'حجم هذا الملف أكبر مما يتحمل جهاز الخدمة: الحجم الأقصى المسموح به <b>للتنزيل</b> هو @max@.',
701 701
 
702
-	// Z
703
-	'zbug_balise_b_aval' => ': العلامة B متأخرة',
704
-	'zbug_balise_inexistante' => 'خطأ في الاعلان عن العلامة @balise@ لـ@from@',
705
-	'zbug_balise_sans_argument' => 'عامل غير موجود في علامة @balise@',
706
-	'zbug_boucle' => 'حلقة',
707
-	'zbug_boucle_recursive_undef' => 'حلقة دورية غير معرّفة: @nom@',
708
-	'zbug_calcul' => 'حساب',
709
-	'zbug_champ_hors_boucle' => 'الحقل @champ@ خارج الحلقة',
710
-	'zbug_champ_hors_critere' => 'الحقل @champ@ خارج المقياس @critere@',
711
-	'zbug_champ_hors_motif' => 'الحقل @champ@ خارج سياق @motif@',
712
-	'zbug_code' => 'الرموز البرمجية',
713
-	'zbug_critere_inconnu' => 'معيار غير معروف @critere@',
714
-	'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} على جدول دون مفتاح اساسي افرادي',
715
-	'zbug_distant_interdit' => 'عملية خارجية ممنوعة',
716
-	'zbug_doublon_table_sans_cle_primaire' => 'قيمة مكررة في جدول لا يملك مفتاح أساسي',
717
-	'zbug_doublon_table_sans_index' => 'تكرار في جدول غير مفهرس',
718
-	'zbug_erreur_boucle_double' => 'تعريف متكرر للحلقة @id@',
719
-	'zbug_erreur_boucle_fermant' => 'علامة إغلاق غائبة في حلقة @id@',
720
-	'zbug_erreur_boucle_syntaxe' => 'تركيب حلقة @id@ غير صحيح',
721
-	'zbug_erreur_compilation' => 'خطأ تصنيف',
722
-	'zbug_erreur_execution_page' => 'خطأ في التنفيذ',
723
-	'zbug_erreur_filtre' => 'المرشح @filtre@ غير معرّف ',
724
-	'zbug_erreur_filtre_nbarg_min' => 'المرشح @filtre@ : ينقص @nb@ عامل',
725
-	'zbug_erreur_meme_parent' => 'لا ينطبق معيار {meme_parent} إلا على حلقتي (FORUMS) أو (RUBRIQUES)',
726
-	'zbug_erreur_squelette' => 'خطأ في الصفحة النموذجية',
727
-	'zbug_hors_compilation' => 'خارج التصنيف',
728
-	'zbug_info_erreur_squelette' => 'خطأ في الموفع',
729
-	'zbug_inversion_ordre_inexistant' => 'عكس ترتيب غير موجود أصلاً',
730
-	'zbug_pagination_sans_critere' => 'علامة PAGINATION# بدون معيار {pagination} أو مستخدمة في حلقة دورية',
731
-	'zbug_parametres_inclus_incorrects' => 'عامل إدراج غير صحيحة: @param@',
732
-	'zbug_profile' => 'فترة المعالجة: @time@',
733
-	'zbug_resultat' => 'النتيجة',
734
-	'zbug_serveur_indefini' => 'خادم SQL غير محدد',
735
-	'zbug_statistiques' => 'احصاءات استفسارات SQL مرتبة حسب المدة',
736
-	'zbug_table_inconnue' => 'جدول SQL هو «@table@» غير معروف',
737
-	'zxml_connus_attributs' => 'خاصيات معروفة',
738
-	'zxml_de' => 'من',
739
-	'zxml_inconnu_attribut' => 'خاصية غير معروفة',
740
-	'zxml_inconnu_balise' => 'علامة غير معروفة',
741
-	'zxml_inconnu_entite' => 'كائن غير معروف',
742
-	'zxml_inconnu_id' => 'هوية ID غير معروفة',
743
-	'zxml_mais_de' => 'لكن من',
744
-	'zxml_non_conforme' => 'غير مطابق للشكل',
745
-	'zxml_non_fils' => 'ليس من سلالة',
746
-	'zxml_nonvide_balise' => 'علامة غير فارغة',
747
-	'zxml_obligatoire_attribut' => 'خاصية إجبارية لكنها غير موجودة في',
748
-	'zxml_succession_fils_incorrecte' => 'تتابع سلالات غير سليم',
749
-	'zxml_survoler' => 'الحوم لعرض الصحيح',
750
-	'zxml_valeur_attribut' => 'قيمة الخاصية',
751
-	'zxml_vide_balise' => 'علامة فارغة',
752
-	'zxml_vu' => 'ظهر مسبقاً'
702
+    // Z
703
+    'zbug_balise_b_aval' => ': العلامة B متأخرة',
704
+    'zbug_balise_inexistante' => 'خطأ في الاعلان عن العلامة @balise@ لـ@from@',
705
+    'zbug_balise_sans_argument' => 'عامل غير موجود في علامة @balise@',
706
+    'zbug_boucle' => 'حلقة',
707
+    'zbug_boucle_recursive_undef' => 'حلقة دورية غير معرّفة: @nom@',
708
+    'zbug_calcul' => 'حساب',
709
+    'zbug_champ_hors_boucle' => 'الحقل @champ@ خارج الحلقة',
710
+    'zbug_champ_hors_critere' => 'الحقل @champ@ خارج المقياس @critere@',
711
+    'zbug_champ_hors_motif' => 'الحقل @champ@ خارج سياق @motif@',
712
+    'zbug_code' => 'الرموز البرمجية',
713
+    'zbug_critere_inconnu' => 'معيار غير معروف @critere@',
714
+    'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} على جدول دون مفتاح اساسي افرادي',
715
+    'zbug_distant_interdit' => 'عملية خارجية ممنوعة',
716
+    'zbug_doublon_table_sans_cle_primaire' => 'قيمة مكررة في جدول لا يملك مفتاح أساسي',
717
+    'zbug_doublon_table_sans_index' => 'تكرار في جدول غير مفهرس',
718
+    'zbug_erreur_boucle_double' => 'تعريف متكرر للحلقة @id@',
719
+    'zbug_erreur_boucle_fermant' => 'علامة إغلاق غائبة في حلقة @id@',
720
+    'zbug_erreur_boucle_syntaxe' => 'تركيب حلقة @id@ غير صحيح',
721
+    'zbug_erreur_compilation' => 'خطأ تصنيف',
722
+    'zbug_erreur_execution_page' => 'خطأ في التنفيذ',
723
+    'zbug_erreur_filtre' => 'المرشح @filtre@ غير معرّف ',
724
+    'zbug_erreur_filtre_nbarg_min' => 'المرشح @filtre@ : ينقص @nb@ عامل',
725
+    'zbug_erreur_meme_parent' => 'لا ينطبق معيار {meme_parent} إلا على حلقتي (FORUMS) أو (RUBRIQUES)',
726
+    'zbug_erreur_squelette' => 'خطأ في الصفحة النموذجية',
727
+    'zbug_hors_compilation' => 'خارج التصنيف',
728
+    'zbug_info_erreur_squelette' => 'خطأ في الموفع',
729
+    'zbug_inversion_ordre_inexistant' => 'عكس ترتيب غير موجود أصلاً',
730
+    'zbug_pagination_sans_critere' => 'علامة PAGINATION# بدون معيار {pagination} أو مستخدمة في حلقة دورية',
731
+    'zbug_parametres_inclus_incorrects' => 'عامل إدراج غير صحيحة: @param@',
732
+    'zbug_profile' => 'فترة المعالجة: @time@',
733
+    'zbug_resultat' => 'النتيجة',
734
+    'zbug_serveur_indefini' => 'خادم SQL غير محدد',
735
+    'zbug_statistiques' => 'احصاءات استفسارات SQL مرتبة حسب المدة',
736
+    'zbug_table_inconnue' => 'جدول SQL هو «@table@» غير معروف',
737
+    'zxml_connus_attributs' => 'خاصيات معروفة',
738
+    'zxml_de' => 'من',
739
+    'zxml_inconnu_attribut' => 'خاصية غير معروفة',
740
+    'zxml_inconnu_balise' => 'علامة غير معروفة',
741
+    'zxml_inconnu_entite' => 'كائن غير معروف',
742
+    'zxml_inconnu_id' => 'هوية ID غير معروفة',
743
+    'zxml_mais_de' => 'لكن من',
744
+    'zxml_non_conforme' => 'غير مطابق للشكل',
745
+    'zxml_non_fils' => 'ليس من سلالة',
746
+    'zxml_nonvide_balise' => 'علامة غير فارغة',
747
+    'zxml_obligatoire_attribut' => 'خاصية إجبارية لكنها غير موجودة في',
748
+    'zxml_succession_fils_incorrecte' => 'تتابع سلالات غير سليم',
749
+    'zxml_survoler' => 'الحوم لعرض الصحيح',
750
+    'zxml_valeur_attribut' => 'قيمة الخاصية',
751
+    'zxml_vide_balise' => 'علامة فارغة',
752
+    'zxml_vu' => 'ظهر مسبقاً'
753 753
 );
Please login to merge, or discard this patch.
ecrire/inc/texte.php 1 patch
Indentation   +229 added lines, -229 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 include_spip('inc/texte_mini');
@@ -33,7 +33,7 @@  discard block
 block discarded – undo
33 33
  * @return array Tablea ('','')
34 34
  */
35 35
 function definir_raccourcis_alineas() {
36
-	return ['', ''];
36
+    return ['', ''];
37 37
 }
38 38
 
39 39
 
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
  * @return string
47 47
  */
48 48
 function traiter_tableau($bloc) {
49
-	return $bloc;
49
+    return $bloc;
50 50
 }
51 51
 
52 52
 
@@ -60,7 +60,7 @@  discard block
 block discarded – undo
60 60
  * @return string
61 61
  */
62 62
 function traiter_listes($texte) {
63
-	return $texte;
63
+    return $texte;
64 64
 }
65 65
 
66 66
 /**
@@ -76,16 +76,16 @@  discard block
 block discarded – undo
76 76
  */
77 77
 function traiter_raccourcis($letexte) {
78 78
 
79
-	// Appeler les fonctions de pre_traitement
80
-	$letexte = pipeline('pre_propre', $letexte);
79
+    // Appeler les fonctions de pre_traitement
80
+    $letexte = pipeline('pre_propre', $letexte);
81 81
 
82
-	// APPELER ICI UN PIPELINE traiter_raccourcis ?
83
-	// $letexte = pipeline('traiter_raccourcis', $letexte);
82
+    // APPELER ICI UN PIPELINE traiter_raccourcis ?
83
+    // $letexte = pipeline('traiter_raccourcis', $letexte);
84 84
 
85
-	// Appeler les fonctions de post-traitement
86
-	$letexte = pipeline('post_propre', $letexte);
85
+    // Appeler les fonctions de post-traitement
86
+    $letexte = pipeline('post_propre', $letexte);
87 87
 
88
-	return $letexte;
88
+    return $letexte;
89 89
 }
90 90
 
91 91
 /*************************************************************************************************************************
@@ -101,22 +101,22 @@  discard block
 block discarded – undo
101 101
  * @return string
102 102
  */
103 103
 function echappe_js($t, $class = ' class = "echappe-js"') {
104
-	foreach (['script', 'iframe'] as $tag) {
105
-		if (
106
-			stripos($t, (string) "<$tag") !== false
107
-			and preg_match_all(',<' . $tag . '.*?($|</' . $tag . '.),isS', $t, $r, PREG_SET_ORDER)
108
-		) {
109
-			foreach ($r as $regs) {
110
-				$t = str_replace(
111
-					$regs[0],
112
-					"<code$class>" . nl2br(spip_htmlspecialchars($regs[0])) . '</code>',
113
-					$t
114
-				);
115
-			}
116
-		}
117
-	}
118
-
119
-	return $t;
104
+    foreach (['script', 'iframe'] as $tag) {
105
+        if (
106
+            stripos($t, (string) "<$tag") !== false
107
+            and preg_match_all(',<' . $tag . '.*?($|</' . $tag . '.),isS', $t, $r, PREG_SET_ORDER)
108
+        ) {
109
+            foreach ($r as $regs) {
110
+                $t = str_replace(
111
+                    $regs[0],
112
+                    "<code$class>" . nl2br(spip_htmlspecialchars($regs[0])) . '</code>',
113
+                    $t
114
+                );
115
+            }
116
+        }
117
+    }
118
+
119
+    return $t;
120 120
 }
121 121
 
122 122
 
@@ -145,55 +145,55 @@  discard block
 block discarded – undo
145 145
  *     Code protégé
146 146
  **/
147 147
 function interdire_scripts($arg, $mode_filtre = null) {
148
-	// on memorise le resultat sur les arguments non triviaux
149
-	static $dejavu = [];
150
-
151
-	// Attention, si ce n'est pas une chaine, laisser intact
152
-	if (!$arg or !is_string($arg) or !strstr($arg, '<')) {
153
-		return $arg;
154
-	}
155
-
156
-	if (is_null($mode_filtre) or !in_array($mode_filtre, [-1, 0, 1])) {
157
-		$mode_filtre = $GLOBALS['filtrer_javascript'];
158
-	}
159
-
160
-	if (isset($dejavu[$mode_filtre][$arg])) {
161
-		return $dejavu[$mode_filtre][$arg];
162
-	}
163
-
164
-	// echapper les tags asp/php
165
-	$t = str_replace('<' . '%', '&lt;%', $arg);
166
-
167
-	// echapper le php
168
-	$t = str_replace('<' . '?', '&lt;?', $t);
169
-
170
-	// echapper le < script language=php >
171
-	$t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
172
-
173
-	// Pour le js, trois modes : parano (-1), prive (0), ok (1)
174
-	switch ($mode_filtre) {
175
-		case 0:
176
-			if (!_DIR_RESTREINT) {
177
-				$t = echappe_js($t);
178
-			}
179
-			break;
180
-		case -1:
181
-			$t = echappe_js($t);
182
-			break;
183
-	}
184
-
185
-	// pas de <base href /> svp !
186
-	$t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
187
-
188
-	// Reinserer les echappements des modeles
189
-	if (defined('_PROTEGE_JS_MODELES')) {
190
-		$t = echappe_retour($t, 'javascript' . _PROTEGE_JS_MODELES);
191
-	}
192
-	if (defined('_PROTEGE_PHP_MODELES')) {
193
-		$t = echappe_retour($t, 'php' . _PROTEGE_PHP_MODELES);
194
-	}
195
-
196
-	return $dejavu[$mode_filtre][$arg] = $t;
148
+    // on memorise le resultat sur les arguments non triviaux
149
+    static $dejavu = [];
150
+
151
+    // Attention, si ce n'est pas une chaine, laisser intact
152
+    if (!$arg or !is_string($arg) or !strstr($arg, '<')) {
153
+        return $arg;
154
+    }
155
+
156
+    if (is_null($mode_filtre) or !in_array($mode_filtre, [-1, 0, 1])) {
157
+        $mode_filtre = $GLOBALS['filtrer_javascript'];
158
+    }
159
+
160
+    if (isset($dejavu[$mode_filtre][$arg])) {
161
+        return $dejavu[$mode_filtre][$arg];
162
+    }
163
+
164
+    // echapper les tags asp/php
165
+    $t = str_replace('<' . '%', '&lt;%', $arg);
166
+
167
+    // echapper le php
168
+    $t = str_replace('<' . '?', '&lt;?', $t);
169
+
170
+    // echapper le < script language=php >
171
+    $t = preg_replace(',<(script\b[^>]+\blanguage\b[^\w>]+php\b),UimsS', '&lt;\1', $t);
172
+
173
+    // Pour le js, trois modes : parano (-1), prive (0), ok (1)
174
+    switch ($mode_filtre) {
175
+        case 0:
176
+            if (!_DIR_RESTREINT) {
177
+                $t = echappe_js($t);
178
+            }
179
+            break;
180
+        case -1:
181
+            $t = echappe_js($t);
182
+            break;
183
+    }
184
+
185
+    // pas de <base href /> svp !
186
+    $t = preg_replace(',<(base\b),iS', '&lt;\1', $t);
187
+
188
+    // Reinserer les echappements des modeles
189
+    if (defined('_PROTEGE_JS_MODELES')) {
190
+        $t = echappe_retour($t, 'javascript' . _PROTEGE_JS_MODELES);
191
+    }
192
+    if (defined('_PROTEGE_PHP_MODELES')) {
193
+        $t = echappe_retour($t, 'php' . _PROTEGE_PHP_MODELES);
194
+    }
195
+
196
+    return $dejavu[$mode_filtre][$arg] = $t;
197 197
 }
198 198
 
199 199
 
@@ -222,66 +222,66 @@  discard block
 block discarded – undo
222 222
  *     texte transformé
223 223
  **/
224 224
 function typo($letexte, $echapper = true, $connect = null, $env = []) {
225
-	// Plus vite !
226
-	if (!$letexte) {
227
-		return $letexte;
228
-	}
229
-
230
-	// les appels directs a cette fonction depuis le php de l'espace
231
-	// prive etant historiquement ecrit sans argment $connect
232
-	// on utilise la presence de celui-ci pour distinguer les cas
233
-	// ou il faut passer interdire_script explicitement
234
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
235
-	// ne seront pas perturbes
236
-	$interdire_script = false;
237
-	if (is_null($connect)) {
238
-		$connect = '';
239
-		$interdire_script = true;
240
-		$env['espace_prive'] = test_espace_prive();
241
-	}
242
-
243
-	// Echapper les codes <html> etc
244
-	if ($echapper) {
245
-		$letexte = echappe_html($letexte, 'TYPO');
246
-	}
247
-
248
-	//
249
-	// Installer les modeles, notamment images et documents ;
250
-	//
251
-	// NOTE : propre() ne passe pas par ici mais directement par corriger_typo
252
-	// cf. inc/lien
253
-
254
-	$letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect ?? '', null, $env);
255
-	if ($letexte != $mem) {
256
-		$echapper = true;
257
-	}
258
-	unset($mem);
259
-
260
-	$letexte = corriger_typo($letexte);
261
-	$letexte = echapper_faux_tags($letexte);
262
-
263
-	// reintegrer les echappements
264
-	if ($echapper) {
265
-		$letexte = echappe_retour($letexte, 'TYPO');
266
-	}
267
-
268
-	// Dans les appels directs hors squelette, securiser ici aussi
269
-	if ($interdire_script) {
270
-		$letexte = interdire_scripts($letexte);
271
-	}
272
-
273
-	// Dans l'espace prive on se mefie de tout contenu dangereux
274
-	// https://core.spip.net/issues/3371
275
-	// et aussi dans l'espace public si la globale filtrer_javascript = -1
276
-	// https://core.spip.net/issues/4166
277
-	if (
278
-		$GLOBALS['filtrer_javascript'] == -1
279
-		or (isset($env['espace_prive']) and $env['espace_prive'] and $GLOBALS['filtrer_javascript'] <= 0)
280
-	) {
281
-		$letexte = echapper_html_suspect($letexte, [], $connect, $env);
282
-	}
283
-
284
-	return $letexte;
225
+    // Plus vite !
226
+    if (!$letexte) {
227
+        return $letexte;
228
+    }
229
+
230
+    // les appels directs a cette fonction depuis le php de l'espace
231
+    // prive etant historiquement ecrit sans argment $connect
232
+    // on utilise la presence de celui-ci pour distinguer les cas
233
+    // ou il faut passer interdire_script explicitement
234
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
235
+    // ne seront pas perturbes
236
+    $interdire_script = false;
237
+    if (is_null($connect)) {
238
+        $connect = '';
239
+        $interdire_script = true;
240
+        $env['espace_prive'] = test_espace_prive();
241
+    }
242
+
243
+    // Echapper les codes <html> etc
244
+    if ($echapper) {
245
+        $letexte = echappe_html($letexte, 'TYPO');
246
+    }
247
+
248
+    //
249
+    // Installer les modeles, notamment images et documents ;
250
+    //
251
+    // NOTE : propre() ne passe pas par ici mais directement par corriger_typo
252
+    // cf. inc/lien
253
+
254
+    $letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect ?? '', null, $env);
255
+    if ($letexte != $mem) {
256
+        $echapper = true;
257
+    }
258
+    unset($mem);
259
+
260
+    $letexte = corriger_typo($letexte);
261
+    $letexte = echapper_faux_tags($letexte);
262
+
263
+    // reintegrer les echappements
264
+    if ($echapper) {
265
+        $letexte = echappe_retour($letexte, 'TYPO');
266
+    }
267
+
268
+    // Dans les appels directs hors squelette, securiser ici aussi
269
+    if ($interdire_script) {
270
+        $letexte = interdire_scripts($letexte);
271
+    }
272
+
273
+    // Dans l'espace prive on se mefie de tout contenu dangereux
274
+    // https://core.spip.net/issues/3371
275
+    // et aussi dans l'espace public si la globale filtrer_javascript = -1
276
+    // https://core.spip.net/issues/4166
277
+    if (
278
+        $GLOBALS['filtrer_javascript'] == -1
279
+        or (isset($env['espace_prive']) and $env['espace_prive'] and $GLOBALS['filtrer_javascript'] <= 0)
280
+    ) {
281
+        $letexte = echapper_html_suspect($letexte, [], $connect, $env);
282
+    }
283
+
284
+    return $letexte;
285 285
 }
286 286
 
287 287
 // Correcteur typographique
@@ -306,57 +306,57 @@  discard block
 block discarded – undo
306 306
  */
307 307
 function corriger_typo($letexte, $lang = '') {
308 308
 
309
-	// Plus vite !
310
-	if (!$letexte) {
311
-		return $letexte;
312
-	}
313
-
314
-	$letexte = pipeline('pre_typo', $letexte);
315
-
316
-	// Caracteres de controle "illegaux"
317
-	$letexte = corriger_caracteres($letexte);
318
-
319
-	// Proteger les caracteres typographiques a l'interieur des tags html
320
-	if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
321
-		foreach ($regs as $reg) {
322
-			$insert = $reg[0];
323
-			// hack: on transforme les caracteres a proteger en les remplacant
324
-			// par des caracteres "illegaux". (cf corriger_caracteres())
325
-			$insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
326
-			$letexte = str_replace($reg[0], $insert, $letexte);
327
-		}
328
-	}
329
-
330
-	// trouver les blocs idiomes et les traiter à part
331
-	$letexte = extraire_idiome($ei = $letexte, $lang, true);
332
-	$ei = ($ei !== $letexte);
333
-
334
-	// trouver les blocs multi et les traiter a part
335
-	$letexte = extraire_multi($em = $letexte, $lang, true);
336
-	$em = ($em !== $letexte);
337
-
338
-	// Charger & appliquer les fonctions de typographie
339
-	$typographie = charger_fonction(lang_typo($lang), 'typographie');
340
-	$letexte = $typographie($letexte);
341
-
342
-	// Les citations en une autre langue, s'il y a lieu
343
-	if ($em) {
344
-		$letexte = echappe_retour($letexte, 'multi');
345
-	}
346
-	if ($ei) {
347
-		$letexte = echappe_retour($letexte, 'idiome');
348
-	}
349
-
350
-	// Retablir les caracteres proteges
351
-	$letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
352
-
353
-	// pipeline
354
-	$letexte = pipeline('post_typo', $letexte);
355
-
356
-	# un message pour abs_url - on est passe en mode texte
357
-	$GLOBALS['mode_abs_url'] = 'texte';
358
-
359
-	return $letexte;
309
+    // Plus vite !
310
+    if (!$letexte) {
311
+        return $letexte;
312
+    }
313
+
314
+    $letexte = pipeline('pre_typo', $letexte);
315
+
316
+    // Caracteres de controle "illegaux"
317
+    $letexte = corriger_caracteres($letexte);
318
+
319
+    // Proteger les caracteres typographiques a l'interieur des tags html
320
+    if (preg_match_all(_TYPO_BALISE, $letexte, $regs, PREG_SET_ORDER)) {
321
+        foreach ($regs as $reg) {
322
+            $insert = $reg[0];
323
+            // hack: on transforme les caracteres a proteger en les remplacant
324
+            // par des caracteres "illegaux". (cf corriger_caracteres())
325
+            $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
326
+            $letexte = str_replace($reg[0], $insert, $letexte);
327
+        }
328
+    }
329
+
330
+    // trouver les blocs idiomes et les traiter à part
331
+    $letexte = extraire_idiome($ei = $letexte, $lang, true);
332
+    $ei = ($ei !== $letexte);
333
+
334
+    // trouver les blocs multi et les traiter a part
335
+    $letexte = extraire_multi($em = $letexte, $lang, true);
336
+    $em = ($em !== $letexte);
337
+
338
+    // Charger & appliquer les fonctions de typographie
339
+    $typographie = charger_fonction(lang_typo($lang), 'typographie');
340
+    $letexte = $typographie($letexte);
341
+
342
+    // Les citations en une autre langue, s'il y a lieu
343
+    if ($em) {
344
+        $letexte = echappe_retour($letexte, 'multi');
345
+    }
346
+    if ($ei) {
347
+        $letexte = echappe_retour($letexte, 'idiome');
348
+    }
349
+
350
+    // Retablir les caracteres proteges
351
+    $letexte = strtr($letexte, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
352
+
353
+    // pipeline
354
+    $letexte = pipeline('post_typo', $letexte);
355
+
356
+    # un message pour abs_url - on est passe en mode texte
357
+    $GLOBALS['mode_abs_url'] = 'texte';
358
+
359
+    return $letexte;
360 360
 }
361 361
 
362 362
 
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
  * @return string
373 373
  */
374 374
 function paragrapher($letexte, $forcer = true) {
375
-	return $letexte;
375
+    return $letexte;
376 376
 }
377 377
 
378 378
 /**
@@ -384,11 +384,11 @@  discard block
 block discarded – undo
384 384
  * @return string texte
385 385
  **/
386 386
 function traiter_retours_chariots($letexte) {
387
-	$letexte = preg_replace(",\r\n?,S", "\n", $letexte);
388
-	$letexte = preg_replace(',<p[>[:space:]],iS', "\n\n\\0", $letexte);
389
-	$letexte = preg_replace(',</p[>[:space:]],iS', "\\0\n\n", $letexte);
387
+    $letexte = preg_replace(",\r\n?,S", "\n", $letexte);
388
+    $letexte = preg_replace(',<p[>[:space:]],iS', "\n\n\\0", $letexte);
389
+    $letexte = preg_replace(',</p[>[:space:]],iS', "\\0\n\n", $letexte);
390 390
 
391
-	return $letexte;
391
+    return $letexte;
392 392
 }
393 393
 
394 394
 
@@ -414,41 +414,41 @@  discard block
 block discarded – undo
414 414
  *     texte transformé
415 415
  **/
416 416
 function propre($t, $connect = null, $env = []) {
417
-	// les appels directs a cette fonction depuis le php de l'espace
418
-	// prive etant historiquement ecrits sans argment $connect
419
-	// on utilise la presence de celui-ci pour distinguer les cas
420
-	// ou il faut passer interdire_script explicitement
421
-	// les appels dans les squelettes (de l'espace prive) fournissant un $connect
422
-	// ne seront pas perturbes
423
-	// FIXME: Trouver une solution pour avoir un type (string) unique sur $connect.
424
-	$interdire_script = false;
425
-	if (is_null($connect)) {
426
-		$connect = '';
427
-		$interdire_script = true;
428
-		$env['espace_prive'] = true;
429
-	}
430
-
431
-	if (!$t) {
432
-		return strval($t);
433
-	}
434
-
435
-	// Dans l'espace prive on se mefie de tout contenu dangereux
436
-	// avant echappement des balises <html>
437
-	// https://core.spip.net/issues/3371
438
-	// et aussi dans l'espace public si la globale filtrer_javascript = -1
439
-	// https://core.spip.net/issues/4166
440
-	if (
441
-		$interdire_script
442
-		or $GLOBALS['filtrer_javascript'] == -1
443
-		or (!empty($env['espace_prive']) and $GLOBALS['filtrer_javascript'] <= 0)
444
-		or (!empty($env['wysiwyg']) and $env['wysiwyg'] and $GLOBALS['filtrer_javascript'] <= 0)
445
-	) {
446
-		$t = echapper_html_suspect($t, ['strict' => false], $connect, $env);
447
-	}
448
-	$t = echappe_html($t);
449
-	$t = expanser_liens($t, $connect ?? '', $env);
450
-	$t = traiter_raccourcis($t);
451
-	$t = echappe_retour_modeles($t, $interdire_script);
452
-
453
-	return $t;
417
+    // les appels directs a cette fonction depuis le php de l'espace
418
+    // prive etant historiquement ecrits sans argment $connect
419
+    // on utilise la presence de celui-ci pour distinguer les cas
420
+    // ou il faut passer interdire_script explicitement
421
+    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
422
+    // ne seront pas perturbes
423
+    // FIXME: Trouver une solution pour avoir un type (string) unique sur $connect.
424
+    $interdire_script = false;
425
+    if (is_null($connect)) {
426
+        $connect = '';
427
+        $interdire_script = true;
428
+        $env['espace_prive'] = true;
429
+    }
430
+
431
+    if (!$t) {
432
+        return strval($t);
433
+    }
434
+
435
+    // Dans l'espace prive on se mefie de tout contenu dangereux
436
+    // avant echappement des balises <html>
437
+    // https://core.spip.net/issues/3371
438
+    // et aussi dans l'espace public si la globale filtrer_javascript = -1
439
+    // https://core.spip.net/issues/4166
440
+    if (
441
+        $interdire_script
442
+        or $GLOBALS['filtrer_javascript'] == -1
443
+        or (!empty($env['espace_prive']) and $GLOBALS['filtrer_javascript'] <= 0)
444
+        or (!empty($env['wysiwyg']) and $env['wysiwyg'] and $GLOBALS['filtrer_javascript'] <= 0)
445
+    ) {
446
+        $t = echapper_html_suspect($t, ['strict' => false], $connect, $env);
447
+    }
448
+    $t = echappe_html($t);
449
+    $t = expanser_liens($t, $connect ?? '', $env);
450
+    $t = traiter_raccourcis($t);
451
+    $t = echappe_retour_modeles($t, $interdire_script);
452
+
453
+    return $t;
454 454
 }
Please login to merge, or discard this patch.