Completed
Push — master ( 6b28f6...9f0d1e )
by cam
01:14
created
ecrire/lang/public_fr.php 1 patch
Indentation   +115 added lines, -115 removed lines patch added patch discarded remove patch
@@ -2,123 +2,123 @@
 block discarded – undo
2 2
 // This is a SPIP language file  --  Ceci est un fichier langue de SPIP
3 3
 // Fichier source, a modifier dans https://git.spip.net/spip/spip.git
4 4
 if (!defined('_ECRIRE_INC_VERSION')) {
5
-	return;
5
+    return;
6 6
 }
7 7
 
8 8
 $GLOBALS[$GLOBALS['idx_lang']] = array(
9 9
 
10
-	// A
11
-	'accueil_site' => 'Accueil',
12
-	'article' => 'Article',
13
-	'articles' => 'Articles',
14
-	'articles_auteur' => 'Articles de cet auteur',
15
-	'articles_populaires' => 'Articles les plus populaires',
16
-	'articles_rubrique' => 'Articles de cette rubrique',
17
-	'aucun_article' => 'Il n’y a pas d’article à cette adresse',
18
-	'aucun_auteur' => 'Il n’y a pas d’auteur à cette adresse',
19
-	'aucun_site' => 'Il n’y a pas de site à cette adresse',
20
-	'aucune_breve' => 'Il n’y a pas de brève à cette adresse',
21
-	'aucune_rubrique' => 'Il n’y a pas de rubrique à cette adresse',
22
-	'auteur' => 'Auteur',
23
-	'autres' => 'Autres',
24
-	'autres_breves' => 'Autres brèves',
25
-	'autres_groupes_mots_clefs' => 'Autres groupes de mots-clés',
26
-	'autres_sites' => 'Autres sites',
27
-
28
-	// B
29
-	'bonjour' => 'Bonjour',
30
-
31
-	// C
32
-	'commenter_site' => 'Commenter ce site',
33
-	'contact' => 'Contact',
34
-	'copie_document_impossible' => 'Impossible de copier le document',
35
-
36
-	// D
37
-	'date' => 'Date',
38
-	'dernier_ajout' => 'Dernier ajout',
39
-	'dernieres_breves' => 'Dernières brèves',
40
-	'derniers_articles' => 'Derniers articles',
41
-	'derniers_commentaires' => 'Derniers commentaires',
42
-	'derniers_messages_forum' => 'Derniers messages publiés dans les forums',
43
-
44
-	// E
45
-	'edition_mode_texte' => 'Édition en mode texte de',
46
-	'en_reponse' => 'En réponse à :',
47
-	'en_resume' => 'En résumé',
48
-	'envoyer_message' => 'Envoyer un message',
49
-	'espace_prive' => 'Espace privé',
50
-
51
-	// F
52
-	'formats_acceptes' => 'Formats acceptés : @formats@.',
53
-
54
-	// H
55
-	'hierarchie_site' => 'Hiérarchie du site',
56
-
57
-	// J
58
-	'jours' => 'jours',
59
-
60
-	// L
61
-	'lien_connecter' => 'Se connecter',
62
-
63
-	// M
64
-	'meme_auteur' => 'Du même auteur',
65
-	'meme_rubrique' => 'Dans la même rubrique',
66
-	'memes_auteurs' => 'Des mêmes auteurs',
67
-	'message' => 'Message',
68
-	'messages_forum' => 'Messages',
69
-	'messages_recents' => 'Messages de forums les plus récents',
70
-	'mots_clef' => 'Mot-clé',
71
-	'mots_clefs' => 'Mots-clés',
72
-	'mots_clefs_meme_groupe' => 'Mots-clés dans le même groupe',
73
-
74
-	// N
75
-	'navigation' => 'Navigation',
76
-	'nom' => 'Nom',
77
-	'nouveautes' => 'Les nouveautés',
78
-	'nouveautes_web' => 'Nouveautés sur le Web',
79
-	'nouveaux_articles' => 'Nouveaux articles',
80
-	'nouvelles_breves' => 'Nouvelles brèves',
81
-
82
-	// P
83
-	'page_precedente' => 'page précédente',
84
-	'page_suivante' => 'page suivante',
85
-	'par_auteur' => 'par ',
86
-	'participer_site' => 'Vous pouvez participer à la vie de ce site et proposer vos propres articles en vous inscrivant ci-dessous. Vous recevrez immédiatement un email vous indiquant vos codes d’accès à l’espace privé du site.',
87
-	'plan_site' => 'Plan du site',
88
-	'popularite' => 'Popularité',
89
-	'poster_message' => 'Poster un message',
90
-	'proposer_site' => 'Vous pouvez proposer un site à ajouter dans cette rubrique :',
91
-
92
-	// R
93
-	'repondre_article' => 'Répondre à cet article',
94
-	'repondre_breve' => 'Répondre à cette brève',
95
-	'resultats_recherche' => 'Résultats de la recherche',
96
-	'retour_debut_forums' => 'Retour au début des forums',
97
-	'rss_abonnement' => 'Copiez l’URL suivante dans votre agrégateur :',
98
-	'rss_abonnement_titre' => 'S’abonner',
99
-	'rss_abonnement_titre_page' => 'S’abonner à',
100
-	'rss_explication' => 'Un fil RSS recueille les informations de mise à jour d’un site. Il fournit le contenu des billets ou des commentaires ou un extrait de ceux-ci, ainsi qu’un lien vers les versions complètes et quelques autres informations. Ce fil a pour vocation d’être lu par un agrégateur RSS.',
101
-	'rss_explication_titre' => 'Qu’est-ce qu’un flux RSS ?',
102
-	'rubrique' => 'Rubrique',
103
-	'rubriques' => 'Rubriques',
104
-
105
-	// S
106
-	'signatures_petition' => 'Signatures',
107
-	'site_realise_avec_spip' => 'Site réalisé avec SPIP',
108
-	'sites_web' => 'Sites Web',
109
-	'sous_rubriques' => 'Sous-rubriques',
110
-	'spam' => 'Spam',
111
-	'suite' => 'suite',
112
-	'sur_web' => 'Sur le Web',
113
-	'syndiquer_rubrique' => 'Syndiquer cette rubrique',
114
-	'syndiquer_site' => 'Syndiquer tout le site',
115
-
116
-	// T
117
-	'texte_lettre_information' => 'Voici la lettre d’information du site',
118
-	'texte_lettre_information_2' => 'Cette lettre recense les nouveautés publiées depuis',
119
-
120
-	// V
121
-	'ver_imprimer' => 'Version à imprimer',
122
-	'voir_en_ligne' => 'Voir en ligne',
123
-	'voir_squelette' => 'voir le squelette de cette page'
10
+    // A
11
+    'accueil_site' => 'Accueil',
12
+    'article' => 'Article',
13
+    'articles' => 'Articles',
14
+    'articles_auteur' => 'Articles de cet auteur',
15
+    'articles_populaires' => 'Articles les plus populaires',
16
+    'articles_rubrique' => 'Articles de cette rubrique',
17
+    'aucun_article' => 'Il n’y a pas d’article à cette adresse',
18
+    'aucun_auteur' => 'Il n’y a pas d’auteur à cette adresse',
19
+    'aucun_site' => 'Il n’y a pas de site à cette adresse',
20
+    'aucune_breve' => 'Il n’y a pas de brève à cette adresse',
21
+    'aucune_rubrique' => 'Il n’y a pas de rubrique à cette adresse',
22
+    'auteur' => 'Auteur',
23
+    'autres' => 'Autres',
24
+    'autres_breves' => 'Autres brèves',
25
+    'autres_groupes_mots_clefs' => 'Autres groupes de mots-clés',
26
+    'autres_sites' => 'Autres sites',
27
+
28
+    // B
29
+    'bonjour' => 'Bonjour',
30
+
31
+    // C
32
+    'commenter_site' => 'Commenter ce site',
33
+    'contact' => 'Contact',
34
+    'copie_document_impossible' => 'Impossible de copier le document',
35
+
36
+    // D
37
+    'date' => 'Date',
38
+    'dernier_ajout' => 'Dernier ajout',
39
+    'dernieres_breves' => 'Dernières brèves',
40
+    'derniers_articles' => 'Derniers articles',
41
+    'derniers_commentaires' => 'Derniers commentaires',
42
+    'derniers_messages_forum' => 'Derniers messages publiés dans les forums',
43
+
44
+    // E
45
+    'edition_mode_texte' => 'Édition en mode texte de',
46
+    'en_reponse' => 'En réponse à :',
47
+    'en_resume' => 'En résumé',
48
+    'envoyer_message' => 'Envoyer un message',
49
+    'espace_prive' => 'Espace privé',
50
+
51
+    // F
52
+    'formats_acceptes' => 'Formats acceptés : @formats@.',
53
+
54
+    // H
55
+    'hierarchie_site' => 'Hiérarchie du site',
56
+
57
+    // J
58
+    'jours' => 'jours',
59
+
60
+    // L
61
+    'lien_connecter' => 'Se connecter',
62
+
63
+    // M
64
+    'meme_auteur' => 'Du même auteur',
65
+    'meme_rubrique' => 'Dans la même rubrique',
66
+    'memes_auteurs' => 'Des mêmes auteurs',
67
+    'message' => 'Message',
68
+    'messages_forum' => 'Messages',
69
+    'messages_recents' => 'Messages de forums les plus récents',
70
+    'mots_clef' => 'Mot-clé',
71
+    'mots_clefs' => 'Mots-clés',
72
+    'mots_clefs_meme_groupe' => 'Mots-clés dans le même groupe',
73
+
74
+    // N
75
+    'navigation' => 'Navigation',
76
+    'nom' => 'Nom',
77
+    'nouveautes' => 'Les nouveautés',
78
+    'nouveautes_web' => 'Nouveautés sur le Web',
79
+    'nouveaux_articles' => 'Nouveaux articles',
80
+    'nouvelles_breves' => 'Nouvelles brèves',
81
+
82
+    // P
83
+    'page_precedente' => 'page précédente',
84
+    'page_suivante' => 'page suivante',
85
+    'par_auteur' => 'par ',
86
+    'participer_site' => 'Vous pouvez participer à la vie de ce site et proposer vos propres articles en vous inscrivant ci-dessous. Vous recevrez immédiatement un email vous indiquant vos codes d’accès à l’espace privé du site.',
87
+    'plan_site' => 'Plan du site',
88
+    'popularite' => 'Popularité',
89
+    'poster_message' => 'Poster un message',
90
+    'proposer_site' => 'Vous pouvez proposer un site à ajouter dans cette rubrique :',
91
+
92
+    // R
93
+    'repondre_article' => 'Répondre à cet article',
94
+    'repondre_breve' => 'Répondre à cette brève',
95
+    'resultats_recherche' => 'Résultats de la recherche',
96
+    'retour_debut_forums' => 'Retour au début des forums',
97
+    'rss_abonnement' => 'Copiez l’URL suivante dans votre agrégateur :',
98
+    'rss_abonnement_titre' => 'S’abonner',
99
+    'rss_abonnement_titre_page' => 'S’abonner à',
100
+    'rss_explication' => 'Un fil RSS recueille les informations de mise à jour d’un site. Il fournit le contenu des billets ou des commentaires ou un extrait de ceux-ci, ainsi qu’un lien vers les versions complètes et quelques autres informations. Ce fil a pour vocation d’être lu par un agrégateur RSS.',
101
+    'rss_explication_titre' => 'Qu’est-ce qu’un flux RSS ?',
102
+    'rubrique' => 'Rubrique',
103
+    'rubriques' => 'Rubriques',
104
+
105
+    // S
106
+    'signatures_petition' => 'Signatures',
107
+    'site_realise_avec_spip' => 'Site réalisé avec SPIP',
108
+    'sites_web' => 'Sites Web',
109
+    'sous_rubriques' => 'Sous-rubriques',
110
+    'spam' => 'Spam',
111
+    'suite' => 'suite',
112
+    'sur_web' => 'Sur le Web',
113
+    'syndiquer_rubrique' => 'Syndiquer cette rubrique',
114
+    'syndiquer_site' => 'Syndiquer tout le site',
115
+
116
+    // T
117
+    'texte_lettre_information' => 'Voici la lettre d’information du site',
118
+    'texte_lettre_information_2' => 'Cette lettre recense les nouveautés publiées depuis',
119
+
120
+    // V
121
+    'ver_imprimer' => 'Version à imprimer',
122
+    'voir_en_ligne' => 'Voir en ligne',
123
+    'voir_squelette' => 'voir le squelette de cette page'
124 124
 );
Please login to merge, or discard this patch.
ecrire/lang/public_en.php 1 patch
Indentation   +115 added lines, -115 removed lines patch added patch discarded remove patch
@@ -4,123 +4,123 @@
 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
-	'accueil_site' => 'Home',
14
-	'article' => 'Article',
15
-	'articles' => 'Articles',
16
-	'articles_auteur' => 'Articles by this author',
17
-	'articles_populaires' => 'Most popular articles',
18
-	'articles_rubrique' => 'Articles in this section',
19
-	'aucun_article' => 'No articles here',
20
-	'aucun_auteur' => 'No authors here',
21
-	'aucun_site' => 'No links here',
22
-	'aucune_breve' => 'No news items here',
23
-	'aucune_rubrique' => 'No sections here',
24
-	'auteur' => 'Author',
25
-	'autres' => 'Others',
26
-	'autres_breves' => 'Other news',
27
-	'autres_groupes_mots_clefs' => 'Other groups of keywords',
28
-	'autres_sites' => 'Other websites',
29
-
30
-	// B
31
-	'bonjour' => 'Hello',
32
-
33
-	// C
34
-	'commenter_site' => 'Comment on this site',
35
-	'contact' => 'Contact',
36
-	'copie_document_impossible' => 'Impossible to copy this document',
37
-
38
-	// D
39
-	'date' => 'Date',
40
-	'dernier_ajout' => 'Latest update',
41
-	'dernieres_breves' => 'Latest news',
42
-	'derniers_articles' => 'Latest articles',
43
-	'derniers_commentaires' => 'Latest comments',
44
-	'derniers_messages_forum' => 'Latest forum posts',
45
-
46
-	// E
47
-	'edition_mode_texte' => 'Text mode only',
48
-	'en_reponse' => 'Replying to:',
49
-	'en_resume' => 'Summary',
50
-	'envoyer_message' => 'Send a message',
51
-	'espace_prive' => 'Private area',
52
-
53
-	// F
54
-	'formats_acceptes' => 'Valid formats: @formats@.',
55
-
56
-	// H
57
-	'hierarchie_site' => 'Site map',
58
-
59
-	// J
60
-	'jours' => 'days',
61
-
62
-	// L
63
-	'lien_connecter' => 'Log in',
64
-
65
-	// M
66
-	'meme_auteur' => 'By the same author',
67
-	'meme_rubrique' => 'Also in this section',
68
-	'memes_auteurs' => 'By the same authors',
69
-	'message' => 'Message',
70
-	'messages_forum' => 'Forum posts',
71
-	'messages_recents' => 'Most recent forum posts',
72
-	'mots_clef' => 'Keyword',
73
-	'mots_clefs' => 'Keywords',
74
-	'mots_clefs_meme_groupe' => 'Other keywords in this group',
75
-
76
-	// N
77
-	'navigation' => 'Browsing',
78
-	'nom' => 'Name',
79
-	'nouveautes' => 'What’s new',
80
-	'nouveautes_web' => 'What’s new on the Web',
81
-	'nouveaux_articles' => 'New articles',
82
-	'nouvelles_breves' => 'Latest news items',
83
-
84
-	// P
85
-	'page_precedente' => 'previous page',
86
-	'page_suivante' => 'next page',
87
-	'par_auteur' => 'by ',
88
-	'participer_site' => 'You can take active part in this website and write your own articles by signing up here. You will receive an email with your account information for the private area of the site.',
89
-	'plan_site' => 'Site Map',
90
-	'popularite' => 'Popularity',
91
-	'poster_message' => 'Post a message',
92
-	'proposer_site' => 'You can suggest a website for inclusion in this section:',
93
-
94
-	// R
95
-	'repondre_article' => 'Comment on this article',
96
-	'repondre_breve' => 'Comment on this news item',
97
-	'resultats_recherche' => 'Search results',
98
-	'retour_debut_forums' => 'Back to forum top',
99
-	'rss_abonnement' => 'Simply copy the following URL into your aggregator:',
100
-	'rss_abonnement_titre' => 'Subscribe',
101
-	'rss_abonnement_titre_page' => 'Subscribe to',
102
-	'rss_explication' => 'An RSS thread collects information about a site’s update. It delivers the content of the tickets or the comments or an extract of them, as well as a link to the full versions et some other information. This thread is to be read by an RSS aggregator.',
103
-	'rss_explication_titre' => 'What is an RSS feed?',
104
-	'rubrique' => 'Section',
105
-	'rubriques' => 'Sections',
106
-
107
-	// S
108
-	'signatures_petition' => 'Signatures',
109
-	'site_realise_avec_spip' => 'Site powered by SPIP',
110
-	'sites_web' => 'Websites',
111
-	'sous_rubriques' => 'Subsections',
112
-	'spam' => 'Spam',
113
-	'suite' => 'continue',
114
-	'sur_web' => 'Around the Web',
115
-	'syndiquer_rubrique' => 'Subscribe to this section',
116
-	'syndiquer_site' => 'Subscribe to the whole site',
117
-
118
-	// T
119
-	'texte_lettre_information' => 'Here is the site newsletter',
120
-	'texte_lettre_information_2' => 'This site contains news items published since',
121
-
122
-	// V
123
-	'ver_imprimer' => 'Printable version',
124
-	'voir_en_ligne' => 'View online',
125
-	'voir_squelette' => 'show the template of this page'
12
+    // A
13
+    'accueil_site' => 'Home',
14
+    'article' => 'Article',
15
+    'articles' => 'Articles',
16
+    'articles_auteur' => 'Articles by this author',
17
+    'articles_populaires' => 'Most popular articles',
18
+    'articles_rubrique' => 'Articles in this section',
19
+    'aucun_article' => 'No articles here',
20
+    'aucun_auteur' => 'No authors here',
21
+    'aucun_site' => 'No links here',
22
+    'aucune_breve' => 'No news items here',
23
+    'aucune_rubrique' => 'No sections here',
24
+    'auteur' => 'Author',
25
+    'autres' => 'Others',
26
+    'autres_breves' => 'Other news',
27
+    'autres_groupes_mots_clefs' => 'Other groups of keywords',
28
+    'autres_sites' => 'Other websites',
29
+
30
+    // B
31
+    'bonjour' => 'Hello',
32
+
33
+    // C
34
+    'commenter_site' => 'Comment on this site',
35
+    'contact' => 'Contact',
36
+    'copie_document_impossible' => 'Impossible to copy this document',
37
+
38
+    // D
39
+    'date' => 'Date',
40
+    'dernier_ajout' => 'Latest update',
41
+    'dernieres_breves' => 'Latest news',
42
+    'derniers_articles' => 'Latest articles',
43
+    'derniers_commentaires' => 'Latest comments',
44
+    'derniers_messages_forum' => 'Latest forum posts',
45
+
46
+    // E
47
+    'edition_mode_texte' => 'Text mode only',
48
+    'en_reponse' => 'Replying to:',
49
+    'en_resume' => 'Summary',
50
+    'envoyer_message' => 'Send a message',
51
+    'espace_prive' => 'Private area',
52
+
53
+    // F
54
+    'formats_acceptes' => 'Valid formats: @formats@.',
55
+
56
+    // H
57
+    'hierarchie_site' => 'Site map',
58
+
59
+    // J
60
+    'jours' => 'days',
61
+
62
+    // L
63
+    'lien_connecter' => 'Log in',
64
+
65
+    // M
66
+    'meme_auteur' => 'By the same author',
67
+    'meme_rubrique' => 'Also in this section',
68
+    'memes_auteurs' => 'By the same authors',
69
+    'message' => 'Message',
70
+    'messages_forum' => 'Forum posts',
71
+    'messages_recents' => 'Most recent forum posts',
72
+    'mots_clef' => 'Keyword',
73
+    'mots_clefs' => 'Keywords',
74
+    'mots_clefs_meme_groupe' => 'Other keywords in this group',
75
+
76
+    // N
77
+    'navigation' => 'Browsing',
78
+    'nom' => 'Name',
79
+    'nouveautes' => 'What’s new',
80
+    'nouveautes_web' => 'What’s new on the Web',
81
+    'nouveaux_articles' => 'New articles',
82
+    'nouvelles_breves' => 'Latest news items',
83
+
84
+    // P
85
+    'page_precedente' => 'previous page',
86
+    'page_suivante' => 'next page',
87
+    'par_auteur' => 'by ',
88
+    'participer_site' => 'You can take active part in this website and write your own articles by signing up here. You will receive an email with your account information for the private area of the site.',
89
+    'plan_site' => 'Site Map',
90
+    'popularite' => 'Popularity',
91
+    'poster_message' => 'Post a message',
92
+    'proposer_site' => 'You can suggest a website for inclusion in this section:',
93
+
94
+    // R
95
+    'repondre_article' => 'Comment on this article',
96
+    'repondre_breve' => 'Comment on this news item',
97
+    'resultats_recherche' => 'Search results',
98
+    'retour_debut_forums' => 'Back to forum top',
99
+    'rss_abonnement' => 'Simply copy the following URL into your aggregator:',
100
+    'rss_abonnement_titre' => 'Subscribe',
101
+    'rss_abonnement_titre_page' => 'Subscribe to',
102
+    'rss_explication' => 'An RSS thread collects information about a site’s update. It delivers the content of the tickets or the comments or an extract of them, as well as a link to the full versions et some other information. This thread is to be read by an RSS aggregator.',
103
+    'rss_explication_titre' => 'What is an RSS feed?',
104
+    'rubrique' => 'Section',
105
+    'rubriques' => 'Sections',
106
+
107
+    // S
108
+    'signatures_petition' => 'Signatures',
109
+    'site_realise_avec_spip' => 'Site powered by SPIP',
110
+    'sites_web' => 'Websites',
111
+    'sous_rubriques' => 'Subsections',
112
+    'spam' => 'Spam',
113
+    'suite' => 'continue',
114
+    'sur_web' => 'Around the Web',
115
+    'syndiquer_rubrique' => 'Subscribe to this section',
116
+    'syndiquer_site' => 'Subscribe to the whole site',
117
+
118
+    // T
119
+    'texte_lettre_information' => 'Here is the site newsletter',
120
+    'texte_lettre_information_2' => 'This site contains news items published since',
121
+
122
+    // V
123
+    'ver_imprimer' => 'Printable version',
124
+    'voir_en_ligne' => 'View online',
125
+    'voir_squelette' => 'show the template of this page'
126 126
 );
Please login to merge, or discard this patch.
ecrire/lang/spip_ar.php 1 patch
Indentation   +668 added lines, -668 removed lines patch added patch discarded remove patch
@@ -4,245 +4,245 @@  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
-	'form_auteur_confirmation' => 'تأكيد عنوان البريد الالكتروني',
243
-	'form_auteur_email_modifie' => 'تغير عنوان بريدك.',
244
-	'form_auteur_envoi_mail_confirmation' => 'لفد تم ارسال بريد تأكيد الى @email@. عليك زيارة عنوان الموقع الموجود في الرسالة للتصديق على عنوان بريدك.',
245
-	'form_auteur_mail_confirmation' => 'أهلاً وسهلاً
240
+    // F
241
+    'fichier_introuvable' => 'لا يمكن العثور على الملف @fichier@',
242
+    'form_auteur_confirmation' => 'تأكيد عنوان البريد الالكتروني',
243
+    'form_auteur_email_modifie' => 'تغير عنوان بريدك.',
244
+    'form_auteur_envoi_mail_confirmation' => 'لفد تم ارسال بريد تأكيد الى @email@. عليك زيارة عنوان الموقع الموجود في الرسالة للتصديق على عنوان بريدك.',
245
+    'form_auteur_mail_confirmation' => 'أهلاً وسهلاً
246 246
 
247 247
 لقد طلبت تغيير عنوان بريدك.
248 248
 للتصديق على العنوان الجديد، يكفي الاتصال
@@ -251,347 +251,347 @@  discard block
 block discarded – undo
251 251
 
252 252
     @url@
253 253
 ',
254
-	'form_deja_inscrit' => 'سبق لك التسجيل.',
255
-	'form_email_non_valide' => 'عنوانك البريدي غير صالح.',
256
-	'form_forum_access_refuse' => 'لم تعد تملك امتياز الدحول إلى هذا الموقع.',
257
-	'form_forum_bonjour' => 'مرحباً @nom@،',
258
-	'form_forum_confirmer_email' => 'لتأكيد عنوان بريدك، إذهب الى:@url_confirm@',
259
-	'form_forum_email_deja_enregistre' => 'سبق تسجيل هذا العنوان البريدي، يمكنك إذاً استخدام كلمة سرك الاعتيادية.',
260
-	'form_forum_identifiant_mail' => 'لقد تم إرسال معرّفك الجديد بالبريد الالكتروني.',
261
-	'form_forum_identifiants' => 'بيانات الاتصال الشخصية',
262
-	'form_forum_indiquer_nom_email' => 'قم بإدخال اسمك وعنوانك البريدي هنا. ستحصل على بيانات اتصالك قريباً في البريد الإلكتروني.',
263
-	'form_forum_login' => 'المعرّف:',
264
-	'form_forum_message_auto' => '(هذه رسالة آلية)',
265
-	'form_forum_pass' => 'كلمة السر:',
266
-	'form_forum_probleme_mail' => 'مشكلة بريد إلكتروني: لا يمكن إرسال بيانات الدخول.',
267
-	'form_forum_voici1' => 'هذه هي بياناتك للاشتراك في نشاط
254
+    'form_deja_inscrit' => 'سبق لك التسجيل.',
255
+    'form_email_non_valide' => 'عنوانك البريدي غير صالح.',
256
+    'form_forum_access_refuse' => 'لم تعد تملك امتياز الدحول إلى هذا الموقع.',
257
+    'form_forum_bonjour' => 'مرحباً @nom@،',
258
+    'form_forum_confirmer_email' => 'لتأكيد عنوان بريدك، إذهب الى:@url_confirm@',
259
+    'form_forum_email_deja_enregistre' => 'سبق تسجيل هذا العنوان البريدي، يمكنك إذاً استخدام كلمة سرك الاعتيادية.',
260
+    'form_forum_identifiant_mail' => 'لقد تم إرسال معرّفك الجديد بالبريد الالكتروني.',
261
+    'form_forum_identifiants' => 'بيانات الاتصال الشخصية',
262
+    'form_forum_indiquer_nom_email' => 'قم بإدخال اسمك وعنوانك البريدي هنا. ستحصل على بيانات اتصالك قريباً في البريد الإلكتروني.',
263
+    'form_forum_login' => 'المعرّف:',
264
+    'form_forum_message_auto' => '(هذه رسالة آلية)',
265
+    'form_forum_pass' => 'كلمة السر:',
266
+    'form_forum_probleme_mail' => 'مشكلة بريد إلكتروني: لا يمكن إرسال بيانات الدخول.',
267
+    'form_forum_voici1' => 'هذه هي بياناتك للاشتراك في نشاط
268 268
 الموقع  "@nom_site_spip@" (@adresse_site@):',
269
-	'form_forum_voici2' => 'هذه هي بياناتك لاقتراح مقالات
269
+    'form_forum_voici2' => 'هذه هي بياناتك لاقتراح مقالات
270 270
 للموقع  "@nom_site_spip@" (@adresse_login@):',
271
-	'form_indiquer_email' => 'الرجاء إدخال عنوانك الإلكتروني.',
272
-	'form_indiquer_nom' => 'الرجاء إدخال اسمك.',
273
-	'form_indiquer_nom_site' => 'الرجاء إدخال إسم موقعك.',
274
-	'form_pet_deja_enregistre' => 'سبق تسجيل هذا الموقع',
275
-	'form_pet_signature_pasprise' => 'تم تجاهل توقيعك.',
276
-	'form_prop_confirmer_envoi' => 'تأكيد الإرسال',
277
-	'form_prop_description' => 'وصف/تعليق',
278
-	'form_prop_enregistre' => 'تم تسجيل اقتراحك، سوف يظهر بعد تصديقه من قبل مسئولي هذا الموقع.',
279
-	'form_prop_envoyer' => 'ابعث برسالة',
280
-	'form_prop_indiquer_email' => 'الرجاء إدخال عنوان بريد إلكتروني صالح',
281
-	'form_prop_indiquer_nom_site' => 'الرجاء إدخال اسم الموقع.',
282
-	'form_prop_indiquer_sujet' => 'الرجاء إدخال موضوع',
283
-	'form_prop_message_envoye' => 'تم بعث الرسالة',
284
-	'form_prop_non_enregistre' => 'لم يتم تسجيل اقتراحك.',
285
-	'form_prop_sujet' => 'الموضوع',
286
-	'form_prop_url_site' => 'عنوان الموقع',
287
-	'format_date_attendu' => 'إدخال تاريخ بتنسيق jj/mm/aaaa.',
288
-	'format_date_incorrecte' => 'التاريخ او تنسيقه غير صحيح',
289
-	'format_heure_attendu' => 'إدخال ساعة بتنسيق hh:mm.',
290
-	'format_heure_incorrecte' => 'الساعة او تنسيقها غير صحيح',
291
-	'forum_non_inscrit' => 'إما انك غير مسجل أو هناك خطأ في العنوان أو كلمة السر.',
292
-	'forum_par_auteur' => 'من @auteur@',
293
-	'forum_titre_erreur' => 'خطأ...',
271
+    'form_indiquer_email' => 'الرجاء إدخال عنوانك الإلكتروني.',
272
+    'form_indiquer_nom' => 'الرجاء إدخال اسمك.',
273
+    'form_indiquer_nom_site' => 'الرجاء إدخال إسم موقعك.',
274
+    'form_pet_deja_enregistre' => 'سبق تسجيل هذا الموقع',
275
+    'form_pet_signature_pasprise' => 'تم تجاهل توقيعك.',
276
+    'form_prop_confirmer_envoi' => 'تأكيد الإرسال',
277
+    'form_prop_description' => 'وصف/تعليق',
278
+    'form_prop_enregistre' => 'تم تسجيل اقتراحك، سوف يظهر بعد تصديقه من قبل مسئولي هذا الموقع.',
279
+    'form_prop_envoyer' => 'ابعث برسالة',
280
+    'form_prop_indiquer_email' => 'الرجاء إدخال عنوان بريد إلكتروني صالح',
281
+    'form_prop_indiquer_nom_site' => 'الرجاء إدخال اسم الموقع.',
282
+    'form_prop_indiquer_sujet' => 'الرجاء إدخال موضوع',
283
+    'form_prop_message_envoye' => 'تم بعث الرسالة',
284
+    'form_prop_non_enregistre' => 'لم يتم تسجيل اقتراحك.',
285
+    'form_prop_sujet' => 'الموضوع',
286
+    'form_prop_url_site' => 'عنوان الموقع',
287
+    'format_date_attendu' => 'إدخال تاريخ بتنسيق jj/mm/aaaa.',
288
+    'format_date_incorrecte' => 'التاريخ او تنسيقه غير صحيح',
289
+    'format_heure_attendu' => 'إدخال ساعة بتنسيق hh:mm.',
290
+    'format_heure_incorrecte' => 'الساعة او تنسيقها غير صحيح',
291
+    'forum_non_inscrit' => 'إما انك غير مسجل أو هناك خطأ في العنوان أو كلمة السر.',
292
+    'forum_par_auteur' => 'من @auteur@',
293
+    'forum_titre_erreur' => 'خطأ...',
294 294
 
295
-	// I
296
-	'ical_texte_rss_articles' => 'يوجد ملف «الترخيص الخلفي» لمقالات هذا الموقع على العنوان: ',
297
-	'ical_texte_rss_articles2' => 'يمكنك أيضاً الحصول على ملفات «الترخيص الخلفي» لمقالات كل قسم في الموقع:',
298
-	'ical_texte_rss_breves' => 'يوجد كذلك ملف يحتوي على أخبار الموقع. وبإدخال رقم قسم ما، تحصل على أخبار هذا القسم فقط.',
299
-	'icone_a_suivre' => 'للمتابعة',
300
-	'icone_admin_site' => 'إدارة الموقع',
301
-	'icone_agenda' => 'المفكرة',
302
-	'icone_aide_ligne' => 'التعليمات الفورية',
303
-	'icone_articles' => 'المقالات',
304
-	'icone_auteurs' => 'المؤلفون',
305
-	'icone_brouteur' => 'تصفح سريع',
306
-	'icone_configuration_site' => 'إعداد',
307
-	'icone_configurer_site' => 'إعداد موقعك',
308
-	'icone_creer_nouvel_auteur' => 'إضافة مؤلف جديد',
309
-	'icone_creer_rubrique' => 'إنشاء قسم',
310
-	'icone_creer_sous_rubrique' => 'إنشاء قسم فرعي',
311
-	'icone_deconnecter' => 'خروج',
312
-	'icone_discussions' => 'نقاشات',
313
-	'icone_doc_rubrique' => 'مستندات الأقسام',
314
-	'icone_ecrire_article' => 'كتابة مقال جديد',
315
-	'icone_edition_site' => 'تحرير الموقع',
316
-	'icone_gestion_langues' => 'إدارة اللغات',
317
-	'icone_informations_personnelles' => 'المعلومات الشخصية',
318
-	'icone_interface_complet' => 'واجهة كاملة',
319
-	'icone_interface_simple' => 'واجهة مبسّطة',
320
-	'icone_maintenance_site' => 'صيانة الموقع',
321
-	'icone_messagerie_personnelle' => 'المراسلة الشخصية',
322
-	'icone_repartition_debut' => 'إظهار التوزيع منذ البداية',
323
-	'icone_rubriques' => 'الأقسام',
324
-	'icone_sauver_site' => 'نسخة احتياطية للموقع',
325
-	'icone_site_entier' => 'الموقع بالكامل',
326
-	'icone_sites_references' => 'المواقع المبوبة',
327
-	'icone_statistiques' => 'إحصاءات الموقع',
328
-	'icone_suivi_activite' => 'متابعة نشاط الموقع',
329
-	'icone_suivi_actualite' => 'تطور الموقع',
330
-	'icone_suivi_pettions' => 'متابعة/إدارة العرائض',
331
-	'icone_suivi_revisions' => 'تعديل المقالات',
332
-	'icone_supprimer_document' => 'حذف هذا المستند',
333
-	'icone_supprimer_image' => 'حذف هذه الصورة',
334
-	'icone_tous_articles' => 'كل مقالاتك',
335
-	'icone_tous_auteur' => 'جميع المؤلفين',
336
-	'icone_tous_visiteur' => 'جميع الزوار',
337
-	'icone_visiter_site' => 'تصفح الموقع العمومي',
338
-	'icone_voir_en_ligne' => 'عرض مباشر',
339
-	'img_indisponible' => 'صورة غير متوفرة',
340
-	'impossible' => 'مستحيل',
341
-	'info_a_suivre' => 'للمتابعة»',
342
-	'info_acces_interdit' => 'الدخول محظور',
343
-	'info_acces_refuse' => 'دخول محظور',
344
-	'info_action' => 'عملية: @action@',
345
-	'info_administrer_rubriques' => 'يمكنك إدارة هذا القسم وأقسامه الفرعية',
346
-	'info_adresse_non_indiquee' => 'لم تدخل أي عنوان لاختباره!',
347
-	'info_aide' => 'تعليمات :',
348
-	'info_ajouter_mot' => 'إضافة هذا المفتاح',
349
-	'info_annonce' => 'إعلان',
350
-	'info_annonces_generales' => 'إعلانات عامة:',
351
-	'info_article_propose' => 'مقال مقترح',
352
-	'info_article_publie' => 'مقال منشور',
353
-	'info_article_redaction' => 'مقال قيد التحرير',
354
-	'info_article_refuse' => 'مقال مرفوض',
355
-	'info_article_supprime' => 'مقال محذوف',
356
-	'info_articles' => 'المقالات',
357
-	'info_articles_a_valider' => 'مقالات معروضة للتصديق',
358
-	'info_articles_nb' => '@nb@ مقال',
359
-	'info_articles_proposes' => 'المقالات المعروضة',
360
-	'info_articles_un' => 'مقال واحد',
361
-	'info_auteurs_nombre' => 'مؤلف (مؤلفون):',
362
-	'info_authentification_ftp' => 'التحقق ( عبر بروتوكول FTP ).',
363
-	'info_breves_2' => 'خبر',
364
-	'info_breves_nb' => '@nb@ خبر',
365
-	'info_breves_un' => 'خبر واحد',
366
-	'info_connexion_refusee' => 'رفض الاتصال',
367
-	'info_contact_developpeur' => 'الرجاء الاتصال بمطوّر.',
368
-	'info_contenance' => 'هذا الموقع يحتوي على:',
369
-	'info_contribution' => 'مشاركة منتديات',
370
-	'info_copyright' => '@spip@ برنامج حر موزع @lien_gpl@.',
371
-	'info_copyright_doc' => 'لمزيد من المعلومات راجع الموقع<a href="@spipnet@">@spipnet_affiche@</a>.',
372
-	'info_copyright_gpl' => 'بموجب الترخيص العام GPL',
373
-	'info_cours_edition' => 'قيد التحرير',
374
-	'info_creer_repertoire' => 'الرجاء إنشاء ملف أو دليل باسم',
375
-	'info_creer_repertoire_2' => 'داخل الدليل الفرعي <b>@repertoire@</b>، ثم:',
376
-	'info_creer_vignette' => 'إنشاء آلي للمصغر',
377
-	'info_creerdansrubrique_non_autorise' => 'لا تملك الحقوق الكافية لإنشاء اي محتوى في هذا القسم',
378
-	'info_deplier' => 'بسط',
379
-	'info_descriptif_nombre' => 'الوصف:',
380
-	'info_description' => 'الوصف:',
381
-	'info_description_2' => 'الوصف:',
382
-	'info_dimension' => 'الحجم:',
383
-	'info_documents_nb' => '@nb@ مستند',
384
-	'info_documents_un' => 'مستند واحد',
385
-	'info_ecire_message_prive' => 'تحرير رسالة خاصة',
386
-	'info_email_invalide' => 'عنوان بريد غير صالح.',
387
-	'info_en_cours_validation' => 'مقالاتك قيد التحرير',
388
-	'info_en_ligne' => 'متصل حالياً:',
389
-	'info_envoyer_message_prive' => 'ابعث برسالة خاصة لهذا المؤلف',
390
-	'info_erreur_requete' => 'خطأ في الاستفسار:',
391
-	'info_erreur_squelette2' => 'لا توجد صفحة نموذجية <b>@fichier@</b> متاحة...',
392
-	'info_erreur_systeme' => 'خطأ في النظام (خطأ رقم @errsys@)',
393
-	'info_erreur_systeme2' => 'قد يكون القرص الصلب ممتلئاً أو قد تكون قاعدة البيانات معطلة.<br />
295
+    // I
296
+    'ical_texte_rss_articles' => 'يوجد ملف «الترخيص الخلفي» لمقالات هذا الموقع على العنوان: ',
297
+    'ical_texte_rss_articles2' => 'يمكنك أيضاً الحصول على ملفات «الترخيص الخلفي» لمقالات كل قسم في الموقع:',
298
+    'ical_texte_rss_breves' => 'يوجد كذلك ملف يحتوي على أخبار الموقع. وبإدخال رقم قسم ما، تحصل على أخبار هذا القسم فقط.',
299
+    'icone_a_suivre' => 'للمتابعة',
300
+    'icone_admin_site' => 'إدارة الموقع',
301
+    'icone_agenda' => 'المفكرة',
302
+    'icone_aide_ligne' => 'التعليمات الفورية',
303
+    'icone_articles' => 'المقالات',
304
+    'icone_auteurs' => 'المؤلفون',
305
+    'icone_brouteur' => 'تصفح سريع',
306
+    'icone_configuration_site' => 'إعداد',
307
+    'icone_configurer_site' => 'إعداد موقعك',
308
+    'icone_creer_nouvel_auteur' => 'إضافة مؤلف جديد',
309
+    'icone_creer_rubrique' => 'إنشاء قسم',
310
+    'icone_creer_sous_rubrique' => 'إنشاء قسم فرعي',
311
+    'icone_deconnecter' => 'خروج',
312
+    'icone_discussions' => 'نقاشات',
313
+    'icone_doc_rubrique' => 'مستندات الأقسام',
314
+    'icone_ecrire_article' => 'كتابة مقال جديد',
315
+    'icone_edition_site' => 'تحرير الموقع',
316
+    'icone_gestion_langues' => 'إدارة اللغات',
317
+    'icone_informations_personnelles' => 'المعلومات الشخصية',
318
+    'icone_interface_complet' => 'واجهة كاملة',
319
+    'icone_interface_simple' => 'واجهة مبسّطة',
320
+    'icone_maintenance_site' => 'صيانة الموقع',
321
+    'icone_messagerie_personnelle' => 'المراسلة الشخصية',
322
+    'icone_repartition_debut' => 'إظهار التوزيع منذ البداية',
323
+    'icone_rubriques' => 'الأقسام',
324
+    'icone_sauver_site' => 'نسخة احتياطية للموقع',
325
+    'icone_site_entier' => 'الموقع بالكامل',
326
+    'icone_sites_references' => 'المواقع المبوبة',
327
+    'icone_statistiques' => 'إحصاءات الموقع',
328
+    'icone_suivi_activite' => 'متابعة نشاط الموقع',
329
+    'icone_suivi_actualite' => 'تطور الموقع',
330
+    'icone_suivi_pettions' => 'متابعة/إدارة العرائض',
331
+    'icone_suivi_revisions' => 'تعديل المقالات',
332
+    'icone_supprimer_document' => 'حذف هذا المستند',
333
+    'icone_supprimer_image' => 'حذف هذه الصورة',
334
+    'icone_tous_articles' => 'كل مقالاتك',
335
+    'icone_tous_auteur' => 'جميع المؤلفين',
336
+    'icone_tous_visiteur' => 'جميع الزوار',
337
+    'icone_visiter_site' => 'تصفح الموقع العمومي',
338
+    'icone_voir_en_ligne' => 'عرض مباشر',
339
+    'img_indisponible' => 'صورة غير متوفرة',
340
+    'impossible' => 'مستحيل',
341
+    'info_a_suivre' => 'للمتابعة»',
342
+    'info_acces_interdit' => 'الدخول محظور',
343
+    'info_acces_refuse' => 'دخول محظور',
344
+    'info_action' => 'عملية: @action@',
345
+    'info_administrer_rubriques' => 'يمكنك إدارة هذا القسم وأقسامه الفرعية',
346
+    'info_adresse_non_indiquee' => 'لم تدخل أي عنوان لاختباره!',
347
+    'info_aide' => 'تعليمات :',
348
+    'info_ajouter_mot' => 'إضافة هذا المفتاح',
349
+    'info_annonce' => 'إعلان',
350
+    'info_annonces_generales' => 'إعلانات عامة:',
351
+    'info_article_propose' => 'مقال مقترح',
352
+    'info_article_publie' => 'مقال منشور',
353
+    'info_article_redaction' => 'مقال قيد التحرير',
354
+    'info_article_refuse' => 'مقال مرفوض',
355
+    'info_article_supprime' => 'مقال محذوف',
356
+    'info_articles' => 'المقالات',
357
+    'info_articles_a_valider' => 'مقالات معروضة للتصديق',
358
+    'info_articles_nb' => '@nb@ مقال',
359
+    'info_articles_proposes' => 'المقالات المعروضة',
360
+    'info_articles_un' => 'مقال واحد',
361
+    'info_auteurs_nombre' => 'مؤلف (مؤلفون):',
362
+    'info_authentification_ftp' => 'التحقق ( عبر بروتوكول FTP ).',
363
+    'info_breves_2' => 'خبر',
364
+    'info_breves_nb' => '@nb@ خبر',
365
+    'info_breves_un' => 'خبر واحد',
366
+    'info_connexion_refusee' => 'رفض الاتصال',
367
+    'info_contact_developpeur' => 'الرجاء الاتصال بمطوّر.',
368
+    'info_contenance' => 'هذا الموقع يحتوي على:',
369
+    'info_contribution' => 'مشاركة منتديات',
370
+    'info_copyright' => '@spip@ برنامج حر موزع @lien_gpl@.',
371
+    'info_copyright_doc' => 'لمزيد من المعلومات راجع الموقع<a href="@spipnet@">@spipnet_affiche@</a>.',
372
+    'info_copyright_gpl' => 'بموجب الترخيص العام GPL',
373
+    'info_cours_edition' => 'قيد التحرير',
374
+    'info_creer_repertoire' => 'الرجاء إنشاء ملف أو دليل باسم',
375
+    'info_creer_repertoire_2' => 'داخل الدليل الفرعي <b>@repertoire@</b>، ثم:',
376
+    'info_creer_vignette' => 'إنشاء آلي للمصغر',
377
+    'info_creerdansrubrique_non_autorise' => 'لا تملك الحقوق الكافية لإنشاء اي محتوى في هذا القسم',
378
+    'info_deplier' => 'بسط',
379
+    'info_descriptif_nombre' => 'الوصف:',
380
+    'info_description' => 'الوصف:',
381
+    'info_description_2' => 'الوصف:',
382
+    'info_dimension' => 'الحجم:',
383
+    'info_documents_nb' => '@nb@ مستند',
384
+    'info_documents_un' => 'مستند واحد',
385
+    'info_ecire_message_prive' => 'تحرير رسالة خاصة',
386
+    'info_email_invalide' => 'عنوان بريد غير صالح.',
387
+    'info_en_cours_validation' => 'مقالاتك قيد التحرير',
388
+    'info_en_ligne' => 'متصل حالياً:',
389
+    'info_envoyer_message_prive' => 'ابعث برسالة خاصة لهذا المؤلف',
390
+    'info_erreur_requete' => 'خطأ في الاستفسار:',
391
+    'info_erreur_squelette2' => 'لا توجد صفحة نموذجية <b>@fichier@</b> متاحة...',
392
+    'info_erreur_systeme' => 'خطأ في النظام (خطأ رقم @errsys@)',
393
+    'info_erreur_systeme2' => 'قد يكون القرص الصلب ممتلئاً أو قد تكون قاعدة البيانات معطلة.<br />
394 394
 <span style="color:red;">حاول <a href=\'@script@\'>إصلاح القاعدة</a>، أو الاتصال بمضيف موقعك.</font> ',
395
-	'info_fini' => 'انتهى!',
396
-	'info_format_image' => 'تنسيق ملفات الصور الذي يمكن استخدامه لإنشاء المصغرات: @gd_formats@ .',
397
-	'info_format_non_defini' => 'تنسيق غير معروف',
398
-	'info_grand_ecran' => 'شاشة كبيرة',
399
-	'info_image_aide' => 'تعليمات',
400
-	'info_image_process_titre' => 'طريقة إنشاء المصغرات',
401
-	'info_impossible_lire_page' => '<b>خطأ!</b> لا يمكن قراءة الصفحة <tt><html>@test_proxy@</html></tt> عبر الجهاز الوكيل',
402
-	'info_installation_systeme_publication' => 'تثبيت نظام النشر...',
403
-	'info_installer_documents' => 'يمكنك تثبيت كل المستندات الموجودة في المجلد @upload@ آلياً.',
404
-	'info_installer_ftp' => 'بصفتك مديراً، يمكنك تثبيت (بواسطة بروتوكول FTP) ملفات في المجلد@upload@  من أجل تحديدهم في ما بعد مباشرة من هنا.',
405
-	'info_installer_images' => 'يمكنك تثبيت صور بتنسيقات JPEG  وGIF  وPNG.',
406
-	'info_installer_images_dossier' => 'تثبيت صور في المجلد @upload@  للتمكن من تحديدها هنا.',
407
-	'info_interface_complete' => 'واجهة كاملة',
408
-	'info_interface_simple' => 'واجهة مبسّطة',
409
-	'info_joindre_document_article' => 'يمكنك إرفاق مقالك بمستندات من الأنواع',
410
-	'info_joindre_document_rubrique' => 'يمكنك إضافة مستندات من الأنواع التالية إلى هذا القسم',
411
-	'info_joindre_documents_article' => 'يمكنك إرفاق مستندات من الأنواع التالية بمقالك :',
412
-	'info_l_article' => 'المقال',
413
-	'info_la_breve' => 'الخبر',
414
-	'info_la_rubrique' => 'القسم',
415
-	'info_langue_principale' => 'اللغة الأساسية للموقع',
416
-	'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@  نقطة',
417
-	'info_les_auteurs_1' => 'من @les_auteurs@',
418
-	'info_logo_format_interdit' => 'الرموز بتنسيق @formats@ هي الوحيدة المسموح بها.',
419
-	'info_logo_max_poids' => 'يجب ألا يتعدى حجم الرموز @maxi@ (يبلغ حجم الملف الحالي @actuel@). ',
420
-	'info_mail_fournisseur' => '[email protected]',
421
-	'info_message_2' => 'رسالة',
422
-	'info_message_supprime' => 'تم حذف المشاركة',
423
-	'info_messages_nb' => '@nb@ رسالة',
424
-	'info_messages_un' => 'رسالة واحدة',
425
-	'info_mise_en_ligne' => 'تاريخ النشر:',
426
-	'info_modification_parametres_securite' => 'تعديل إعدادات الأمان',
427
-	'info_mois_courant' => 'في بحر الشهر:',
428
-	'info_mot_cle_ajoute' => 'تمت إضافة المفتاح التالي إلى',
429
-	'info_multi_herit' => 'اللغة الافتراضية',
430
-	'info_multi_langues_soulignees' => '<u>اللغات التي تحتها خط</u> تتمتع بترجمة كاملة او جزئية لكل نصوص الواجهة. فإذا حددت هذه اللغات، سيتم ترجمة العديد من عناصر الموقع العمومي (التواريخ والاستمارات) آلياً. أما بالنسبة للغات التي ليس تحتها خط، فستظهر هذه العناصر في لغة الموقع الأساسية.',
431
-	'info_multilinguisme' => 'تعدد اللغات',
432
-	'info_nom_non_utilisateurs_connectes' => 'اسمك لا يظهر في قائمة المستخدمين المتصلين.',
433
-	'info_nom_utilisateurs_connectes' => 'اسمك يظهر في قائمة المستخدمين المتصلين.',
434
-	'info_nombre_en_ligne' => 'متصل حالياً:',
435
-	'info_non_resultat' => 'لا توجد نتائج لـ "@cherche_mot@"',
436
-	'info_non_utilisation_messagerie' => 'أنت لا تستخدم المراسلة الداخلية في هذا الموقع.',
437
-	'info_nouveau_message' => 'وصلت رسالة جديدة',
438
-	'info_nouveaux_messages' => 'وصلت @total_messages@  رسالة جديدة',
439
-	'info_numero_abbreviation' => 'رقم',
440
-	'info_obligatoire' => 'هذه المعلومة إجبارية',
441
-	'info_page_actuelle' => 'الصفحة الحالية',
442
-	'info_pense_bete' => 'مذكرة',
443
-	'info_petit_ecran' => 'شاشة صغيرة',
444
-	'info_petition_close' => 'عريضة مقفلة',
445
-	'info_pixels' => 'نقطة',
446
-	'info_plusieurs_mots_trouves' => 'تم العثور على عدة مفاتيح لـ "@cherche_mot@" :',
447
-	'info_portfolio_automatique' => 'محفظة آلية:',
448
-	'info_premier_resultat' => '[النتائج الـ@debut_limit@  الأولى من أصل @total@]',
449
-	'info_premier_resultat_sur' => '[النتائج الـ@debut_limit@  الأولى من أصل @total@]',
450
-	'info_propose_1' => '[@nom_site_spip@] يقترح: @titre@',
451
-	'info_propose_2' => 'مقال معروض
395
+    'info_fini' => 'انتهى!',
396
+    'info_format_image' => 'تنسيق ملفات الصور الذي يمكن استخدامه لإنشاء المصغرات: @gd_formats@ .',
397
+    'info_format_non_defini' => 'تنسيق غير معروف',
398
+    'info_grand_ecran' => 'شاشة كبيرة',
399
+    'info_image_aide' => 'تعليمات',
400
+    'info_image_process_titre' => 'طريقة إنشاء المصغرات',
401
+    'info_impossible_lire_page' => '<b>خطأ!</b> لا يمكن قراءة الصفحة <tt><html>@test_proxy@</html></tt> عبر الجهاز الوكيل',
402
+    'info_installation_systeme_publication' => 'تثبيت نظام النشر...',
403
+    'info_installer_documents' => 'يمكنك تثبيت كل المستندات الموجودة في المجلد @upload@ آلياً.',
404
+    'info_installer_ftp' => 'بصفتك مديراً، يمكنك تثبيت (بواسطة بروتوكول FTP) ملفات في المجلد@upload@  من أجل تحديدهم في ما بعد مباشرة من هنا.',
405
+    'info_installer_images' => 'يمكنك تثبيت صور بتنسيقات JPEG  وGIF  وPNG.',
406
+    'info_installer_images_dossier' => 'تثبيت صور في المجلد @upload@  للتمكن من تحديدها هنا.',
407
+    'info_interface_complete' => 'واجهة كاملة',
408
+    'info_interface_simple' => 'واجهة مبسّطة',
409
+    'info_joindre_document_article' => 'يمكنك إرفاق مقالك بمستندات من الأنواع',
410
+    'info_joindre_document_rubrique' => 'يمكنك إضافة مستندات من الأنواع التالية إلى هذا القسم',
411
+    'info_joindre_documents_article' => 'يمكنك إرفاق مستندات من الأنواع التالية بمقالك :',
412
+    'info_l_article' => 'المقال',
413
+    'info_la_breve' => 'الخبر',
414
+    'info_la_rubrique' => 'القسم',
415
+    'info_langue_principale' => 'اللغة الأساسية للموقع',
416
+    'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@  نقطة',
417
+    'info_les_auteurs_1' => 'من @les_auteurs@',
418
+    'info_logo_format_interdit' => 'الرموز بتنسيق @formats@ هي الوحيدة المسموح بها.',
419
+    'info_logo_max_poids' => 'يجب ألا يتعدى حجم الرموز @maxi@ (يبلغ حجم الملف الحالي @actuel@). ',
420
+    'info_mail_fournisseur' => '[email protected]',
421
+    'info_message_2' => 'رسالة',
422
+    'info_message_supprime' => 'تم حذف المشاركة',
423
+    'info_messages_nb' => '@nb@ رسالة',
424
+    'info_messages_un' => 'رسالة واحدة',
425
+    'info_mise_en_ligne' => 'تاريخ النشر:',
426
+    'info_modification_parametres_securite' => 'تعديل إعدادات الأمان',
427
+    'info_mois_courant' => 'في بحر الشهر:',
428
+    'info_mot_cle_ajoute' => 'تمت إضافة المفتاح التالي إلى',
429
+    'info_multi_herit' => 'اللغة الافتراضية',
430
+    'info_multi_langues_soulignees' => '<u>اللغات التي تحتها خط</u> تتمتع بترجمة كاملة او جزئية لكل نصوص الواجهة. فإذا حددت هذه اللغات، سيتم ترجمة العديد من عناصر الموقع العمومي (التواريخ والاستمارات) آلياً. أما بالنسبة للغات التي ليس تحتها خط، فستظهر هذه العناصر في لغة الموقع الأساسية.',
431
+    'info_multilinguisme' => 'تعدد اللغات',
432
+    'info_nom_non_utilisateurs_connectes' => 'اسمك لا يظهر في قائمة المستخدمين المتصلين.',
433
+    'info_nom_utilisateurs_connectes' => 'اسمك يظهر في قائمة المستخدمين المتصلين.',
434
+    'info_nombre_en_ligne' => 'متصل حالياً:',
435
+    'info_non_resultat' => 'لا توجد نتائج لـ "@cherche_mot@"',
436
+    'info_non_utilisation_messagerie' => 'أنت لا تستخدم المراسلة الداخلية في هذا الموقع.',
437
+    'info_nouveau_message' => 'وصلت رسالة جديدة',
438
+    'info_nouveaux_messages' => 'وصلت @total_messages@  رسالة جديدة',
439
+    'info_numero_abbreviation' => 'رقم',
440
+    'info_obligatoire' => 'هذه المعلومة إجبارية',
441
+    'info_page_actuelle' => 'الصفحة الحالية',
442
+    'info_pense_bete' => 'مذكرة',
443
+    'info_petit_ecran' => 'شاشة صغيرة',
444
+    'info_petition_close' => 'عريضة مقفلة',
445
+    'info_pixels' => 'نقطة',
446
+    'info_plusieurs_mots_trouves' => 'تم العثور على عدة مفاتيح لـ "@cherche_mot@" :',
447
+    'info_portfolio_automatique' => 'محفظة آلية:',
448
+    'info_premier_resultat' => '[النتائج الـ@debut_limit@  الأولى من أصل @total@]',
449
+    'info_premier_resultat_sur' => '[النتائج الـ@debut_limit@  الأولى من أصل @total@]',
450
+    'info_propose_1' => '[@nom_site_spip@] يقترح: @titre@',
451
+    'info_propose_2' => 'مقال معروض
452 452
 ----------',
453
-	'info_propose_3' => 'المقال "@titre@" معروض للنشر.',
454
-	'info_propose_4' => 'أنت مدعو لمراجعته وإبداء رأيك',
455
-	'info_propose_5' => 'في المنتدى المرتبط به. إنه موجود على العنوان:',
456
-	'info_publie_01' => 'تم التصديق على المقال "@titre@"  من قبل @connect_nom@ .',
457
-	'info_publie_1' => '[@nom_site_spip@] ينشر: @titre@',
458
-	'info_publie_2' => 'مقال منشور
453
+    'info_propose_3' => 'المقال "@titre@" معروض للنشر.',
454
+    'info_propose_4' => 'أنت مدعو لمراجعته وإبداء رأيك',
455
+    'info_propose_5' => 'في المنتدى المرتبط به. إنه موجود على العنوان:',
456
+    'info_publie_01' => 'تم التصديق على المقال "@titre@"  من قبل @connect_nom@ .',
457
+    'info_publie_1' => '[@nom_site_spip@] ينشر: @titre@',
458
+    'info_publie_2' => 'مقال منشور
459 459
 ----------',
460
-	'info_rechercher' => 'بحث',
461
-	'info_rechercher_02' => 'بحث:',
462
-	'info_remplacer_vignette' => 'استبدال المصغر الافتراضي برمز شخصي:',
463
-	'info_rubriques_nb' => '@nb@ قسم',
464
-	'info_rubriques_un' => 'قسم واحد',
465
-	'info_sans_titre_2' => 'بدون عنوان',
466
-	'info_selectionner_fichier' => 'يمكنك تحديد ملف من المجلد @upload@:',
467
-	'info_selectionner_fichier_2' => 'تحديد ملف:',
468
-	'info_sites_nb' => '@nb@ موقع',
469
-	'info_sites_un' => 'موقع واحد',
470
-	'info_supprimer_vignette' => 'حذف المصغر',
471
-	'info_symbole_bleu' => 'الرمز <b>أزرق</b> يرمز إلى <b>مذكرة</b>: أي رسالة لاستخدامك الشخصي.',
472
-	'info_symbole_jaune' => 'الرمز <b>أصفر</b> يرمز إلى <b>إعلان لجميع المحررين</b>: يمكن لجميع المدراء تحريره وهو ظاهر لجميع المحررين.',
473
-	'info_symbole_vert' => 'الرمز <b>أخضر</b>  يرمز إلى <b>الرسائل المتبادلة بين مستخدمي</b> الموقع.',
474
-	'info_telecharger_nouveau_logo' => 'تحميل رمز جديد:',
475
-	'info_telecharger_ordinateur' => 'تحميل من جهازك:',
476
-	'info_tous_resultats_enregistres' => '[تم تسجيل كل النتائج]',
477
-	'info_tout_afficher' => 'إظهار الكل',
478
-	'info_travaux_texte' => 'هذا الموقع قيد الإعداد. برجاء العودة في وقت لاحق...',
479
-	'info_travaux_titre' => 'موقع قيد التصميم',
480
-	'info_trop_resultat' => 'تم العثور على عدد كبير جداً من النتائج لـ "@cherche_mot@" ، الرجاء زيادة دقة البحث.',
481
-	'info_utilisation_messagerie_interne' => 'أنت تستخدم المراسلة الداخلية في هذا الموقع.',
482
-	'info_valider_lien' => 'التصديق على هذه الوصلة',
483
-	'info_verifier_image' => '، الرجاء التأكد من أنه تم نقل الصور بشكل سليم.',
484
-	'info_vignette_defaut' => 'المصغر الافتراضي',
485
-	'info_vignette_personnalisee' => 'مصغر شخصي',
486
-	'info_visite' => 'زيارة:',
487
-	'info_vos_rendez_vous' => 'مواعيدك القادمة',
488
-	'infos_vos_pense_bete' => 'مذكراتك',
460
+    'info_rechercher' => 'بحث',
461
+    'info_rechercher_02' => 'بحث:',
462
+    'info_remplacer_vignette' => 'استبدال المصغر الافتراضي برمز شخصي:',
463
+    'info_rubriques_nb' => '@nb@ قسم',
464
+    'info_rubriques_un' => 'قسم واحد',
465
+    'info_sans_titre_2' => 'بدون عنوان',
466
+    'info_selectionner_fichier' => 'يمكنك تحديد ملف من المجلد @upload@:',
467
+    'info_selectionner_fichier_2' => 'تحديد ملف:',
468
+    'info_sites_nb' => '@nb@ موقع',
469
+    'info_sites_un' => 'موقع واحد',
470
+    'info_supprimer_vignette' => 'حذف المصغر',
471
+    'info_symbole_bleu' => 'الرمز <b>أزرق</b> يرمز إلى <b>مذكرة</b>: أي رسالة لاستخدامك الشخصي.',
472
+    'info_symbole_jaune' => 'الرمز <b>أصفر</b> يرمز إلى <b>إعلان لجميع المحررين</b>: يمكن لجميع المدراء تحريره وهو ظاهر لجميع المحررين.',
473
+    'info_symbole_vert' => 'الرمز <b>أخضر</b>  يرمز إلى <b>الرسائل المتبادلة بين مستخدمي</b> الموقع.',
474
+    'info_telecharger_nouveau_logo' => 'تحميل رمز جديد:',
475
+    'info_telecharger_ordinateur' => 'تحميل من جهازك:',
476
+    'info_tous_resultats_enregistres' => '[تم تسجيل كل النتائج]',
477
+    'info_tout_afficher' => 'إظهار الكل',
478
+    'info_travaux_texte' => 'هذا الموقع قيد الإعداد. برجاء العودة في وقت لاحق...',
479
+    'info_travaux_titre' => 'موقع قيد التصميم',
480
+    'info_trop_resultat' => 'تم العثور على عدد كبير جداً من النتائج لـ "@cherche_mot@" ، الرجاء زيادة دقة البحث.',
481
+    'info_utilisation_messagerie_interne' => 'أنت تستخدم المراسلة الداخلية في هذا الموقع.',
482
+    'info_valider_lien' => 'التصديق على هذه الوصلة',
483
+    'info_verifier_image' => '، الرجاء التأكد من أنه تم نقل الصور بشكل سليم.',
484
+    'info_vignette_defaut' => 'المصغر الافتراضي',
485
+    'info_vignette_personnalisee' => 'مصغر شخصي',
486
+    'info_visite' => 'زيارة:',
487
+    'info_vos_rendez_vous' => 'مواعيدك القادمة',
488
+    'infos_vos_pense_bete' => 'مذكراتك',
489 489
 
490
-	// L
491
-	'label_ajout_id_rapide' => 'إضافة سريعة',
492
-	'label_poids_fichier' => 'الحجم',
493
-	'label_ponctuer' => '@label@ :',
494
-	'lien_afficher_icones_seuls' => 'عرض الرموز فقط',
495
-	'lien_afficher_texte_icones' => 'عرض الرموز والعناوين',
496
-	'lien_afficher_texte_seul' => 'عرض العناوين فقط',
497
-	'lien_aller_a_la_derniere_page' => 'الذهاب الى الصفحة الأخيرة',
498
-	'lien_aller_a_la_page_nb' => 'الذهاب الى الصفحة @nb@',
499
-	'lien_aller_a_la_page_precedente' => 'الذهاب الى الصفحة الالسابقة',
500
-	'lien_aller_a_la_page_suivante' => 'الذهاب الى الصفحة التالية',
501
-	'lien_aller_a_la_premiere_page' => 'الذهاب الى الصفحة الأولى',
502
-	'lien_liberer' => 'فك الحجز',
503
-	'lien_liberer_tous' => 'فك حجز الكل',
504
-	'lien_nouvea_pense_bete' => 'مذكرة جديدة',
505
-	'lien_nouveau_message' => 'رسالة جديدة',
506
-	'lien_nouvelle_annonce' => 'إعلان جديد',
507
-	'lien_petitions' => 'عريضة',
508
-	'lien_popularite' => 'شعبية: @popularite@%',
509
-	'lien_racine_site' => 'أصل الموقع',
510
-	'lien_reessayer' => 'إعادة المحاولة',
511
-	'lien_repondre_message' => 'الرد على هذه المشاركة',
512
-	'lien_supprimer' => 'حذف',
513
-	'lien_tout_afficher' => 'إظهار الكل',
514
-	'lien_visite_site' => 'زيارة هذا الموقع',
515
-	'lien_visites' => '@visites@ زيارة',
516
-	'lien_voir_auteur' => 'مراجعة هذا المؤلف',
517
-	'ligne' => 'سطر',
518
-	'login' => 'الدخول',
519
-	'login_acces_prive' => 'الدخول إلى المجال الخاص',
520
-	'login_autre_identifiant' => 'الاتصال بمعرّف آخر',
521
-	'login_cookie_accepte' => 'الرجاء تهيئ برنامج التصفح ليتقبلها (من هذا الموقع على الأقل)',
522
-	'login_cookie_oblige' => 'للتعريف عن نفسك بشكل آمن في هذا الموقع، يجب قبول الكعكات (cookies).',
523
-	'login_deconnexion_ok' => 'تم قطع الاتصال.',
524
-	'login_erreur_pass' => 'خطأ في كلمة السر.',
525
-	'login_espace_prive' => 'المجال الخاص',
526
-	'login_identifiant_inconnu' => 'المعرّف «@login@» غير معروف.',
527
-	'login_login' => 'المعرّف:',
528
-	'login_login2' => 'المعرّف او عنوان البريد الالكتروني:',
529
-	'login_login_pass_incorrect' => '(خطأ في المعرّف أو كلمة السر).',
530
-	'login_motpasseoublie' => 'هل نسيت كلمة السر؟',
531
-	'login_non_securise' => 'لطفا، هذه الاستمارة غير آمنة.
490
+    // L
491
+    'label_ajout_id_rapide' => 'إضافة سريعة',
492
+    'label_poids_fichier' => 'الحجم',
493
+    'label_ponctuer' => '@label@ :',
494
+    'lien_afficher_icones_seuls' => 'عرض الرموز فقط',
495
+    'lien_afficher_texte_icones' => 'عرض الرموز والعناوين',
496
+    'lien_afficher_texte_seul' => 'عرض العناوين فقط',
497
+    'lien_aller_a_la_derniere_page' => 'الذهاب الى الصفحة الأخيرة',
498
+    'lien_aller_a_la_page_nb' => 'الذهاب الى الصفحة @nb@',
499
+    'lien_aller_a_la_page_precedente' => 'الذهاب الى الصفحة الالسابقة',
500
+    'lien_aller_a_la_page_suivante' => 'الذهاب الى الصفحة التالية',
501
+    'lien_aller_a_la_premiere_page' => 'الذهاب الى الصفحة الأولى',
502
+    'lien_liberer' => 'فك الحجز',
503
+    'lien_liberer_tous' => 'فك حجز الكل',
504
+    'lien_nouvea_pense_bete' => 'مذكرة جديدة',
505
+    'lien_nouveau_message' => 'رسالة جديدة',
506
+    'lien_nouvelle_annonce' => 'إعلان جديد',
507
+    'lien_petitions' => 'عريضة',
508
+    'lien_popularite' => 'شعبية: @popularite@%',
509
+    'lien_racine_site' => 'أصل الموقع',
510
+    'lien_reessayer' => 'إعادة المحاولة',
511
+    'lien_repondre_message' => 'الرد على هذه المشاركة',
512
+    'lien_supprimer' => 'حذف',
513
+    'lien_tout_afficher' => 'إظهار الكل',
514
+    'lien_visite_site' => 'زيارة هذا الموقع',
515
+    'lien_visites' => '@visites@ زيارة',
516
+    'lien_voir_auteur' => 'مراجعة هذا المؤلف',
517
+    'ligne' => 'سطر',
518
+    'login' => 'الدخول',
519
+    'login_acces_prive' => 'الدخول إلى المجال الخاص',
520
+    'login_autre_identifiant' => 'الاتصال بمعرّف آخر',
521
+    'login_cookie_accepte' => 'الرجاء تهيئ برنامج التصفح ليتقبلها (من هذا الموقع على الأقل)',
522
+    'login_cookie_oblige' => 'للتعريف عن نفسك بشكل آمن في هذا الموقع، يجب قبول الكعكات (cookies).',
523
+    'login_deconnexion_ok' => 'تم قطع الاتصال.',
524
+    'login_erreur_pass' => 'خطأ في كلمة السر.',
525
+    'login_espace_prive' => 'المجال الخاص',
526
+    'login_identifiant_inconnu' => 'المعرّف «@login@» غير معروف.',
527
+    'login_login' => 'المعرّف:',
528
+    'login_login2' => 'المعرّف او عنوان البريد الالكتروني:',
529
+    'login_login_pass_incorrect' => '(خطأ في المعرّف أو كلمة السر).',
530
+    'login_motpasseoublie' => 'هل نسيت كلمة السر؟',
531
+    'login_non_securise' => 'لطفا، هذه الاستمارة غير آمنة.
532 532
    إذا كنت ترغب أن تكون كلمة سرك
533 533
    آمنة على الشبكة، يجب تفعيل جافاسكريبت 
534 534
    في برنامج التصفح',
535
-	'login_nouvelle_tentative' => 'محاولة جديدة',
536
-	'login_par_ici' => 'أنت مسجّل... توجه من هنا...',
537
-	'login_pass2' => 'كلمة السر:',
538
-	'login_preferez_refuser' => '<b>إذا كنت تفضل عدم قبول الكعكات</b>، يمكنك استخدام طريقة دخول أخرى (أقل أماناً):',
539
-	'login_recharger' => 'وإعادة تحميل الصفحة',
540
-	'login_rester_identifie' => 'تذكروني',
541
-	'login_retour_public' => 'عودة إلى الموقع العام',
542
-	'login_retour_site' => 'عودة إلى الموقع العام',
543
-	'login_retoursitepublic' => 'عودة إلى الموقع العام',
544
-	'login_sans_cookie' => 'تعريف بدون الكعكة',
545
-	'login_securise' => 'تعريف مؤمّن',
546
-	'login_sinscrire' => 'تسجيل',
547
-	'login_test_navigateur' => 'تجربة المتصفح/إعادة الاتصال',
548
-	'login_verifiez_navigateur' => '(على أي حال، تأكد من أن المتصفح لم يقم بحفظ كلمة سرك...)',
535
+    'login_nouvelle_tentative' => 'محاولة جديدة',
536
+    'login_par_ici' => 'أنت مسجّل... توجه من هنا...',
537
+    'login_pass2' => 'كلمة السر:',
538
+    'login_preferez_refuser' => '<b>إذا كنت تفضل عدم قبول الكعكات</b>، يمكنك استخدام طريقة دخول أخرى (أقل أماناً):',
539
+    'login_recharger' => 'وإعادة تحميل الصفحة',
540
+    'login_rester_identifie' => 'تذكروني',
541
+    'login_retour_public' => 'عودة إلى الموقع العام',
542
+    'login_retour_site' => 'عودة إلى الموقع العام',
543
+    'login_retoursitepublic' => 'عودة إلى الموقع العام',
544
+    'login_sans_cookie' => 'تعريف بدون الكعكة',
545
+    'login_securise' => 'تعريف مؤمّن',
546
+    'login_sinscrire' => 'تسجيل',
547
+    'login_test_navigateur' => 'تجربة المتصفح/إعادة الاتصال',
548
+    'login_verifiez_navigateur' => '(على أي حال، تأكد من أن المتصفح لم يقم بحفظ كلمة سرك...)',
549 549
 
550
-	// M
551
-	'masquer_colonne' => 'حجب هذا العمود',
552
-	'masquer_trad' => 'حجب الترجمات',
553
-	'message_nouveaux_identifiants_echec' => 'لا يمكن إنشاء معرف وكلمة سر جديدين.',
554
-	'message_nouveaux_identifiants_echec_envoi' => 'مشكلة في إرسال المعرف وكلمة السر الجديدين.',
555
-	'message_nouveaux_identifiants_ok' => 'تم إرسال المعرف وكلمة السر الجديدين الى @email@.',
556
-	'module_fichiers_langues' => 'ملفات اللغة',
550
+    // M
551
+    'masquer_colonne' => 'حجب هذا العمود',
552
+    'masquer_trad' => 'حجب الترجمات',
553
+    'message_nouveaux_identifiants_echec' => 'لا يمكن إنشاء معرف وكلمة سر جديدين.',
554
+    'message_nouveaux_identifiants_echec_envoi' => 'مشكلة في إرسال المعرف وكلمة السر الجديدين.',
555
+    'message_nouveaux_identifiants_ok' => 'تم إرسال المعرف وكلمة السر الجديدين الى @email@.',
556
+    'module_fichiers_langues' => 'ملفات اللغة',
557 557
 
558
-	// N
559
-	'navigateur_pas_redirige' => 'إذا لم تتم إعادة توجيه متصفحك، انقر هنا للمتابعة.',
560
-	'numero' => 'رقم',
558
+    // N
559
+    'navigateur_pas_redirige' => 'إذا لم تتم إعادة توجيه متصفحك، انقر هنا للمتابعة.',
560
+    'numero' => 'رقم',
561 561
 
562
-	// O
563
-	'occurence' => 'ظهور',
564
-	'onglet_affacer_base' => 'حذف قاعدة البيانات',
565
-	'onglet_auteur' => 'المؤلف',
566
-	'onglet_contenu_site' => 'محتوى الموقع',
567
-	'onglet_evolution_visite_mod' => 'تطور',
568
-	'onglet_fonctions_avances' => 'الوظائف المتطورة',
569
-	'onglet_informations_personnelles' => 'المعلومات الشخصية',
570
-	'onglet_interactivite' => 'التفاعلية',
571
-	'onglet_messagerie' => 'المراسلة',
572
-	'onglet_repartition_rubrique' => 'التوزيع حسب الأقسام',
573
-	'onglet_save_restaur_base' => 'نسخ احتياطي / استرجاع القاعدة',
574
-	'onglet_vider_cache' => 'تفريغ الذاكرة المخبأة',
562
+    // O
563
+    'occurence' => 'ظهور',
564
+    'onglet_affacer_base' => 'حذف قاعدة البيانات',
565
+    'onglet_auteur' => 'المؤلف',
566
+    'onglet_contenu_site' => 'محتوى الموقع',
567
+    'onglet_evolution_visite_mod' => 'تطور',
568
+    'onglet_fonctions_avances' => 'الوظائف المتطورة',
569
+    'onglet_informations_personnelles' => 'المعلومات الشخصية',
570
+    'onglet_interactivite' => 'التفاعلية',
571
+    'onglet_messagerie' => 'المراسلة',
572
+    'onglet_repartition_rubrique' => 'التوزيع حسب الأقسام',
573
+    'onglet_save_restaur_base' => 'نسخ احتياطي / استرجاع القاعدة',
574
+    'onglet_vider_cache' => 'تفريغ الذاكرة المخبأة',
575 575
 
576
-	// P
577
-	'pass_choix_pass' => 'الرجاء اختيار كلمة السر الجديدة:',
578
-	'pass_erreur' => 'خطأ',
579
-	'pass_erreur_acces_refuse' => '<b>خطأ:< b> لم تعد تملك حق الدخول إلى هذا الموقع.',
580
-	'pass_erreur_code_inconnu' => '<b>خطأ:< b> هذا المعرّف لا يتناسب مع أي من الزوار الذين يتمتعون بحق الدخول إلى هذا الموقع.',
581
-	'pass_erreur_non_enregistre' => '<b>خطأ:< b>  العنوان <tt>@email_oubli@</tt> ليس مسجلاً في هذا الموقع.',
582
-	'pass_erreur_non_valide' => '<b>خطأ:< b>  العنوان <tt>@email_oubli@</tt> ليس صالحاً.',
583
-	'pass_erreur_probleme_technique' => '<b>خطأ:< b>  لم يتم بعث هذه الرسالة بسبب مشكلة تقنية.',
584
-	'pass_espace_prive_bla' => 'المجال الخاص لهذا الموقع مفتوح
576
+    // P
577
+    'pass_choix_pass' => 'الرجاء اختيار كلمة السر الجديدة:',
578
+    'pass_erreur' => 'خطأ',
579
+    'pass_erreur_acces_refuse' => '<b>خطأ:< b> لم تعد تملك حق الدخول إلى هذا الموقع.',
580
+    'pass_erreur_code_inconnu' => '<b>خطأ:< b> هذا المعرّف لا يتناسب مع أي من الزوار الذين يتمتعون بحق الدخول إلى هذا الموقع.',
581
+    'pass_erreur_non_enregistre' => '<b>خطأ:< b>  العنوان <tt>@email_oubli@</tt> ليس مسجلاً في هذا الموقع.',
582
+    'pass_erreur_non_valide' => '<b>خطأ:< b>  العنوان <tt>@email_oubli@</tt> ليس صالحاً.',
583
+    'pass_erreur_probleme_technique' => '<b>خطأ:< b>  لم يتم بعث هذه الرسالة بسبب مشكلة تقنية.',
584
+    'pass_espace_prive_bla' => 'المجال الخاص لهذا الموقع مفتوح
585 585
 للزوار بعد تسجيلهم. بعد تسجيلك
586 586
 يمكنك مراجعة المقالات قيد التحرير
587 587
 واقتراح مقالات والمشاركة في كل المنتديات.',
588
-	'pass_forum_bla' => 'طلبت المشاركة في منتدى
588
+    'pass_forum_bla' => 'طلبت المشاركة في منتدى
589 589
 محصور بالزوار المسجلين.',
590
-	'pass_indiquez_cidessous' => 'قم بإدخال العنوان الإلكتروني الذي 
590
+    'pass_indiquez_cidessous' => 'قم بإدخال العنوان الإلكتروني الذي 
591 591
 تسجلت بواستطه سابقاً.
592 592
 ستحصل على رسالة تفسر لك كيفية
593 593
 استعادة دخولك.',
594
-	'pass_mail_passcookie' => '(هذه رسالة آلية)
594
+    'pass_mail_passcookie' => '(هذه رسالة آلية)
595 595
 لاستعادة دخولك إلى الموقع
596 596
 @nom_site_spip@  (@adresse_site@)
597 597
 
@@ -603,146 +603,146 @@  discard block
 block discarded – undo
603 603
 وإعادة الاتصال بالموقع.
604 604
 
605 605
 ',
606
-	'pass_mot_oublie' => 'نسيان كلمة السر',
607
-	'pass_nouveau_enregistre' => 'تم تسجيل كلمة سرك الجديدة.',
608
-	'pass_nouveau_pass' => 'كلمة السر الجديدة',
609
-	'pass_ok' => 'موافق',
610
-	'pass_oubli_mot' => 'نسيان كلمة السر',
611
-	'pass_procedure_changer' => 'من أجل تغيير كلمة السر، قم بأدخال عنوان البريد الالكتروني المرتبط بحسابك.',
612
-	'pass_quitter_fenetre' => 'إقفال هذه النافذة',
613
-	'pass_rappel_login' => 'تذكير: معرّفك هو «@login@».',
614
-	'pass_recevoir_mail' => 'تم ارسال رابط لإعادة تأصيل كلمة السر الى عنوان البريد لديك (اذا كان صالحاً).',
615
-	'pass_retour_public' => 'عودة إلى الموقع العام',
616
-	'pass_rien_a_faire_ici' => 'لا شغل لك هنا.',
617
-	'pass_vousinscrire' => 'تسجيلك في الموقع',
618
-	'precedent' => 'السابق',
619
-	'previsualisation' => 'عرض مسبق',
620
-	'previsualiser' => 'عرض مسبق',
606
+    'pass_mot_oublie' => 'نسيان كلمة السر',
607
+    'pass_nouveau_enregistre' => 'تم تسجيل كلمة سرك الجديدة.',
608
+    'pass_nouveau_pass' => 'كلمة السر الجديدة',
609
+    'pass_ok' => 'موافق',
610
+    'pass_oubli_mot' => 'نسيان كلمة السر',
611
+    'pass_procedure_changer' => 'من أجل تغيير كلمة السر، قم بأدخال عنوان البريد الالكتروني المرتبط بحسابك.',
612
+    'pass_quitter_fenetre' => 'إقفال هذه النافذة',
613
+    'pass_rappel_login' => 'تذكير: معرّفك هو «@login@».',
614
+    'pass_recevoir_mail' => 'تم ارسال رابط لإعادة تأصيل كلمة السر الى عنوان البريد لديك (اذا كان صالحاً).',
615
+    'pass_retour_public' => 'عودة إلى الموقع العام',
616
+    'pass_rien_a_faire_ici' => 'لا شغل لك هنا.',
617
+    'pass_vousinscrire' => 'تسجيلك في الموقع',
618
+    'precedent' => 'السابق',
619
+    'previsualisation' => 'عرض مسبق',
620
+    'previsualiser' => 'عرض مسبق',
621 621
 
622
-	// R
623
-	'retour' => 'عودة',
622
+    // R
623
+    'retour' => 'عودة',
624 624
 
625
-	// S
626
-	'spip_conforme_dtd' => 'يعتبر SPIP أن هذا المستند مطابق لتحديد DOCTYPE:',
627
-	'squelette' => 'صفحة نموذجية',
628
-	'squelette_inclus_ligne' => 'صفحة نموذجية مدمجة، سطر',
629
-	'squelette_ligne' => 'صفحة نموذجية، سطر',
630
-	'stats_visites_et_popularite' => '@visites@ زيارة؛ شعبية: @popularite@',
631
-	'suivant' => 'التالي',
625
+    // S
626
+    'spip_conforme_dtd' => 'يعتبر SPIP أن هذا المستند مطابق لتحديد DOCTYPE:',
627
+    'squelette' => 'صفحة نموذجية',
628
+    'squelette_inclus_ligne' => 'صفحة نموذجية مدمجة، سطر',
629
+    'squelette_ligne' => 'صفحة نموذجية، سطر',
630
+    'stats_visites_et_popularite' => '@visites@ زيارة؛ شعبية: @popularite@',
631
+    'suivant' => 'التالي',
632 632
 
633
-	// T
634
-	'taille_go' => '@taille@ غيغابايت',
635
-	'taille_ko' => '@taille@ كيلوبايت',
636
-	'taille_mo' => '@taille@ ميغابايت',
637
-	'taille_octets' => '@taille@ بايت',
638
-	'texte_actualite_site_1' => 'عندما تتأقلم مع واجهة النظام انقر على «',
639
-	'texte_actualite_site_2' => 'الواجهة الكاملة',
640
-	'texte_actualite_site_3' => '»  لإتاحة المزيد من الوظائف.',
641
-	'texte_creation_automatique_vignette' => 'لقد تم تفعيل الإنشاء الآلي لمصغرات المعاينة. إذا استخدمت هذه الاستمارة لإدخال صور بتنسيق (أو تنسيقات) @gd_formats@، سيتم تزويدها بمصغر لا يزيد حجمه عن @taille_preview@  نقطة. ',
642
-	'texte_documents_associes' => 'المستندات التالية ترافق المقال،
633
+    // T
634
+    'taille_go' => '@taille@ غيغابايت',
635
+    'taille_ko' => '@taille@ كيلوبايت',
636
+    'taille_mo' => '@taille@ ميغابايت',
637
+    'taille_octets' => '@taille@ بايت',
638
+    'texte_actualite_site_1' => 'عندما تتأقلم مع واجهة النظام انقر على «',
639
+    'texte_actualite_site_2' => 'الواجهة الكاملة',
640
+    'texte_actualite_site_3' => '»  لإتاحة المزيد من الوظائف.',
641
+    'texte_creation_automatique_vignette' => 'لقد تم تفعيل الإنشاء الآلي لمصغرات المعاينة. إذا استخدمت هذه الاستمارة لإدخال صور بتنسيق (أو تنسيقات) @gd_formats@، سيتم تزويدها بمصغر لا يزيد حجمه عن @taille_preview@  نقطة. ',
642
+    'texte_documents_associes' => 'المستندات التالية ترافق المقال،
643 643
     لكنها لم تُدرج
644 644
     مباشرة. بالاعتماد على تصميم الموقع العمومي،
645 645
     قد تظهر على شكل مستندات مرفقة.',
646
-	'texte_erreur_mise_niveau_base' => 'خطأ في قاعدة البيانات خلال الترقية.
646
+    'texte_erreur_mise_niveau_base' => 'خطأ في قاعدة البيانات خلال الترقية.
647 647
      تعذر تمرير الصورة <b>@fichier@</b>  (المقال @id_article@). 
648 648
      سجل هذا المرجع وحاول إعادة عملية
649 649
      الترقية، وأخيراً تأكد من أن الصور لا تزال تظهر
650 650
      في المقالات.',
651
-	'texte_erreur_visiteur' => 'حاولت الدخول إلى المجال الخاص بمعرّف لا يسمح بذلك.',
652
-	'texte_inc_auth_1' => 'عرّفت عن نفسك
651
+    'texte_erreur_visiteur' => 'حاولت الدخول إلى المجال الخاص بمعرّف لا يسمح بذلك.',
652
+    'texte_inc_auth_1' => 'عرّفت عن نفسك
653 653
 بالمعرّف <b>@auth_login@</b>، لكنه غير (لم يعد) موجود في قاعدة البيانات.
654 654
   حاول  ',
655
-	'texte_inc_auth_2' => 'إعادة الاتصال',
656
-	'texte_inc_auth_3' => '، بعد إنهاء المتصفح ثم
655
+    'texte_inc_auth_2' => 'إعادة الاتصال',
656
+    'texte_inc_auth_3' => '، بعد إنهاء المتصفح ثم
657 657
 إعادة تشغيله إذا اقتضت الحاجة.',
658
-	'texte_inc_config' => 'التغييرات الداخلة على هذه الصفحة تؤثر بشكل ملحوظ على
658
+    'texte_inc_config' => 'التغييرات الداخلة على هذه الصفحة تؤثر بشكل ملحوظ على
659 659
 تشغيل الموقع. يستحسن عدم إدخال تغييرات قبل
660 660
 التأقلم مع نظام SPIP  للنشر. <br /><br /><b>بشكل
661 661
 عام، ننصحك
662 662
 بحصر التعامل مع هذه الصفحات بالمسؤول الأساسي عن تصميم الموقع.</b>',
663
-	'texte_inc_meta_1' => 'واجه النظام خطأً خلال كتابة الملف <code>@fichier@</code>. بصفتك أحد مدراء الموقع، الرجاء',
664
-	'texte_inc_meta_2' => 'التأكد من حقوق الكتابة',
665
-	'texte_inc_meta_3' => 'الخاصة بالدليل <code>@repertoire@</code>. ',
666
-	'texte_statut_en_cours_redaction' => 'قيد التحرير',
667
-	'texte_statut_poubelle' => 'إلى المهملات',
668
-	'texte_statut_propose_evaluation' => 'معروض للتقييم',
669
-	'texte_statut_publie' => 'منشور',
670
-	'texte_statut_refuse' => 'مرفوض',
671
-	'titre_ajouter_mot_cle' => 'إضافة مفتاح:',
672
-	'titre_cadre_raccourcis' => 'اختصارات:',
673
-	'titre_changer_couleur_interface' => 'تغيير لون الواجهة',
674
-	'titre_image_admin_article' => 'أنت مخول إدارة هذا المقال',
675
-	'titre_image_administrateur' => 'مدير',
676
-	'titre_image_aide' => 'تعليمات حول هذا العنصر',
677
-	'titre_image_auteur_supprime' => 'مؤلف محذوف',
678
-	'titre_image_redacteur' => 'محرر دون إذن دخول',
679
-	'titre_image_redacteur_02' => 'محرر',
680
-	'titre_image_selecteur' => 'عرض القائمة',
681
-	'titre_image_visiteur' => 'زائر',
682
-	'titre_joindre_document' => 'إرفاق مستند',
683
-	'titre_mots_cles' => 'المفاتيح',
684
-	'titre_probleme_technique' => 'تحذير: مشكلة تقنية (خادم SQL) تمنع الدخول إلى هذا الجزء من الموقع. شكراً على تفهمكم.',
685
-	'titre_publier_document' => 'نشر مستند في هذا القسم',
686
-	'titre_signatures_attente' => 'تواقيع بانتظار التصديق',
687
-	'titre_signatures_confirmees' => 'توقيعات مصدّقة',
688
-	'titre_statistiques' => 'إحصاءات الموقع',
689
-	'titre_titre_document' => 'اسم المستند: ',
690
-	'todo' => 'قريباً',
691
-	'trad_definir_reference' => 'اختيار "@titre@" كمرجع للترجمات',
692
-	'trad_reference' => '(مرجع الترجمات)',
663
+    'texte_inc_meta_1' => 'واجه النظام خطأً خلال كتابة الملف <code>@fichier@</code>. بصفتك أحد مدراء الموقع، الرجاء',
664
+    'texte_inc_meta_2' => 'التأكد من حقوق الكتابة',
665
+    'texte_inc_meta_3' => 'الخاصة بالدليل <code>@repertoire@</code>. ',
666
+    'texte_statut_en_cours_redaction' => 'قيد التحرير',
667
+    'texte_statut_poubelle' => 'إلى المهملات',
668
+    'texte_statut_propose_evaluation' => 'معروض للتقييم',
669
+    'texte_statut_publie' => 'منشور',
670
+    'texte_statut_refuse' => 'مرفوض',
671
+    'titre_ajouter_mot_cle' => 'إضافة مفتاح:',
672
+    'titre_cadre_raccourcis' => 'اختصارات:',
673
+    'titre_changer_couleur_interface' => 'تغيير لون الواجهة',
674
+    'titre_image_admin_article' => 'أنت مخول إدارة هذا المقال',
675
+    'titre_image_administrateur' => 'مدير',
676
+    'titre_image_aide' => 'تعليمات حول هذا العنصر',
677
+    'titre_image_auteur_supprime' => 'مؤلف محذوف',
678
+    'titre_image_redacteur' => 'محرر دون إذن دخول',
679
+    'titre_image_redacteur_02' => 'محرر',
680
+    'titre_image_selecteur' => 'عرض القائمة',
681
+    'titre_image_visiteur' => 'زائر',
682
+    'titre_joindre_document' => 'إرفاق مستند',
683
+    'titre_mots_cles' => 'المفاتيح',
684
+    'titre_probleme_technique' => 'تحذير: مشكلة تقنية (خادم SQL) تمنع الدخول إلى هذا الجزء من الموقع. شكراً على تفهمكم.',
685
+    'titre_publier_document' => 'نشر مستند في هذا القسم',
686
+    'titre_signatures_attente' => 'تواقيع بانتظار التصديق',
687
+    'titre_signatures_confirmees' => 'توقيعات مصدّقة',
688
+    'titre_statistiques' => 'إحصاءات الموقع',
689
+    'titre_titre_document' => 'اسم المستند: ',
690
+    'todo' => 'قريباً',
691
+    'trad_definir_reference' => 'اختيار "@titre@" كمرجع للترجمات',
692
+    'trad_reference' => '(مرجع الترجمات)',
693 693
 
694
-	// U
695
-	'upload_limit' => 'حجم هذا الملف أكبر مما يتحمل جهاز الخدمة: الحجم الأقصى المسموح به <b>للتنزيل</b> هو @max@.',
694
+    // U
695
+    'upload_limit' => 'حجم هذا الملف أكبر مما يتحمل جهاز الخدمة: الحجم الأقصى المسموح به <b>للتنزيل</b> هو @max@.',
696 696
 
697
-	// Z
698
-	'zbug_balise_b_aval' => ': العلامة B متأخرة',
699
-	'zbug_balise_inexistante' => 'خطأ في الاعلان عن العلامة @balise@ لـ@from@',
700
-	'zbug_balise_sans_argument' => 'عامل غير موجود في علامة @balise@',
701
-	'zbug_boucle' => 'حلقة',
702
-	'zbug_boucle_recursive_undef' => 'حلقة دورية غير معرّفة: @nom@',
703
-	'zbug_calcul' => 'حساب',
704
-	'zbug_champ_hors_boucle' => 'الحقل @champ@ خارج الحلقة',
705
-	'zbug_champ_hors_critere' => 'الحقل @champ@ خارج المقياس @critere@',
706
-	'zbug_champ_hors_motif' => 'الحقل @champ@ خارج سياق @motif@',
707
-	'zbug_code' => 'الرموز البرمجية',
708
-	'zbug_critere_inconnu' => 'معيار غير معروف @critere@',
709
-	'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} على جدول دون مفتاح اساسي افرادي',
710
-	'zbug_distant_interdit' => 'عملية خارجية ممنوعة',
711
-	'zbug_doublon_table_sans_cle_primaire' => 'قيمة مكررة في جدول لا يملك مفتاح أساسي',
712
-	'zbug_doublon_table_sans_index' => 'تكرار في جدول غير مفهرس',
713
-	'zbug_erreur_boucle_double' => 'تعريف متكرر للحلقة @id@',
714
-	'zbug_erreur_boucle_fermant' => 'علامة إغلاق غائبة في حلقة @id@',
715
-	'zbug_erreur_boucle_syntaxe' => 'تركيب حلقة @id@ غير صحيح',
716
-	'zbug_erreur_compilation' => 'خطأ تصنيف',
717
-	'zbug_erreur_execution_page' => 'خطأ في التنفيذ',
718
-	'zbug_erreur_filtre' => 'المرشح @filtre@ غير معرّف ',
719
-	'zbug_erreur_filtre_nbarg_min' => 'المرشح @filtre@ : ينقص @nb@ عامل',
720
-	'zbug_erreur_meme_parent' => 'لا ينطبق معيار {meme_parent} إلا على حلقتي (FORUMS) أو (RUBRIQUES)',
721
-	'zbug_erreur_squelette' => 'خطأ في الصفحة النموذجية',
722
-	'zbug_hors_compilation' => 'خارج التصنيف',
723
-	'zbug_info_erreur_squelette' => 'خطأ في الموفع',
724
-	'zbug_inversion_ordre_inexistant' => 'عكس ترتيب غير موجود أصلاً',
725
-	'zbug_pagination_sans_critere' => 'علامة PAGINATION# بدون معيار {pagination} أو مستخدمة في حلقة دورية',
726
-	'zbug_parametres_inclus_incorrects' => 'عامل إدراج غير صحيحة: @param@',
727
-	'zbug_profile' => 'فترة المعالجة: @time@',
728
-	'zbug_resultat' => 'النتيجة',
729
-	'zbug_serveur_indefini' => 'خادم SQL غير محدد',
730
-	'zbug_statistiques' => 'احصاءات استفسارات SQL مرتبة حسب المدة',
731
-	'zbug_table_inconnue' => 'جدول SQL هو «@table@» غير معروف',
732
-	'zxml_connus_attributs' => 'خاصيات معروفة',
733
-	'zxml_de' => 'من',
734
-	'zxml_inconnu_attribut' => 'خاصية غير معروفة',
735
-	'zxml_inconnu_balise' => 'علامة غير معروفة',
736
-	'zxml_inconnu_entite' => 'كائن غير معروف',
737
-	'zxml_inconnu_id' => 'هوية ID غير معروفة',
738
-	'zxml_mais_de' => 'لكن من',
739
-	'zxml_non_conforme' => 'غير مطابق للشكل',
740
-	'zxml_non_fils' => 'ليس من سلالة',
741
-	'zxml_nonvide_balise' => 'علامة غير فارغة',
742
-	'zxml_obligatoire_attribut' => 'خاصية إجبارية لكنها غير موجودة في',
743
-	'zxml_succession_fils_incorrecte' => 'تتابع سلالات غير سليم',
744
-	'zxml_survoler' => 'الحوم لعرض الصحيح',
745
-	'zxml_valeur_attribut' => 'قيمة الخاصية',
746
-	'zxml_vide_balise' => 'علامة فارغة',
747
-	'zxml_vu' => 'ظهر مسبقاً'
697
+    // Z
698
+    'zbug_balise_b_aval' => ': العلامة B متأخرة',
699
+    'zbug_balise_inexistante' => 'خطأ في الاعلان عن العلامة @balise@ لـ@from@',
700
+    'zbug_balise_sans_argument' => 'عامل غير موجود في علامة @balise@',
701
+    'zbug_boucle' => 'حلقة',
702
+    'zbug_boucle_recursive_undef' => 'حلقة دورية غير معرّفة: @nom@',
703
+    'zbug_calcul' => 'حساب',
704
+    'zbug_champ_hors_boucle' => 'الحقل @champ@ خارج الحلقة',
705
+    'zbug_champ_hors_critere' => 'الحقل @champ@ خارج المقياس @critere@',
706
+    'zbug_champ_hors_motif' => 'الحقل @champ@ خارج سياق @motif@',
707
+    'zbug_code' => 'الرموز البرمجية',
708
+    'zbug_critere_inconnu' => 'معيار غير معروف @critere@',
709
+    'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} على جدول دون مفتاح اساسي افرادي',
710
+    'zbug_distant_interdit' => 'عملية خارجية ممنوعة',
711
+    'zbug_doublon_table_sans_cle_primaire' => 'قيمة مكررة في جدول لا يملك مفتاح أساسي',
712
+    'zbug_doublon_table_sans_index' => 'تكرار في جدول غير مفهرس',
713
+    'zbug_erreur_boucle_double' => 'تعريف متكرر للحلقة @id@',
714
+    'zbug_erreur_boucle_fermant' => 'علامة إغلاق غائبة في حلقة @id@',
715
+    'zbug_erreur_boucle_syntaxe' => 'تركيب حلقة @id@ غير صحيح',
716
+    'zbug_erreur_compilation' => 'خطأ تصنيف',
717
+    'zbug_erreur_execution_page' => 'خطأ في التنفيذ',
718
+    'zbug_erreur_filtre' => 'المرشح @filtre@ غير معرّف ',
719
+    'zbug_erreur_filtre_nbarg_min' => 'المرشح @filtre@ : ينقص @nb@ عامل',
720
+    'zbug_erreur_meme_parent' => 'لا ينطبق معيار {meme_parent} إلا على حلقتي (FORUMS) أو (RUBRIQUES)',
721
+    'zbug_erreur_squelette' => 'خطأ في الصفحة النموذجية',
722
+    'zbug_hors_compilation' => 'خارج التصنيف',
723
+    'zbug_info_erreur_squelette' => 'خطأ في الموفع',
724
+    'zbug_inversion_ordre_inexistant' => 'عكس ترتيب غير موجود أصلاً',
725
+    'zbug_pagination_sans_critere' => 'علامة PAGINATION# بدون معيار {pagination} أو مستخدمة في حلقة دورية',
726
+    'zbug_parametres_inclus_incorrects' => 'عامل إدراج غير صحيحة: @param@',
727
+    'zbug_profile' => 'فترة المعالجة: @time@',
728
+    'zbug_resultat' => 'النتيجة',
729
+    'zbug_serveur_indefini' => 'خادم SQL غير محدد',
730
+    'zbug_statistiques' => 'احصاءات استفسارات SQL مرتبة حسب المدة',
731
+    'zbug_table_inconnue' => 'جدول SQL هو «@table@» غير معروف',
732
+    'zxml_connus_attributs' => 'خاصيات معروفة',
733
+    'zxml_de' => 'من',
734
+    'zxml_inconnu_attribut' => 'خاصية غير معروفة',
735
+    'zxml_inconnu_balise' => 'علامة غير معروفة',
736
+    'zxml_inconnu_entite' => 'كائن غير معروف',
737
+    'zxml_inconnu_id' => 'هوية ID غير معروفة',
738
+    'zxml_mais_de' => 'لكن من',
739
+    'zxml_non_conforme' => 'غير مطابق للشكل',
740
+    'zxml_non_fils' => 'ليس من سلالة',
741
+    'zxml_nonvide_balise' => 'علامة غير فارغة',
742
+    'zxml_obligatoire_attribut' => 'خاصية إجبارية لكنها غير موجودة في',
743
+    'zxml_succession_fils_incorrecte' => 'تتابع سلالات غير سليم',
744
+    'zxml_survoler' => 'الحوم لعرض الصحيح',
745
+    'zxml_valeur_attribut' => 'قيمة الخاصية',
746
+    'zxml_vide_balise' => 'علامة فارغة',
747
+    'zxml_vu' => 'ظهر مسبقاً'
748 748
 );
Please login to merge, or discard this patch.
ecrire/lang/spip_en.php 1 patch
Indentation   +668 added lines, -668 removed lines patch added patch discarded remove patch
@@ -4,247 +4,247 @@  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
-	'form_auteur_confirmation' => 'Please confirm your email address',
245
-	'form_auteur_email_modifie' => 'Your email address has been changed.',
246
-	'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.',
247
-	'form_auteur_mail_confirmation' => 'Hello,
242
+    // F
243
+    'fichier_introuvable' => 'File not found: @fichier@',
244
+    'form_auteur_confirmation' => 'Please confirm your email address',
245
+    'form_auteur_email_modifie' => 'Your email address has been changed.',
246
+    '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.',
247
+    'form_auteur_mail_confirmation' => 'Hello,
248 248
 
249 249
 You have asked to change your email address.
250 250
 To confirm your new address, you need to connect to
@@ -252,347 +252,347 @@  discard block
 block discarded – undo
252 252
 
253 253
     @url@
254 254
 ',
255
-	'form_deja_inscrit' => 'You are already registered.',
256
-	'form_email_non_valide' => 'Your email address is not valid.',
257
-	'form_forum_access_refuse' => 'You no longer have access to this site.',
258
-	'form_forum_bonjour' => 'Hello @nom@,',
259
-	'form_forum_confirmer_email' => 'To confirm your email address, follow this link: @url_confirm@',
260
-	'form_forum_email_deja_enregistre' => 'This email address is already registered. Enter your usual password.',
261
-	'form_forum_identifiant_mail' => 'Your new identifier has just been emailed to you.',
262
-	'form_forum_identifiants' => 'Personal identifiers',
263
-	'form_forum_indiquer_nom_email' => 'Enter your name and email address here. You will receive your personal identifier shortly by email.',
264
-	'form_forum_login' => 'login:',
265
-	'form_forum_message_auto' => '(this is an automated message)',
266
-	'form_forum_pass' => 'password:',
267
-	'form_forum_probleme_mail' => 'Mail problem: the identifier could not be sent.',
268
-	'form_forum_voici1' => 'Here are your identifiers. You may now participate on the site
255
+    'form_deja_inscrit' => 'You are already registered.',
256
+    'form_email_non_valide' => 'Your email address is not valid.',
257
+    'form_forum_access_refuse' => 'You no longer have access to this site.',
258
+    'form_forum_bonjour' => 'Hello @nom@,',
259
+    'form_forum_confirmer_email' => 'To confirm your email address, follow this link: @url_confirm@',
260
+    'form_forum_email_deja_enregistre' => 'This email address is already registered. Enter your usual password.',
261
+    'form_forum_identifiant_mail' => 'Your new identifier has just been emailed to you.',
262
+    'form_forum_identifiants' => 'Personal identifiers',
263
+    'form_forum_indiquer_nom_email' => 'Enter your name and email address here. You will receive your personal identifier shortly by email.',
264
+    'form_forum_login' => 'login:',
265
+    'form_forum_message_auto' => '(this is an automated message)',
266
+    'form_forum_pass' => 'password:',
267
+    'form_forum_probleme_mail' => 'Mail problem: the identifier could not be sent.',
268
+    'form_forum_voici1' => 'Here are your identifiers. You may now participate on the site
269 269
 "@nom_site_spip@" (@adresse_site@):',
270
-	'form_forum_voici2' => 'Here are your identifiers for submitting articles to
270
+    'form_forum_voici2' => 'Here are your identifiers for submitting articles to
271 271
 the site "@nom_site_spip@" (@adresse_login@):',
272
-	'form_indiquer_email' => 'Please enter your email address.',
273
-	'form_indiquer_nom' => 'Please enter your name.',
274
-	'form_indiquer_nom_site' => 'Please enter the name of your site.',
275
-	'form_pet_deja_enregistre' => 'This site is already registered',
276
-	'form_pet_signature_pasprise' => 'Your signature has been ignored.',
277
-	'form_prop_confirmer_envoi' => 'Confirm send',
278
-	'form_prop_description' => 'Description/comment',
279
-	'form_prop_enregistre' => 'Your suggestion has been recorded. It will appear online after being validated by the administrators of this site.',
280
-	'form_prop_envoyer' => 'Send a message',
281
-	'form_prop_indiquer_email' => 'Please enter a valid email address',
282
-	'form_prop_indiquer_nom_site' => 'Please enter the site’s name.',
283
-	'form_prop_indiquer_sujet' => 'Please enter a subject',
284
-	'form_prop_message_envoye' => 'Message sent',
285
-	'form_prop_non_enregistre' => 'Your suggestion has not been recorded.',
286
-	'form_prop_sujet' => 'Subject',
287
-	'form_prop_url_site' => 'Site URL',
288
-	'format_date_attendu' => 'Enter a date in jj/mm/aaaa format.',
289
-	'format_date_incorrecte' => 'The date or its format is incorrect.',
290
-	'format_heure_attendu' => 'Enter a time in hh:mm format.',
291
-	'format_heure_incorrecte' => 'The hour or its format is incorrect.',
292
-	'forum_non_inscrit' => 'Either you are not registered, or the address or password are wrong.',
293
-	'forum_par_auteur' => 'by @auteur@',
294
-	'forum_titre_erreur' => 'Error...',
272
+    'form_indiquer_email' => 'Please enter your email address.',
273
+    'form_indiquer_nom' => 'Please enter your name.',
274
+    'form_indiquer_nom_site' => 'Please enter the name of your site.',
275
+    'form_pet_deja_enregistre' => 'This site is already registered',
276
+    'form_pet_signature_pasprise' => 'Your signature has been ignored.',
277
+    'form_prop_confirmer_envoi' => 'Confirm send',
278
+    'form_prop_description' => 'Description/comment',
279
+    'form_prop_enregistre' => 'Your suggestion has been recorded. It will appear online after being validated by the administrators of this site.',
280
+    'form_prop_envoyer' => 'Send a message',
281
+    'form_prop_indiquer_email' => 'Please enter a valid email address',
282
+    'form_prop_indiquer_nom_site' => 'Please enter the site’s name.',
283
+    'form_prop_indiquer_sujet' => 'Please enter a subject',
284
+    'form_prop_message_envoye' => 'Message sent',
285
+    'form_prop_non_enregistre' => 'Your suggestion has not been recorded.',
286
+    'form_prop_sujet' => 'Subject',
287
+    'form_prop_url_site' => 'Site URL',
288
+    'format_date_attendu' => 'Enter a date in jj/mm/aaaa format.',
289
+    'format_date_incorrecte' => 'The date or its format is incorrect.',
290
+    'format_heure_attendu' => 'Enter a time in hh:mm format.',
291
+    'format_heure_incorrecte' => 'The hour or its format is incorrect.',
292
+    'forum_non_inscrit' => 'Either you are not registered, or the address or password are wrong.',
293
+    'forum_par_auteur' => 'by @auteur@',
294
+    'forum_titre_erreur' => 'Error...',
295 295
 
296
-	// I
297
-	'ical_texte_rss_articles' => 'The site’s backend file for articles is:',
298
-	'ical_texte_rss_articles2' => 'You can also get backend files for individual sections on the site:',
299
-	'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.',
300
-	'icone_a_suivre' => 'Launch pad',
301
-	'icone_admin_site' => 'Site administration',
302
-	'icone_agenda' => 'Calendar',
303
-	'icone_aide_ligne' => 'Help',
304
-	'icone_articles' => 'Articles',
305
-	'icone_auteurs' => 'Authors',
306
-	'icone_brouteur' => 'Quick browsing',
307
-	'icone_configuration_site' => 'Configuration',
308
-	'icone_configurer_site' => 'Configure your site',
309
-	'icone_creer_nouvel_auteur' => 'Create a new author',
310
-	'icone_creer_rubrique' => 'Create a section',
311
-	'icone_creer_sous_rubrique' => 'Create a subsection',
312
-	'icone_deconnecter' => 'Log out',
313
-	'icone_discussions' => 'Discussions',
314
-	'icone_doc_rubrique' => 'Documents attached',
315
-	'icone_ecrire_article' => 'Write a new article',
316
-	'icone_edition_site' => 'Edit site',
317
-	'icone_gestion_langues' => 'Language options',
318
-	'icone_informations_personnelles' => 'Personal information',
319
-	'icone_interface_complet' => 'full interface',
320
-	'icone_interface_simple' => 'Simplified interface',
321
-	'icone_maintenance_site' => 'Site maintenance',
322
-	'icone_messagerie_personnelle' => 'Private messages',
323
-	'icone_repartition_debut' => 'Show distribution from the start',
324
-	'icone_rubriques' => 'Sections',
325
-	'icone_sauver_site' => 'Site backup',
326
-	'icone_site_entier' => 'The entire site',
327
-	'icone_sites_references' => 'Referenced sites',
328
-	'icone_statistiques' => 'Site statistics',
329
-	'icone_suivi_activite' => 'Follow site activity',
330
-	'icone_suivi_actualite' => 'Site statistics',
331
-	'icone_suivi_pettions' => 'Manage petitions',
332
-	'icone_suivi_revisions' => 'Article revisions',
333
-	'icone_supprimer_document' => 'Delete this document',
334
-	'icone_supprimer_image' => 'Delete this image',
335
-	'icone_tous_articles' => 'All your articles',
336
-	'icone_tous_auteur' => 'All authors',
337
-	'icone_tous_visiteur' => 'All visitors',
338
-	'icone_visiter_site' => 'View the public site',
339
-	'icone_voir_en_ligne' => 'View online',
340
-	'img_indisponible' => 'image unavailable',
341
-	'impossible' => 'impossible',
342
-	'info_a_suivre' => 'LAUNCH PAD»',
343
-	'info_acces_interdit' => 'Access forbidden',
344
-	'info_acces_refuse' => 'Access denied',
345
-	'info_action' => 'Action: @action@',
346
-	'info_administrer_rubriques' => 'You can manage this section and any subsections',
347
-	'info_adresse_non_indiquee' => 'You did not specify an address to test!',
348
-	'info_aide' => 'HELP:',
349
-	'info_ajouter_mot' => 'Add keyword',
350
-	'info_annonce' => 'ANNOUNCEMENT',
351
-	'info_annonces_generales' => 'General announcements:',
352
-	'info_article_propose' => 'Article submitted',
353
-	'info_article_publie' => 'Article published',
354
-	'info_article_redaction' => 'Article in progress',
355
-	'info_article_refuse' => 'Article rejected',
356
-	'info_article_supprime' => 'Article deleted',
357
-	'info_articles' => 'Articles',
358
-	'info_articles_a_valider' => 'Articles awaiting validation',
359
-	'info_articles_nb' => '@nb@ articles',
360
-	'info_articles_proposes' => 'Articles submitted',
361
-	'info_articles_un' => '1 article',
362
-	'info_auteurs_nombre' => 'author(s):',
363
-	'info_authentification_ftp' => 'Authentication (by FTP).',
364
-	'info_breves_2' => 'news',
365
-	'info_breves_nb' => '@nb@ news items',
366
-	'info_breves_un' => '1 news item',
367
-	'info_connexion_refusee' => 'Connection denied',
368
-	'info_contact_developpeur' => 'Please contact a developer.',
369
-	'info_contenance' => 'This site contains:',
370
-	'info_contribution' => 'contributions',
371
-	'info_copyright' => '@spip@ is free software distributed @lien_gpl@.',
372
-	'info_copyright_doc' => 'For more visit <a href="@spipnet@">@spipnet_affiche@</a>.',
373
-	'info_copyright_gpl' => 'under the GPL license',
374
-	'info_cours_edition' => 'In progress',
375
-	'info_creer_repertoire' => 'Please create a file or a directory called:',
376
-	'info_creer_repertoire_2' => 'inside the sub-directory <b>@repertoire@</b>, then',
377
-	'info_creer_vignette' => 'automatic thumbnail creation',
378
-	'info_creerdansrubrique_non_autorise' => 'You don’t have sufficient rights to create content in this section',
379
-	'info_deplier' => 'Unfold',
380
-	'info_descriptif_nombre' => 'description(s):',
381
-	'info_description' => 'Description:',
382
-	'info_description_2' => 'Description:',
383
-	'info_dimension' => 'Size:',
384
-	'info_documents_nb' => '@nb@ documents',
385
-	'info_documents_un' => '1 document',
386
-	'info_ecire_message_prive' => 'Write a private message',
387
-	'info_email_invalide' => 'Invalid email address.',
388
-	'info_en_cours_validation' => 'Your articles in progress',
389
-	'info_en_ligne' => 'Online now:',
390
-	'info_envoyer_message_prive' => 'Send a private message to this author',
391
-	'info_erreur_requete' => 'Error in query:',
392
-	'info_erreur_squelette2' => 'No <b>@fichier@</b> template available ...',
393
-	'info_erreur_systeme' => 'System error (errno @errsys@)',
394
-	'info_erreur_systeme2' => 'The hard disk may be full or the database damaged. <br />
296
+    // I
297
+    'ical_texte_rss_articles' => 'The site’s backend file for articles is:',
298
+    'ical_texte_rss_articles2' => 'You can also get backend files for individual sections on the site:',
299
+    '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.',
300
+    'icone_a_suivre' => 'Launch pad',
301
+    'icone_admin_site' => 'Site administration',
302
+    'icone_agenda' => 'Calendar',
303
+    'icone_aide_ligne' => 'Help',
304
+    'icone_articles' => 'Articles',
305
+    'icone_auteurs' => 'Authors',
306
+    'icone_brouteur' => 'Quick browsing',
307
+    'icone_configuration_site' => 'Configuration',
308
+    'icone_configurer_site' => 'Configure your site',
309
+    'icone_creer_nouvel_auteur' => 'Create a new author',
310
+    'icone_creer_rubrique' => 'Create a section',
311
+    'icone_creer_sous_rubrique' => 'Create a subsection',
312
+    'icone_deconnecter' => 'Log out',
313
+    'icone_discussions' => 'Discussions',
314
+    'icone_doc_rubrique' => 'Documents attached',
315
+    'icone_ecrire_article' => 'Write a new article',
316
+    'icone_edition_site' => 'Edit site',
317
+    'icone_gestion_langues' => 'Language options',
318
+    'icone_informations_personnelles' => 'Personal information',
319
+    'icone_interface_complet' => 'full interface',
320
+    'icone_interface_simple' => 'Simplified interface',
321
+    'icone_maintenance_site' => 'Site maintenance',
322
+    'icone_messagerie_personnelle' => 'Private messages',
323
+    'icone_repartition_debut' => 'Show distribution from the start',
324
+    'icone_rubriques' => 'Sections',
325
+    'icone_sauver_site' => 'Site backup',
326
+    'icone_site_entier' => 'The entire site',
327
+    'icone_sites_references' => 'Referenced sites',
328
+    'icone_statistiques' => 'Site statistics',
329
+    'icone_suivi_activite' => 'Follow site activity',
330
+    'icone_suivi_actualite' => 'Site statistics',
331
+    'icone_suivi_pettions' => 'Manage petitions',
332
+    'icone_suivi_revisions' => 'Article revisions',
333
+    'icone_supprimer_document' => 'Delete this document',
334
+    'icone_supprimer_image' => 'Delete this image',
335
+    'icone_tous_articles' => 'All your articles',
336
+    'icone_tous_auteur' => 'All authors',
337
+    'icone_tous_visiteur' => 'All visitors',
338
+    'icone_visiter_site' => 'View the public site',
339
+    'icone_voir_en_ligne' => 'View online',
340
+    'img_indisponible' => 'image unavailable',
341
+    'impossible' => 'impossible',
342
+    'info_a_suivre' => 'LAUNCH PAD»',
343
+    'info_acces_interdit' => 'Access forbidden',
344
+    'info_acces_refuse' => 'Access denied',
345
+    'info_action' => 'Action: @action@',
346
+    'info_administrer_rubriques' => 'You can manage this section and any subsections',
347
+    'info_adresse_non_indiquee' => 'You did not specify an address to test!',
348
+    'info_aide' => 'HELP:',
349
+    'info_ajouter_mot' => 'Add keyword',
350
+    'info_annonce' => 'ANNOUNCEMENT',
351
+    'info_annonces_generales' => 'General announcements:',
352
+    'info_article_propose' => 'Article submitted',
353
+    'info_article_publie' => 'Article published',
354
+    'info_article_redaction' => 'Article in progress',
355
+    'info_article_refuse' => 'Article rejected',
356
+    'info_article_supprime' => 'Article deleted',
357
+    'info_articles' => 'Articles',
358
+    'info_articles_a_valider' => 'Articles awaiting validation',
359
+    'info_articles_nb' => '@nb@ articles',
360
+    'info_articles_proposes' => 'Articles submitted',
361
+    'info_articles_un' => '1 article',
362
+    'info_auteurs_nombre' => 'author(s):',
363
+    'info_authentification_ftp' => 'Authentication (by FTP).',
364
+    'info_breves_2' => 'news',
365
+    'info_breves_nb' => '@nb@ news items',
366
+    'info_breves_un' => '1 news item',
367
+    'info_connexion_refusee' => 'Connection denied',
368
+    'info_contact_developpeur' => 'Please contact a developer.',
369
+    'info_contenance' => 'This site contains:',
370
+    'info_contribution' => 'contributions',
371
+    'info_copyright' => '@spip@ is free software distributed @lien_gpl@.',
372
+    'info_copyright_doc' => 'For more visit <a href="@spipnet@">@spipnet_affiche@</a>.',
373
+    'info_copyright_gpl' => 'under the GPL license',
374
+    'info_cours_edition' => 'In progress',
375
+    'info_creer_repertoire' => 'Please create a file or a directory called:',
376
+    'info_creer_repertoire_2' => 'inside the sub-directory <b>@repertoire@</b>, then',
377
+    'info_creer_vignette' => 'automatic thumbnail creation',
378
+    'info_creerdansrubrique_non_autorise' => 'You don’t have sufficient rights to create content in this section',
379
+    'info_deplier' => 'Unfold',
380
+    'info_descriptif_nombre' => 'description(s):',
381
+    'info_description' => 'Description:',
382
+    'info_description_2' => 'Description:',
383
+    'info_dimension' => 'Size:',
384
+    'info_documents_nb' => '@nb@ documents',
385
+    'info_documents_un' => '1 document',
386
+    'info_ecire_message_prive' => 'Write a private message',
387
+    'info_email_invalide' => 'Invalid email address.',
388
+    'info_en_cours_validation' => 'Your articles in progress',
389
+    'info_en_ligne' => 'Online now:',
390
+    'info_envoyer_message_prive' => 'Send a private message to this author',
391
+    'info_erreur_requete' => 'Error in query:',
392
+    'info_erreur_squelette2' => 'No <b>@fichier@</b> template available ...',
393
+    'info_erreur_systeme' => 'System error (errno @errsys@)',
394
+    'info_erreur_systeme2' => 'The hard disk may be full or the database damaged. <br />
395 395
 <span style="color:red;">Try <a href=\'@script@\'>repairing the database</a>, or contact your service provider.</span>',
396
-	'info_fini' => 'Done!',
397
-	'info_format_image' => 'Image format to be used for vignettes: @gd_formats@.',
398
-	'info_format_non_defini' => 'undefined format',
399
-	'info_grand_ecran' => 'Large display',
400
-	'info_image_aide' => 'HELP',
401
-	'info_image_process_titre' => 'How to create thumbnails',
402
-	'info_impossible_lire_page' => '<b>Error!</b> The page <tt><html>@test_proxy@</html></tt> cannot be viewed through the proxy',
403
-	'info_installation_systeme_publication' => 'Installing publication system...',
404
-	'info_installer_documents' => 'You can automatically install all documents in the folder @upload@.',
405
-	'info_installer_ftp' => 'As an administrator, you can install files via FTP to the folder @upload@ in order to select them directly from here.',
406
-	'info_installer_images' => 'You can install images in the formats JPEG, GIF, and PNG.',
407
-	'info_installer_images_dossier' => 'Install images in folder @upload@ if you want to select them here.',
408
-	'info_interface_complete' => 'full interface',
409
-	'info_interface_simple' => 'Simplified interface',
410
-	'info_joindre_document_article' => 'You can attach the following types of document to your article',
411
-	'info_joindre_document_rubrique' => 'You can add documents of the following types to this section ',
412
-	'info_joindre_documents_article' => 'You can attach documents of the following types to your article:',
413
-	'info_l_article' => 'the article',
414
-	'info_la_breve' => 'the news item',
415
-	'info_la_rubrique' => 'the section',
416
-	'info_langue_principale' => 'Main language for site',
417
-	'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels',
418
-	'info_les_auteurs_1' => 'by @les_auteurs@',
419
-	'info_logo_format_interdit' => 'Only logos in these formats @formats@ are allowed.',
420
-	'info_logo_max_poids' => 'Logos must be less than @maxi@ (this file is @actuel@).',
421
-	'info_mail_fournisseur' => '[email protected]',
422
-	'info_message_2' => 'MESSAGE',
423
-	'info_message_supprime' => 'MESSAGE DELETED',
424
-	'info_messages_nb' => '@nb@ messages',
425
-	'info_messages_un' => '1 message',
426
-	'info_mise_en_ligne' => 'Published on:',
427
-	'info_modification_parametres_securite' => 'modifying security parameters',
428
-	'info_mois_courant' => 'During the month:',
429
-	'info_mot_cle_ajoute' => 'The following keyword was added to',
430
-	'info_multi_herit' => 'Default language',
431
-	'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.',
432
-	'info_multilinguisme' => 'Multilingual',
433
-	'info_nom_non_utilisateurs_connectes' => 'Your name does not appear in the list of users online.',
434
-	'info_nom_utilisateurs_connectes' => 'Your name appears in the list of users online.',
435
-	'info_nombre_en_ligne' => 'Online now:',
436
-	'info_non_resultat' => 'No results for "@cherche_mot@"',
437
-	'info_non_utilisation_messagerie' => 'You are not using private messaging on this site.',
438
-	'info_nouveau_message' => 'YOU HAVE A NEW MESSAGE',
439
-	'info_nouveaux_messages' => 'YOU HAVE @total_messages@ NEW MESSAGES',
440
-	'info_numero_abbreviation' => 'No',
441
-	'info_obligatoire' => 'This information is required',
442
-	'info_page_actuelle' => 'Actual page',
443
-	'info_pense_bete' => 'MEMO',
444
-	'info_petit_ecran' => 'Small display',
445
-	'info_petition_close' => 'Petition closed',
446
-	'info_pixels' => 'pixels',
447
-	'info_plusieurs_mots_trouves' => 'Several keywords were found for "@cherche_mot@":',
448
-	'info_portfolio_automatique' => 'Automated portfolio:',
449
-	'info_premier_resultat' => '[First @debut_limit@ results out of @total@]',
450
-	'info_premier_resultat_sur' => '[First @debut_limit@ results out of @total@]',
451
-	'info_propose_1' => '[@nom_site_spip@] Submitted: @titre@',
452
-	'info_propose_2' => 'Article submitted
396
+    'info_fini' => 'Done!',
397
+    'info_format_image' => 'Image format to be used for vignettes: @gd_formats@.',
398
+    'info_format_non_defini' => 'undefined format',
399
+    'info_grand_ecran' => 'Large display',
400
+    'info_image_aide' => 'HELP',
401
+    'info_image_process_titre' => 'How to create thumbnails',
402
+    'info_impossible_lire_page' => '<b>Error!</b> The page <tt><html>@test_proxy@</html></tt> cannot be viewed through the proxy',
403
+    'info_installation_systeme_publication' => 'Installing publication system...',
404
+    'info_installer_documents' => 'You can automatically install all documents in the folder @upload@.',
405
+    'info_installer_ftp' => 'As an administrator, you can install files via FTP to the folder @upload@ in order to select them directly from here.',
406
+    'info_installer_images' => 'You can install images in the formats JPEG, GIF, and PNG.',
407
+    'info_installer_images_dossier' => 'Install images in folder @upload@ if you want to select them here.',
408
+    'info_interface_complete' => 'full interface',
409
+    'info_interface_simple' => 'Simplified interface',
410
+    'info_joindre_document_article' => 'You can attach the following types of document to your article',
411
+    'info_joindre_document_rubrique' => 'You can add documents of the following types to this section ',
412
+    'info_joindre_documents_article' => 'You can attach documents of the following types to your article:',
413
+    'info_l_article' => 'the article',
414
+    'info_la_breve' => 'the news item',
415
+    'info_la_rubrique' => 'the section',
416
+    'info_langue_principale' => 'Main language for site',
417
+    'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels',
418
+    'info_les_auteurs_1' => 'by @les_auteurs@',
419
+    'info_logo_format_interdit' => 'Only logos in these formats @formats@ are allowed.',
420
+    'info_logo_max_poids' => 'Logos must be less than @maxi@ (this file is @actuel@).',
421
+    'info_mail_fournisseur' => '[email protected]',
422
+    'info_message_2' => 'MESSAGE',
423
+    'info_message_supprime' => 'MESSAGE DELETED',
424
+    'info_messages_nb' => '@nb@ messages',
425
+    'info_messages_un' => '1 message',
426
+    'info_mise_en_ligne' => 'Published on:',
427
+    'info_modification_parametres_securite' => 'modifying security parameters',
428
+    'info_mois_courant' => 'During the month:',
429
+    'info_mot_cle_ajoute' => 'The following keyword was added to',
430
+    'info_multi_herit' => 'Default language',
431
+    '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.',
432
+    'info_multilinguisme' => 'Multilingual',
433
+    'info_nom_non_utilisateurs_connectes' => 'Your name does not appear in the list of users online.',
434
+    'info_nom_utilisateurs_connectes' => 'Your name appears in the list of users online.',
435
+    'info_nombre_en_ligne' => 'Online now:',
436
+    'info_non_resultat' => 'No results for "@cherche_mot@"',
437
+    'info_non_utilisation_messagerie' => 'You are not using private messaging on this site.',
438
+    'info_nouveau_message' => 'YOU HAVE A NEW MESSAGE',
439
+    'info_nouveaux_messages' => 'YOU HAVE @total_messages@ NEW MESSAGES',
440
+    'info_numero_abbreviation' => 'No',
441
+    'info_obligatoire' => 'This information is required',
442
+    'info_page_actuelle' => 'Actual page',
443
+    'info_pense_bete' => 'MEMO',
444
+    'info_petit_ecran' => 'Small display',
445
+    'info_petition_close' => 'Petition closed',
446
+    'info_pixels' => 'pixels',
447
+    'info_plusieurs_mots_trouves' => 'Several keywords were found for "@cherche_mot@":',
448
+    'info_portfolio_automatique' => 'Automated portfolio:',
449
+    'info_premier_resultat' => '[First @debut_limit@ results out of @total@]',
450
+    'info_premier_resultat_sur' => '[First @debut_limit@ results out of @total@]',
451
+    'info_propose_1' => '[@nom_site_spip@] Submitted: @titre@',
452
+    'info_propose_2' => 'Article submitted
453 453
 -----------------',
454
-	'info_propose_3' => 'The article "@titre@" has been submitted for publication.',
455
-	'info_propose_4' => 'You are invited to review it and give your opinion',
456
-	'info_propose_5' => 'in the associated forum. It is available here:',
457
-	'info_publie_01' => 'The article "@titre@" was validated by @connect_nom@.',
458
-	'info_publie_1' => '[@nom_site_spip@] PUBLISHED: @titre@',
459
-	'info_publie_2' => 'Article published
454
+    'info_propose_3' => 'The article "@titre@" has been submitted for publication.',
455
+    'info_propose_4' => 'You are invited to review it and give your opinion',
456
+    'info_propose_5' => 'in the associated forum. It is available here:',
457
+    'info_publie_01' => 'The article "@titre@" was validated by @connect_nom@.',
458
+    'info_publie_1' => '[@nom_site_spip@] PUBLISHED: @titre@',
459
+    'info_publie_2' => 'Article published
460 460
 -----------------',
461
-	'info_rechercher' => 'Search',
462
-	'info_rechercher_02' => 'Search:',
463
-	'info_remplacer_vignette' => 'Replace the default vignette by a customised logo:',
464
-	'info_rubriques_nb' => '@nb@ sections',
465
-	'info_rubriques_un' => '1 section',
466
-	'info_sans_titre_2' => 'untitled',
467
-	'info_selectionner_fichier' => 'You can select a file from the folder @upload@',
468
-	'info_selectionner_fichier_2' => 'Select a file:',
469
-	'info_sites_nb' => '@nb@ sites',
470
-	'info_sites_un' => '1 site',
471
-	'info_supprimer_vignette' => 'delete the vignette',
472
-	'info_symbole_bleu' => 'A <b>blue</b> symbol indicates a <b>memo</b>: i.e. a message for your personal use.',
473
-	'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.',
474
-	'info_symbole_vert' => 'A <b>green</b> symbol indicates the <b>messages exchanged with other users</b> of the site.',
475
-	'info_telecharger_nouveau_logo' => 'Upload a new logo:',
476
-	'info_telecharger_ordinateur' => 'Upload from your computer:',
477
-	'info_tous_resultats_enregistres' => '[all the results are recorded]',
478
-	'info_tout_afficher' => 'Show all',
479
-	'info_travaux_texte' => 'This site is not yet set up. Please come back later...',
480
-	'info_travaux_titre' => 'Site under construction',
481
-	'info_trop_resultat' => 'Too many results for "@cherche_mot@"; please refine the search.',
482
-	'info_utilisation_messagerie_interne' => 'You are using the internal message system of this site.',
483
-	'info_valider_lien' => 'validate this link',
484
-	'info_verifier_image' => ', please make sure your images have been transferred correctly.',
485
-	'info_vignette_defaut' => 'Default vignette',
486
-	'info_vignette_personnalisee' => 'Custom vignette',
487
-	'info_visite' => 'visit:',
488
-	'info_vos_rendez_vous' => 'Your future appointments',
489
-	'infos_vos_pense_bete' => 'Your memos',
461
+    'info_rechercher' => 'Search',
462
+    'info_rechercher_02' => 'Search:',
463
+    'info_remplacer_vignette' => 'Replace the default vignette by a customised logo:',
464
+    'info_rubriques_nb' => '@nb@ sections',
465
+    'info_rubriques_un' => '1 section',
466
+    'info_sans_titre_2' => 'untitled',
467
+    'info_selectionner_fichier' => 'You can select a file from the folder @upload@',
468
+    'info_selectionner_fichier_2' => 'Select a file:',
469
+    'info_sites_nb' => '@nb@ sites',
470
+    'info_sites_un' => '1 site',
471
+    'info_supprimer_vignette' => 'delete the vignette',
472
+    'info_symbole_bleu' => 'A <b>blue</b> symbol indicates a <b>memo</b>: i.e. a message for your personal use.',
473
+    '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.',
474
+    'info_symbole_vert' => 'A <b>green</b> symbol indicates the <b>messages exchanged with other users</b> of the site.',
475
+    'info_telecharger_nouveau_logo' => 'Upload a new logo:',
476
+    'info_telecharger_ordinateur' => 'Upload from your computer:',
477
+    'info_tous_resultats_enregistres' => '[all the results are recorded]',
478
+    'info_tout_afficher' => 'Show all',
479
+    'info_travaux_texte' => 'This site is not yet set up. Please come back later...',
480
+    'info_travaux_titre' => 'Site under construction',
481
+    'info_trop_resultat' => 'Too many results for "@cherche_mot@"; please refine the search.',
482
+    'info_utilisation_messagerie_interne' => 'You are using the internal message system of this site.',
483
+    'info_valider_lien' => 'validate this link',
484
+    'info_verifier_image' => ', please make sure your images have been transferred correctly.',
485
+    'info_vignette_defaut' => 'Default vignette',
486
+    'info_vignette_personnalisee' => 'Custom vignette',
487
+    'info_visite' => 'visit:',
488
+    'info_vos_rendez_vous' => 'Your future appointments',
489
+    'infos_vos_pense_bete' => 'Your memos',
490 490
 
491
-	// L
492
-	'label_ajout_id_rapide' => 'Quick addition',
493
-	'label_poids_fichier' => 'Size',
494
-	'label_ponctuer' => '@label@ :',
495
-	'lien_afficher_icones_seuls' => 'Show only icons',
496
-	'lien_afficher_texte_icones' => 'Show icons and text',
497
-	'lien_afficher_texte_seul' => 'Show only text',
498
-	'lien_aller_a_la_derniere_page' => 'Go to the last page',
499
-	'lien_aller_a_la_page_nb' => 'Go to page @nb@',
500
-	'lien_aller_a_la_page_precedente' => 'Go to the previous page',
501
-	'lien_aller_a_la_page_suivante' => 'Go to the next page',
502
-	'lien_aller_a_la_premiere_page' => 'Go to the first page',
503
-	'lien_liberer' => 'release',
504
-	'lien_liberer_tous' => 'Release all',
505
-	'lien_nouvea_pense_bete' => 'NEW MEMO',
506
-	'lien_nouveau_message' => 'NEW MESSAGE',
507
-	'lien_nouvelle_annonce' => 'NEW ANNOUNCEMENT',
508
-	'lien_petitions' => 'PETITION',
509
-	'lien_popularite' => 'popularity: @popularite@%',
510
-	'lien_racine_site' => 'SITE ROOT',
511
-	'lien_reessayer' => 'try again',
512
-	'lien_repondre_message' => 'Reply to this message',
513
-	'lien_supprimer' => 'delete',
514
-	'lien_tout_afficher' => 'Show all',
515
-	'lien_visite_site' => 'visit this site',
516
-	'lien_visites' => '@visites@ visits',
517
-	'lien_voir_auteur' => 'Check this author',
518
-	'ligne' => 'Line',
519
-	'login' => 'Connection',
520
-	'login_acces_prive' => 'access to the private area',
521
-	'login_autre_identifiant' => 'use a different ID',
522
-	'login_cookie_accepte' => 'Please configure your browser to accept them for this site.',
523
-	'login_cookie_oblige' => 'For secure identification, your browser must accept cookies.',
524
-	'login_deconnexion_ok' => 'Logged out.',
525
-	'login_erreur_pass' => 'Wrong password.',
526
-	'login_espace_prive' => 'private area',
527
-	'login_identifiant_inconnu' => 'The identifier "@login@" is unknown.',
528
-	'login_login' => 'Login:',
529
-	'login_login2' => 'Login or e-mail address:',
530
-	'login_login_pass_incorrect' => '(Wrong login or password).',
531
-	'login_motpasseoublie' => 'password forgotten?',
532
-	'login_non_securise' => 'Caution, this form is not secure.
491
+    // L
492
+    'label_ajout_id_rapide' => 'Quick addition',
493
+    'label_poids_fichier' => 'Size',
494
+    'label_ponctuer' => '@label@ :',
495
+    'lien_afficher_icones_seuls' => 'Show only icons',
496
+    'lien_afficher_texte_icones' => 'Show icons and text',
497
+    'lien_afficher_texte_seul' => 'Show only text',
498
+    'lien_aller_a_la_derniere_page' => 'Go to the last page',
499
+    'lien_aller_a_la_page_nb' => 'Go to page @nb@',
500
+    'lien_aller_a_la_page_precedente' => 'Go to the previous page',
501
+    'lien_aller_a_la_page_suivante' => 'Go to the next page',
502
+    'lien_aller_a_la_premiere_page' => 'Go to the first page',
503
+    'lien_liberer' => 'release',
504
+    'lien_liberer_tous' => 'Release all',
505
+    'lien_nouvea_pense_bete' => 'NEW MEMO',
506
+    'lien_nouveau_message' => 'NEW MESSAGE',
507
+    'lien_nouvelle_annonce' => 'NEW ANNOUNCEMENT',
508
+    'lien_petitions' => 'PETITION',
509
+    'lien_popularite' => 'popularity: @popularite@%',
510
+    'lien_racine_site' => 'SITE ROOT',
511
+    'lien_reessayer' => 'try again',
512
+    'lien_repondre_message' => 'Reply to this message',
513
+    'lien_supprimer' => 'delete',
514
+    'lien_tout_afficher' => 'Show all',
515
+    'lien_visite_site' => 'visit this site',
516
+    'lien_visites' => '@visites@ visits',
517
+    'lien_voir_auteur' => 'Check this author',
518
+    'ligne' => 'Line',
519
+    'login' => 'Connection',
520
+    'login_acces_prive' => 'access to the private area',
521
+    'login_autre_identifiant' => 'use a different ID',
522
+    'login_cookie_accepte' => 'Please configure your browser to accept them for this site.',
523
+    'login_cookie_oblige' => 'For secure identification, your browser must accept cookies.',
524
+    'login_deconnexion_ok' => 'Logged out.',
525
+    'login_erreur_pass' => 'Wrong password.',
526
+    'login_espace_prive' => 'private area',
527
+    'login_identifiant_inconnu' => 'The identifier "@login@" is unknown.',
528
+    'login_login' => 'Login:',
529
+    'login_login2' => 'Login or e-mail address:',
530
+    'login_login_pass_incorrect' => '(Wrong login or password).',
531
+    'login_motpasseoublie' => 'password forgotten?',
532
+    'login_non_securise' => 'Caution, this form is not secure.
533 533
    If you do not want your password to be open to
534 534
    interception on the network, please activate Javascript
535 535
    in your browser and',
536
-	'login_nouvelle_tentative' => 'New attempt',
537
-	'login_par_ici' => 'You are registered... this way...',
538
-	'login_pass2' => 'Password:',
539
-	'login_preferez_refuser' => '<b>If you prefer to refuse cookies</b>, there is another, less secure, method of connection available:',
540
-	'login_recharger' => 'reload this page',
541
-	'login_rester_identifie' => 'Remember me',
542
-	'login_retour_public' => 'Back to the public site',
543
-	'login_retour_site' => 'Back to the public site',
544
-	'login_retoursitepublic' => 'back to the public site',
545
-	'login_sans_cookie' => 'Identification without cookie',
546
-	'login_securise' => 'Secure login',
547
-	'login_sinscrire' => 'register',
548
-	'login_test_navigateur' => 'testing browser/reconnection',
549
-	'login_verifiez_navigateur' => '(However, check that your browser did not memorise your password...)',
536
+    'login_nouvelle_tentative' => 'New attempt',
537
+    'login_par_ici' => 'You are registered... this way...',
538
+    'login_pass2' => 'Password:',
539
+    'login_preferez_refuser' => '<b>If you prefer to refuse cookies</b>, there is another, less secure, method of connection available:',
540
+    'login_recharger' => 'reload this page',
541
+    'login_rester_identifie' => 'Remember me',
542
+    'login_retour_public' => 'Back to the public site',
543
+    'login_retour_site' => 'Back to the public site',
544
+    'login_retoursitepublic' => 'back to the public site',
545
+    'login_sans_cookie' => 'Identification without cookie',
546
+    'login_securise' => 'Secure login',
547
+    'login_sinscrire' => 'register',
548
+    'login_test_navigateur' => 'testing browser/reconnection',
549
+    'login_verifiez_navigateur' => '(However, check that your browser did not memorise your password...)',
550 550
 
551
-	// M
552
-	'masquer_colonne' => 'Hide this column',
553
-	'masquer_trad' => 'hide translations',
554
-	'message_nouveaux_identifiants_echec' => 'New identifiers could not be created.',
555
-	'message_nouveaux_identifiants_echec_envoi' => 'The new connection identifiers could not be sent.',
556
-	'message_nouveaux_identifiants_ok' => 'The new connection identifiers were sent to @email@.',
557
-	'module_fichiers_langues' => 'Language files',
551
+    // M
552
+    'masquer_colonne' => 'Hide this column',
553
+    'masquer_trad' => 'hide translations',
554
+    'message_nouveaux_identifiants_echec' => 'New identifiers could not be created.',
555
+    'message_nouveaux_identifiants_echec_envoi' => 'The new connection identifiers could not be sent.',
556
+    'message_nouveaux_identifiants_ok' => 'The new connection identifiers were sent to @email@.',
557
+    'module_fichiers_langues' => 'Language files',
558 558
 
559
-	// N
560
-	'navigateur_pas_redirige' => 'If you are not automatically redirected, click here to continue.',
561
-	'numero' => 'Number',
559
+    // N
560
+    'navigateur_pas_redirige' => 'If you are not automatically redirected, click here to continue.',
561
+    'numero' => 'Number',
562 562
 
563
-	// O
564
-	'occurence' => 'Instance',
565
-	'onglet_affacer_base' => 'Delete the database',
566
-	'onglet_auteur' => 'The author',
567
-	'onglet_contenu_site' => 'Site content',
568
-	'onglet_evolution_visite_mod' => 'Trend in visits',
569
-	'onglet_fonctions_avances' => 'Advanced functions',
570
-	'onglet_informations_personnelles' => 'Personal Information',
571
-	'onglet_interactivite' => 'Interactivity',
572
-	'onglet_messagerie' => 'Messaging',
573
-	'onglet_repartition_rubrique' => 'Distribution by section',
574
-	'onglet_save_restaur_base' => 'Backup/restore the database',
575
-	'onglet_vider_cache' => 'Empty the cache',
563
+    // O
564
+    'occurence' => 'Instance',
565
+    'onglet_affacer_base' => 'Delete the database',
566
+    'onglet_auteur' => 'The author',
567
+    'onglet_contenu_site' => 'Site content',
568
+    'onglet_evolution_visite_mod' => 'Trend in visits',
569
+    'onglet_fonctions_avances' => 'Advanced functions',
570
+    'onglet_informations_personnelles' => 'Personal Information',
571
+    'onglet_interactivite' => 'Interactivity',
572
+    'onglet_messagerie' => 'Messaging',
573
+    'onglet_repartition_rubrique' => 'Distribution by section',
574
+    'onglet_save_restaur_base' => 'Backup/restore the database',
575
+    'onglet_vider_cache' => 'Empty the cache',
576 576
 
577
-	// P
578
-	'pass_choix_pass' => 'Please choose a new password:',
579
-	'pass_erreur' => 'Error',
580
-	'pass_erreur_acces_refuse' => '<b>Error:</b> you no longer have access to this site.',
581
-	'pass_erreur_code_inconnu' => '<b>Error:</b> this code does not match any visitors with access permission to this site.',
582
-	'pass_erreur_non_enregistre' => '<b>Error :</b> the address <tt>@email_oubli@</tt> is not registered on this site.',
583
-	'pass_erreur_non_valide' => '<b>Error :</b> the e-mail <tt>@email_oubli@</tt> is not valid!',
584
-	'pass_erreur_probleme_technique' => '<b>Error :</b> this e-mail could not be sent due to a technical problem.',
585
-	'pass_espace_prive_bla' => 'The private area of this site is open to
577
+    // P
578
+    'pass_choix_pass' => 'Please choose a new password:',
579
+    'pass_erreur' => 'Error',
580
+    'pass_erreur_acces_refuse' => '<b>Error:</b> you no longer have access to this site.',
581
+    'pass_erreur_code_inconnu' => '<b>Error:</b> this code does not match any visitors with access permission to this site.',
582
+    'pass_erreur_non_enregistre' => '<b>Error :</b> the address <tt>@email_oubli@</tt> is not registered on this site.',
583
+    'pass_erreur_non_valide' => '<b>Error :</b> the e-mail <tt>@email_oubli@</tt> is not valid!',
584
+    'pass_erreur_probleme_technique' => '<b>Error :</b> this e-mail could not be sent due to a technical problem.',
585
+    'pass_espace_prive_bla' => 'The private area of this site is open to
586 586
 visitors after registration. Once you have registered,
587 587
 you can review the articles in progress,
588 588
 submit articles and participate in forums.',
589
-	'pass_forum_bla' => 'You have requested to take part in a forum
589
+    'pass_forum_bla' => 'You have requested to take part in a forum
590 590
 reserved for registered visitors.',
591
-	'pass_indiquez_cidessous' => 'Enter the email address with which you
591
+    'pass_indiquez_cidessous' => 'Enter the email address with which you
592 592
 registered. You
593 593
 will receive an email explaining how you
594 594
 can retrieve your password.',
595
-	'pass_mail_passcookie' => '(this is an automated message)
595
+    'pass_mail_passcookie' => '(this is an automated message)
596 596
 
597 597
 To recover your access to the site
598 598
 @nom_site_spip@ (@adresse_site@)
@@ -603,146 +603,146 @@  discard block
 block discarded – undo
603 603
 You can then enter a new password
604 604
 and log in to the site.
605 605
 ',
606
-	'pass_mot_oublie' => 'Password forgotten',
607
-	'pass_nouveau_enregistre' => 'Your new password has been recorded.',
608
-	'pass_nouveau_pass' => 'New password',
609
-	'pass_ok' => 'OK',
610
-	'pass_oubli_mot' => 'Forgotten password',
611
-	'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.',
612
-	'pass_quitter_fenetre' => 'Close this window',
613
-	'pass_rappel_login' => 'Reminder: your identifier (login) is "@login@".',
614
-	'pass_recevoir_mail' => 'A link to reset your password has been sent to your email address (if it is valid).',
615
-	'pass_retour_public' => 'Back to the public site',
616
-	'pass_rien_a_faire_ici' => 'Nothing to do here.',
617
-	'pass_vousinscrire' => 'Registering with the site',
618
-	'precedent' => 'previous',
619
-	'previsualisation' => 'Preview',
620
-	'previsualiser' => 'Show preview',
606
+    'pass_mot_oublie' => 'Password forgotten',
607
+    'pass_nouveau_enregistre' => 'Your new password has been recorded.',
608
+    'pass_nouveau_pass' => 'New password',
609
+    'pass_ok' => 'OK',
610
+    'pass_oubli_mot' => 'Forgotten password',
611
+    '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.',
612
+    'pass_quitter_fenetre' => 'Close this window',
613
+    'pass_rappel_login' => 'Reminder: your identifier (login) is "@login@".',
614
+    'pass_recevoir_mail' => 'A link to reset your password has been sent to your email address (if it is valid).',
615
+    'pass_retour_public' => 'Back to the public site',
616
+    'pass_rien_a_faire_ici' => 'Nothing to do here.',
617
+    'pass_vousinscrire' => 'Registering with the site',
618
+    'precedent' => 'previous',
619
+    'previsualisation' => 'Preview',
620
+    'previsualiser' => 'Show preview',
621 621
 
622
-	// R
623
-	'retour' => 'Back',
622
+    // R
623
+    'retour' => 'Back',
624 624
 
625
-	// S
626
-	'spip_conforme_dtd' => 'SPIP finds this page to be in compliance with its DOCTYPE:',
627
-	'squelette' => 'template',
628
-	'squelette_inclus_ligne' => 'included template, line',
629
-	'squelette_ligne' => 'template, line',
630
-	'stats_visites_et_popularite' => '@visites@ visits; popularity: @popularite@',
631
-	'suivant' => 'next',
625
+    // S
626
+    'spip_conforme_dtd' => 'SPIP finds this page to be in compliance with its DOCTYPE:',
627
+    'squelette' => 'template',
628
+    'squelette_inclus_ligne' => 'included template, line',
629
+    'squelette_ligne' => 'template, line',
630
+    'stats_visites_et_popularite' => '@visites@ visits; popularity: @popularite@',
631
+    'suivant' => 'next',
632 632
 
633
-	// T
634
-	'taille_go' => '@taille@ Gb',
635
-	'taille_ko' => '@taille@ kb',
636
-	'taille_mo' => '@taille@ Mb',
637
-	'taille_octets' => '@taille@ bytes',
638
-	'texte_actualite_site_1' => 'When you are more familiar with the interface, click on "',
639
-	'texte_actualite_site_2' => 'full interface',
640
-	'texte_actualite_site_3' => '" to make more features available.',
641
-	'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.',
642
-	'texte_documents_associes' => 'The following documents are associated with the article,,
633
+    // T
634
+    'taille_go' => '@taille@ Gb',
635
+    'taille_ko' => '@taille@ kb',
636
+    'taille_mo' => '@taille@ Mb',
637
+    'taille_octets' => '@taille@ bytes',
638
+    'texte_actualite_site_1' => 'When you are more familiar with the interface, click on "',
639
+    'texte_actualite_site_2' => 'full interface',
640
+    'texte_actualite_site_3' => '" to make more features available.',
641
+    '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.',
642
+    'texte_documents_associes' => 'The following documents are associated with the article,,
643 643
     but they were not directly
644 644
     inserted. Depending on the layout of the public site,
645 645
     they may appear as attached documents.',
646
-	'texte_erreur_mise_niveau_base' => 'Database error during the upgrade.
646
+    'texte_erreur_mise_niveau_base' => 'Database error during the upgrade.
647 647
       The image <b>@fichier@</b> did not pass (article @id_article@).<p>
648 648
    Note this reference carefully, try the upgrade procedure again,
649 649
    and check afterwards that the images still appear
650 650
       in the articles.',
651
-	'texte_erreur_visiteur' => 'You have tried to enter the private area using an unauthorised login.',
652
-	'texte_inc_auth_1' => 'You used the login
651
+    'texte_erreur_visiteur' => 'You have tried to enter the private area using an unauthorised login.',
652
+    'texte_inc_auth_1' => 'You used the login
653 653
   <b>@auth_login@</b>, but it does not exist in the database.
654 654
   Try to',
655
-	'texte_inc_auth_2' => 'reconnect',
656
-	'texte_inc_auth_3' => ', having quit and
655
+    'texte_inc_auth_2' => 'reconnect',
656
+    'texte_inc_auth_3' => ', having quit and
657 657
   restarted your browser if necessary.',
658
-	'texte_inc_config' => 'Changes made to the options on these pages have a great effect on
658
+    'texte_inc_config' => 'Changes made to the options on these pages have a great effect on
659 659
   the functioning of the site. You are advised not to make any changes unless you are
660 660
  familiar with how SPIP works. <br /><br /><b>In
661 661
  general, you are strongly advised
662 662
  to let the main webmaster of the site deal with these pages.</b>',
663
-	'texte_inc_meta_1' => 'The system encountered an error when trying to write the file <code>@fichier@</code>. As a site administrator, please',
664
-	'texte_inc_meta_2' => 'verify write permissions',
665
-	'texte_inc_meta_3' => 'of the directory <code>@repertoire@</code>.',
666
-	'texte_statut_en_cours_redaction' => 'editing in progress',
667
-	'texte_statut_poubelle' => 'to the dustbin',
668
-	'texte_statut_propose_evaluation' => 'submitted for evaluation',
669
-	'texte_statut_publie' => 'published online',
670
-	'texte_statut_refuse' => 'rejected',
671
-	'titre_ajouter_mot_cle' => 'ADD A KEYWORD:',
672
-	'titre_cadre_raccourcis' => 'SHORTCUTS:',
673
-	'titre_changer_couleur_interface' => 'Changing interface colour',
674
-	'titre_image_admin_article' => 'You can administrate this article',
675
-	'titre_image_administrateur' => 'Administrator',
676
-	'titre_image_aide' => 'Help on this item',
677
-	'titre_image_auteur_supprime' => 'Author deleted',
678
-	'titre_image_redacteur' => 'Editor without access',
679
-	'titre_image_redacteur_02' => 'Editor',
680
-	'titre_image_selecteur' => 'Display list',
681
-	'titre_image_visiteur' => 'Visitor',
682
-	'titre_joindre_document' => 'ATTACH A DOCUMENT',
683
-	'titre_mots_cles' => 'KEYWORDS',
684
-	'titre_probleme_technique' => 'Warning: a technical problem (SQL server) is preventing access to this part of the site. Thank you for your patience.',
685
-	'titre_publier_document' => 'PUBLISH A DOCUMENT IN THIS SECTION',
686
-	'titre_signatures_attente' => 'Signatures awaiting validation',
687
-	'titre_signatures_confirmees' => 'Signatures confirmed',
688
-	'titre_statistiques' => 'Site statistics',
689
-	'titre_titre_document' => 'Document title:',
690
-	'todo' => 'to come',
691
-	'trad_definir_reference' => 'Choose "@titre@" as a reference for translations',
692
-	'trad_reference' => '(reference for translations)',
663
+    'texte_inc_meta_1' => 'The system encountered an error when trying to write the file <code>@fichier@</code>. As a site administrator, please',
664
+    'texte_inc_meta_2' => 'verify write permissions',
665
+    'texte_inc_meta_3' => 'of the directory <code>@repertoire@</code>.',
666
+    'texte_statut_en_cours_redaction' => 'editing in progress',
667
+    'texte_statut_poubelle' => 'to the dustbin',
668
+    'texte_statut_propose_evaluation' => 'submitted for evaluation',
669
+    'texte_statut_publie' => 'published online',
670
+    'texte_statut_refuse' => 'rejected',
671
+    'titre_ajouter_mot_cle' => 'ADD A KEYWORD:',
672
+    'titre_cadre_raccourcis' => 'SHORTCUTS:',
673
+    'titre_changer_couleur_interface' => 'Changing interface colour',
674
+    'titre_image_admin_article' => 'You can administrate this article',
675
+    'titre_image_administrateur' => 'Administrator',
676
+    'titre_image_aide' => 'Help on this item',
677
+    'titre_image_auteur_supprime' => 'Author deleted',
678
+    'titre_image_redacteur' => 'Editor without access',
679
+    'titre_image_redacteur_02' => 'Editor',
680
+    'titre_image_selecteur' => 'Display list',
681
+    'titre_image_visiteur' => 'Visitor',
682
+    'titre_joindre_document' => 'ATTACH A DOCUMENT',
683
+    'titre_mots_cles' => 'KEYWORDS',
684
+    'titre_probleme_technique' => 'Warning: a technical problem (SQL server) is preventing access to this part of the site. Thank you for your patience.',
685
+    'titre_publier_document' => 'PUBLISH A DOCUMENT IN THIS SECTION',
686
+    'titre_signatures_attente' => 'Signatures awaiting validation',
687
+    'titre_signatures_confirmees' => 'Signatures confirmed',
688
+    'titre_statistiques' => 'Site statistics',
689
+    'titre_titre_document' => 'Document title:',
690
+    'todo' => 'to come',
691
+    'trad_definir_reference' => 'Choose "@titre@" as a reference for translations',
692
+    'trad_reference' => '(reference for translations)',
693 693
 
694
-	// U
695
-	'upload_limit' => 'This file is too big for the server: the maximum size allowed for <i>upload</i> is @max@.',
694
+    // U
695
+    'upload_limit' => 'This file is too big for the server: the maximum size allowed for <i>upload</i> is @max@.',
696 696
 
697
-	// Z
698
-	'zbug_balise_b_aval' => ': B tag too late in loop',
699
-	'zbug_balise_inexistante' => 'Tag @balise@ wrongly declared for @from@',
700
-	'zbug_balise_sans_argument' => 'Missing argument in the @balise@ tag',
701
-	'zbug_boucle' => 'loop',
702
-	'zbug_boucle_recursive_undef' => 'undefined recursive loop: @nom@',
703
-	'zbug_calcul' => 'calculation',
704
-	'zbug_champ_hors_boucle' => 'Field @champ@ outside loop',
705
-	'zbug_champ_hors_critere' => 'Field @champ@ outside criterion @critere@',
706
-	'zbug_champ_hors_motif' => 'Field @champ@ outside context @motif@',
707
-	'zbug_code' => 'code',
708
-	'zbug_critere_inconnu' => 'Unknown criterion @critere@',
709
-	'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} on a table without atomic primary key',
710
-	'zbug_distant_interdit' => 'External data forbidden',
711
-	'zbug_doublon_table_sans_cle_primaire' => 'Duplicate entries on a table which does not have a simple primary key',
712
-	'zbug_doublon_table_sans_index' => 'Duplicate entries on a table without an index',
713
-	'zbug_erreur_boucle_double' => 'Loop @id@: double definition',
714
-	'zbug_erreur_boucle_fermant' => 'Loop @id@: missing closing tag',
715
-	'zbug_erreur_boucle_syntaxe' => 'Syntax error in loop (BOUCLE)',
716
-	'zbug_erreur_compilation' => 'Compilation error',
717
-	'zbug_erreur_execution_page' => 'Execution error',
718
-	'zbug_erreur_filtre' => 'Undefined filter @filtre@',
719
-	'zbug_erreur_filtre_nbarg_min' => '@filtre@ filter: @nb@ argument(s) missing',
720
-	'zbug_erreur_meme_parent' => '{meme_parent} only applies to loops (FORUMS) and (RUBRIQUES)',
721
-	'zbug_erreur_squelette' => 'Error(s) in template',
722
-	'zbug_hors_compilation' => 'Uncompiled',
723
-	'zbug_info_erreur_squelette' => 'Error in the site',
724
-	'zbug_inversion_ordre_inexistant' => 'Reversion of non-existent order',
725
-	'zbug_pagination_sans_critere' => '#PAGINATION tag without {pagination} criterion, or used in a recursive loop',
726
-	'zbug_parametres_inclus_incorrects' => 'Wrong inclusion parameter: @param@',
727
-	'zbug_profile' => 'Calculation time: @time@',
728
-	'zbug_resultat' => 'result',
729
-	'zbug_serveur_indefini' => 'Undefined SQL server',
730
-	'zbug_statistiques' => 'SQL query statistics in order of duration',
731
-	'zbug_table_inconnue' => 'Unknown SQL table "@table@"',
732
-	'zxml_connus_attributs' => 'known attributes',
733
-	'zxml_de' => 'from',
734
-	'zxml_inconnu_attribut' => 'unknown attribute',
735
-	'zxml_inconnu_balise' => 'unknown tag',
736
-	'zxml_inconnu_entite' => 'unknown entity',
737
-	'zxml_inconnu_id' => 'unknown ID',
738
-	'zxml_mais_de' => 'but from',
739
-	'zxml_non_conforme' => 'not true to the principle',
740
-	'zxml_non_fils' => 'is not a child of',
741
-	'zxml_nonvide_balise' => 'tag not empty',
742
-	'zxml_obligatoire_attribut' => 'required attribute absent in',
743
-	'zxml_succession_fils_incorrecte' => 'incorrect child inheritance',
744
-	'zxml_survoler' => 'to see the correct ones, hover with the cursor',
745
-	'zxml_valeur_attribut' => 'attribute value',
746
-	'zxml_vide_balise' => 'empty tag',
747
-	'zxml_vu' => 'seen before'
697
+    // Z
698
+    'zbug_balise_b_aval' => ': B tag too late in loop',
699
+    'zbug_balise_inexistante' => 'Tag @balise@ wrongly declared for @from@',
700
+    'zbug_balise_sans_argument' => 'Missing argument in the @balise@ tag',
701
+    'zbug_boucle' => 'loop',
702
+    'zbug_boucle_recursive_undef' => 'undefined recursive loop: @nom@',
703
+    'zbug_calcul' => 'calculation',
704
+    'zbug_champ_hors_boucle' => 'Field @champ@ outside loop',
705
+    'zbug_champ_hors_critere' => 'Field @champ@ outside criterion @critere@',
706
+    'zbug_champ_hors_motif' => 'Field @champ@ outside context @motif@',
707
+    'zbug_code' => 'code',
708
+    'zbug_critere_inconnu' => 'Unknown criterion @critere@',
709
+    'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} on a table without atomic primary key',
710
+    'zbug_distant_interdit' => 'External data forbidden',
711
+    'zbug_doublon_table_sans_cle_primaire' => 'Duplicate entries on a table which does not have a simple primary key',
712
+    'zbug_doublon_table_sans_index' => 'Duplicate entries on a table without an index',
713
+    'zbug_erreur_boucle_double' => 'Loop @id@: double definition',
714
+    'zbug_erreur_boucle_fermant' => 'Loop @id@: missing closing tag',
715
+    'zbug_erreur_boucle_syntaxe' => 'Syntax error in loop (BOUCLE)',
716
+    'zbug_erreur_compilation' => 'Compilation error',
717
+    'zbug_erreur_execution_page' => 'Execution error',
718
+    'zbug_erreur_filtre' => 'Undefined filter @filtre@',
719
+    'zbug_erreur_filtre_nbarg_min' => '@filtre@ filter: @nb@ argument(s) missing',
720
+    'zbug_erreur_meme_parent' => '{meme_parent} only applies to loops (FORUMS) and (RUBRIQUES)',
721
+    'zbug_erreur_squelette' => 'Error(s) in template',
722
+    'zbug_hors_compilation' => 'Uncompiled',
723
+    'zbug_info_erreur_squelette' => 'Error in the site',
724
+    'zbug_inversion_ordre_inexistant' => 'Reversion of non-existent order',
725
+    'zbug_pagination_sans_critere' => '#PAGINATION tag without {pagination} criterion, or used in a recursive loop',
726
+    'zbug_parametres_inclus_incorrects' => 'Wrong inclusion parameter: @param@',
727
+    'zbug_profile' => 'Calculation time: @time@',
728
+    'zbug_resultat' => 'result',
729
+    'zbug_serveur_indefini' => 'Undefined SQL server',
730
+    'zbug_statistiques' => 'SQL query statistics in order of duration',
731
+    'zbug_table_inconnue' => 'Unknown SQL table "@table@"',
732
+    'zxml_connus_attributs' => 'known attributes',
733
+    'zxml_de' => 'from',
734
+    'zxml_inconnu_attribut' => 'unknown attribute',
735
+    'zxml_inconnu_balise' => 'unknown tag',
736
+    'zxml_inconnu_entite' => 'unknown entity',
737
+    'zxml_inconnu_id' => 'unknown ID',
738
+    'zxml_mais_de' => 'but from',
739
+    'zxml_non_conforme' => 'not true to the principle',
740
+    'zxml_non_fils' => 'is not a child of',
741
+    'zxml_nonvide_balise' => 'tag not empty',
742
+    'zxml_obligatoire_attribut' => 'required attribute absent in',
743
+    'zxml_succession_fils_incorrecte' => 'incorrect child inheritance',
744
+    'zxml_survoler' => 'to see the correct ones, hover with the cursor',
745
+    'zxml_valeur_attribut' => 'attribute value',
746
+    'zxml_vide_balise' => 'empty tag',
747
+    'zxml_vu' => 'seen before'
748 748
 );
Please login to merge, or discard this patch.
ecrire/lang/public_ar.php 1 patch
Indentation   +115 added lines, -115 removed lines patch added patch discarded remove patch
@@ -4,123 +4,123 @@
 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
-	'accueil_site' => 'الصفحة الرئيسية',
14
-	'article' => 'مقال',
15
-	'articles' => 'المقالات',
16
-	'articles_auteur' => 'مقالات هذا المؤلف',
17
-	'articles_populaires' => 'المقالات الأكثر شعبية',
18
-	'articles_rubrique' => 'مقالات هذا القسم',
19
-	'aucun_article' => 'لا توجد مقالات على هذا العنوان',
20
-	'aucun_auteur' => 'لا يوجد مؤلفون على هذا العنوان',
21
-	'aucun_site' => 'لا توجد مواقع على هذا العنوان',
22
-	'aucune_breve' => 'لا توجد أخبار على هذا العنوان',
23
-	'aucune_rubrique' => 'لا توجد أقسام على هذا العنوان',
24
-	'auteur' => 'مؤلف',
25
-	'autres' => 'آخرون',
26
-	'autres_breves' => 'أخبار أخرى',
27
-	'autres_groupes_mots_clefs' => 'مجموعات مفاتيح أخرى',
28
-	'autres_sites' => 'مواقع أخرى',
29
-
30
-	// B
31
-	'bonjour' => 'أهلاً وسهلاً',
32
-
33
-	// C
34
-	'commenter_site' => 'تعليق على هذا الموقع',
35
-	'contact' => 'للاتصال',
36
-	'copie_document_impossible' => 'لا يمكن نسخ المستند',
37
-
38
-	// D
39
-	'date' => 'التاريخ',
40
-	'dernier_ajout' => 'آخر إضافة',
41
-	'dernieres_breves' => 'آخر الأخبار',
42
-	'derniers_articles' => 'آخر المقالات',
43
-	'derniers_commentaires' => 'آخر التعليقات',
44
-	'derniers_messages_forum' => 'آخر المشاركات المنشورة في المنتديات',
45
-
46
-	// E
47
-	'edition_mode_texte' => 'النشرة في وضعية النصوص',
48
-	'en_reponse' => 'رداً على:',
49
-	'en_resume' => 'باختصار',
50
-	'envoyer_message' => 'إرسال مشاركة',
51
-	'espace_prive' => 'المجال الخاص',
52
-
53
-	// F
54
-	'formats_acceptes' => 'التنسيقات المسموحة: @formats@.',
55
-
56
-	// H
57
-	'hierarchie_site' => 'هرمية الموقع',
58
-
59
-	// J
60
-	'jours' => 'يوم',
61
-
62
-	// L
63
-	'lien_connecter' => 'دخول',
64
-
65
-	// M
66
-	'meme_auteur' => 'من نفس المؤلف',
67
-	'meme_rubrique' => 'في هذا القسم أيضاً',
68
-	'memes_auteurs' => 'من المؤلفين نفسهم ايضاً',
69
-	'message' => 'مشاركة',
70
-	'messages_forum' => 'مشاركة منتدى',
71
-	'messages_recents' => 'أحدث المشاركات',
72
-	'mots_clef' => 'مفتاح',
73
-	'mots_clefs' => 'المفاتيح',
74
-	'mots_clefs_meme_groupe' => 'المفاتيح الأخرى في هذه المجموعة',
75
-
76
-	// N
77
-	'navigation' => 'تصفح',
78
-	'nom' => 'الاسم',
79
-	'nouveautes' => 'الجديد',
80
-	'nouveautes_web' => 'الجديد على النسيج',
81
-	'nouveaux_articles' => 'المقالات الجديدة',
82
-	'nouvelles_breves' => 'الأخبار الجديدة',
83
-
84
-	// P
85
-	'page_precedente' => 'الصفحة السابقة',
86
-	'page_suivante' => 'الصفحة التالية',
87
-	'par_auteur' => 'بقلم ',
88
-	'participer_site' => 'يمكنك المشاركة في هذا الموقع، بالتسجيل أدناه ونشر مقالاتك. وبعد التسجيل، سوف تصلك رسالة فورية بالبريد الإلكتروني تتضمن معرفك الخاص الذي يسمح لك بالدخول الى المجال الخاص.',
89
-	'plan_site' => 'خريطة الموقع',
90
-	'popularite' => 'الشعبية',
91
-	'poster_message' => 'إبعث برسالة',
92
-	'proposer_site' => 'يمكنك افتراح إضافة موقع الى هذا القسم:',
93
-
94
-	// R
95
-	'repondre_article' => 'الرد على هذا المقال',
96
-	'repondre_breve' => 'الرد على هذا الخبر',
97
-	'resultats_recherche' => 'نتائج البحث',
98
-	'retour_debut_forums' => 'عودة الى بداية المنتديات',
99
-	'rss_abonnement' => 'نسخ عن،ان URL التالي في مجمّع RSS:',
100
-	'rss_abonnement_titre' => 'الاشتراك',
101
-	'rss_abonnement_titre_page' => 'الاشتراك في',
102
-	'rss_explication' => 'يجمع خيط RSS معلومات حول تحديث موقع. ويوفر محتوى تذاكر التحديث او التعليقات او مقتطفات منها إضافة الى رابط الى المحتويات الكاملة وبعض المعلومات الإضافية. هذا الخيط يُقرأ بواسطة مجمّع RSS.',
103
-	'rss_explication_titre' => 'ما هو تدفق RSS؟',
104
-	'rubrique' => 'القسم',
105
-	'rubriques' => 'الأقسام',
106
-
107
-	// S
108
-	'signatures_petition' => 'التوقيعات',
109
-	'site_realise_avec_spip' => 'موقع صمم بنظام SPIP',
110
-	'sites_web' => 'مواقع النسيج',
111
-	'sous_rubriques' => 'الأقسام الفرعية',
112
-	'spam' => 'خنزرة',
113
-	'suite' => 'تتمة',
114
-	'sur_web' => 'على النسيج',
115
-	'syndiquer_rubrique' => 'ترخيص هذا القسم',
116
-	'syndiquer_site' => 'ترخيص كامل الموقع',
117
-
118
-	// T
119
-	'texte_lettre_information' => 'ها هي نشرة الموقع',
120
-	'texte_lettre_information_2' => 'تحصي هذه النشرة المقالات والأخبار المنشورة منذ ',
121
-
122
-	// V
123
-	'ver_imprimer' => 'نسخة للطباعة',
124
-	'voir_en_ligne' => 'عرض مباشر',
125
-	'voir_squelette' => 'عرض الصفحة النموذجية لهذه الصفحة'
12
+    // A
13
+    'accueil_site' => 'الصفحة الرئيسية',
14
+    'article' => 'مقال',
15
+    'articles' => 'المقالات',
16
+    'articles_auteur' => 'مقالات هذا المؤلف',
17
+    'articles_populaires' => 'المقالات الأكثر شعبية',
18
+    'articles_rubrique' => 'مقالات هذا القسم',
19
+    'aucun_article' => 'لا توجد مقالات على هذا العنوان',
20
+    'aucun_auteur' => 'لا يوجد مؤلفون على هذا العنوان',
21
+    'aucun_site' => 'لا توجد مواقع على هذا العنوان',
22
+    'aucune_breve' => 'لا توجد أخبار على هذا العنوان',
23
+    'aucune_rubrique' => 'لا توجد أقسام على هذا العنوان',
24
+    'auteur' => 'مؤلف',
25
+    'autres' => 'آخرون',
26
+    'autres_breves' => 'أخبار أخرى',
27
+    'autres_groupes_mots_clefs' => 'مجموعات مفاتيح أخرى',
28
+    'autres_sites' => 'مواقع أخرى',
29
+
30
+    // B
31
+    'bonjour' => 'أهلاً وسهلاً',
32
+
33
+    // C
34
+    'commenter_site' => 'تعليق على هذا الموقع',
35
+    'contact' => 'للاتصال',
36
+    'copie_document_impossible' => 'لا يمكن نسخ المستند',
37
+
38
+    // D
39
+    'date' => 'التاريخ',
40
+    'dernier_ajout' => 'آخر إضافة',
41
+    'dernieres_breves' => 'آخر الأخبار',
42
+    'derniers_articles' => 'آخر المقالات',
43
+    'derniers_commentaires' => 'آخر التعليقات',
44
+    'derniers_messages_forum' => 'آخر المشاركات المنشورة في المنتديات',
45
+
46
+    // E
47
+    'edition_mode_texte' => 'النشرة في وضعية النصوص',
48
+    'en_reponse' => 'رداً على:',
49
+    'en_resume' => 'باختصار',
50
+    'envoyer_message' => 'إرسال مشاركة',
51
+    'espace_prive' => 'المجال الخاص',
52
+
53
+    // F
54
+    'formats_acceptes' => 'التنسيقات المسموحة: @formats@.',
55
+
56
+    // H
57
+    'hierarchie_site' => 'هرمية الموقع',
58
+
59
+    // J
60
+    'jours' => 'يوم',
61
+
62
+    // L
63
+    'lien_connecter' => 'دخول',
64
+
65
+    // M
66
+    'meme_auteur' => 'من نفس المؤلف',
67
+    'meme_rubrique' => 'في هذا القسم أيضاً',
68
+    'memes_auteurs' => 'من المؤلفين نفسهم ايضاً',
69
+    'message' => 'مشاركة',
70
+    'messages_forum' => 'مشاركة منتدى',
71
+    'messages_recents' => 'أحدث المشاركات',
72
+    'mots_clef' => 'مفتاح',
73
+    'mots_clefs' => 'المفاتيح',
74
+    'mots_clefs_meme_groupe' => 'المفاتيح الأخرى في هذه المجموعة',
75
+
76
+    // N
77
+    'navigation' => 'تصفح',
78
+    'nom' => 'الاسم',
79
+    'nouveautes' => 'الجديد',
80
+    'nouveautes_web' => 'الجديد على النسيج',
81
+    'nouveaux_articles' => 'المقالات الجديدة',
82
+    'nouvelles_breves' => 'الأخبار الجديدة',
83
+
84
+    // P
85
+    'page_precedente' => 'الصفحة السابقة',
86
+    'page_suivante' => 'الصفحة التالية',
87
+    'par_auteur' => 'بقلم ',
88
+    'participer_site' => 'يمكنك المشاركة في هذا الموقع، بالتسجيل أدناه ونشر مقالاتك. وبعد التسجيل، سوف تصلك رسالة فورية بالبريد الإلكتروني تتضمن معرفك الخاص الذي يسمح لك بالدخول الى المجال الخاص.',
89
+    'plan_site' => 'خريطة الموقع',
90
+    'popularite' => 'الشعبية',
91
+    'poster_message' => 'إبعث برسالة',
92
+    'proposer_site' => 'يمكنك افتراح إضافة موقع الى هذا القسم:',
93
+
94
+    // R
95
+    'repondre_article' => 'الرد على هذا المقال',
96
+    'repondre_breve' => 'الرد على هذا الخبر',
97
+    'resultats_recherche' => 'نتائج البحث',
98
+    'retour_debut_forums' => 'عودة الى بداية المنتديات',
99
+    'rss_abonnement' => 'نسخ عن،ان URL التالي في مجمّع RSS:',
100
+    'rss_abonnement_titre' => 'الاشتراك',
101
+    'rss_abonnement_titre_page' => 'الاشتراك في',
102
+    'rss_explication' => 'يجمع خيط RSS معلومات حول تحديث موقع. ويوفر محتوى تذاكر التحديث او التعليقات او مقتطفات منها إضافة الى رابط الى المحتويات الكاملة وبعض المعلومات الإضافية. هذا الخيط يُقرأ بواسطة مجمّع RSS.',
103
+    'rss_explication_titre' => 'ما هو تدفق RSS؟',
104
+    'rubrique' => 'القسم',
105
+    'rubriques' => 'الأقسام',
106
+
107
+    // S
108
+    'signatures_petition' => 'التوقيعات',
109
+    'site_realise_avec_spip' => 'موقع صمم بنظام SPIP',
110
+    'sites_web' => 'مواقع النسيج',
111
+    'sous_rubriques' => 'الأقسام الفرعية',
112
+    'spam' => 'خنزرة',
113
+    'suite' => 'تتمة',
114
+    'sur_web' => 'على النسيج',
115
+    'syndiquer_rubrique' => 'ترخيص هذا القسم',
116
+    'syndiquer_site' => 'ترخيص كامل الموقع',
117
+
118
+    // T
119
+    'texte_lettre_information' => 'ها هي نشرة الموقع',
120
+    'texte_lettre_information_2' => 'تحصي هذه النشرة المقالات والأخبار المنشورة منذ ',
121
+
122
+    // V
123
+    'ver_imprimer' => 'نسخة للطباعة',
124
+    'voir_en_ligne' => 'عرض مباشر',
125
+    'voir_squelette' => 'عرض الصفحة النموذجية لهذه الصفحة'
126 126
 );
Please login to merge, or discard this patch.
ecrire/lang/ecrire_br.php 1 patch
Indentation   +836 added lines, -836 removed lines patch added patch discarded remove patch
@@ -4,903 +4,903 @@
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'activer_plugin' => 'Gweredekaat al lugant',
14
-	'affichage' => 'Diskwel',
15
-	'aide_non_disponible' => 'N’eo ket hegerz c’hoazh al lodenn-mañ eus ar skoazell enlinenn er yezh-mañ.',
16
-	'annuler_recherche' => 'Nullañ an enklask',
17
-	'auteur' => 'Skridaozer:',
18
-	'avis_acces_interdit' => 'Digor difennet.',
19
-	'avis_acces_interdit_prive' => 'N’ho peus ket an aotre da vont war ar bajenn-mañ<b>@exec@</b>.',
20
-	'avis_article_modifie' => 'Diwallit, labouret ez eus bet war ar pennad-mañ gant @nom_auteur_modif@, @date_diff@ munutenn zo',
21
-	'avis_aucun_resultat' => 'Disoc’h ebet.',
22
-	'avis_base_inaccessible' => 'N’haller ket kevreañ ouzh an diaz roadennoù @base@.',
23
-	'avis_chemin_invalide_1' => 'An hent dibabet ganeoc’h',
24
-	'avis_chemin_invalide_2' => 'ne seblant ket bezañ reizh. Distroit d’ar bajenn a-raok ha gwiriit an titouroù pourchaset ganeoc’h.',
25
-	'avis_connexion_echec_1' => 'C’hwitet eo ar c’hevreañ ouzh an diaz roadennoù.',
26
-	'avis_connexion_echec_2' => 'Distroit d’ar bajenn a-raok, ha gwiriit an titouroù pourchaset ganeoc’h.',
27
-	'avis_connexion_echec_3' => '<b>N.B.</b> War meur a servijer e tleit <b>goulenn</b> e vefe gweredekaet ho moned d’an diaz roadennoù a-raok gallout e implijout. Mar n’hallit ket kevreañ, gwiriit ha graet hoc’h eus ar goulenn-se.',
28
-	'avis_connexion_erreur_creer_base' => 'N’eus ket bet gallet krouiñ an diaz roadennoù.',
29
-	'avis_connexion_erreur_nom_base' => 'N’hall bezañ nemet lizherennoù, sifroù ha barrennigoù en anv an diaz',
30
-	'avis_connexion_ldap_echec_1' => 'C’hwitet eo ar c’hevreañ ouzh ar servijer LDAP.',
31
-	'avis_connexion_ldap_echec_2' => 'Distroit d’ar bajenn a-raok, ha gwiriit an titouroù pourchaset ganeoc’h.',
32
-	'avis_connexion_ldap_echec_3' => 'A-hend-all n’implijit ket ar skor LDAP evit enporzhiañ implijerien.',
33
-	'avis_deplacement_rubrique' => 'Diwallit! Er rubrikenn-mañ ez eus @contient_breves@ berrskrid@scb@ : askit al logell-gadarnaat-mañ mard he dilec’hiit.',
34
-	'avis_erreur_connexion_mysql' => 'Fazi kevreañ SQL',
35
-	'avis_espace_interdit' => '<b>Lec’h difennet</b> <div>Staliet eo SPIP c’hoazh.</div>',
36
-	'avis_lecture_noms_bases_1' => 'N’eo ket bet ar programm staliañ evit lenn anvioù an diazoù roadennoù staliet.',
37
-	'avis_lecture_noms_bases_2' => 'Pe n’eus diaz hegerz ebet, pe diweredekaet eo bet al listennañ diazoù evit abegoù surentez (ar pezh a c’hoarvez gant meur a herberc’hier).',
38
-	'avis_lecture_noms_bases_3' => 'A-hend-all e tlefec’h implijout un diaz dezhañ hoc’h anv kevreañ:',
39
-	'avis_non_acces_page' => 'N’hoc’h eus ket moned d’ar bajenn-mañ.',
40
-	'avis_operation_echec' => 'C’hwitet eo an ober.',
41
-	'avis_operation_impossible' => 'Ober dibosupl',
42
-	'avis_suppression_base' => 'DIWALLIT, hep distro eo lemel roadennoù',
12
+    // A
13
+    'activer_plugin' => 'Gweredekaat al lugant',
14
+    'affichage' => 'Diskwel',
15
+    'aide_non_disponible' => 'N’eo ket hegerz c’hoazh al lodenn-mañ eus ar skoazell enlinenn er yezh-mañ.',
16
+    'annuler_recherche' => 'Nullañ an enklask',
17
+    'auteur' => 'Skridaozer:',
18
+    'avis_acces_interdit' => 'Digor difennet.',
19
+    'avis_acces_interdit_prive' => 'N’ho peus ket an aotre da vont war ar bajenn-mañ<b>@exec@</b>.',
20
+    'avis_article_modifie' => 'Diwallit, labouret ez eus bet war ar pennad-mañ gant @nom_auteur_modif@, @date_diff@ munutenn zo',
21
+    'avis_aucun_resultat' => 'Disoc’h ebet.',
22
+    'avis_base_inaccessible' => 'N’haller ket kevreañ ouzh an diaz roadennoù @base@.',
23
+    'avis_chemin_invalide_1' => 'An hent dibabet ganeoc’h',
24
+    'avis_chemin_invalide_2' => 'ne seblant ket bezañ reizh. Distroit d’ar bajenn a-raok ha gwiriit an titouroù pourchaset ganeoc’h.',
25
+    'avis_connexion_echec_1' => 'C’hwitet eo ar c’hevreañ ouzh an diaz roadennoù.',
26
+    'avis_connexion_echec_2' => 'Distroit d’ar bajenn a-raok, ha gwiriit an titouroù pourchaset ganeoc’h.',
27
+    'avis_connexion_echec_3' => '<b>N.B.</b> War meur a servijer e tleit <b>goulenn</b> e vefe gweredekaet ho moned d’an diaz roadennoù a-raok gallout e implijout. Mar n’hallit ket kevreañ, gwiriit ha graet hoc’h eus ar goulenn-se.',
28
+    'avis_connexion_erreur_creer_base' => 'N’eus ket bet gallet krouiñ an diaz roadennoù.',
29
+    'avis_connexion_erreur_nom_base' => 'N’hall bezañ nemet lizherennoù, sifroù ha barrennigoù en anv an diaz',
30
+    'avis_connexion_ldap_echec_1' => 'C’hwitet eo ar c’hevreañ ouzh ar servijer LDAP.',
31
+    'avis_connexion_ldap_echec_2' => 'Distroit d’ar bajenn a-raok, ha gwiriit an titouroù pourchaset ganeoc’h.',
32
+    'avis_connexion_ldap_echec_3' => 'A-hend-all n’implijit ket ar skor LDAP evit enporzhiañ implijerien.',
33
+    'avis_deplacement_rubrique' => 'Diwallit! Er rubrikenn-mañ ez eus @contient_breves@ berrskrid@scb@ : askit al logell-gadarnaat-mañ mard he dilec’hiit.',
34
+    'avis_erreur_connexion_mysql' => 'Fazi kevreañ SQL',
35
+    'avis_espace_interdit' => '<b>Lec’h difennet</b> <div>Staliet eo SPIP c’hoazh.</div>',
36
+    'avis_lecture_noms_bases_1' => 'N’eo ket bet ar programm staliañ evit lenn anvioù an diazoù roadennoù staliet.',
37
+    'avis_lecture_noms_bases_2' => 'Pe n’eus diaz hegerz ebet, pe diweredekaet eo bet al listennañ diazoù evit abegoù surentez (ar pezh a c’hoarvez gant meur a herberc’hier).',
38
+    'avis_lecture_noms_bases_3' => 'A-hend-all e tlefec’h implijout un diaz dezhañ hoc’h anv kevreañ:',
39
+    'avis_non_acces_page' => 'N’hoc’h eus ket moned d’ar bajenn-mañ.',
40
+    'avis_operation_echec' => 'C’hwitet eo an ober.',
41
+    'avis_operation_impossible' => 'Ober dibosupl',
42
+    'avis_suppression_base' => 'DIWALLIT, hep distro eo lemel roadennoù',
43 43
 
44
-	// B
45
-	'bouton_acces_ldap' => 'Ouzhpennañ ar moned da LDAP',
46
-	'bouton_ajouter' => 'Ouzhpennañ',
47
-	'bouton_annuler' => 'Nullañ',
48
-	'bouton_cache_activer' => ' Adweredekaat ar grubuilh',
49
-	'bouton_cache_desactiver' => 'Diweredekaat ar grubuilh evit ur pennad',
50
-	'bouton_demande_publication' => 'Goulenn ma vo embannet ar pennad-mañ',
51
-	'bouton_desactive_tout' => 'Diweredekaat pep tra',
52
-	'bouton_desinstaller' => 'Distaliañ',
53
-	'bouton_effacer_tout' => 'Diverkañ PEP TRA',
54
-	'bouton_envoyer_message' => 'Kemennadenn ziwezhañ: kas',
55
-	'bouton_fermer' => 'Serriñ',
56
-	'bouton_mettre_a_jour_base' => 'Hizivaat an diaz roadennoù',
57
-	'bouton_modifier' => 'Kemmañ',
58
-	'bouton_radio_afficher' => 'Diskwel',
59
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Dont war-wel war roll ar skridaozerien kevreet',
60
-	'bouton_radio_envoi_annonces_adresse' => 'Kas ar c’hemennoù d’ar chomlec’h-mañ:',
61
-	'bouton_radio_envoi_liste_nouveautes' => 'Kas listenn an nevezentioù',
62
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Na zont war-wel war roll ar skridaozerien kevreet',
63
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Na gas kemennoù embann',
64
-	'bouton_redirection' => 'ADHEÑCHAÑ',
65
-	'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Adderaouekaat an talvoudoù dre ziouer',
66
-	'bouton_relancer_inscription' => 'Adlañsañ an enskrivadenn',
67
-	'bouton_relancer_inscriptions' => 'Adlañsañ an enskrivadenn.',
68
-	'bouton_relancer_installation' => 'Adlañsañ ar staliañ',
69
-	'bouton_reset_password' => 'Krouiñ ur ger-tremen nevez hag e gas dre bostel',
70
-	'bouton_suivant' => 'War-lerc’h',
71
-	'bouton_tenter_recuperation' => 'Klask dresañ',
72
-	'bouton_test_proxy' => 'Esaeañ ar proksi',
73
-	'bouton_vider_cache' => 'Goullonderiñ ar grubuilh',
44
+    // B
45
+    'bouton_acces_ldap' => 'Ouzhpennañ ar moned da LDAP',
46
+    'bouton_ajouter' => 'Ouzhpennañ',
47
+    'bouton_annuler' => 'Nullañ',
48
+    'bouton_cache_activer' => ' Adweredekaat ar grubuilh',
49
+    'bouton_cache_desactiver' => 'Diweredekaat ar grubuilh evit ur pennad',
50
+    'bouton_demande_publication' => 'Goulenn ma vo embannet ar pennad-mañ',
51
+    'bouton_desactive_tout' => 'Diweredekaat pep tra',
52
+    'bouton_desinstaller' => 'Distaliañ',
53
+    'bouton_effacer_tout' => 'Diverkañ PEP TRA',
54
+    'bouton_envoyer_message' => 'Kemennadenn ziwezhañ: kas',
55
+    'bouton_fermer' => 'Serriñ',
56
+    'bouton_mettre_a_jour_base' => 'Hizivaat an diaz roadennoù',
57
+    'bouton_modifier' => 'Kemmañ',
58
+    'bouton_radio_afficher' => 'Diskwel',
59
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Dont war-wel war roll ar skridaozerien kevreet',
60
+    'bouton_radio_envoi_annonces_adresse' => 'Kas ar c’hemennoù d’ar chomlec’h-mañ:',
61
+    'bouton_radio_envoi_liste_nouveautes' => 'Kas listenn an nevezentioù',
62
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Na zont war-wel war roll ar skridaozerien kevreet',
63
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Na gas kemennoù embann',
64
+    'bouton_redirection' => 'ADHEÑCHAÑ',
65
+    'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Adderaouekaat an talvoudoù dre ziouer',
66
+    'bouton_relancer_inscription' => 'Adlañsañ an enskrivadenn',
67
+    'bouton_relancer_inscriptions' => 'Adlañsañ an enskrivadenn.',
68
+    'bouton_relancer_installation' => 'Adlañsañ ar staliañ',
69
+    'bouton_reset_password' => 'Krouiñ ur ger-tremen nevez hag e gas dre bostel',
70
+    'bouton_suivant' => 'War-lerc’h',
71
+    'bouton_tenter_recuperation' => 'Klask dresañ',
72
+    'bouton_test_proxy' => 'Esaeañ ar proksi',
73
+    'bouton_vider_cache' => 'Goullonderiñ ar grubuilh',
74 74
 
75
-	// C
76
-	'cache_modifiable_webmestre' => 'Kemmet e c’hall bezañ an arventenn-mañ gant mestr-gwiad al lec’hienn.',
77
-	'calendrier_synchro' => 'Mard implijit ur meziant deiziataer kenglotus gant <b>iCal</b> e c’hallit e gembredañ gant titouroù al lec’hienn-mañ.',
78
-	'config_activer_champs' => 'Gweredekaat ar maeziennoù-mañ',
79
-	'config_choix_base_sup' => 'merkañ un diaz war ar servijer-mañ',
80
-	'config_erreur_base_sup' => 'N’en deus ket SPIP moned da roll an diazoù digor',
81
-	'config_info_base_sup' => 'Mard hoc’h eus diazoù roadennoù all da c’houlennata dre SPIP, gant e servijer SQL pe gant unan bennak all, e c’hallit o disklêriañ gant ar furmskrid-mañ dindan. Mar ne skrivit netra e maeziennoù zo e vo implijet an anaouderioù kevreañ ouzh an diaz pennañ.',
82
-	'config_info_base_sup_disponibles' => 'Diazoù ouzhpenn a c’haller goulennata c’hoazh:',
83
-	'config_info_enregistree' => 'Enrollet eo bet ar c’hefluniadur nevez',
84
-	'config_info_logos' => 'Pep a logo, ha pep a “logo nijal a-us” a c’hall bezañ lakaet da elfennoù al lec’hienn.',
85
-	'config_info_logos_utiliser' => 'Implijout al logoioù',
86
-	'config_info_logos_utiliser_non' => 'Na implijout al logoioù',
87
-	'config_info_logos_utiliser_survol' => 'Implijout al logoioù nijal a-us',
88
-	'config_info_logos_utiliser_survol_non' => 'Na implijout al logoioù nijal a-us',
89
-	'config_info_redirection' => 'Pa vo gweredekaet an dibab-mañ e c’hallot krouiñ pennadoù galloudel, ha na vint nemet daveoù da bennadoù bet embannet e lec’hiennoù all, pe er-maez eus SPIP.',
90
-	'config_redirection' => 'Pennadoù galloudel',
91
-	'config_titre_base_sup' => 'Disklêriañ un diaz ouzhpenn',
92
-	'config_titre_base_sup_choix' => 'Dibabit un diaz ouzhpenn',
93
-	'connexion_ldap' => 'Kevreañ:',
94
-	'creer_et_associer_un_auteur' => 'Krouiñ ha kevrediñ un aozer',
75
+    // C
76
+    'cache_modifiable_webmestre' => 'Kemmet e c’hall bezañ an arventenn-mañ gant mestr-gwiad al lec’hienn.',
77
+    'calendrier_synchro' => 'Mard implijit ur meziant deiziataer kenglotus gant <b>iCal</b> e c’hallit e gembredañ gant titouroù al lec’hienn-mañ.',
78
+    'config_activer_champs' => 'Gweredekaat ar maeziennoù-mañ',
79
+    'config_choix_base_sup' => 'merkañ un diaz war ar servijer-mañ',
80
+    'config_erreur_base_sup' => 'N’en deus ket SPIP moned da roll an diazoù digor',
81
+    'config_info_base_sup' => 'Mard hoc’h eus diazoù roadennoù all da c’houlennata dre SPIP, gant e servijer SQL pe gant unan bennak all, e c’hallit o disklêriañ gant ar furmskrid-mañ dindan. Mar ne skrivit netra e maeziennoù zo e vo implijet an anaouderioù kevreañ ouzh an diaz pennañ.',
82
+    'config_info_base_sup_disponibles' => 'Diazoù ouzhpenn a c’haller goulennata c’hoazh:',
83
+    'config_info_enregistree' => 'Enrollet eo bet ar c’hefluniadur nevez',
84
+    'config_info_logos' => 'Pep a logo, ha pep a “logo nijal a-us” a c’hall bezañ lakaet da elfennoù al lec’hienn.',
85
+    'config_info_logos_utiliser' => 'Implijout al logoioù',
86
+    'config_info_logos_utiliser_non' => 'Na implijout al logoioù',
87
+    'config_info_logos_utiliser_survol' => 'Implijout al logoioù nijal a-us',
88
+    'config_info_logos_utiliser_survol_non' => 'Na implijout al logoioù nijal a-us',
89
+    'config_info_redirection' => 'Pa vo gweredekaet an dibab-mañ e c’hallot krouiñ pennadoù galloudel, ha na vint nemet daveoù da bennadoù bet embannet e lec’hiennoù all, pe er-maez eus SPIP.',
90
+    'config_redirection' => 'Pennadoù galloudel',
91
+    'config_titre_base_sup' => 'Disklêriañ un diaz ouzhpenn',
92
+    'config_titre_base_sup_choix' => 'Dibabit un diaz ouzhpenn',
93
+    'connexion_ldap' => 'Kevreañ:',
94
+    'creer_et_associer_un_auteur' => 'Krouiñ ha kevrediñ un aozer',
95 95
 
96
-	// D
97
-	'date_mot_heures' => 'eur',
96
+    // D
97
+    'date_mot_heures' => 'eur',
98 98
 
99
-	// E
100
-	'ecran_connexion_couleur_principale' => 'Liv kentañ penn',
101
-	'ecran_connexion_image_fond' => 'Skeudenn adreñv',
102
-	'ecran_connexion_image_fond_explication' => 'Ober gant ur skeudenn (stumm JPEG, 1920x1080 pixels)',
103
-	'ecran_connexion_image_revenir_couleur_defaut' => 'Distreiñ d’al liv dre ziouer',
104
-	'ecran_connexion_titre' => 'Skramm evit kennaskañ',
105
-	'ecran_securite' => ' + skramm surentez @version@',
106
-	'email' => 'postel',
107
-	'email_2' => 'postel:',
108
-	'en_savoir_plus' => 'Gouzout muioc’h',
109
-	'entree_adresse_annuaire' => 'Chomlec’h eus al levr',
110
-	'entree_adresse_email' => 'Ho postel',
111
-	'entree_adresse_email_2' => ' Chomlec’h postel ',
112
-	'entree_base_donnee_1' => 'Chomlec’h an diaz roadennoù',
113
-	'entree_base_donnee_2' => '(Alies e klot ar chomlec’h-se gant hini ho lec’hienn, a-wezhioù e klot gant ar meneg «localhost», a-wezhioù e chom goullo-krenn.)',
114
-	'entree_biographie' => 'Buhezskrid berr-ha-berr.',
115
-	'entree_chemin_acces' => '<b>Skrivañ</b> an hent moned:',
116
-	'entree_cle_pgp' => 'Hoc’h alc’hwez PGP',
117
-	'entree_cle_pgp_2' => 'Alc’hwez PGP',
118
-	'entree_contenu_rubrique' => '(Endalc’h ar rubrikenn berr-ha-berr)',
119
-	'entree_identifiants_connexion' => 'Hoc’h anaouderioù kevreañ...',
120
-	'entree_identifiants_connexion_2' => 'Anaouderioù kevreañ',
121
-	'entree_informations_connexion_ldap' => 'Skrivit er furmskrid-mañ titouroù kevreañ ho levr chomlec’h LDAP.
99
+    // E
100
+    'ecran_connexion_couleur_principale' => 'Liv kentañ penn',
101
+    'ecran_connexion_image_fond' => 'Skeudenn adreñv',
102
+    'ecran_connexion_image_fond_explication' => 'Ober gant ur skeudenn (stumm JPEG, 1920x1080 pixels)',
103
+    'ecran_connexion_image_revenir_couleur_defaut' => 'Distreiñ d’al liv dre ziouer',
104
+    'ecran_connexion_titre' => 'Skramm evit kennaskañ',
105
+    'ecran_securite' => ' + skramm surentez @version@',
106
+    'email' => 'postel',
107
+    'email_2' => 'postel:',
108
+    'en_savoir_plus' => 'Gouzout muioc’h',
109
+    'entree_adresse_annuaire' => 'Chomlec’h eus al levr',
110
+    'entree_adresse_email' => 'Ho postel',
111
+    'entree_adresse_email_2' => ' Chomlec’h postel ',
112
+    'entree_base_donnee_1' => 'Chomlec’h an diaz roadennoù',
113
+    'entree_base_donnee_2' => '(Alies e klot ar chomlec’h-se gant hini ho lec’hienn, a-wezhioù e klot gant ar meneg «localhost», a-wezhioù e chom goullo-krenn.)',
114
+    'entree_biographie' => 'Buhezskrid berr-ha-berr.',
115
+    'entree_chemin_acces' => '<b>Skrivañ</b> an hent moned:',
116
+    'entree_cle_pgp' => 'Hoc’h alc’hwez PGP',
117
+    'entree_cle_pgp_2' => 'Alc’hwez PGP',
118
+    'entree_contenu_rubrique' => '(Endalc’h ar rubrikenn berr-ha-berr)',
119
+    'entree_identifiants_connexion' => 'Hoc’h anaouderioù kevreañ...',
120
+    'entree_identifiants_connexion_2' => 'Anaouderioù kevreañ',
121
+    'entree_informations_connexion_ldap' => 'Skrivit er furmskrid-mañ titouroù kevreañ ho levr chomlec’h LDAP.
122 122
  Merour ho reizhiad pe ho rouedad a zlefe gallout o fourchas deoc’h.',
123
-	'entree_infos_perso' => 'Piv oc’h-c’hwi?',
124
-	'entree_infos_perso_2' => 'Piv eo an aozer?',
125
-	'entree_interieur_rubrique' => 'Er rubrikenn:',
126
-	'entree_liens_sites' => '<b>Gourliamm</b> (daveenn, lec’hienn da weladenniñ...)',
127
-	'entree_login' => 'Ho ker kevreañ',
128
-	'entree_login_connexion_1' => 'Ar ger kevreañ',
129
-	'entree_login_connexion_2' => '(A-wezhioù e klot gant ho ker moned da FTP, a-wezhioù emañ da vezañ lezet goullo)',
130
-	'entree_mot_passe' => 'Ho ker-tremen',
131
-	'entree_mot_passe_1' => 'Ar ger-tremen kevreañ',
132
-	'entree_mot_passe_2' => '(A-wezhioù e klot gant ar ger-tremen da FTP, a-wezhioù emañ da vezañ lezet goullo)',
133
-	'entree_nom_fichier' => 'Skrivit anv ar restr @texte_compresse@:',
134
-	'entree_nom_pseudo' => 'Hoc’h anv pe ho lesanv',
135
-	'entree_nom_pseudo_1' => '(Hoc’h anv pe ho lesanv)',
136
-	'entree_nom_pseudo_2' => 'Anv pe lesanv',
137
-	'entree_nom_site' => 'Anv ho lec’hienn',
138
-	'entree_nom_site_2' => 'Anv lec’hienn an aozer',
139
-	'entree_nouveau_passe' => 'Ger-tremen nevez',
140
-	'entree_passe_ldap' => 'Ger-tremen',
141
-	'entree_port_annuaire' => 'Niverenn borzh al levr chomlec’h',
142
-	'entree_signature' => 'Sinadur',
143
-	'entree_titre_obligatoire' => '<b>Titl</b> [Ret]<br />',
144
-	'entree_url' => 'Chomlec’h (URL) ho lec’hienn',
145
-	'entree_url_2' => 'Chomlec’h (URL) al lec’hienn',
146
-	'erreur_connect_deja_existant' => 'Un dafariad zo c’hoazh gant an anv-se.',
147
-	'erreur_contenu_suspect' => 'Testenn tec’het',
148
-	'erreur_email_deja_existant' => 'Enrollet eo bet c’hoazh ar postel-se.',
149
-	'erreur_nom_connect_incorrect' => 'N’eo ket aotreet an anv dafariad-se ',
150
-	'erreur_plugin_attribut_balise_manquant' => 'Doareenn @attribut@ a vank er valizenn @balise@.',
151
-	'erreur_plugin_desinstalation_echouee' => 'C’hwitet eo da zistaliañ al lugant. E ziweredekaat a c’hallit avat.',
152
-	'erreur_plugin_fichier_absent' => 'Restr ezvezant',
153
-	'erreur_plugin_fichier_def_absent' => 'Restr termenañ ezvezant',
154
-	'erreur_plugin_nom_fonction_interdit' => 'Anv arc’hwel difennet',
155
-	'erreur_plugin_nom_manquant' => 'Anv lugant ezvezant',
156
-	'erreur_plugin_prefix_manquant' => 'N’eo ket termenet tachenn envel al lugant',
157
-	'erreur_plugin_tag_plugin_absent' => '&lt;lugant&gt; ezvezant er restr termenañ',
158
-	'erreur_plugin_version_manquant' => 'Stumm al lugant ezvezant',
159
-	'erreur_type_fichier' => 'Stumm restr fall',
123
+    'entree_infos_perso' => 'Piv oc’h-c’hwi?',
124
+    'entree_infos_perso_2' => 'Piv eo an aozer?',
125
+    'entree_interieur_rubrique' => 'Er rubrikenn:',
126
+    'entree_liens_sites' => '<b>Gourliamm</b> (daveenn, lec’hienn da weladenniñ...)',
127
+    'entree_login' => 'Ho ker kevreañ',
128
+    'entree_login_connexion_1' => 'Ar ger kevreañ',
129
+    'entree_login_connexion_2' => '(A-wezhioù e klot gant ho ker moned da FTP, a-wezhioù emañ da vezañ lezet goullo)',
130
+    'entree_mot_passe' => 'Ho ker-tremen',
131
+    'entree_mot_passe_1' => 'Ar ger-tremen kevreañ',
132
+    'entree_mot_passe_2' => '(A-wezhioù e klot gant ar ger-tremen da FTP, a-wezhioù emañ da vezañ lezet goullo)',
133
+    'entree_nom_fichier' => 'Skrivit anv ar restr @texte_compresse@:',
134
+    'entree_nom_pseudo' => 'Hoc’h anv pe ho lesanv',
135
+    'entree_nom_pseudo_1' => '(Hoc’h anv pe ho lesanv)',
136
+    'entree_nom_pseudo_2' => 'Anv pe lesanv',
137
+    'entree_nom_site' => 'Anv ho lec’hienn',
138
+    'entree_nom_site_2' => 'Anv lec’hienn an aozer',
139
+    'entree_nouveau_passe' => 'Ger-tremen nevez',
140
+    'entree_passe_ldap' => 'Ger-tremen',
141
+    'entree_port_annuaire' => 'Niverenn borzh al levr chomlec’h',
142
+    'entree_signature' => 'Sinadur',
143
+    'entree_titre_obligatoire' => '<b>Titl</b> [Ret]<br />',
144
+    'entree_url' => 'Chomlec’h (URL) ho lec’hienn',
145
+    'entree_url_2' => 'Chomlec’h (URL) al lec’hienn',
146
+    'erreur_connect_deja_existant' => 'Un dafariad zo c’hoazh gant an anv-se.',
147
+    'erreur_contenu_suspect' => 'Testenn tec’het',
148
+    'erreur_email_deja_existant' => 'Enrollet eo bet c’hoazh ar postel-se.',
149
+    'erreur_nom_connect_incorrect' => 'N’eo ket aotreet an anv dafariad-se ',
150
+    'erreur_plugin_attribut_balise_manquant' => 'Doareenn @attribut@ a vank er valizenn @balise@.',
151
+    'erreur_plugin_desinstalation_echouee' => 'C’hwitet eo da zistaliañ al lugant. E ziweredekaat a c’hallit avat.',
152
+    'erreur_plugin_fichier_absent' => 'Restr ezvezant',
153
+    'erreur_plugin_fichier_def_absent' => 'Restr termenañ ezvezant',
154
+    'erreur_plugin_nom_fonction_interdit' => 'Anv arc’hwel difennet',
155
+    'erreur_plugin_nom_manquant' => 'Anv lugant ezvezant',
156
+    'erreur_plugin_prefix_manquant' => 'N’eo ket termenet tachenn envel al lugant',
157
+    'erreur_plugin_tag_plugin_absent' => '&lt;lugant&gt; ezvezant er restr termenañ',
158
+    'erreur_plugin_version_manquant' => 'Stumm al lugant ezvezant',
159
+    'erreur_type_fichier' => 'Stumm restr fall',
160 160
 
161
-	// H
162
-	'htaccess_a_simuler' => 'Diwall: Ne vez ket dalc’het kont eus ar restroù @htaccess@ gant ho tafariad HTTP. Evit diogeliñ surentez vat eo ret deoc’h kemmañ ar c’hefluniadur-mañ war ar c’hraf-mañ, peotramant eo ret o defe an digemmennoù @constantes@ (a c’haller termenañ er restr  mes_options.php) talvoudoù levrioù-chomlec’h er-maez eus @document_root@.',
163
-	'htaccess_inoperant' => 'htaccess ne ra netra',
161
+    // H
162
+    'htaccess_a_simuler' => 'Diwall: Ne vez ket dalc’het kont eus ar restroù @htaccess@ gant ho tafariad HTTP. Evit diogeliñ surentez vat eo ret deoc’h kemmañ ar c’hefluniadur-mañ war ar c’hraf-mañ, peotramant eo ret o defe an digemmennoù @constantes@ (a c’haller termenañ er restr  mes_options.php) talvoudoù levrioù-chomlec’h er-maez eus @document_root@.',
163
+    'htaccess_inoperant' => 'htaccess ne ra netra',
164 164
 
165
-	// I
166
-	'ical_info1' => 'War ar bajenn-mañ ez eus meur a hentenn evit chom e darempred gant buhez al lec’hienn-mañ.',
167
-	'ical_info2' => 'Evit gouzout hiroc’h diwar-benn an teknikoù-se, klaskit hardizh e-barzh <a href="@spipnet@">teuliadur SPIP</a>.',
168
-	'ical_info_calendrier' => 'Daou zeiziadur zo en ho kerz. An hini kentañ zo ur plaen eus al lec’hienn hag a ziskouez an holl bennadoù bet embannet. An eil emañ warnañ ar c’hemennoù stur, koulz hag ho kemennadennoù prevez diwezhañ: miret eo evidoc’h dre berzh un alc’hwez personel, a c’hallit kemm n’eus forzh pegoulz pa nevezot ho ker-tremen.',
169
-	'ical_methode_http' => 'Pellgargañ',
170
-	'ical_methode_webcal' => 'Kempredañ (webcal://)',
171
-	'ical_texte_js' => 'A-drugarez d’ul linenn javascript e c’hellit, en un doare aezet, diskouez ar pennadoù diwezhañ embannet war al lec’hienn-mañ, war forzh pe hini eus ho lec’hiennoù.',
172
-	'ical_texte_prive' => 'An deiziataer hiniennel-mañ a gelaou ac’hanoc’h diwar-benn nevezinti embann prevez al lec’hienn-mañ (labourioù, emgavioù, pennadoù, berrskridoù kinniget,...).',
173
-	'ical_texte_public' => 'Gant an deiziataer-mañ e c’hellit heuliañ nevezenti foran al lec’hienn (pennadoù ha berrskridoù bet embannet).',
174
-	'ical_texte_rss' => 'Gallout a rit sindikadiñ nevezenti ar forom-mañ war forzh peseurt lenner restroù XML/RSS (Rich Site Summary). A-drugarez d’ar furmad-se ivez e c’hell SPIP lenn an nevezenti war al lec’hiennoù all hag a implij ur stumm kenlotus(lec’hiennoù sindikadet).',
175
-	'ical_titre_js' => 'Javascript',
176
-	'ical_titre_mailing' => 'Roll-skignañ',
177
-	'ical_titre_rss' => 'Restroù sindikadañ',
178
-	'icone_accueil' => 'Degemer',
179
-	'icone_activer_cookie' => 'Gweredekaat an toupin heuliañ',
180
-	'icone_activite' => 'Gwerederezh',
181
-	'icone_admin_plugin' => 'Merañ an adveziantoù',
182
-	'icone_administration' => 'Trezalc’h',
183
-	'icone_afficher_auteurs' => 'Diskouez ar skridaozerien',
184
-	'icone_afficher_visiteurs' => 'Diskouez ar weladennerien',
185
-	'icone_arret_discussion' => 'Paouez da gemer perzh er gaoz-mañ',
186
-	'icone_calendrier' => 'Deiziataer',
187
-	'icone_configuration' => 'Kefluniad',
188
-	'icone_creer_auteur' => 'Krouiñ ur skridaozer nevez, hag e stagañ ouzh ar pennad-mañ',
189
-	'icone_creer_mot_cle' => 'Krouiñ ur ger-stur nevez hag e liammañ ouzh ar pennad-mañ',
190
-	'icone_creer_rubrique_2' => 'Krouiñ ur rubrikenn nevez',
191
-	'icone_developpement' => 'Diorenniñ',
192
-	'icone_edition' => 'Embannadur',
193
-	'icone_ma_langue' => 'Va yezh',
194
-	'icone_mes_infos' => 'Va stlennadoù',
195
-	'icone_mes_preferences' => 'Va dibaboù',
196
-	'icone_modifier_article' => 'Kemmañ ar pennad-mañ',
197
-	'icone_modifier_rubrique' => 'Kemmañ ar rubrikenn-mañ',
198
-	'icone_publication' => 'Embann',
199
-	'icone_relancer_signataire' => 'Adlañsañ ar siner',
200
-	'icone_retour' => 'Distro',
201
-	'icone_retour_article' => 'Distreiñ d’ar pennad',
202
-	'icone_squelette' => 'Frammoù',
203
-	'icone_suivi_publication' => 'Heuliañ an embann',
204
-	'icone_supprimer_cookie' => 'Diverkañ an toupin heuliañ',
205
-	'icone_supprimer_rubrique' => 'Diverkañ ar rummad-mañ',
206
-	'icone_supprimer_signature' => 'Diverkañ ar sinadur-mañ',
207
-	'icone_valider_signature' => 'Aprouiñ ar sinadur-mañ',
208
-	'image_administrer_rubrique' => 'Gallout a rit merañ ar rubrikenn-mañ',
209
-	'impossible_modifier_login_auteur' => ' Login digemm',
210
-	'impossible_modifier_pass_auteur' => 'Ger-tremen digemm.',
211
-	'info_1_article' => '1 pennad',
212
-	'info_1_auteur' => '1 aozer',
213
-	'info_1_message' => '1 kemennad',
214
-	'info_1_mot_cle' => '1 ger-alc’hwez',
215
-	'info_1_rubrique' => '1 rubrikenn',
216
-	'info_1_visiteur' => '1 gweladenner',
217
-	'info_activer_cookie' => 'Gallout a rit implijout un <b>toupin heuliañ</b>, ar pezh a dalvezo deoc’h da dremen en un doare aes eus al lec’hienn brevez d’an hini foran.',
218
-	'info_activer_menu_developpement' => 'Diskouez al roll Diorrenniñ',
219
-	'info_admin_etre_webmestre' => 'Reiñ din gwirioù ur mestr-gwiad ',
220
-	'info_admin_je_suis_webmestre' => 'mestr-gwiad <b>ez on</b>',
221
-	'info_admin_statuer_webmestre' => 'Reiñ gwirioù ur mestr-gwiad d’an amaezhier-mañ',
222
-	'info_admin_webmestre' => 'An amaezhier-mañ zo<b>mestr-gwiad</b>',
223
-	'info_administrateur' => 'Merour',
224
-	'info_administrateur_1' => 'Merour',
225
-	'info_administrateur_2' => 'al lec’hienn (<i>diwallit en ur implijout se</i>)',
226
-	'info_administrateur_site_01' => 'Ma’z oc’h merour al lec’hienn,',
227
-	'info_administrateur_site_02' => 'klikit war al liamm-mañ',
228
-	'info_administrateurs' => 'Merourien',
229
-	'info_administrer_rubrique' => 'Gallout a rit merañ ar rubrikenn-mañ',
230
-	'info_adresse' => 'er chomlec’h :',
231
-	'info_adresse_desinscription' => 'Postel evit en em zisenskrivañ : ',
232
-	'info_adresse_url' => 'Chomlec’h (URL) al lec’hienn foran',
233
-	'info_afficher_par_nb' => 'Diskouez dre',
234
-	'info_aide_en_ligne' => 'Skoazell enlinenn SPIP',
235
-	'info_ajout_image' => 'Pa ouzhpennit skeudennoù evel restroù stag ouzh ur pennad 
165
+    // I
166
+    'ical_info1' => 'War ar bajenn-mañ ez eus meur a hentenn evit chom e darempred gant buhez al lec’hienn-mañ.',
167
+    'ical_info2' => 'Evit gouzout hiroc’h diwar-benn an teknikoù-se, klaskit hardizh e-barzh <a href="@spipnet@">teuliadur SPIP</a>.',
168
+    'ical_info_calendrier' => 'Daou zeiziadur zo en ho kerz. An hini kentañ zo ur plaen eus al lec’hienn hag a ziskouez an holl bennadoù bet embannet. An eil emañ warnañ ar c’hemennoù stur, koulz hag ho kemennadennoù prevez diwezhañ: miret eo evidoc’h dre berzh un alc’hwez personel, a c’hallit kemm n’eus forzh pegoulz pa nevezot ho ker-tremen.',
169
+    'ical_methode_http' => 'Pellgargañ',
170
+    'ical_methode_webcal' => 'Kempredañ (webcal://)',
171
+    'ical_texte_js' => 'A-drugarez d’ul linenn javascript e c’hellit, en un doare aezet, diskouez ar pennadoù diwezhañ embannet war al lec’hienn-mañ, war forzh pe hini eus ho lec’hiennoù.',
172
+    'ical_texte_prive' => 'An deiziataer hiniennel-mañ a gelaou ac’hanoc’h diwar-benn nevezinti embann prevez al lec’hienn-mañ (labourioù, emgavioù, pennadoù, berrskridoù kinniget,...).',
173
+    'ical_texte_public' => 'Gant an deiziataer-mañ e c’hellit heuliañ nevezenti foran al lec’hienn (pennadoù ha berrskridoù bet embannet).',
174
+    'ical_texte_rss' => 'Gallout a rit sindikadiñ nevezenti ar forom-mañ war forzh peseurt lenner restroù XML/RSS (Rich Site Summary). A-drugarez d’ar furmad-se ivez e c’hell SPIP lenn an nevezenti war al lec’hiennoù all hag a implij ur stumm kenlotus(lec’hiennoù sindikadet).',
175
+    'ical_titre_js' => 'Javascript',
176
+    'ical_titre_mailing' => 'Roll-skignañ',
177
+    'ical_titre_rss' => 'Restroù sindikadañ',
178
+    'icone_accueil' => 'Degemer',
179
+    'icone_activer_cookie' => 'Gweredekaat an toupin heuliañ',
180
+    'icone_activite' => 'Gwerederezh',
181
+    'icone_admin_plugin' => 'Merañ an adveziantoù',
182
+    'icone_administration' => 'Trezalc’h',
183
+    'icone_afficher_auteurs' => 'Diskouez ar skridaozerien',
184
+    'icone_afficher_visiteurs' => 'Diskouez ar weladennerien',
185
+    'icone_arret_discussion' => 'Paouez da gemer perzh er gaoz-mañ',
186
+    'icone_calendrier' => 'Deiziataer',
187
+    'icone_configuration' => 'Kefluniad',
188
+    'icone_creer_auteur' => 'Krouiñ ur skridaozer nevez, hag e stagañ ouzh ar pennad-mañ',
189
+    'icone_creer_mot_cle' => 'Krouiñ ur ger-stur nevez hag e liammañ ouzh ar pennad-mañ',
190
+    'icone_creer_rubrique_2' => 'Krouiñ ur rubrikenn nevez',
191
+    'icone_developpement' => 'Diorenniñ',
192
+    'icone_edition' => 'Embannadur',
193
+    'icone_ma_langue' => 'Va yezh',
194
+    'icone_mes_infos' => 'Va stlennadoù',
195
+    'icone_mes_preferences' => 'Va dibaboù',
196
+    'icone_modifier_article' => 'Kemmañ ar pennad-mañ',
197
+    'icone_modifier_rubrique' => 'Kemmañ ar rubrikenn-mañ',
198
+    'icone_publication' => 'Embann',
199
+    'icone_relancer_signataire' => 'Adlañsañ ar siner',
200
+    'icone_retour' => 'Distro',
201
+    'icone_retour_article' => 'Distreiñ d’ar pennad',
202
+    'icone_squelette' => 'Frammoù',
203
+    'icone_suivi_publication' => 'Heuliañ an embann',
204
+    'icone_supprimer_cookie' => 'Diverkañ an toupin heuliañ',
205
+    'icone_supprimer_rubrique' => 'Diverkañ ar rummad-mañ',
206
+    'icone_supprimer_signature' => 'Diverkañ ar sinadur-mañ',
207
+    'icone_valider_signature' => 'Aprouiñ ar sinadur-mañ',
208
+    'image_administrer_rubrique' => 'Gallout a rit merañ ar rubrikenn-mañ',
209
+    'impossible_modifier_login_auteur' => ' Login digemm',
210
+    'impossible_modifier_pass_auteur' => 'Ger-tremen digemm.',
211
+    'info_1_article' => '1 pennad',
212
+    'info_1_auteur' => '1 aozer',
213
+    'info_1_message' => '1 kemennad',
214
+    'info_1_mot_cle' => '1 ger-alc’hwez',
215
+    'info_1_rubrique' => '1 rubrikenn',
216
+    'info_1_visiteur' => '1 gweladenner',
217
+    'info_activer_cookie' => 'Gallout a rit implijout un <b>toupin heuliañ</b>, ar pezh a dalvezo deoc’h da dremen en un doare aes eus al lec’hienn brevez d’an hini foran.',
218
+    'info_activer_menu_developpement' => 'Diskouez al roll Diorrenniñ',
219
+    'info_admin_etre_webmestre' => 'Reiñ din gwirioù ur mestr-gwiad ',
220
+    'info_admin_je_suis_webmestre' => 'mestr-gwiad <b>ez on</b>',
221
+    'info_admin_statuer_webmestre' => 'Reiñ gwirioù ur mestr-gwiad d’an amaezhier-mañ',
222
+    'info_admin_webmestre' => 'An amaezhier-mañ zo<b>mestr-gwiad</b>',
223
+    'info_administrateur' => 'Merour',
224
+    'info_administrateur_1' => 'Merour',
225
+    'info_administrateur_2' => 'al lec’hienn (<i>diwallit en ur implijout se</i>)',
226
+    'info_administrateur_site_01' => 'Ma’z oc’h merour al lec’hienn,',
227
+    'info_administrateur_site_02' => 'klikit war al liamm-mañ',
228
+    'info_administrateurs' => 'Merourien',
229
+    'info_administrer_rubrique' => 'Gallout a rit merañ ar rubrikenn-mañ',
230
+    'info_adresse' => 'er chomlec’h :',
231
+    'info_adresse_desinscription' => 'Postel evit en em zisenskrivañ : ',
232
+    'info_adresse_url' => 'Chomlec’h (URL) al lec’hienn foran',
233
+    'info_afficher_par_nb' => 'Diskouez dre',
234
+    'info_aide_en_ligne' => 'Skoazell enlinenn SPIP',
235
+    'info_ajout_image' => 'Pa ouzhpennit skeudennoù evel restroù stag ouzh ur pennad 
236 236
   e c’hell SPIP krouiñ ent emgefre evidoc’h skeudennoùigoù (bihanaet) eus
237 237
 ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer,
238 238
   ur skeudennaoueg pe ur portofolio.',
239
-	'info_ajouter_rubrique' => 'Ouzhpennañ ur rubrikenn all da vezañ meret :',
240
-	'info_annonce_nouveautes' => 'Kemenn an nevezenti',
241
-	'info_article' => 'pennad',
242
-	'info_article_2' => 'pennad',
243
-	'info_article_a_paraitre' => 'Ar pennadoù goude-deiziataet da zont',
244
-	'info_articles_02' => 'pennad',
245
-	'info_articles_2' => 'Pennad',
246
-	'info_articles_auteur' => 'Pennadoù ar skridaozer-mañ',
247
-	'info_articles_miens' => 'Va fennadoù-skrid',
248
-	'info_articles_tous' => 'An holl bennadoù-skrid',
249
-	'info_articles_trouves' => 'Pennadoù kavet',
250
-	'info_attente_validation' => 'Ho pennadoù a chom da vezañ aprouet',
251
-	'info_aucun_article' => 'Pennad-skrid ebet',
252
-	'info_aucun_auteur' => 'Aozer ebet',
253
-	'info_aucun_message' => 'kemennad ebet',
254
-	'info_aucun_rubrique' => 'Rubrikenn ebet',
255
-	'info_aujourdhui' => 'hiziv :',
256
-	'info_auteur_gere_rubriques' => 'Ar skrivagner-mañ a ver ar rubrikennoù a-heul :',
257
-	'info_auteur_gere_toutes_rubriques' => 'Ar skrivagner-mañ a ra war-dro <b>an holl rubrikennoù</b>',
258
-	'info_auteur_gere_toutes_rubriques_2' => 'Merañ a ran <b>pep rubrikenn</b>',
259
-	'info_auteurs' => 'Ar skridaozerien',
260
-	'info_auteurs_par_tri' => 'Skridaozerien@partri@',
261
-	'info_auteurs_trouves' => 'Skridaozerien kavet',
262
-	'info_authentification_externe' => 'Gwiriekadur diavaez',
263
-	'info_avertissement' => 'Kemenn diwall',
264
-	'info_barre_outils' => 'gant e varrenn ostilhoù ?',
265
-	'info_base_installee' => 'Staliet eo framm ho tiaz-titouroù.',
266
-	'info_bio' => 'Buhezskrid',
267
-	'info_cache_desactive' => 'Diwerekaet eo bet ar grubuilh evit ur pennad.',
268
-	'info_chapeau' => 'Tog',
269
-	'info_chapeau_2' => 'Tog :',
270
-	'info_chemin_acces_1' => 'Dibarzhioù : <b>hent moned er rollad tud</b>',
271
-	'info_chemin_acces_2' => 'Bremañ e rankit kefluniañ anhent moned a-benn tizhout titouroù ar rollad tud. Ezhomm zo eus an titour-se evit gallout lenn profiloù an implijerien a gaver er rollad tud.',
272
-	'info_chemin_acces_annuaire' => 'Dibarzhioù : <b>Hent moned er rollad tud</b>',
273
-	'info_choix_base' => 'Trede lankad :',
274
-	'info_classement_1' => '<sup>añ</sup> war @liste@',
275
-	'info_classement_2' => '<sup>vet</sup> war @liste@',
276
-	'info_code_acces' => 'N’ankouait ket ho kodoù moned !',
277
-	'info_config_suivi' => 'Ma’z eo ar chomlec’h-mañ hini ur roll-skignañ e c’hellit skrivañ amañ ar chomlec’h evit en em enrollañ. Gallout a ra ar chomlec’h-se bezañ un URL (hini ar bajenn Web m’en em enroller warni), pe ur postel diwar-benn un danvez bennak (da skouer : <tt>@adresse_suivi@?subject=subscribe</tt>):',
278
-	'info_config_suivi_explication' => 'Gallout a rit en em enrollañ war roll-skignañ al lec’hienn-mañ. Degaset e vo deoc’h kemennoù dre bostel pa vo kinniget pennadoù pe berrskridoù nevez neuze.',
279
-	'info_confirmer_passe' => 'Gwiriañ ar ger-tremen :',
280
-	'info_conflit_edition_avis_non_sauvegarde' => 'Diwallit, kemmet eo bet an maeziennoù-mañ e lec’h all. Setu ma n’eo ket bet enrollet ho kemmoù warno.',
281
-	'info_conflit_edition_differences' => 'Diforc’hioù :',
282
-	'info_conflit_edition_version_enregistree' => 'Ar stumm bet enrollet :',
283
-	'info_conflit_edition_votre_version' => 'Ho stumm :',
284
-	'info_connexion_base' => 'O klask kevreañ ouzh an diaz titouroù',
285
-	'info_connexion_base_donnee' => 'Kevreañ ouzh ho tiaz titouroù',
286
-	'info_connexion_ldap_ok' => 'Kevreet oc’h dre LDAP.</b><p>Gallout a rit tremen d’al lankad war-lerc’h.</p>',
287
-	'info_connexion_mysql' => 'Ho kevreadenn SQL',
288
-	'info_connexion_ok' => 'Kevreet oc’h.',
289
-	'info_contact' => 'Darempred',
290
-	'info_contenu_articles' => 'Danvez ar pennadoù',
291
-	'info_contributions' => 'Degasadennoù',
292
-	'info_creation_paragraphe' => '(Evit krouiñ rannbennadoù, lezit goullo linennoù zo traken)',
293
-	'info_creation_rubrique' => 'A-benn gallout skrivañ pennadoù <br />e rankit bezañ krouet ur rubrikenn da nebeutañ.<br />',
294
-	'info_creation_tables' => 'Krouiñ taolennoù an diaz titouroù',
295
-	'info_creer_base' => '<b>Krouiñ</b> un diaz titouroù nevez :',
296
-	'info_dans_rubrique' => 'Er rubrikenn :',
297
-	'info_date_publication_anterieure' => 'Deiziad skridaozañ kent :',
298
-	'info_date_referencement' => 'DEIZIAD MENEGERIÑ AL LEC’HIENN-MAÑ :',
299
-	'info_derniere_etape' => 'Echuet eo !',
300
-	'info_descriptif' => 'Deskrivadur :',
301
-	'info_desinstaller_plugin' => 'diverkañ a ra ar roadoù, ha diweredekaat a ra an adveziant',
302
-	'info_discussion_cours' => 'Kaozeadennoù digor',
303
-	'info_ecrire_article' => 'A-benn gallout skrivañ pennadoù e rankit bezañ krouet ur rubrikenn da nebeutañ.',
304
-	'info_email_envoi' => 'Postel kas (diret)',
305
-	'info_email_envoi_txt' => 'Skrivit amañ chomlec’h kas ar postelioù (ma ne skrivit netra e vo implijet chomlec’h an degemererien) :',
306
-	'info_email_webmestre' => 'Postel ar webmestr (diret)',
307
-	'info_envoi_email_automatique' => 'Kas postelioù emgefre',
308
-	'info_envoyer_maintenant' => 'Kas bremañ',
309
-	'info_etape_suivante' => 'Tremen d’al lankad war-lerc’h',
310
-	'info_etape_suivante_1' => 'Gallout a rit tremen d’al lankad war-lerc’h.',
311
-	'info_etape_suivante_2' => 'Gallout a rit tremen d’ar lankad war-lerc’h.',
312
-	'info_exceptions_proxy' => 'Nemedennoù evit ar proxy',
313
-	'info_exportation_base' => 'Oc’h ezporzhiañ an diaz davet @archive@',
314
-	'info_facilite_suivi_activite' => 'A-benn heuliañ aesoc’h an oberererezh e c’hell SPIP kas dre bostel,
239
+    'info_ajouter_rubrique' => 'Ouzhpennañ ur rubrikenn all da vezañ meret :',
240
+    'info_annonce_nouveautes' => 'Kemenn an nevezenti',
241
+    'info_article' => 'pennad',
242
+    'info_article_2' => 'pennad',
243
+    'info_article_a_paraitre' => 'Ar pennadoù goude-deiziataet da zont',
244
+    'info_articles_02' => 'pennad',
245
+    'info_articles_2' => 'Pennad',
246
+    'info_articles_auteur' => 'Pennadoù ar skridaozer-mañ',
247
+    'info_articles_miens' => 'Va fennadoù-skrid',
248
+    'info_articles_tous' => 'An holl bennadoù-skrid',
249
+    'info_articles_trouves' => 'Pennadoù kavet',
250
+    'info_attente_validation' => 'Ho pennadoù a chom da vezañ aprouet',
251
+    'info_aucun_article' => 'Pennad-skrid ebet',
252
+    'info_aucun_auteur' => 'Aozer ebet',
253
+    'info_aucun_message' => 'kemennad ebet',
254
+    'info_aucun_rubrique' => 'Rubrikenn ebet',
255
+    'info_aujourdhui' => 'hiziv :',
256
+    'info_auteur_gere_rubriques' => 'Ar skrivagner-mañ a ver ar rubrikennoù a-heul :',
257
+    'info_auteur_gere_toutes_rubriques' => 'Ar skrivagner-mañ a ra war-dro <b>an holl rubrikennoù</b>',
258
+    'info_auteur_gere_toutes_rubriques_2' => 'Merañ a ran <b>pep rubrikenn</b>',
259
+    'info_auteurs' => 'Ar skridaozerien',
260
+    'info_auteurs_par_tri' => 'Skridaozerien@partri@',
261
+    'info_auteurs_trouves' => 'Skridaozerien kavet',
262
+    'info_authentification_externe' => 'Gwiriekadur diavaez',
263
+    'info_avertissement' => 'Kemenn diwall',
264
+    'info_barre_outils' => 'gant e varrenn ostilhoù ?',
265
+    'info_base_installee' => 'Staliet eo framm ho tiaz-titouroù.',
266
+    'info_bio' => 'Buhezskrid',
267
+    'info_cache_desactive' => 'Diwerekaet eo bet ar grubuilh evit ur pennad.',
268
+    'info_chapeau' => 'Tog',
269
+    'info_chapeau_2' => 'Tog :',
270
+    'info_chemin_acces_1' => 'Dibarzhioù : <b>hent moned er rollad tud</b>',
271
+    'info_chemin_acces_2' => 'Bremañ e rankit kefluniañ anhent moned a-benn tizhout titouroù ar rollad tud. Ezhomm zo eus an titour-se evit gallout lenn profiloù an implijerien a gaver er rollad tud.',
272
+    'info_chemin_acces_annuaire' => 'Dibarzhioù : <b>Hent moned er rollad tud</b>',
273
+    'info_choix_base' => 'Trede lankad :',
274
+    'info_classement_1' => '<sup>añ</sup> war @liste@',
275
+    'info_classement_2' => '<sup>vet</sup> war @liste@',
276
+    'info_code_acces' => 'N’ankouait ket ho kodoù moned !',
277
+    'info_config_suivi' => 'Ma’z eo ar chomlec’h-mañ hini ur roll-skignañ e c’hellit skrivañ amañ ar chomlec’h evit en em enrollañ. Gallout a ra ar chomlec’h-se bezañ un URL (hini ar bajenn Web m’en em enroller warni), pe ur postel diwar-benn un danvez bennak (da skouer : <tt>@adresse_suivi@?subject=subscribe</tt>):',
278
+    'info_config_suivi_explication' => 'Gallout a rit en em enrollañ war roll-skignañ al lec’hienn-mañ. Degaset e vo deoc’h kemennoù dre bostel pa vo kinniget pennadoù pe berrskridoù nevez neuze.',
279
+    'info_confirmer_passe' => 'Gwiriañ ar ger-tremen :',
280
+    'info_conflit_edition_avis_non_sauvegarde' => 'Diwallit, kemmet eo bet an maeziennoù-mañ e lec’h all. Setu ma n’eo ket bet enrollet ho kemmoù warno.',
281
+    'info_conflit_edition_differences' => 'Diforc’hioù :',
282
+    'info_conflit_edition_version_enregistree' => 'Ar stumm bet enrollet :',
283
+    'info_conflit_edition_votre_version' => 'Ho stumm :',
284
+    'info_connexion_base' => 'O klask kevreañ ouzh an diaz titouroù',
285
+    'info_connexion_base_donnee' => 'Kevreañ ouzh ho tiaz titouroù',
286
+    'info_connexion_ldap_ok' => 'Kevreet oc’h dre LDAP.</b><p>Gallout a rit tremen d’al lankad war-lerc’h.</p>',
287
+    'info_connexion_mysql' => 'Ho kevreadenn SQL',
288
+    'info_connexion_ok' => 'Kevreet oc’h.',
289
+    'info_contact' => 'Darempred',
290
+    'info_contenu_articles' => 'Danvez ar pennadoù',
291
+    'info_contributions' => 'Degasadennoù',
292
+    'info_creation_paragraphe' => '(Evit krouiñ rannbennadoù, lezit goullo linennoù zo traken)',
293
+    'info_creation_rubrique' => 'A-benn gallout skrivañ pennadoù <br />e rankit bezañ krouet ur rubrikenn da nebeutañ.<br />',
294
+    'info_creation_tables' => 'Krouiñ taolennoù an diaz titouroù',
295
+    'info_creer_base' => '<b>Krouiñ</b> un diaz titouroù nevez :',
296
+    'info_dans_rubrique' => 'Er rubrikenn :',
297
+    'info_date_publication_anterieure' => 'Deiziad skridaozañ kent :',
298
+    'info_date_referencement' => 'DEIZIAD MENEGERIÑ AL LEC’HIENN-MAÑ :',
299
+    'info_derniere_etape' => 'Echuet eo !',
300
+    'info_descriptif' => 'Deskrivadur :',
301
+    'info_desinstaller_plugin' => 'diverkañ a ra ar roadoù, ha diweredekaat a ra an adveziant',
302
+    'info_discussion_cours' => 'Kaozeadennoù digor',
303
+    'info_ecrire_article' => 'A-benn gallout skrivañ pennadoù e rankit bezañ krouet ur rubrikenn da nebeutañ.',
304
+    'info_email_envoi' => 'Postel kas (diret)',
305
+    'info_email_envoi_txt' => 'Skrivit amañ chomlec’h kas ar postelioù (ma ne skrivit netra e vo implijet chomlec’h an degemererien) :',
306
+    'info_email_webmestre' => 'Postel ar webmestr (diret)',
307
+    'info_envoi_email_automatique' => 'Kas postelioù emgefre',
308
+    'info_envoyer_maintenant' => 'Kas bremañ',
309
+    'info_etape_suivante' => 'Tremen d’al lankad war-lerc’h',
310
+    'info_etape_suivante_1' => 'Gallout a rit tremen d’al lankad war-lerc’h.',
311
+    'info_etape_suivante_2' => 'Gallout a rit tremen d’ar lankad war-lerc’h.',
312
+    'info_exceptions_proxy' => 'Nemedennoù evit ar proxy',
313
+    'info_exportation_base' => 'Oc’h ezporzhiañ an diaz davet @archive@',
314
+    'info_facilite_suivi_activite' => 'A-benn heuliañ aesoc’h an oberererezh e c’hell SPIP kas dre bostel,
315 315
   d’ul roll-skignañ enni ar skridaozerien da skouer,
316 316
   ar goulennoù embann ha kadarnaat ar pennadoù.',
317
-	'info_fichiers_authent' => 'Restroù gwiriekaat « .htpasswd »',
318
-	'info_forums_abo_invites' => 'Foromoù dre goumanant zo war ho lec’hienn ; pedet e vez ar weladennerien d’en em enrollañ war lodenn foran al lec’hienn neuze.',
319
-	'info_gauche_admin_tech' => '<b>N’eus nemet an dud e-karg eus al lec’hienn a c’hall mont war ar bajenn-mañ.</b><p> Warni e reer al labourioù kempenn. Evit traoù zo ez eus ezhomm eus un argerzh testeniekaat dibar a c’houlenn kaout ur moned FTP ouzh al lec’hienn.</p>',
320
-	'info_gauche_admin_vider' => '<b>N’eus nemet an dud e-karg a c’hall mont war ar bajenn-mañ.</b><p>Warni e reer al labourioù kempenn. Evit traoù zo ez eus ezhomm eus un argerzh testeniekaat dibar a c’houlenn kaout ur moned FTP ouzh al lec’hienn.</p>',
321
-	'info_gauche_auteurs' => 'Amañ e kavot an holl dud a skriv war al lec’hienn.
317
+    'info_fichiers_authent' => 'Restroù gwiriekaat « .htpasswd »',
318
+    'info_forums_abo_invites' => 'Foromoù dre goumanant zo war ho lec’hienn ; pedet e vez ar weladennerien d’en em enrollañ war lodenn foran al lec’hienn neuze.',
319
+    'info_gauche_admin_tech' => '<b>N’eus nemet an dud e-karg eus al lec’hienn a c’hall mont war ar bajenn-mañ.</b><p> Warni e reer al labourioù kempenn. Evit traoù zo ez eus ezhomm eus un argerzh testeniekaat dibar a c’houlenn kaout ur moned FTP ouzh al lec’hienn.</p>',
320
+    'info_gauche_admin_vider' => '<b>N’eus nemet an dud e-karg a c’hall mont war ar bajenn-mañ.</b><p>Warni e reer al labourioù kempenn. Evit traoù zo ez eus ezhomm eus un argerzh testeniekaat dibar a c’houlenn kaout ur moned FTP ouzh al lec’hienn.</p>',
321
+    'info_gauche_auteurs' => 'Amañ e kavot an holl dud a skriv war al lec’hienn.
322 322
  Diouzh liv o skeudennig e c’hellit gouzout o c’harg resis (merour=gwer; skridaozer=melen).',
323
-	'info_gauche_auteurs_exterieurs' => 'E glaz emañ diskouezet ar skridaozerien diavaez, hep moned ouzh al lec’hienn ;
323
+    'info_gauche_auteurs_exterieurs' => 'E glaz emañ diskouezet ar skridaozerien diavaez, hep moned ouzh al lec’hienn ;
324 324
   Gant ur pod-lastez eo aroueziet ar re bet diverket.',
325
-	'info_gauche_messagerie' => 'Dre ar postelerezh e c’hellit eskemm kemennadennoù gant skridaozerien all, derc’hel notennigoù-eñvor, pe, ma’z oc’h merour, skignañ kemennoù war bajenn degemer al lodenn brevez.',
326
-	'info_gauche_statistiques_referers' => 'War ar bajenn-mañ emañ roll ar <i>referers</i>, da lavaret eo al lec’hiennoù enno liammoù a gas davet ho lec’hienn deoc’h, evit dec’h hag hiziv hepken. Riñset e vez ar roll-mañ bemdez.',
327
-	'info_gauche_visiteurs_enregistres' => 'Amañ emañ ar weladennerien enrollet evit gallout kemer perzh e foromoù dre goumanant lodenn foran al lec’hienn.',
328
-	'info_generation_miniatures_images' => 'Krouiñ skeudennoùigoù',
329
-	'info_gerer_trad_objets' => '@objets@ : merañ liammoù an troidigezh',
330
-	'info_hebergeur_desactiver_envoi_email' => 'Herberc’herien zo a nac’h ma vefe kaset postelioù emgedre adal o servijerioù. En deoguezh-se, ne’z aio ket ar servijoù-se en-dro.',
331
-	'info_hier' => 'dec’h :',
332
-	'info_identification_publique' => 'Hoc’h anv foran...',
333
-	'info_image_process' => 'Diuzit an hentenn wellañ da sevel skeudennoùigoù o klikañ war ar skeudenn a zere.',
334
-	'info_image_process2' => '<b>Evezh.</b> <i>Ma ne weler skeudenn ebet e talvez n’eo ket bet kefluniet an dafariad a ro bod deoc’h evit ober gant seurt binvioù. Mar fell deoc’h implijout ar servijoù-se, kit e darempred gant an dud e-karg, ha goulennit war-lerc’h an astennoù «GD» pe «Imagick».</i>',
335
-	'info_images_auto' => 'Skeudennoù jedet ent emgefre',
336
-	'info_informations_personnelles' => 'Titouroù personel',
337
-	'info_inscription' => 'enskrivadur el linenn',
338
-	'info_inscription_automatique' => 'Enskrivadur emgefreek ar skridaozerien nevez.',
339
-	'info_jeu_caractere' => 'Strobad arouezennoù al lec’hienn',
340
-	'info_jours' => 'deiz',
341
-	'info_laisser_champs_vides' => '(lezit ar maeziennoù-mañ goullo)',
342
-	'info_langues' => 'Yezhoù al lec’hienn',
343
-	'info_ldap_ok' => 'Staliet eo ar gwiriekaat LDAP.',
344
-	'info_lien_hypertexte' => 'Liamm gourskrid :',
345
-	'info_liste_nouveautes_envoyee' => 'Kaset eo bet roll an nevezentioù',
346
-	'info_liste_redacteurs_connectes' => 'Roll ar skridaozerien kevreet',
347
-	'info_login_existant' => 'C’hoazh ez eus eus ar ger kevreañ-mañ.',
348
-	'info_login_trop_court' => 'Re verr eo ar ger-kevreañ.',
349
-	'info_login_trop_court_car_pluriel' => 'Ret eo lakaat@nb@ arouezenn da vihanañ.',
350
-	'info_logos' => 'Al logoioù',
351
-	'info_maximum' => 'd’ar muiañ :',
352
-	'info_meme_rubrique' => 'En hevelep rubrikenn',
353
-	'info_message_en_redaction' => 'Ar c’hemennadennoù emaoc’h o skrivañ',
354
-	'info_message_technique' => 'Kemennadenn deknikel :',
355
-	'info_messagerie_interne' => 'Postelerezh diabarzh',
356
-	'info_mise_a_niveau_base' => 'lakaat ho tiaz titouroù SQL a-live',
357
-	'info_mise_a_niveau_base_2' => '{{Diwallit!}} Staliet ho peus ur stumm eus SPIP {koshoc’h} eget an hini a oa war al lec’hienn-mañ a-raok .
325
+    'info_gauche_messagerie' => 'Dre ar postelerezh e c’hellit eskemm kemennadennoù gant skridaozerien all, derc’hel notennigoù-eñvor, pe, ma’z oc’h merour, skignañ kemennoù war bajenn degemer al lodenn brevez.',
326
+    'info_gauche_statistiques_referers' => 'War ar bajenn-mañ emañ roll ar <i>referers</i>, da lavaret eo al lec’hiennoù enno liammoù a gas davet ho lec’hienn deoc’h, evit dec’h hag hiziv hepken. Riñset e vez ar roll-mañ bemdez.',
327
+    'info_gauche_visiteurs_enregistres' => 'Amañ emañ ar weladennerien enrollet evit gallout kemer perzh e foromoù dre goumanant lodenn foran al lec’hienn.',
328
+    'info_generation_miniatures_images' => 'Krouiñ skeudennoùigoù',
329
+    'info_gerer_trad_objets' => '@objets@ : merañ liammoù an troidigezh',
330
+    'info_hebergeur_desactiver_envoi_email' => 'Herberc’herien zo a nac’h ma vefe kaset postelioù emgedre adal o servijerioù. En deoguezh-se, ne’z aio ket ar servijoù-se en-dro.',
331
+    'info_hier' => 'dec’h :',
332
+    'info_identification_publique' => 'Hoc’h anv foran...',
333
+    'info_image_process' => 'Diuzit an hentenn wellañ da sevel skeudennoùigoù o klikañ war ar skeudenn a zere.',
334
+    'info_image_process2' => '<b>Evezh.</b> <i>Ma ne weler skeudenn ebet e talvez n’eo ket bet kefluniet an dafariad a ro bod deoc’h evit ober gant seurt binvioù. Mar fell deoc’h implijout ar servijoù-se, kit e darempred gant an dud e-karg, ha goulennit war-lerc’h an astennoù «GD» pe «Imagick».</i>',
335
+    'info_images_auto' => 'Skeudennoù jedet ent emgefre',
336
+    'info_informations_personnelles' => 'Titouroù personel',
337
+    'info_inscription' => 'enskrivadur el linenn',
338
+    'info_inscription_automatique' => 'Enskrivadur emgefreek ar skridaozerien nevez.',
339
+    'info_jeu_caractere' => 'Strobad arouezennoù al lec’hienn',
340
+    'info_jours' => 'deiz',
341
+    'info_laisser_champs_vides' => '(lezit ar maeziennoù-mañ goullo)',
342
+    'info_langues' => 'Yezhoù al lec’hienn',
343
+    'info_ldap_ok' => 'Staliet eo ar gwiriekaat LDAP.',
344
+    'info_lien_hypertexte' => 'Liamm gourskrid :',
345
+    'info_liste_nouveautes_envoyee' => 'Kaset eo bet roll an nevezentioù',
346
+    'info_liste_redacteurs_connectes' => 'Roll ar skridaozerien kevreet',
347
+    'info_login_existant' => 'C’hoazh ez eus eus ar ger kevreañ-mañ.',
348
+    'info_login_trop_court' => 'Re verr eo ar ger-kevreañ.',
349
+    'info_login_trop_court_car_pluriel' => 'Ret eo lakaat@nb@ arouezenn da vihanañ.',
350
+    'info_logos' => 'Al logoioù',
351
+    'info_maximum' => 'd’ar muiañ :',
352
+    'info_meme_rubrique' => 'En hevelep rubrikenn',
353
+    'info_message_en_redaction' => 'Ar c’hemennadennoù emaoc’h o skrivañ',
354
+    'info_message_technique' => 'Kemennadenn deknikel :',
355
+    'info_messagerie_interne' => 'Postelerezh diabarzh',
356
+    'info_mise_a_niveau_base' => 'lakaat ho tiaz titouroù SQL a-live',
357
+    'info_mise_a_niveau_base_2' => '{{Diwallit!}} Staliet ho peus ur stumm eus SPIP {koshoc’h} eget an hini a oa war al lec’hienn-mañ a-raok .
358 358
 Riskloù zo e vefe distrujet ho tiaz titouroù pe ne’z afe ket en-dro ken.<br />{{Adstailhit restroù SPIP.}}',
359
-	'info_modification_enregistree' => 'lerc’hwezet eo bet ho taskemm',
360
-	'info_modifier_auteur' => 'Kemmañ an aozer :',
361
-	'info_modifier_rubrique' => 'Kemmañ ar rubrikenn :',
362
-	'info_modifier_titre' => 'Kemmañ : @titre@',
363
-	'info_mon_site_spip' => 'Ma lec’hienn SPIP',
364
-	'info_moyenne' => 'Keidenn :',
365
-	'info_multi_cet_article' => 'Yezh ar pennad-mañ :',
366
-	'info_multi_langues_choisies' => 'Dibabit amañ dindan ar yezhoù a c’hell skridaozerien ho lec’hienn skrivañ enno.
359
+    'info_modification_enregistree' => 'lerc’hwezet eo bet ho taskemm',
360
+    'info_modifier_auteur' => 'Kemmañ an aozer :',
361
+    'info_modifier_rubrique' => 'Kemmañ ar rubrikenn :',
362
+    'info_modifier_titre' => 'Kemmañ : @titre@',
363
+    'info_mon_site_spip' => 'Ma lec’hienn SPIP',
364
+    'info_moyenne' => 'Keidenn :',
365
+    'info_multi_cet_article' => 'Yezh ar pennad-mañ :',
366
+    'info_multi_langues_choisies' => 'Dibabit amañ dindan ar yezhoù a c’hell skridaozerien ho lec’hienn skrivañ enno.
367 367
   Ar yezhoù bet implijet betek-henn (diskouezet da gentañ) n’hallont ket bezañ lamet kuit.',
368
-	'info_multi_objets' => '@objets@ : gweredekaat lañser ar yezh',
369
-	'info_multi_secteurs' => '...evit rubrikennoù ar wrizienn hepken ?',
370
-	'info_nb_articles' => '@nb@ pennadoù-skrid',
371
-	'info_nb_auteurs' => '@nb@ aozerion',
372
-	'info_nb_messages' => '@nb@ kemennadoù',
373
-	'info_nb_mots_cles' => '@nb@ gerioù-alc’hwez',
374
-	'info_nb_rubriques' => '@nb@ rubrikennoù',
375
-	'info_nb_visiteurs' => '@nb@ gweladennerion',
376
-	'info_nom' => 'Anv',
377
-	'info_nom_destinataire' => 'Anv an degemerer',
378
-	'info_nom_pas_conforme' => 'n’eo ket aotreet an tagoù html ',
379
-	'info_nom_site' => 'Anv ho lec’hienn',
380
-	'info_nombre_articles' => '@nb_articles@ pennad,',
381
-	'info_nombre_rubriques' => '@nb_rubriques@ rubrikenn,',
382
-	'info_nombre_sites' => '@nb_sites@ lec’hienn,',
383
-	'info_non_deplacer' => 'Na zilec’hiañ...',
384
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'Gallout a ra SPIP kelaouiñ en un doare reoliek war nevezenti al lec’hienn
368
+    'info_multi_objets' => '@objets@ : gweredekaat lañser ar yezh',
369
+    'info_multi_secteurs' => '...evit rubrikennoù ar wrizienn hepken ?',
370
+    'info_nb_articles' => '@nb@ pennadoù-skrid',
371
+    'info_nb_auteurs' => '@nb@ aozerion',
372
+    'info_nb_messages' => '@nb@ kemennadoù',
373
+    'info_nb_mots_cles' => '@nb@ gerioù-alc’hwez',
374
+    'info_nb_rubriques' => '@nb@ rubrikennoù',
375
+    'info_nb_visiteurs' => '@nb@ gweladennerion',
376
+    'info_nom' => 'Anv',
377
+    'info_nom_destinataire' => 'Anv an degemerer',
378
+    'info_nom_pas_conforme' => 'n’eo ket aotreet an tagoù html ',
379
+    'info_nom_site' => 'Anv ho lec’hienn',
380
+    'info_nombre_articles' => '@nb_articles@ pennad,',
381
+    'info_nombre_rubriques' => '@nb_rubriques@ rubrikenn,',
382
+    'info_nombre_sites' => '@nb_sites@ lec’hienn,',
383
+    'info_non_deplacer' => 'Na zilec’hiañ...',
384
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'Gallout a ra SPIP kelaouiñ en un doare reoliek war nevezenti al lec’hienn
385 385
   (pennadoù ha berrskridoù embannet nevez zo).',
386
-	'info_non_envoi_liste_nouveautes' => 'Chom hep kas roll an nevezenti',
387
-	'info_non_modifiable' => 'n’hall ket bezañ kemmet',
388
-	'info_non_suppression_mot_cle' => 'ne fell ket din diverkañ ar ger-stur-mañ.',
389
-	'info_notes' => 'Notennoù',
390
-	'info_nouvel_article' => 'Pennad nevez',
391
-	'info_nouvelle_traduction' => 'Troidigezh nevez :',
392
-	'info_numero_article' => 'PENNAD NIVERENN :',
393
-	'info_obligatoire_02' => '[Rekis]',
394
-	'info_option_accepter_visiteurs' => 'Aotren enrolladennoù gweladennerien al lec’hienn foran',
395
-	'info_option_ne_pas_accepter_visiteurs' => 'Nac’hañ enrolladennoù ar weladennerien',
396
-	'info_options_avancees' => 'DIBARZHIOÙ PISHOC’H',
397
-	'info_ou' => 'pe...',
398
-	'info_page_interdite' => 'Pajenn difennet',
399
-	'info_par_nom' => 'dre anv',
400
-	'info_par_nombre_article' => 'dre an niver a bennadoù',
401
-	'info_par_statut' => 'dre statud',
402
-	'info_par_tri' => '’(dre @tri@)’',
403
-	'info_passe_trop_court' => 'Ger-tremen re verr.',
404
-	'info_passe_trop_court_car_pluriel' => 'Lakait d’’ar vihanañ @nb@ arouezenn er ger-tremen.',
405
-	'info_passes_identiques' => 'Ne glot ket an daou c’her-tremen.',
406
-	'info_plus_cinq_car' => 'ouzhpenn pemp arouezenn',
407
-	'info_plus_cinq_car_2' => '(Ouzhpenn 5 arouezenn)',
408
-	'info_plus_trois_car' => '(Ouzhpenn 3 arouezenn)',
409
-	'info_popularite' => 'brud; : @popularite@ ; gweladennoù : @visites@',
410
-	'info_post_scriptum' => 'Goude-skrid',
411
-	'info_post_scriptum_2' => 'Goude-skrid :',
412
-	'info_pour' => 'evit',
413
-	'info_preview_texte' => 'Posupl eo rakwelet  holl bennadoù al lec’h gant ar statud « kinniget » d’an nebeutañ, hag an holl verrskridoù a vezer an oberour anezho. Daoust ha dleout a rafe an holl verourien gallout en ober, pe ar skridaozerien, pe den ebet ?',
414
-	'info_procedez_par_etape' => 'kit war-raok pazenn-ha-pazenn',
415
-	'info_procedure_maj_version' => 'rankout a ra al labour hizivaat bezañ lañset a-benn azasaat 
386
+    'info_non_envoi_liste_nouveautes' => 'Chom hep kas roll an nevezenti',
387
+    'info_non_modifiable' => 'n’hall ket bezañ kemmet',
388
+    'info_non_suppression_mot_cle' => 'ne fell ket din diverkañ ar ger-stur-mañ.',
389
+    'info_notes' => 'Notennoù',
390
+    'info_nouvel_article' => 'Pennad nevez',
391
+    'info_nouvelle_traduction' => 'Troidigezh nevez :',
392
+    'info_numero_article' => 'PENNAD NIVERENN :',
393
+    'info_obligatoire_02' => '[Rekis]',
394
+    'info_option_accepter_visiteurs' => 'Aotren enrolladennoù gweladennerien al lec’hienn foran',
395
+    'info_option_ne_pas_accepter_visiteurs' => 'Nac’hañ enrolladennoù ar weladennerien',
396
+    'info_options_avancees' => 'DIBARZHIOÙ PISHOC’H',
397
+    'info_ou' => 'pe...',
398
+    'info_page_interdite' => 'Pajenn difennet',
399
+    'info_par_nom' => 'dre anv',
400
+    'info_par_nombre_article' => 'dre an niver a bennadoù',
401
+    'info_par_statut' => 'dre statud',
402
+    'info_par_tri' => '’(dre @tri@)’',
403
+    'info_passe_trop_court' => 'Ger-tremen re verr.',
404
+    'info_passe_trop_court_car_pluriel' => 'Lakait d’’ar vihanañ @nb@ arouezenn er ger-tremen.',
405
+    'info_passes_identiques' => 'Ne glot ket an daou c’her-tremen.',
406
+    'info_plus_cinq_car' => 'ouzhpenn pemp arouezenn',
407
+    'info_plus_cinq_car_2' => '(Ouzhpenn 5 arouezenn)',
408
+    'info_plus_trois_car' => '(Ouzhpenn 3 arouezenn)',
409
+    'info_popularite' => 'brud; : @popularite@ ; gweladennoù : @visites@',
410
+    'info_post_scriptum' => 'Goude-skrid',
411
+    'info_post_scriptum_2' => 'Goude-skrid :',
412
+    'info_pour' => 'evit',
413
+    'info_preview_texte' => 'Posupl eo rakwelet  holl bennadoù al lec’h gant ar statud « kinniget » d’an nebeutañ, hag an holl verrskridoù a vezer an oberour anezho. Daoust ha dleout a rafe an holl verourien gallout en ober, pe ar skridaozerien, pe den ebet ?',
414
+    'info_procedez_par_etape' => 'kit war-raok pazenn-ha-pazenn',
415
+    'info_procedure_maj_version' => 'rankout a ra al labour hizivaat bezañ lañset a-benn azasaat 
416 416
  an diaz titouroù ouzh stumm nevez SPIP.',
417
-	'info_proxy_ok' => 'Mat eo bet disoc’h arnod ar proksi.',
418
-	'info_ps' => 'G.S.',
419
-	'info_publier' => 'embann',
420
-	'info_publies' => 'Ho pennadoù bet embannet',
421
-	'info_question_accepter_visiteurs' => 'M’eo resisaet e frammoù ho lec’hienn e c’hall ar weladennerien en em enrollañ hep moned ouzh al lodenn brevez, gweredekait an dibarzh a-is :',
422
-	'info_question_inscription_nouveaux_redacteurs' => 'Hag aotren a rit e c’hallfe skridaozerien nevez en em enrollañ adalek al lec’hienn foran ?
417
+    'info_proxy_ok' => 'Mat eo bet disoc’h arnod ar proksi.',
418
+    'info_ps' => 'G.S.',
419
+    'info_publier' => 'embann',
420
+    'info_publies' => 'Ho pennadoù bet embannet',
421
+    'info_question_accepter_visiteurs' => 'M’eo resisaet e frammoù ho lec’hienn e c’hall ar weladennerien en em enrollañ hep moned ouzh al lodenn brevez, gweredekait an dibarzh a-is :',
422
+    'info_question_inscription_nouveaux_redacteurs' => 'Hag aotren a rit e c’hallfe skridaozerien nevez en em enrollañ adalek al lec’hienn foran ?
423 423
   Ma asantit e c’hallo ar weladennerien en em enskrivañ adalek ur furmskrid emgefreek, 
424 424
   ha gouest e vint neuze da dizhout al lodenn brevez evit kinnig o fennadoù dezho o-unan.
425 425
   <blockquote><i>Da vare an enrollañ e vez kaset ur postel emgefreek d’ar skridaozerien
426 426
   ennañ ar c’hodoù da c’hallout dont tre el lec’hienn.
427 427
   Gant herberc’herien zo e vez difennet kas postelioù adalek o servijerioù,
428 428
   en degouezh-se ne vo ket tu en em enrollañ ent emgefre.</i></blockquote>',
429
-	'info_qui_edite' => '@nom_auteur_modif@ en deus labouret war an danvez-se @date_diff@ minutes zo',
430
-	'info_racine_site' => 'Gwrizienn al lec’hienn',
431
-	'info_recharger_page' => 'Adkargit ar-bajenn-mañ a-raok pell, mar plij.',
432
-	'info_recherche_auteur_zero' => 'N’eus bet kavet disoc’h ebet evit « @cherche_auteur@ ».',
433
-	'info_recommencer' => 'Klaskit en-dro mar plij.',
434
-	'info_redacteur_1' => 'Skridaozer',
435
-	'info_redacteur_2' => 'aotreet da vont war al lodenn brevez (<i>erbedet</i>)',
436
-	'info_redacteurs' => 'Skridaozerien',
437
-	'info_redaction_en_cours' => 'O VEZAÑ SKRIDAOZET',
438
-	'info_redirection' => 'Adheñchañ',
439
-	'info_redirection_activee' => 'War adwerediñ',
440
-	'info_redirection_boucle' => 'Emaoc’h o klask adkas ur pennad-skrid warnañ e-unan.',
441
-	'info_redirection_desactivee' => 'Torret eo bet an adwerediñ.',
442
-	'info_refuses' => 'Ho pennadoù bet nac’het',
443
-	'info_reglage_ldap' => 'Dibarzhioù : <b>Reizhañ an enporzhiañ LDAP</b>',
444
-	'info_renvoi_article' => '<b>Adheñchañ.</b> Adkas a ra ar pennad-mañ d’ar bajenn :',
445
-	'info_reserve_admin' => 'N’eus nemet ar verourien a c’hall kemmañ ar chomlec’h-mañ.',
446
-	'info_restreindre_rubrique' => 'Strishaat ar merañ d’ar rubrikenn-mañ :',
447
-	'info_resultat_recherche' => 'Disoc’hoù an enklask :',
448
-	'info_rubriques' => 'Rubrikennoù',
449
-	'info_rubriques_02' => 'rubrikennoù',
450
-	'info_rubriques_trouvees' => 'Rubrikennoù bet kavet',
451
-	'info_sans_titre' => 'Titl ebet',
452
-	'info_selection_chemin_acces' => '<b>Diuzit</b> amañ dindan an hent evit tizhout ar rollad tud :',
453
-	'info_signatures' => 'sinadurioù',
454
-	'info_site' => 'Lec’hienn',
455
-	'info_site_2' => 'lec’hienn :',
456
-	'info_site_min' => 'lec’hienn',
457
-	'info_site_reference_2' => 'Lec’hienn menegeret',
458
-	'info_site_web' => 'Load internet :',
459
-	'info_sites' => 'lec’hiennoù',
460
-	'info_sites_lies_mot' => 'Al lec’hiennoù menegeret liammet ouzh ar ger-stur-mañ',
461
-	'info_sites_proxy' => 'Implijout ur proksi',
462
-	'info_sites_trouves' => 'Lec’hiennoù bet kavet',
463
-	'info_sous_titre' => 'Istitl :',
464
-	'info_statut_administrateur' => 'Merour',
465
-	'info_statut_auteur' => 'Statud ar skridaozer-mañ :',
466
-	'info_statut_auteur_2' => 'Me a zo',
467
-	'info_statut_auteur_a_confirmer' => 'Enskrivadur da gadarnaat',
468
-	'info_statut_auteur_autre' => 'Statud all :',
469
-	'info_statut_redacteur' => 'Skridaozer',
470
-	'info_statut_utilisateurs_1' => 'Staelad dre ziouer an implijerion enporzhiet',
471
-	'info_statut_utilisateurs_2' => 'Dibabit ar statud da reiñ da dud ar rollad tud LDAP pa gevreont evit ar wech kentañ. Gallout a reoo da c’houde kemmañ ar statud-se unan evit pep aozer unan hag unan.',
472
-	'info_suivi_activite' => 'Heuliañ an embannerezh',
473
-	'info_surtitre' => 'Ustitl :',
474
-	'info_syndication_integrale_1' => 'Kinnig a ra ho lec’hienn restroù sindikadañ (gwelet « <a href="@url@">@titre@</a> »).',
475
-	'info_syndication_integrale_2' => 'Ha c’hoant hoc’h eus da ginnig ar pennadoù penn-da-benn, pe embann un diverrañ anezho, ennañ un nebeud kantadoù a arouezennoù ?',
476
-	'info_table_prefix' => 'Ma staliit meur a lec’hienn war ar memes diaz titouroù e c’hellit kemmañ ar rakgerioù zo e penn-kentañ anv an diazoù titouroù; ret eo deoc’h skrivañ gant lizherennoù bihan hep tired warno (ñ, ù, é, à, ...) hag hep esaouenn.',
477
-	'info_taille_maximale_images' => 'Emañ SPIP o vont da arnodiñ ment vrasañ posupl ar skeudennoù a c’hell bezañ meret gantañ (e milionoù a bikseloù).<br />Ne vo ket bihanaet ar skeudennoù brasoc’h.',
478
-	'info_taille_maximale_vignette' => 'Ment vrasañ ar skeudennoùigoù krouet gant ar reizhiad :',
479
-	'info_terminer_installation' => 'Bremañ e c’hellit echuiñ gant an argerzh staliañ standard.',
480
-	'info_texte' => 'Testenn',
481
-	'info_texte_explicatif' => 'Testenn displegañ',
482
-	'info_texte_long' => '(Dre ma’z eo hir an destenn eo bet rannet e meur a lodenn, a vo adpeget asambles goude ma vo bet aprouet an destenn)',
483
-	'info_texte_message' => 'Testenn ho kemennadenn :',
484
-	'info_texte_message_02' => 'Testenn ar gemennadenn',
485
-	'info_titre' => 'Titl :',
486
-	'info_total' => 'hollad :',
487
-	'info_tous_articles_en_redaction' => 'An holl bennadoù emeur o skridaozañ',
488
-	'info_tous_articles_presents' => 'An holl pennadoù bet embannet er rubrikenn-mañ',
489
-	'info_tous_articles_refuses' => 'An holl bennadoù distaolet',
490
-	'info_tous_les' => 'an holl :',
491
-	'info_tout_site' => 'Al lec’hienn a-bezh',
492
-	'info_tout_site2' => 'N’eo ket bet troet ar pennad er yezh-mañ.',
493
-	'info_tout_site3' => 'Troet eo bet ar pennad, met abaoe eo bet kemmet ar pennad orin. Ret eo nevesaat an droidigezh.',
494
-	'info_tout_site4' => 'Troet eo bet ar pennad er yezh-mañ, ha n’eus ket ezhomm da nevesaat an droidigezh.',
495
-	'info_tout_site5' => 'Pennad orin.',
496
-	'info_tout_site6' => '<b>Diwallit :</b>Ne vez diskouezet nemet ar pennadoù orin.
429
+    'info_qui_edite' => '@nom_auteur_modif@ en deus labouret war an danvez-se @date_diff@ minutes zo',
430
+    'info_racine_site' => 'Gwrizienn al lec’hienn',
431
+    'info_recharger_page' => 'Adkargit ar-bajenn-mañ a-raok pell, mar plij.',
432
+    'info_recherche_auteur_zero' => 'N’eus bet kavet disoc’h ebet evit « @cherche_auteur@ ».',
433
+    'info_recommencer' => 'Klaskit en-dro mar plij.',
434
+    'info_redacteur_1' => 'Skridaozer',
435
+    'info_redacteur_2' => 'aotreet da vont war al lodenn brevez (<i>erbedet</i>)',
436
+    'info_redacteurs' => 'Skridaozerien',
437
+    'info_redaction_en_cours' => 'O VEZAÑ SKRIDAOZET',
438
+    'info_redirection' => 'Adheñchañ',
439
+    'info_redirection_activee' => 'War adwerediñ',
440
+    'info_redirection_boucle' => 'Emaoc’h o klask adkas ur pennad-skrid warnañ e-unan.',
441
+    'info_redirection_desactivee' => 'Torret eo bet an adwerediñ.',
442
+    'info_refuses' => 'Ho pennadoù bet nac’het',
443
+    'info_reglage_ldap' => 'Dibarzhioù : <b>Reizhañ an enporzhiañ LDAP</b>',
444
+    'info_renvoi_article' => '<b>Adheñchañ.</b> Adkas a ra ar pennad-mañ d’ar bajenn :',
445
+    'info_reserve_admin' => 'N’eus nemet ar verourien a c’hall kemmañ ar chomlec’h-mañ.',
446
+    'info_restreindre_rubrique' => 'Strishaat ar merañ d’ar rubrikenn-mañ :',
447
+    'info_resultat_recherche' => 'Disoc’hoù an enklask :',
448
+    'info_rubriques' => 'Rubrikennoù',
449
+    'info_rubriques_02' => 'rubrikennoù',
450
+    'info_rubriques_trouvees' => 'Rubrikennoù bet kavet',
451
+    'info_sans_titre' => 'Titl ebet',
452
+    'info_selection_chemin_acces' => '<b>Diuzit</b> amañ dindan an hent evit tizhout ar rollad tud :',
453
+    'info_signatures' => 'sinadurioù',
454
+    'info_site' => 'Lec’hienn',
455
+    'info_site_2' => 'lec’hienn :',
456
+    'info_site_min' => 'lec’hienn',
457
+    'info_site_reference_2' => 'Lec’hienn menegeret',
458
+    'info_site_web' => 'Load internet :',
459
+    'info_sites' => 'lec’hiennoù',
460
+    'info_sites_lies_mot' => 'Al lec’hiennoù menegeret liammet ouzh ar ger-stur-mañ',
461
+    'info_sites_proxy' => 'Implijout ur proksi',
462
+    'info_sites_trouves' => 'Lec’hiennoù bet kavet',
463
+    'info_sous_titre' => 'Istitl :',
464
+    'info_statut_administrateur' => 'Merour',
465
+    'info_statut_auteur' => 'Statud ar skridaozer-mañ :',
466
+    'info_statut_auteur_2' => 'Me a zo',
467
+    'info_statut_auteur_a_confirmer' => 'Enskrivadur da gadarnaat',
468
+    'info_statut_auteur_autre' => 'Statud all :',
469
+    'info_statut_redacteur' => 'Skridaozer',
470
+    'info_statut_utilisateurs_1' => 'Staelad dre ziouer an implijerion enporzhiet',
471
+    'info_statut_utilisateurs_2' => 'Dibabit ar statud da reiñ da dud ar rollad tud LDAP pa gevreont evit ar wech kentañ. Gallout a reoo da c’houde kemmañ ar statud-se unan evit pep aozer unan hag unan.',
472
+    'info_suivi_activite' => 'Heuliañ an embannerezh',
473
+    'info_surtitre' => 'Ustitl :',
474
+    'info_syndication_integrale_1' => 'Kinnig a ra ho lec’hienn restroù sindikadañ (gwelet « <a href="@url@">@titre@</a> »).',
475
+    'info_syndication_integrale_2' => 'Ha c’hoant hoc’h eus da ginnig ar pennadoù penn-da-benn, pe embann un diverrañ anezho, ennañ un nebeud kantadoù a arouezennoù ?',
476
+    'info_table_prefix' => 'Ma staliit meur a lec’hienn war ar memes diaz titouroù e c’hellit kemmañ ar rakgerioù zo e penn-kentañ anv an diazoù titouroù; ret eo deoc’h skrivañ gant lizherennoù bihan hep tired warno (ñ, ù, é, à, ...) hag hep esaouenn.',
477
+    'info_taille_maximale_images' => 'Emañ SPIP o vont da arnodiñ ment vrasañ posupl ar skeudennoù a c’hell bezañ meret gantañ (e milionoù a bikseloù).<br />Ne vo ket bihanaet ar skeudennoù brasoc’h.',
478
+    'info_taille_maximale_vignette' => 'Ment vrasañ ar skeudennoùigoù krouet gant ar reizhiad :',
479
+    'info_terminer_installation' => 'Bremañ e c’hellit echuiñ gant an argerzh staliañ standard.',
480
+    'info_texte' => 'Testenn',
481
+    'info_texte_explicatif' => 'Testenn displegañ',
482
+    'info_texte_long' => '(Dre ma’z eo hir an destenn eo bet rannet e meur a lodenn, a vo adpeget asambles goude ma vo bet aprouet an destenn)',
483
+    'info_texte_message' => 'Testenn ho kemennadenn :',
484
+    'info_texte_message_02' => 'Testenn ar gemennadenn',
485
+    'info_titre' => 'Titl :',
486
+    'info_total' => 'hollad :',
487
+    'info_tous_articles_en_redaction' => 'An holl bennadoù emeur o skridaozañ',
488
+    'info_tous_articles_presents' => 'An holl pennadoù bet embannet er rubrikenn-mañ',
489
+    'info_tous_articles_refuses' => 'An holl bennadoù distaolet',
490
+    'info_tous_les' => 'an holl :',
491
+    'info_tout_site' => 'Al lec’hienn a-bezh',
492
+    'info_tout_site2' => 'N’eo ket bet troet ar pennad er yezh-mañ.',
493
+    'info_tout_site3' => 'Troet eo bet ar pennad, met abaoe eo bet kemmet ar pennad orin. Ret eo nevesaat an droidigezh.',
494
+    'info_tout_site4' => 'Troet eo bet ar pennad er yezh-mañ, ha n’eus ket ezhomm da nevesaat an droidigezh.',
495
+    'info_tout_site5' => 'Pennad orin.',
496
+    'info_tout_site6' => '<b>Diwallit :</b>Ne vez diskouezet nemet ar pennadoù orin.
497 497
 Stag eo an troidigezhioù outo,
498 498
 diskouezet en ul liv disheñvel, diouzh o stad :',
499
-	'info_traductions' => 'Troidigezhioù',
500
-	'info_travail_colaboratif' => 'Labour a-stroll war ar pennadoù',
501
-	'info_un_article' => 'ur pennad,',
502
-	'info_un_site' => 'ul load',
503
-	'info_une_rubrique' => 'ur rubrikenn,',
504
-	'info_une_rubrique_02' => '1 rubrikenn',
505
-	'info_url' => 'URL :',
506
-	'info_url_proxy' => 'URL ar proksi',
507
-	'info_url_proxy_pas_conforme' => 'Direizh eo an URL proxy',
508
-	'info_url_site_pas_conforme' => 'n’eo ket reizh URL al lec’hien.',
509
-	'info_url_test_proxy' => 'URL prouata',
510
-	'info_urlref' => 'Liamm gourskrid :',
511
-	'info_utilisation_spip' => 'Bremañ e c’hellit kregiñ da implijout ar reizhiad embann ameilet...',
512
-	'info_visites_par_mois' => 'Diskouez dre viz :',
513
-	'info_visiteur_1' => 'Gweladenner',
514
-	'info_visiteur_2' => 'Mont d’al lec’hienn foran',
515
-	'info_visiteurs' => 'Gweladennerion',
516
-	'info_visiteurs_02' => 'Gweladenner al lec’hienn foran',
517
-	'info_webmestre_forces' => 'termenet eo ar vistri-gwiad bremañ e <tt>@file_options@</tt>.',
518
-	'install_adresse_base_hebergeur' => 'Chomlec’h an diaz titouroù roet gant an herberc’hier',
519
-	'install_connect_ok' => 'Disklêriet eo bet ar bon nevez dindan anv an dafariad @connect@.',
520
-	'install_echec_annonce' => 'Moarvat e c’hwito ar staliadur pe e kaso d’ul lec’hienn na’z aio ket en-dro...',
521
-	'install_extension_mbstring' => 'Ne’z a ket SPIP en-dro gant :',
522
-	'install_extension_php_obligatoire' => 'Ezhomm en deus SPIP eus an astenn php :',
523
-	'install_login_base_hebergeur' => 'Kod kevreañ roet gant an herberc’hier',
524
-	'install_nom_base_hebergeur' => 'Anv an diaz roet gant an herberc’hier :',
525
-	'install_pas_table' => 'Taolenn ebet en diaz evit poent',
526
-	'install_pass_base_hebergeur' => 'Ger-tremen kevreañ roet gant an herberc’hier',
527
-	'install_php_version' => 'n’eo ket trawalc’h stumm @version@ PHP (@minimum@ d’an nebeutañ)',
528
-	'install_select_langue' => 'Diuzit ur yezh, ha klikit war « War-lerc’h » evit kregiñ gant ar staliañ.',
529
-	'install_select_type_db' => 'Merkit ar seurt diaz titouroù :',
530
-	'install_select_type_mysql' => 'MySQL',
531
-	'install_select_type_pg' => 'PostgreSQL',
532
-	'install_select_type_sqlite2' => 'SQLite 2',
533
-	'install_select_type_sqlite3' => 'SQLite 3',
534
-	'install_serveur_hebergeur' => 'Servijer diaz titouroù lakaet gant an herberc’hier',
535
-	'install_table_prefix_hebergeur' => 'Rakger an diaz roet gant an herberc’hier :',
536
-	'install_tables_base' => 'Taolennoù er reizhiad',
537
-	'install_types_db_connus' => 'Gallout a ra SPIP ober gant <b>MySQL</b> (an hini implijetañ), <b>PostgreSQL</b> ha <b>SQLite</b>.',
538
-	'install_types_db_connus_avertissement' => 'Diwallit : meur a adveziant ne’z eont en-dro nemet gant MySQL',
539
-	'instituer_erreur_statut_a_change' => 'Daskemmet eo bet ar staelad endeo',
540
-	'instituer_erreur_statut_non_autorise' => 'Ne c’hallit ket dibab ar staelad-se',
541
-	'intem_redacteur' => 'skridaozer',
542
-	'intitule_licence' => 'Aotre',
543
-	'item_accepter_inscriptions' => 'Degemer an enskrivadurioù',
544
-	'item_activer_messages_avertissement' => 'Gweredekaat ar c’hemennoù diwall',
545
-	'item_administrateur_2' => 'merour',
546
-	'item_afficher_calendrier' => 'Diskouez en deiziataer',
547
-	'item_autoriser_syndication_integrale' => 'Skignañ an holl bennadoù er restroù sindikadañ',
548
-	'item_choix_administrateurs' => 'ar verourion',
549
-	'item_choix_generation_miniature' => 'Krouiñ arlunioù ar skeudennoù en un doare emgefre.',
550
-	'item_choix_non_generation_miniature' => 'Chom hep krouiñ arlunioù diwar skeudennoù.',
551
-	'item_choix_redacteurs' => 'ar skridaozerion',
552
-	'item_choix_visiteurs' => 'gweladennerien al lec’hienn foran',
553
-	'item_creer_fichiers_authent' => 'Krouiñ ar restroù .htpasswd',
554
-	'item_login' => 'Kod kevreañ',
555
-	'item_messagerie_agenda' => 'Gweredekaat ar postelerezh hag an deiziataer',
556
-	'item_mots_cles_association_articles' => 'ouzh ar pennadoù',
557
-	'item_mots_cles_association_rubriques' => 'ouzh ar rubrikennoù',
558
-	'item_mots_cles_association_sites' => 'ouzh al lec’hiennoù rollet pe sindikadet.',
559
-	'item_non' => 'Ket',
560
-	'item_non_accepter_inscriptions' => 'Chom hep degemer an enskrivadurioù',
561
-	'item_non_activer_messages_avertissement' => 'Kemenn diwall ebet',
562
-	'item_non_afficher_calendrier' => 'Chom hep diskouez en deiziataer',
563
-	'item_non_autoriser_syndication_integrale' => 'Embann un diverrañ hepken',
564
-	'item_non_creer_fichiers_authent' => 'Arabat krouiñ ar restroù-se',
565
-	'item_non_messagerie_agenda' => 'Diweredekaat ar postelerezh hag an deiziataer',
566
-	'item_non_publier_articles' => 'Na embann ar pennadoù a-raok an deiziad embann lakaet.',
567
-	'item_nouvel_auteur' => 'Skridaozer nevez',
568
-	'item_nouvelle_rubrique' => 'Rubrikenn nevez',
569
-	'item_oui' => 'Ya',
570
-	'item_publier_articles' => 'Embann ar pennadoù, ne vern an deiziad embann lakaet dezho.',
571
-	'item_reponse_article' => 'Respont d’ar pennad',
572
-	'item_visiteur' => 'gweladenner',
499
+    'info_traductions' => 'Troidigezhioù',
500
+    'info_travail_colaboratif' => 'Labour a-stroll war ar pennadoù',
501
+    'info_un_article' => 'ur pennad,',
502
+    'info_un_site' => 'ul load',
503
+    'info_une_rubrique' => 'ur rubrikenn,',
504
+    'info_une_rubrique_02' => '1 rubrikenn',
505
+    'info_url' => 'URL :',
506
+    'info_url_proxy' => 'URL ar proksi',
507
+    'info_url_proxy_pas_conforme' => 'Direizh eo an URL proxy',
508
+    'info_url_site_pas_conforme' => 'n’eo ket reizh URL al lec’hien.',
509
+    'info_url_test_proxy' => 'URL prouata',
510
+    'info_urlref' => 'Liamm gourskrid :',
511
+    'info_utilisation_spip' => 'Bremañ e c’hellit kregiñ da implijout ar reizhiad embann ameilet...',
512
+    'info_visites_par_mois' => 'Diskouez dre viz :',
513
+    'info_visiteur_1' => 'Gweladenner',
514
+    'info_visiteur_2' => 'Mont d’al lec’hienn foran',
515
+    'info_visiteurs' => 'Gweladennerion',
516
+    'info_visiteurs_02' => 'Gweladenner al lec’hienn foran',
517
+    'info_webmestre_forces' => 'termenet eo ar vistri-gwiad bremañ e <tt>@file_options@</tt>.',
518
+    'install_adresse_base_hebergeur' => 'Chomlec’h an diaz titouroù roet gant an herberc’hier',
519
+    'install_connect_ok' => 'Disklêriet eo bet ar bon nevez dindan anv an dafariad @connect@.',
520
+    'install_echec_annonce' => 'Moarvat e c’hwito ar staliadur pe e kaso d’ul lec’hienn na’z aio ket en-dro...',
521
+    'install_extension_mbstring' => 'Ne’z a ket SPIP en-dro gant :',
522
+    'install_extension_php_obligatoire' => 'Ezhomm en deus SPIP eus an astenn php :',
523
+    'install_login_base_hebergeur' => 'Kod kevreañ roet gant an herberc’hier',
524
+    'install_nom_base_hebergeur' => 'Anv an diaz roet gant an herberc’hier :',
525
+    'install_pas_table' => 'Taolenn ebet en diaz evit poent',
526
+    'install_pass_base_hebergeur' => 'Ger-tremen kevreañ roet gant an herberc’hier',
527
+    'install_php_version' => 'n’eo ket trawalc’h stumm @version@ PHP (@minimum@ d’an nebeutañ)',
528
+    'install_select_langue' => 'Diuzit ur yezh, ha klikit war « War-lerc’h » evit kregiñ gant ar staliañ.',
529
+    'install_select_type_db' => 'Merkit ar seurt diaz titouroù :',
530
+    'install_select_type_mysql' => 'MySQL',
531
+    'install_select_type_pg' => 'PostgreSQL',
532
+    'install_select_type_sqlite2' => 'SQLite 2',
533
+    'install_select_type_sqlite3' => 'SQLite 3',
534
+    'install_serveur_hebergeur' => 'Servijer diaz titouroù lakaet gant an herberc’hier',
535
+    'install_table_prefix_hebergeur' => 'Rakger an diaz roet gant an herberc’hier :',
536
+    'install_tables_base' => 'Taolennoù er reizhiad',
537
+    'install_types_db_connus' => 'Gallout a ra SPIP ober gant <b>MySQL</b> (an hini implijetañ), <b>PostgreSQL</b> ha <b>SQLite</b>.',
538
+    'install_types_db_connus_avertissement' => 'Diwallit : meur a adveziant ne’z eont en-dro nemet gant MySQL',
539
+    'instituer_erreur_statut_a_change' => 'Daskemmet eo bet ar staelad endeo',
540
+    'instituer_erreur_statut_non_autorise' => 'Ne c’hallit ket dibab ar staelad-se',
541
+    'intem_redacteur' => 'skridaozer',
542
+    'intitule_licence' => 'Aotre',
543
+    'item_accepter_inscriptions' => 'Degemer an enskrivadurioù',
544
+    'item_activer_messages_avertissement' => 'Gweredekaat ar c’hemennoù diwall',
545
+    'item_administrateur_2' => 'merour',
546
+    'item_afficher_calendrier' => 'Diskouez en deiziataer',
547
+    'item_autoriser_syndication_integrale' => 'Skignañ an holl bennadoù er restroù sindikadañ',
548
+    'item_choix_administrateurs' => 'ar verourion',
549
+    'item_choix_generation_miniature' => 'Krouiñ arlunioù ar skeudennoù en un doare emgefre.',
550
+    'item_choix_non_generation_miniature' => 'Chom hep krouiñ arlunioù diwar skeudennoù.',
551
+    'item_choix_redacteurs' => 'ar skridaozerion',
552
+    'item_choix_visiteurs' => 'gweladennerien al lec’hienn foran',
553
+    'item_creer_fichiers_authent' => 'Krouiñ ar restroù .htpasswd',
554
+    'item_login' => 'Kod kevreañ',
555
+    'item_messagerie_agenda' => 'Gweredekaat ar postelerezh hag an deiziataer',
556
+    'item_mots_cles_association_articles' => 'ouzh ar pennadoù',
557
+    'item_mots_cles_association_rubriques' => 'ouzh ar rubrikennoù',
558
+    'item_mots_cles_association_sites' => 'ouzh al lec’hiennoù rollet pe sindikadet.',
559
+    'item_non' => 'Ket',
560
+    'item_non_accepter_inscriptions' => 'Chom hep degemer an enskrivadurioù',
561
+    'item_non_activer_messages_avertissement' => 'Kemenn diwall ebet',
562
+    'item_non_afficher_calendrier' => 'Chom hep diskouez en deiziataer',
563
+    'item_non_autoriser_syndication_integrale' => 'Embann un diverrañ hepken',
564
+    'item_non_creer_fichiers_authent' => 'Arabat krouiñ ar restroù-se',
565
+    'item_non_messagerie_agenda' => 'Diweredekaat ar postelerezh hag an deiziataer',
566
+    'item_non_publier_articles' => 'Na embann ar pennadoù a-raok an deiziad embann lakaet.',
567
+    'item_nouvel_auteur' => 'Skridaozer nevez',
568
+    'item_nouvelle_rubrique' => 'Rubrikenn nevez',
569
+    'item_oui' => 'Ya',
570
+    'item_publier_articles' => 'Embann ar pennadoù, ne vern an deiziad embann lakaet dezho.',
571
+    'item_reponse_article' => 'Respont d’ar pennad',
572
+    'item_visiteur' => 'gweladenner',
573 573
 
574
-	// J
575
-	'jour_non_connu_nc' => 'dianav',
574
+    // J
575
+    'jour_non_connu_nc' => 'dianav',
576 576
 
577
-	// L
578
-	'label_bando_outils' => 'Barrenn ostilhoù',
579
-	'label_bando_outils_afficher' => 'Diskouez an ostilhoù',
580
-	'label_bando_outils_masquer' => 'Kuzhat an ostilhoù',
581
-	'label_choix_langue' => 'Dibabit ho yezh',
582
-	'label_nom_fichier_connect' => 'Lakait anv an dafariad-mañ',
583
-	'label_slogan_site' => 'Lugan al load internet',
584
-	'label_taille_ecran' => 'Ledander ar skramm',
585
-	'label_texte_et_icones_navigation' => 'Lañser gwedeiñ',
586
-	'label_texte_et_icones_page' => 'Diskouez er bajenn',
587
-	'ldap_correspondance' => 'hêrezh ar vaezienn @champ@',
588
-	'ldap_correspondance_1' => 'Hêrezh ar maeziennoù LDAP',
589
-	'ldap_correspondance_2' => 'Merkañ anv ar vaezienn LDAP evit pep hini eus ar maeziennoù SPIP da-heul. Lezel goullo kuit na vefe leuniet pa dispartiañ dre skejoù evit esaeañ meur a vaezienn LDAP.',
590
-	'lien_ajouter_auteur' => 'Ouzhpennañ ar skridaozer-mañ',
591
-	'lien_ajouter_une_rubrique' => 'Ouzhpennañ ar rubrikenn-mañ',
592
-	'lien_email' => 'postel',
593
-	'lien_nom_site' => 'ANV AL LEC’HIENN :',
594
-	'lien_rapide_contenu' => 'Mont d’an endalc’had',
595
-	'lien_rapide_navigation' => 'Mont da verdeiñ',
596
-	'lien_rapide_recherche' => 'Mont d’an enklask',
597
-	'lien_retirer_auteur' => 'Lemel ar skridaozer',
598
-	'lien_retirer_rubrique' => 'Tennañ kuit ar rubrikenn',
599
-	'lien_retirer_tous_auteurs' => 'Tennañ kuit an holl aozerion',
600
-	'lien_retirer_toutes_rubriques' => 'Tennañ kuit holl ar rubrikennoù',
601
-	'lien_site' => 'lec’hienn',
602
-	'lien_tout_decocher' => 'Diaskañ an holl',
603
-	'lien_tout_deplier' => 'Dispakañ pep tra',
604
-	'lien_tout_replier' => 'Adpakañ pep tra',
605
-	'lien_tout_supprimer' => 'Diverkañ pep tra',
606
-	'lien_trier_nom' => 'Renkañ diouzh an anv',
607
-	'lien_trier_nombre_articles' => 'Renkañ diouzh an niver a bennadoù',
608
-	'lien_trier_statut' => 'Renkañ diouzh ar statud',
609
-	'lien_voir_en_ligne' => 'GWELET ENLINENN :',
610
-	'logo_article' => 'LOGO AR PENNAD',
611
-	'logo_auteur' => 'LOGO AR SKRIDAOZER',
612
-	'logo_rubrique' => 'LOGO AR RUBRIKENN',
613
-	'logo_site' => 'LOGO AL LOAD INTERNET-MAÑ',
614
-	'logo_standard_rubrique' => 'LOGO BOAS AR RUBRIKENNOÙ',
615
-	'logo_survol' => 'LOGO RIKLAÑ AL LOGODENN',
577
+    // L
578
+    'label_bando_outils' => 'Barrenn ostilhoù',
579
+    'label_bando_outils_afficher' => 'Diskouez an ostilhoù',
580
+    'label_bando_outils_masquer' => 'Kuzhat an ostilhoù',
581
+    'label_choix_langue' => 'Dibabit ho yezh',
582
+    'label_nom_fichier_connect' => 'Lakait anv an dafariad-mañ',
583
+    'label_slogan_site' => 'Lugan al load internet',
584
+    'label_taille_ecran' => 'Ledander ar skramm',
585
+    'label_texte_et_icones_navigation' => 'Lañser gwedeiñ',
586
+    'label_texte_et_icones_page' => 'Diskouez er bajenn',
587
+    'ldap_correspondance' => 'hêrezh ar vaezienn @champ@',
588
+    'ldap_correspondance_1' => 'Hêrezh ar maeziennoù LDAP',
589
+    'ldap_correspondance_2' => 'Merkañ anv ar vaezienn LDAP evit pep hini eus ar maeziennoù SPIP da-heul. Lezel goullo kuit na vefe leuniet pa dispartiañ dre skejoù evit esaeañ meur a vaezienn LDAP.',
590
+    'lien_ajouter_auteur' => 'Ouzhpennañ ar skridaozer-mañ',
591
+    'lien_ajouter_une_rubrique' => 'Ouzhpennañ ar rubrikenn-mañ',
592
+    'lien_email' => 'postel',
593
+    'lien_nom_site' => 'ANV AL LEC’HIENN :',
594
+    'lien_rapide_contenu' => 'Mont d’an endalc’had',
595
+    'lien_rapide_navigation' => 'Mont da verdeiñ',
596
+    'lien_rapide_recherche' => 'Mont d’an enklask',
597
+    'lien_retirer_auteur' => 'Lemel ar skridaozer',
598
+    'lien_retirer_rubrique' => 'Tennañ kuit ar rubrikenn',
599
+    'lien_retirer_tous_auteurs' => 'Tennañ kuit an holl aozerion',
600
+    'lien_retirer_toutes_rubriques' => 'Tennañ kuit holl ar rubrikennoù',
601
+    'lien_site' => 'lec’hienn',
602
+    'lien_tout_decocher' => 'Diaskañ an holl',
603
+    'lien_tout_deplier' => 'Dispakañ pep tra',
604
+    'lien_tout_replier' => 'Adpakañ pep tra',
605
+    'lien_tout_supprimer' => 'Diverkañ pep tra',
606
+    'lien_trier_nom' => 'Renkañ diouzh an anv',
607
+    'lien_trier_nombre_articles' => 'Renkañ diouzh an niver a bennadoù',
608
+    'lien_trier_statut' => 'Renkañ diouzh ar statud',
609
+    'lien_voir_en_ligne' => 'GWELET ENLINENN :',
610
+    'logo_article' => 'LOGO AR PENNAD',
611
+    'logo_auteur' => 'LOGO AR SKRIDAOZER',
612
+    'logo_rubrique' => 'LOGO AR RUBRIKENN',
613
+    'logo_site' => 'LOGO AL LOAD INTERNET-MAÑ',
614
+    'logo_standard_rubrique' => 'LOGO BOAS AR RUBRIKENNOÙ',
615
+    'logo_survol' => 'LOGO RIKLAÑ AL LOGODENN',
616 616
 
617
-	// M
618
-	'menu_aide_installation_choix_base' => 'dibab ho tiaz',
619
-	'module_fichier_langue' => 'Restr yezh',
620
-	'module_raccourci' => 'Berradenn',
621
-	'module_texte_affiche' => 'Testenn diskouezet',
622
-	'module_texte_explicatif' => 'Gallout a rit ouzhpennañ ar berradennoù da-heul e frammoù al lec’hienn foran. En un doare emgefreek e vint troet er yezhoù ma’z eus ur restr yezh.',
623
-	'module_texte_traduction' => 'Gallout a reer kaout ar restr yezh « @module@ » e :',
624
-	'mois_non_connu' => 'dianav',
617
+    // M
618
+    'menu_aide_installation_choix_base' => 'dibab ho tiaz',
619
+    'module_fichier_langue' => 'Restr yezh',
620
+    'module_raccourci' => 'Berradenn',
621
+    'module_texte_affiche' => 'Testenn diskouezet',
622
+    'module_texte_explicatif' => 'Gallout a rit ouzhpennañ ar berradennoù da-heul e frammoù al lec’hienn foran. En un doare emgefreek e vint troet er yezhoù ma’z eus ur restr yezh.',
623
+    'module_texte_traduction' => 'Gallout a reer kaout ar restr yezh « @module@ » e :',
624
+    'mois_non_connu' => 'dianav',
625 625
 
626
-	// N
627
-	'nouvelle_version_spip' => 'Prest eo an hizivaat @version@ SPIP ',
628
-	'nouvelle_version_spip_majeure' => 'Prest eo ur stumm SPIP @version@',
626
+    // N
627
+    'nouvelle_version_spip' => 'Prest eo an hizivaat @version@ SPIP ',
628
+    'nouvelle_version_spip_majeure' => 'Prest eo ur stumm SPIP @version@',
629 629
 
630
-	// O
631
-	'onglet_contenu' => 'Endalc’had',
632
-	'onglet_declarer_une_autre_base' => 'Disklêriañ un diaz all',
633
-	'onglet_discuter' => 'Flapiñ',
634
-	'onglet_interactivite' => 'Etreobererezh',
635
-	'onglet_proprietes' => 'Perzhioù',
636
-	'onglet_repartition_actuelle' => 'betek-henn',
637
-	'onglet_sous_rubriques' => 'Isrummadoù',
630
+    // O
631
+    'onglet_contenu' => 'Endalc’had',
632
+    'onglet_declarer_une_autre_base' => 'Disklêriañ un diaz all',
633
+    'onglet_discuter' => 'Flapiñ',
634
+    'onglet_interactivite' => 'Etreobererezh',
635
+    'onglet_proprietes' => 'Perzhioù',
636
+    'onglet_repartition_actuelle' => 'betek-henn',
637
+    'onglet_sous_rubriques' => 'Isrummadoù',
638 638
 
639
-	// P
640
-	'page_pas_proxy' => 'Arabat d’ar bajenn-mañ tremen dre ar proksi',
641
-	'pas_de_proxy_pour' => 'Ma vez ezhomm merkit ar mekanikoù pe domanioù na zle ket ar proksi-mañ mont en-dro evito (da skouer : @exemple@)',
642
-	'phpinfo' => 'Kefluniadur PHP',
643
-	'plugin_charge_paquet' => 'Kargañ ar pakad @name@',
644
-	'plugin_charger' => 'Pellgargañ',
645
-	'plugin_erreur_charger' => 'fazi : dibosupl eo kargañ @zip@',
646
-	'plugin_erreur_droit1' => 'N’haller ket skrivañ war ar c’havlec’h <code>@dest@</code>.',
647
-	'plugin_erreur_droit2' => 'Gwiriit an aotreoù war ar c’havlec’h-mañ (ha kempennit anezho diouzh ret), pe stailhit ar restroù dre FTP.',
648
-	'plugin_erreur_zip' => 'fazi pclzip : fazi @status@',
649
-	'plugin_etat_developpement' => 'o tiorren',
650
-	'plugin_etat_experimental' => 'arnodel',
651
-	'plugin_etat_stable' => 'stabil',
652
-	'plugin_etat_test' => 'o vezañ amprouet',
653
-	'plugin_impossible_activer' => 'Dibosupl eo gweredekaat an adveziant @plugin@',
654
-	'plugin_info_automatique1' => 'Mar fell deoc’h aotren staliadur emgefre an adveziantoù, setu penaos :',
655
-	'plugin_info_automatique1_lib' => 'Mard oc’h a-du da zesezañ emgefreek al levraoueg-mañ, teurvezit:',
656
-	'plugin_info_automatique2' => 'krouit ur c’havlec’h <code>@rep@</code> ;',
657
-	'plugin_info_automatique3' => 'Gwiriit eo aotreet-mat ar servijer da skrivañ er c’havlec’h-se.',
658
-	'plugin_info_automatique_creer' => 'da grouiñ e gwrizienn al lec’hienn.',
659
-	'plugin_info_automatique_exemples' => 'da skouer :',
660
-	'plugin_info_automatique_ftp' => 'Gallout a rit staliañ adveziantoù dre FTP er c’havlec’h <tt>@rep@</tt>',
661
-	'plugin_info_automatique_lib' => 'Adveziantoù zo a c’houlenn gellout pellgargañ restroù er c’havlec’h <code>lib/</code>. Da vezañ krouet, diouzh an dro, e gwrizienn al lec’hienn.',
662
-	'plugin_info_automatique_liste' => 'Ho rolloù adveziantoù :',
663
-	'plugin_info_automatique_liste_officielle' => 'An adveziantoù ofisiel',
664
-	'plugin_info_automatique_liste_update' => 'Hizivaat ar rolloù',
665
-	'plugin_info_automatique_ou' => 'pe...',
666
-	'plugin_info_automatique_select' => 'Diuzit un adveziant amañ a-is : pellgarget e vo gant SPIP ha staliet er c’havlec’h <code>@rep@</code> ; ma’z eus eus an adveziant-mañ c’hoazh e vo hizivaet.',
667
-	'plugin_info_credit' => 'Diwar',
668
-	'plugin_info_erreur_xml' => 'Direizh eo disklêriadur an askouez plugin-mañ',
669
-	'plugin_info_install_ok' => 'Desezañ deuet da vat !',
670
-	'plugin_info_necessite' => 'Ret :',
671
-	'plugin_info_non_compatible_spip' => 'Ne glot ket ar plugin-mañ gant an handelv SPIP-mañ',
672
-	'plugin_info_plugins_dist_1' => 'Karget ha gweredek eo an askouezioù-mañ er c’havlec’h @plugins_dist@.',
673
-	'plugin_info_plugins_dist_2' => 'Diweredekaus ez int',
674
-	'plugin_info_telecharger' => 'da bellgargañ adal @url@ ha da staliañ e @rep@',
675
-	'plugin_info_upgrade_ok' => 'Hizivaat bet kaset da benn',
676
-	'plugin_librairies_installees' => 'Levraouegoù bet staliet',
677
-	'plugin_necessite_extension_php' => 'Ezhomm en deus astenn PHP @plugin@ en version @version@.',
678
-	'plugin_necessite_extension_php_sans_version' => 'Ezhomm en deus astenn PHP @plugin@',
679
-	'plugin_necessite_lib' => 'Ezhomm en deus an adveziant-mañ eus al levraoueg @lib@',
680
-	'plugin_necessite_php' => 'Ezhomm en deus @plugin@ en version @version@.',
681
-	'plugin_necessite_plugin' => 'Ezhomm en deus eus an adveziant @plugin@ e stumm @version@.',
682
-	'plugin_necessite_plugin_sans_version' => 'Askouez @plugin@ ret',
683
-	'plugin_necessite_spip' => 'Ezhomm zo eus stumm @version@ SPIP da nebeutañ.',
684
-	'plugin_source' => 'orin: ',
685
-	'plugin_titre_automatique' => 'Staliadur emgefre',
686
-	'plugin_titre_automatique_ajouter' => 'Ouzhpennañ adveziantoù',
687
-	'plugin_titre_installation' => 'Desezañ an askouez @plugin@',
688
-	'plugin_titre_modifier' => 'Va askouezioù plugin',
689
-	'plugin_utilise_extension_php' => 'An astenn PHP @plugin@ rank bezañ e stumm @version@.',
690
-	'plugin_utilise_php' => ' @plugin@ a rank bezañ @version@.',
691
-	'plugin_utilise_plugin' => 'Ar plugin @plugin@ rank bezañ e doare @version@.',
692
-	'plugin_zip_active' => 'Kendalc’hit evit e weredekaat',
693
-	'plugin_zip_adresse' => 'merkit amañ a-is chomlec’h restr zip un adveziant da bellgargañ, pe hini ul rollad adveziantoù.',
694
-	'plugin_zip_adresse_champ' => 'Chomlec’h an adveziant pe hini ar roll ',
695
-	'plugin_zip_content' => 'Ennañ emañ ar restroù (@taille@),<br />prest da vezañ staliet er c’havlec’h <code>@rep@</code>',
696
-	'plugin_zip_installe_finie' => 'Diwasket ha staliet eo bet ar restr @zip@ .',
697
-	'plugin_zip_installe_rep_finie' => 'Diwasket eo bet ar restr @zip@ ha staliet er c’havlec’h @rep@',
698
-	'plugin_zip_installer' => 'Bremañ e c’hellit staliañ anezhañ.',
699
-	'plugin_zip_telecharge' => 'Pellgarget eo bet ar restr @zip@',
700
-	'plugins_actif_aucun' => 'Askouez plugin gweredek ebet',
701
-	'plugins_actif_un' => 'Un askouez plugin gweredek',
702
-	'plugins_actifs' => '@count@ adveziant gweredekaet.',
703
-	'plugins_actifs_liste' => 'Gweredek',
704
-	'plugins_compte' => '@count@ adveziant',
705
-	'plugins_disponible_un' => 'Un askouez plugin prest',
706
-	'plugins_disponibles' => '@count@ adveziant hegerz.',
707
-	'plugins_erreur' => 'Fazi en adveziantoù : @plugins@',
708
-	'plugins_liste' => 'Roll an adveziantoù',
709
-	'plugins_liste_dist' => 'Askouezioù plugin prennet',
710
-	'plugins_recents' => 'Askouezioù Plugin nevez',
711
-	'plugins_tous_liste' => 'Holl',
712
-	'plugins_vue_hierarchie' => 'Urzhaz',
713
-	'plugins_vue_liste' => 'Roll',
714
-	'protocole_ldap' => 'Stumm ar protokol :',
639
+    // P
640
+    'page_pas_proxy' => 'Arabat d’ar bajenn-mañ tremen dre ar proksi',
641
+    'pas_de_proxy_pour' => 'Ma vez ezhomm merkit ar mekanikoù pe domanioù na zle ket ar proksi-mañ mont en-dro evito (da skouer : @exemple@)',
642
+    'phpinfo' => 'Kefluniadur PHP',
643
+    'plugin_charge_paquet' => 'Kargañ ar pakad @name@',
644
+    'plugin_charger' => 'Pellgargañ',
645
+    'plugin_erreur_charger' => 'fazi : dibosupl eo kargañ @zip@',
646
+    'plugin_erreur_droit1' => 'N’haller ket skrivañ war ar c’havlec’h <code>@dest@</code>.',
647
+    'plugin_erreur_droit2' => 'Gwiriit an aotreoù war ar c’havlec’h-mañ (ha kempennit anezho diouzh ret), pe stailhit ar restroù dre FTP.',
648
+    'plugin_erreur_zip' => 'fazi pclzip : fazi @status@',
649
+    'plugin_etat_developpement' => 'o tiorren',
650
+    'plugin_etat_experimental' => 'arnodel',
651
+    'plugin_etat_stable' => 'stabil',
652
+    'plugin_etat_test' => 'o vezañ amprouet',
653
+    'plugin_impossible_activer' => 'Dibosupl eo gweredekaat an adveziant @plugin@',
654
+    'plugin_info_automatique1' => 'Mar fell deoc’h aotren staliadur emgefre an adveziantoù, setu penaos :',
655
+    'plugin_info_automatique1_lib' => 'Mard oc’h a-du da zesezañ emgefreek al levraoueg-mañ, teurvezit:',
656
+    'plugin_info_automatique2' => 'krouit ur c’havlec’h <code>@rep@</code> ;',
657
+    'plugin_info_automatique3' => 'Gwiriit eo aotreet-mat ar servijer da skrivañ er c’havlec’h-se.',
658
+    'plugin_info_automatique_creer' => 'da grouiñ e gwrizienn al lec’hienn.',
659
+    'plugin_info_automatique_exemples' => 'da skouer :',
660
+    'plugin_info_automatique_ftp' => 'Gallout a rit staliañ adveziantoù dre FTP er c’havlec’h <tt>@rep@</tt>',
661
+    'plugin_info_automatique_lib' => 'Adveziantoù zo a c’houlenn gellout pellgargañ restroù er c’havlec’h <code>lib/</code>. Da vezañ krouet, diouzh an dro, e gwrizienn al lec’hienn.',
662
+    'plugin_info_automatique_liste' => 'Ho rolloù adveziantoù :',
663
+    'plugin_info_automatique_liste_officielle' => 'An adveziantoù ofisiel',
664
+    'plugin_info_automatique_liste_update' => 'Hizivaat ar rolloù',
665
+    'plugin_info_automatique_ou' => 'pe...',
666
+    'plugin_info_automatique_select' => 'Diuzit un adveziant amañ a-is : pellgarget e vo gant SPIP ha staliet er c’havlec’h <code>@rep@</code> ; ma’z eus eus an adveziant-mañ c’hoazh e vo hizivaet.',
667
+    'plugin_info_credit' => 'Diwar',
668
+    'plugin_info_erreur_xml' => 'Direizh eo disklêriadur an askouez plugin-mañ',
669
+    'plugin_info_install_ok' => 'Desezañ deuet da vat !',
670
+    'plugin_info_necessite' => 'Ret :',
671
+    'plugin_info_non_compatible_spip' => 'Ne glot ket ar plugin-mañ gant an handelv SPIP-mañ',
672
+    'plugin_info_plugins_dist_1' => 'Karget ha gweredek eo an askouezioù-mañ er c’havlec’h @plugins_dist@.',
673
+    'plugin_info_plugins_dist_2' => 'Diweredekaus ez int',
674
+    'plugin_info_telecharger' => 'da bellgargañ adal @url@ ha da staliañ e @rep@',
675
+    'plugin_info_upgrade_ok' => 'Hizivaat bet kaset da benn',
676
+    'plugin_librairies_installees' => 'Levraouegoù bet staliet',
677
+    'plugin_necessite_extension_php' => 'Ezhomm en deus astenn PHP @plugin@ en version @version@.',
678
+    'plugin_necessite_extension_php_sans_version' => 'Ezhomm en deus astenn PHP @plugin@',
679
+    'plugin_necessite_lib' => 'Ezhomm en deus an adveziant-mañ eus al levraoueg @lib@',
680
+    'plugin_necessite_php' => 'Ezhomm en deus @plugin@ en version @version@.',
681
+    'plugin_necessite_plugin' => 'Ezhomm en deus eus an adveziant @plugin@ e stumm @version@.',
682
+    'plugin_necessite_plugin_sans_version' => 'Askouez @plugin@ ret',
683
+    'plugin_necessite_spip' => 'Ezhomm zo eus stumm @version@ SPIP da nebeutañ.',
684
+    'plugin_source' => 'orin: ',
685
+    'plugin_titre_automatique' => 'Staliadur emgefre',
686
+    'plugin_titre_automatique_ajouter' => 'Ouzhpennañ adveziantoù',
687
+    'plugin_titre_installation' => 'Desezañ an askouez @plugin@',
688
+    'plugin_titre_modifier' => 'Va askouezioù plugin',
689
+    'plugin_utilise_extension_php' => 'An astenn PHP @plugin@ rank bezañ e stumm @version@.',
690
+    'plugin_utilise_php' => ' @plugin@ a rank bezañ @version@.',
691
+    'plugin_utilise_plugin' => 'Ar plugin @plugin@ rank bezañ e doare @version@.',
692
+    'plugin_zip_active' => 'Kendalc’hit evit e weredekaat',
693
+    'plugin_zip_adresse' => 'merkit amañ a-is chomlec’h restr zip un adveziant da bellgargañ, pe hini ul rollad adveziantoù.',
694
+    'plugin_zip_adresse_champ' => 'Chomlec’h an adveziant pe hini ar roll ',
695
+    'plugin_zip_content' => 'Ennañ emañ ar restroù (@taille@),<br />prest da vezañ staliet er c’havlec’h <code>@rep@</code>',
696
+    'plugin_zip_installe_finie' => 'Diwasket ha staliet eo bet ar restr @zip@ .',
697
+    'plugin_zip_installe_rep_finie' => 'Diwasket eo bet ar restr @zip@ ha staliet er c’havlec’h @rep@',
698
+    'plugin_zip_installer' => 'Bremañ e c’hellit staliañ anezhañ.',
699
+    'plugin_zip_telecharge' => 'Pellgarget eo bet ar restr @zip@',
700
+    'plugins_actif_aucun' => 'Askouez plugin gweredek ebet',
701
+    'plugins_actif_un' => 'Un askouez plugin gweredek',
702
+    'plugins_actifs' => '@count@ adveziant gweredekaet.',
703
+    'plugins_actifs_liste' => 'Gweredek',
704
+    'plugins_compte' => '@count@ adveziant',
705
+    'plugins_disponible_un' => 'Un askouez plugin prest',
706
+    'plugins_disponibles' => '@count@ adveziant hegerz.',
707
+    'plugins_erreur' => 'Fazi en adveziantoù : @plugins@',
708
+    'plugins_liste' => 'Roll an adveziantoù',
709
+    'plugins_liste_dist' => 'Askouezioù plugin prennet',
710
+    'plugins_recents' => 'Askouezioù Plugin nevez',
711
+    'plugins_tous_liste' => 'Holl',
712
+    'plugins_vue_hierarchie' => 'Urzhaz',
713
+    'plugins_vue_liste' => 'Roll',
714
+    'protocole_ldap' => 'Stumm ar protokol :',
715 715
 
716
-	// Q
717
-	'queue_executer_maintenant' => 'Seveniñ bremañ',
718
-	'queue_info_purger' => 'Bez e c’hallit lemel an holl labourioù o c’hortoz, ha nevesaat roll al labourioù mareadek',
719
-	'queue_nb_jobs_in_queue' => '@nb@ labourioù o c’hortoz',
720
-	'queue_next_job_in_nb_sec' => 'Labour-all a-benn @nb@ eilenn',
721
-	'queue_no_job_in_queue' => 'Labour ebet o chom a-ispilh',
722
-	'queue_one_job_in_queue' => '1 labour o chom a-ispilh',
723
-	'queue_priorite_tache' => 'prioriezh',
724
-	'queue_purger_queue' => 'Nevesaat roll al labourioù',
725
-	'queue_titre' => 'Roll al labourioù en-adreñv',
716
+    // Q
717
+    'queue_executer_maintenant' => 'Seveniñ bremañ',
718
+    'queue_info_purger' => 'Bez e c’hallit lemel an holl labourioù o c’hortoz, ha nevesaat roll al labourioù mareadek',
719
+    'queue_nb_jobs_in_queue' => '@nb@ labourioù o c’hortoz',
720
+    'queue_next_job_in_nb_sec' => 'Labour-all a-benn @nb@ eilenn',
721
+    'queue_no_job_in_queue' => 'Labour ebet o chom a-ispilh',
722
+    'queue_one_job_in_queue' => '1 labour o chom a-ispilh',
723
+    'queue_priorite_tache' => 'prioriezh',
724
+    'queue_purger_queue' => 'Nevesaat roll al labourioù',
725
+    'queue_titre' => 'Roll al labourioù en-adreñv',
726 726
 
727
-	// R
728
-	'repertoire_plugins' => 'Kavlec’h :',
729
-	'required' => '[Rekis]',
727
+    // R
728
+    'repertoire_plugins' => 'Kavlec’h :',
729
+    'required' => '[Rekis]',
730 730
 
731
-	// S
732
-	'sans_heure' => 'hep eur',
733
-	'statut_admin_restreint' => 'merour strishaet',
734
-	'statut_webmestre' => 'mestr-gwiad',
731
+    // S
732
+    'sans_heure' => 'hep eur',
733
+    'statut_admin_restreint' => 'merour strishaet',
734
+    'statut_webmestre' => 'mestr-gwiad',
735 735
 
736
-	// T
737
-	'tache_cron_asap' => 'Lodenn labour CRON @function@ (ASAP)',
738
-	'tache_cron_secondes' => 'Lodenn labour CRON @function@ (bep @nb@ eilenn)',
739
-	'taille_cache_image' => '@taille@ eo hollad ar skeudennoù jedet gant ent emgefre gant SPIP (skeudennigoù an teulioù, an titloù kinniget dindan ur stumm grafek, ar fonksionoù jedoniezh er stumm TeX...) hag a zo er c’havlec’h @dir@.',
740
-	'taille_cache_infinie' => 'N’eo ket bevennet ment kavlec’h ar grubuilh war al lec’hienn-mañ.',
741
-	'taille_cache_maxi' => 'Klask a ra SPIP bevenniñ ment kavlec’h krubuilh al lec’hienn-mañ e-tro <b>@octets@</b> a roadennoù.',
742
-	'taille_cache_moins_de' => 'Ment ar c’huzh@octets@.',
743
-	'taille_cache_octets' => '@octets@ eo ment ar grubuilh evit ar mare.',
744
-	'taille_cache_vide' => 'Goullo eo ar grubuilh',
745
-	'taille_repertoire_cache' => 'Ment kavlec’h ar grubuilh',
746
-	'text_article_propose_publication' => 'Pennad kinniget evit an embann.',
747
-	'texte_acces_ldap_anonyme_1' => 'Servijerioù LDAP zo ne aotreont ket ar monedoù dizanv. En degouezh-se e vo ret deoc’h merkañ un anv moned a-raok gallout klask titouroù er rollad. Peurliesañ e c’hallot lezel goullo ar maeziennoù-se koulskoude.',
748
-	'texte_admin_effacer_01' => 'Diverkañ a raio an urzhad-se <i>PEP TRA</i> en ho tiaz titouroù,
736
+    // T
737
+    'tache_cron_asap' => 'Lodenn labour CRON @function@ (ASAP)',
738
+    'tache_cron_secondes' => 'Lodenn labour CRON @function@ (bep @nb@ eilenn)',
739
+    'taille_cache_image' => '@taille@ eo hollad ar skeudennoù jedet gant ent emgefre gant SPIP (skeudennigoù an teulioù, an titloù kinniget dindan ur stumm grafek, ar fonksionoù jedoniezh er stumm TeX...) hag a zo er c’havlec’h @dir@.',
740
+    'taille_cache_infinie' => 'N’eo ket bevennet ment kavlec’h ar grubuilh war al lec’hienn-mañ.',
741
+    'taille_cache_maxi' => 'Klask a ra SPIP bevenniñ ment kavlec’h krubuilh al lec’hienn-mañ e-tro <b>@octets@</b> a roadennoù.',
742
+    'taille_cache_moins_de' => 'Ment ar c’huzh@octets@.',
743
+    'taille_cache_octets' => '@octets@ eo ment ar grubuilh evit ar mare.',
744
+    'taille_cache_vide' => 'Goullo eo ar grubuilh',
745
+    'taille_repertoire_cache' => 'Ment kavlec’h ar grubuilh',
746
+    'text_article_propose_publication' => 'Pennad kinniget evit an embann.',
747
+    'texte_acces_ldap_anonyme_1' => 'Servijerioù LDAP zo ne aotreont ket ar monedoù dizanv. En degouezh-se e vo ret deoc’h merkañ un anv moned a-raok gallout klask titouroù er rollad. Peurliesañ e c’hallot lezel goullo ar maeziennoù-se koulskoude.',
748
+    'texte_admin_effacer_01' => 'Diverkañ a raio an urzhad-se <i>PEP TRA</i> en ho tiaz titouroù,
749 749
 da lavaret eo <i>holl</i> aotreoù ar verourien hag ar skridaozerien. Goude bezañ bet graet se e rankot
750 750
 adstaliañ SPIP hag adkrouiñ un diaz titouroù nevez hag ur moned merour kentañ nevez.',
751
-	'texte_adresse_annuaire_1' => '(M’eo staliet ar roll tud war an hevelep mekanik hag al lec’hienn-mañ, e tle bezañ «localhost».)',
752
-	'texte_ajout_auteur' => 'Ouzhpennet eo bet ar skridaozer-mañ d’ar pennad :',
753
-	'texte_annuaire_ldap_1' => 'M’hoc’h eus tro d’ober gant ur roll tud (LDAP) e c’hellit e implijout evit enporzhiañ implijerien war SPIP ent emgefre.',
754
-	'texte_article_statut' => 'Ar pennad-mañ zo :',
755
-	'texte_article_virtuel' => 'Pennad galloudel',
756
-	'texte_article_virtuel_reference' => '<b>pennad galloudel :</b> pennad menegeret en ho lec’hienn SPIP, met adkaset war-du un URL all. Evit paouez gant an adkas, diverkañ an URL a-us.',
757
-	'texte_aucun_resultat_auteur' => 'Disoc’h ebet evit "@cherche_auteur@"',
758
-	'texte_auteur_messagerie' => 'Gallout a ra al lec’hienn-mañ diskouez deoc’h roll ar skridaozerien kevreet a-hed an amzer, ar pezh a aotren ac’hanoc’h da eskemm ganto war ar prim. Gallout a rit dibab chom hep dont war wel war ar roll-mañ (« diwelus » oc’h neuze evit an implijerien all).',
759
-	'texte_auteurs' => 'AR SKRIDAOZERIEN',
760
-	'texte_choix_base_1' => 'Dibabit ho tiaz :',
761
-	'texte_choix_base_2' => 'Er servijer SQL ez eus meur a ziaz titouroù.',
762
-	'texte_choix_base_3' => '<b>Diuzit</b> amañ dindan an hini zo bet lakaet deoc’h gant an herberc’hier :',
763
-	'texte_choix_table_prefix' => 'Rakger an taolennoù :',
764
-	'texte_compte_element' => '@count@ elfenn',
765
-	'texte_compte_elements' => '@count@ elfenn',
766
-	'texte_conflit_edition_correction' => 'Gwiriit amañ dindan an diforc’hioù etre daou stumm an destenn. Gallout a rit ivez eilañ ho kemmoù, hag adkregiñ.',
767
-	'texte_connexion_mysql' => 'Sellit ouzh an titouroù roet gant an herberc’hier : Enno e tlefec’h kavout ar servijer diazoù titouroù a vez kinniget gantañ hag ar c’hodoù kevreañ personel.',
768
-	'texte_contenu_article' => '(Kinnig ar pennad berr-ha-berr.)',
769
-	'texte_contenu_articles' => 'Hevez ar vaketenn dibabet evit sevel ho lec’hienn e c’hellit divizout
751
+    'texte_adresse_annuaire_1' => '(M’eo staliet ar roll tud war an hevelep mekanik hag al lec’hienn-mañ, e tle bezañ «localhost».)',
752
+    'texte_ajout_auteur' => 'Ouzhpennet eo bet ar skridaozer-mañ d’ar pennad :',
753
+    'texte_annuaire_ldap_1' => 'M’hoc’h eus tro d’ober gant ur roll tud (LDAP) e c’hellit e implijout evit enporzhiañ implijerien war SPIP ent emgefre.',
754
+    'texte_article_statut' => 'Ar pennad-mañ zo :',
755
+    'texte_article_virtuel' => 'Pennad galloudel',
756
+    'texte_article_virtuel_reference' => '<b>pennad galloudel :</b> pennad menegeret en ho lec’hienn SPIP, met adkaset war-du un URL all. Evit paouez gant an adkas, diverkañ an URL a-us.',
757
+    'texte_aucun_resultat_auteur' => 'Disoc’h ebet evit "@cherche_auteur@"',
758
+    'texte_auteur_messagerie' => 'Gallout a ra al lec’hienn-mañ diskouez deoc’h roll ar skridaozerien kevreet a-hed an amzer, ar pezh a aotren ac’hanoc’h da eskemm ganto war ar prim. Gallout a rit dibab chom hep dont war wel war ar roll-mañ (« diwelus » oc’h neuze evit an implijerien all).',
759
+    'texte_auteurs' => 'AR SKRIDAOZERIEN',
760
+    'texte_choix_base_1' => 'Dibabit ho tiaz :',
761
+    'texte_choix_base_2' => 'Er servijer SQL ez eus meur a ziaz titouroù.',
762
+    'texte_choix_base_3' => '<b>Diuzit</b> amañ dindan an hini zo bet lakaet deoc’h gant an herberc’hier :',
763
+    'texte_choix_table_prefix' => 'Rakger an taolennoù :',
764
+    'texte_compte_element' => '@count@ elfenn',
765
+    'texte_compte_elements' => '@count@ elfenn',
766
+    'texte_conflit_edition_correction' => 'Gwiriit amañ dindan an diforc’hioù etre daou stumm an destenn. Gallout a rit ivez eilañ ho kemmoù, hag adkregiñ.',
767
+    'texte_connexion_mysql' => 'Sellit ouzh an titouroù roet gant an herberc’hier : Enno e tlefec’h kavout ar servijer diazoù titouroù a vez kinniget gantañ hag ar c’hodoù kevreañ personel.',
768
+    'texte_contenu_article' => '(Kinnig ar pennad berr-ha-berr.)',
769
+    'texte_contenu_articles' => 'Hevez ar vaketenn dibabet evit sevel ho lec’hienn e c’hellit divizout
770 770
   ne vo ket implijet elfennoù zo er pennadoù.
771 771
   Implijit al listenn amañ dindan evit merkañ pere eo an elfennoù a c’heller ober ganto.',
772
-	'texte_crash_base' => 'Ma’z eo sac’het ho tiaz titouroù e c’hellit klask ratreañ en un doare emgefreek.',
773
-	'texte_creer_rubrique' => 'A-raok gallout skrivañ pennadoù<br /> e rankit krouiñ ur rubrikenn.',
774
-	'texte_date_creation_article' => 'DEIZIAD KROUIÑ AR PENNAD :',
775
-	'texte_date_creation_objet' => 'Deiziad krouiñ :', # on ajoute le ":"
776
-	'texte_date_publication_anterieure' => 'DEIZIAD EMBANN KENT :',
777
-	'texte_date_publication_anterieure_nonaffichee' => 'Na ziskouez an deiziad embann kent.',
778
-	'texte_date_publication_article' => 'DEIZIAD EMBANN ENLINENN :',
779
-	'texte_date_publication_objet' => 'Deiziad embann enlinenn :',
780
-	'texte_definir_comme_traduction_rubrique' => 'Ur droidigezh eo ar rubrikenn-mañ deus ar rubrikenn niverenn :',
781
-	'texte_descriptif_rapide' => 'Berr-ha-berr',
782
-	'texte_effacer_base' => 'Diverkañ diaz titouroù SPIP',
783
-	'texte_effacer_statistiques' => 'Diverkañ ar stadegoù',
784
-	'texte_en_cours_validation' => 'Kinniget eo ar pennadoù ha berrskridoù amañ dindan d’an embann.',
785
-	'texte_enrichir_mise_a_jour' => 'Gallout a rit bravaat pajennaozañ ho testenn en ur implijout « berradennoù tipografek ».',
786
-	'texte_fichier_authent' => '<b>Ha rankout a ra SPIP krouiñ ar restroù dibar <tt>.htpasswd</tt>
772
+    'texte_crash_base' => 'Ma’z eo sac’het ho tiaz titouroù e c’hellit klask ratreañ en un doare emgefreek.',
773
+    'texte_creer_rubrique' => 'A-raok gallout skrivañ pennadoù<br /> e rankit krouiñ ur rubrikenn.',
774
+    'texte_date_creation_article' => 'DEIZIAD KROUIÑ AR PENNAD :',
775
+    'texte_date_creation_objet' => 'Deiziad krouiñ :', # on ajoute le ":"
776
+    'texte_date_publication_anterieure' => 'DEIZIAD EMBANN KENT :',
777
+    'texte_date_publication_anterieure_nonaffichee' => 'Na ziskouez an deiziad embann kent.',
778
+    'texte_date_publication_article' => 'DEIZIAD EMBANN ENLINENN :',
779
+    'texte_date_publication_objet' => 'Deiziad embann enlinenn :',
780
+    'texte_definir_comme_traduction_rubrique' => 'Ur droidigezh eo ar rubrikenn-mañ deus ar rubrikenn niverenn :',
781
+    'texte_descriptif_rapide' => 'Berr-ha-berr',
782
+    'texte_effacer_base' => 'Diverkañ diaz titouroù SPIP',
783
+    'texte_effacer_statistiques' => 'Diverkañ ar stadegoù',
784
+    'texte_en_cours_validation' => 'Kinniget eo ar pennadoù ha berrskridoù amañ dindan d’an embann.',
785
+    'texte_enrichir_mise_a_jour' => 'Gallout a rit bravaat pajennaozañ ho testenn en ur implijout « berradennoù tipografek ».',
786
+    'texte_fichier_authent' => '<b>Ha rankout a ra SPIP krouiñ ar restroù dibar <tt>.htpasswd</tt>
787 787
   ha <tt>.htpasswd-admin</tt> er c’havlec’h @dossier@ ?</b><p>
788 788
   Gant ar restroù-se e c’hallit herzel ouzh ar re n’int ket skridaozer pe merour da vont war bajenoù all zo
789 789
   (programm stadegoù diavaez, da skouer).</p><p>
790 790
   Ma n’hoc’h eus ket ezhomm d’hen ober e c’hellit lezel an traoù evel m’emaint lakaet dre-ziouer
791 791
   (ne vo ket krouet ar restroù).</p>',
792
-	'texte_informations_personnelles_1' => 'Bremañ e vo krouet gant ar reizhiad ur moned personel d’al lec’hienn evidoc’h.',
793
-	'texte_informations_personnelles_2' => '(Notenn : m’emaoc’h oc’h adstaliañ SPIP hag ez a c’hoazh ho moned kozh en-dro e c’hallit ',
794
-	'texte_introductif_article' => '(Testenn digeriñ ar pennad)',
795
-	'texte_jeu_caractere' => 'Gant al lizherenneg hollvedel (<tt>utf-8</tt>) oc’h aliet d’ober : aotren a ra diskwel testennoù en holl yezhoù, ha ne sav kudenn kenglotañ ebet ken gant ar merdeerioù a-vremañ.',
796
-	'texte_jeu_caractere_3' => 'Gant ar strobad arouezennoù-mañ e ra ho lec’hienn :',
797
-	'texte_jeu_caractere_4' => 'Ma ne glot ket gant gwirvoud ho roadennoù (da skouer, m’emaoc’h o paouez assevel un diaz titouroù), pe ma <em>loc’hit gant al lec’hienn-mañ</em> hag hoc’h eus c’hoant d’ober gant ur strobad arouezennoù all, resisait se amañ dindan :',
798
-	'texte_login_ldap_1' => '(Na skrivit netra evit ur moned dizanv, pe skrivit an hent klok, da skouer « <tt>uid=anv, ou=users, dc=ma-zomani, dc=com</tt> ».)',
799
-	'texte_login_precaution' => 'Diwallit ! Setu ar c’hod kevreañ a dalvez deoc’h da gevreañ evit ar mare.
792
+    'texte_informations_personnelles_1' => 'Bremañ e vo krouet gant ar reizhiad ur moned personel d’al lec’hienn evidoc’h.',
793
+    'texte_informations_personnelles_2' => '(Notenn : m’emaoc’h oc’h adstaliañ SPIP hag ez a c’hoazh ho moned kozh en-dro e c’hallit ',
794
+    'texte_introductif_article' => '(Testenn digeriñ ar pennad)',
795
+    'texte_jeu_caractere' => 'Gant al lizherenneg hollvedel (<tt>utf-8</tt>) oc’h aliet d’ober : aotren a ra diskwel testennoù en holl yezhoù, ha ne sav kudenn kenglotañ ebet ken gant ar merdeerioù a-vremañ.',
796
+    'texte_jeu_caractere_3' => 'Gant ar strobad arouezennoù-mañ e ra ho lec’hienn :',
797
+    'texte_jeu_caractere_4' => 'Ma ne glot ket gant gwirvoud ho roadennoù (da skouer, m’emaoc’h o paouez assevel un diaz titouroù), pe ma <em>loc’hit gant al lec’hienn-mañ</em> hag hoc’h eus c’hoant d’ober gant ur strobad arouezennoù all, resisait se amañ dindan :',
798
+    'texte_login_ldap_1' => '(Na skrivit netra evit ur moned dizanv, pe skrivit an hent klok, da skouer « <tt>uid=anv, ou=users, dc=ma-zomani, dc=com</tt> ».)',
799
+    'texte_login_precaution' => 'Diwallit ! Setu ar c’hod kevreañ a dalvez deoc’h da gevreañ evit ar mare.
800 800
  Taolit evezh gant ar furmskrid-mañ...',
801
-	'texte_messagerie_agenda' => 'Gant ur postelerezh e c’hell ar skridaozerien eskemm an eil gant egile dre lodenn brevez al lec’hienn. Un deiziataer zo stag outañ.',
802
-	'texte_mise_a_niveau_base_1' => 'O paouez hizivaat restroù SPIP emaoc’h. Bremañ eo dav ober kemend-all evit an diaz titouroù.',
803
-	'texte_modifier_article' => 'Kemmañ ar pennad :',
804
-	'texte_multilinguisme' => 'Mar fell deoc’h merañ pennadoù e meur a yezh, dre un doare merdeiñ kemplezh, e c’hallit ouzhpennañ ul lañser dibab yezhoù war ar pennadoù ha/pe war ar rubrikennoù, hervez ar mod m’eo aozet ho load internet.',
805
-	'texte_multilinguisme_trad' => 'Gallout a rit gweredekaat ur reizhiad merañ liammoù etre troidigezhioù disheñvel ar pennadoù ivez.',
806
-	'texte_non_compresse' => '<i>ket gwasket</i> (ne vez ket skoret an arc’hwel-se gant ho servijer)',
807
-	'texte_nouvelle_version_spip_1' => 'Ur stumm nevez eus SPIP zo bet staliet ganeoc’h.',
808
-	'texte_nouvelle_version_spip_2' => 'Evit peurstaliañ anezhañ ez eus ezhomm un hizivadenn glokoc’h eget boaz. Ma’z oc’h webmestr al lec’hienn, diverkit ar restr @connect@ hag adkrogit gant ar staliadur a-benn hizivaat an arventennoù kevreañ ouzh an diaz titouroù.<p> (NM. M’hoc’h eus ankouaet ho titouroù kevreañ , taolit ur sell ouzh ar restr @connect@ a-raok he diverkañ...)</p>',
809
-	'texte_operation_echec' => 'Distroit d’ar bajenn kent, diuzit un diaz all, pe krouit unan nevez. Gwiriit an titouroù bet roet deoc’h gant an herberc’hier.',
810
-	'texte_plus_trois_car' => 'ouzhpenn 3 arouezenn',
811
-	'texte_plusieurs_articles' => 'Meur a skridaozer bet kavet evit "@cherche_auteur@":',
812
-	'texte_port_annuaire' => '(Peurliesañ e tegouezh an talvoud roet dre ziouer.)',
813
-	'texte_presente_plugin' => 'War ar bajenn-mañ emañ rollet an adveziantoù hegerz evit al lec’hienn-mañ. Gallout a rit gweredekaat an adveziantoù a fell deoc’h, en ur askañ al log a zere',
814
-	'texte_proposer_publication' => 'Ur wech echu ho pennad <br /> e c’hellit kinnig ma vo embannet.',
815
-	'texte_proxy' => 'E degouezhioù zo (enrouedad, rouedadoù gwarezet,...), n’hallo al lec’hiennoù pell (teuliad skoazell SPIP, lec’hiennoù sindikadet, ...) bezañ tizhet nemet dre ur <i>proksi HTTP</i>. Diouzh ma vez, skrivit amañ dindan ar chomlec’h anezhañ, er stumm @proxy_en_cours@. Peurliesañ ne vo skrivet netra amañ.',
816
-	'texte_publication_articles_post_dates' => 'Peseurt emzalc’h a zle SPIP kaout gant ar pennadoù zo bet lakaet dezho un deiziad embann en amzer da zont ?',
817
-	'texte_rappel_selection_champs' => '[N’ankouait ket diuzañ mat ar vaezienn-mañ.]',
818
-	'texte_recalcul_page' => 'Mar fell deoc’h adjediñ ur bajenn hepken, tremenit kentoc’h dre al lodenn foran hag implijit an nozelenn « adjediñ ».',
819
-	'texte_recuperer_base' => 'Ratreañ an diaz titouroù',
820
-	'texte_reference_mais_redirige' => 'pennad menegeret en ho lec’hienn SPIP, met adkaset davet un URL all.',
821
-	'texte_requetes_echouent' => '<b>Pa chom sac’het ingal pe hep abeg rekedoù SQL,
801
+    'texte_messagerie_agenda' => 'Gant ur postelerezh e c’hell ar skridaozerien eskemm an eil gant egile dre lodenn brevez al lec’hienn. Un deiziataer zo stag outañ.',
802
+    'texte_mise_a_niveau_base_1' => 'O paouez hizivaat restroù SPIP emaoc’h. Bremañ eo dav ober kemend-all evit an diaz titouroù.',
803
+    'texte_modifier_article' => 'Kemmañ ar pennad :',
804
+    'texte_multilinguisme' => 'Mar fell deoc’h merañ pennadoù e meur a yezh, dre un doare merdeiñ kemplezh, e c’hallit ouzhpennañ ul lañser dibab yezhoù war ar pennadoù ha/pe war ar rubrikennoù, hervez ar mod m’eo aozet ho load internet.',
805
+    'texte_multilinguisme_trad' => 'Gallout a rit gweredekaat ur reizhiad merañ liammoù etre troidigezhioù disheñvel ar pennadoù ivez.',
806
+    'texte_non_compresse' => '<i>ket gwasket</i> (ne vez ket skoret an arc’hwel-se gant ho servijer)',
807
+    'texte_nouvelle_version_spip_1' => 'Ur stumm nevez eus SPIP zo bet staliet ganeoc’h.',
808
+    'texte_nouvelle_version_spip_2' => 'Evit peurstaliañ anezhañ ez eus ezhomm un hizivadenn glokoc’h eget boaz. Ma’z oc’h webmestr al lec’hienn, diverkit ar restr @connect@ hag adkrogit gant ar staliadur a-benn hizivaat an arventennoù kevreañ ouzh an diaz titouroù.<p> (NM. M’hoc’h eus ankouaet ho titouroù kevreañ , taolit ur sell ouzh ar restr @connect@ a-raok he diverkañ...)</p>',
809
+    'texte_operation_echec' => 'Distroit d’ar bajenn kent, diuzit un diaz all, pe krouit unan nevez. Gwiriit an titouroù bet roet deoc’h gant an herberc’hier.',
810
+    'texte_plus_trois_car' => 'ouzhpenn 3 arouezenn',
811
+    'texte_plusieurs_articles' => 'Meur a skridaozer bet kavet evit "@cherche_auteur@":',
812
+    'texte_port_annuaire' => '(Peurliesañ e tegouezh an talvoud roet dre ziouer.)',
813
+    'texte_presente_plugin' => 'War ar bajenn-mañ emañ rollet an adveziantoù hegerz evit al lec’hienn-mañ. Gallout a rit gweredekaat an adveziantoù a fell deoc’h, en ur askañ al log a zere',
814
+    'texte_proposer_publication' => 'Ur wech echu ho pennad <br /> e c’hellit kinnig ma vo embannet.',
815
+    'texte_proxy' => 'E degouezhioù zo (enrouedad, rouedadoù gwarezet,...), n’hallo al lec’hiennoù pell (teuliad skoazell SPIP, lec’hiennoù sindikadet, ...) bezañ tizhet nemet dre ur <i>proksi HTTP</i>. Diouzh ma vez, skrivit amañ dindan ar chomlec’h anezhañ, er stumm @proxy_en_cours@. Peurliesañ ne vo skrivet netra amañ.',
816
+    'texte_publication_articles_post_dates' => 'Peseurt emzalc’h a zle SPIP kaout gant ar pennadoù zo bet lakaet dezho un deiziad embann en amzer da zont ?',
817
+    'texte_rappel_selection_champs' => '[N’ankouait ket diuzañ mat ar vaezienn-mañ.]',
818
+    'texte_recalcul_page' => 'Mar fell deoc’h adjediñ ur bajenn hepken, tremenit kentoc’h dre al lodenn foran hag implijit an nozelenn « adjediñ ».',
819
+    'texte_recuperer_base' => 'Ratreañ an diaz titouroù',
820
+    'texte_reference_mais_redirige' => 'pennad menegeret en ho lec’hienn SPIP, met adkaset davet un URL all.',
821
+    'texte_requetes_echouent' => '<b>Pa chom sac’het ingal pe hep abeg rekedoù SQL,
822 822
   e c’hell bezañ abalamour d’an diaz titouroù</b><p>
823 823
   Gant SQL e c’hell an taolennnoù en em gempenn o-unan p’int bet nodet dre zegouezh.
824 824
   Amañ e c’hallit klask adgempenn anezho. Ma c’hwit, mirit un eilenn eus an doare diskwel, e ken kaz ma vefe titouroù talvoudus ennañ.</p><p>
825 825
   Kit e darempred gant an herberc’hier ma c’hoarvez ar gudenn adarre.</p>',
826
-	'texte_selection_langue_principale' => 'Amañ dindan e c’hellit diuzañ « yezh pennañ » al lec’hienn. Ne dalvez ket e viot rediet da skrivañ ho pennadoù er yezh-se, met servijout a ra da resisaat :
826
+    'texte_selection_langue_principale' => 'Amañ dindan e c’hellit diuzañ « yezh pennañ » al lec’hienn. Ne dalvez ket e viot rediet da skrivañ ho pennadoù er yezh-se, met servijout a ra da resisaat :
827 827
  <ul><li> ar furmad dre ziouer da ziskouez an deiziadoù war al lec’hienn foran ;</li>
828 828
  <li> peseurt lusker skrivañ a rank bezañ implijet gant SPIP evit diskouez an testennoù ;</li>
829 829
  <li> ar yezh implijet e furmskridoù al lodenn foran ;</li>
830 830
  <li> ar yezh implijet dre ziouer el lodenn brevez.</li></ul>',
831
-	'texte_sous_titre' => 'Istitl',
832
-	'texte_statistiques_visites' => '(barrennoù teñval :  Sul / krommenn deñval : emdroadur ar geidenn)',
833
-	'texte_statut_attente_validation' => 'o c’hortoz bezañ asantet',
834
-	'texte_statut_publies' => 'embannet enlinenn',
835
-	'texte_statut_refuses' => 'nac’het',
836
-	'texte_suppression_fichiers' => 'Implijit an urzhiad-se evit diverkañ an holl restroù krubuilhet e SPIP. An dra-se a c’hell servijout evit ma vo adjedet ho holl pajennoù, dre heg, m’hoc’h eus graet kemmoù bras e neuz pe e framm al lec’hienn.',
837
-	'texte_sur_titre' => 'Ustitl',
838
-	'texte_table_ok' => ': kudenn ebet gant an daolenn-mañ.',
839
-	'texte_tentative_recuperation' => 'Taol-esa evit ratreañ',
840
-	'texte_tenter_reparation' => 'Klask ratreañ an diaz roadennoù',
841
-	'texte_test_proxy' => 'Evit amprouiñ ar proksi-mañ, skrivit amañ dindan chomlec’h al lec’hienn a fell deoc’h arnodiñ.',
842
-	'texte_titre_02' => 'Titl :',
843
-	'texte_titre_obligatoire' => '<b>Titl</b> [Rekis]',
844
-	'texte_travail_article' => '@nom_auteur_modif@ en deus labouret war ar pennad-mañ @date_diff@ munutenn zo',
845
-	'texte_travail_collaboratif' => 'Ma c’hoarvez alies e labourfe meur a zen war an hevelep pennad 
831
+    'texte_sous_titre' => 'Istitl',
832
+    'texte_statistiques_visites' => '(barrennoù teñval :  Sul / krommenn deñval : emdroadur ar geidenn)',
833
+    'texte_statut_attente_validation' => 'o c’hortoz bezañ asantet',
834
+    'texte_statut_publies' => 'embannet enlinenn',
835
+    'texte_statut_refuses' => 'nac’het',
836
+    'texte_suppression_fichiers' => 'Implijit an urzhiad-se evit diverkañ an holl restroù krubuilhet e SPIP. An dra-se a c’hell servijout evit ma vo adjedet ho holl pajennoù, dre heg, m’hoc’h eus graet kemmoù bras e neuz pe e framm al lec’hienn.',
837
+    'texte_sur_titre' => 'Ustitl',
838
+    'texte_table_ok' => ': kudenn ebet gant an daolenn-mañ.',
839
+    'texte_tentative_recuperation' => 'Taol-esa evit ratreañ',
840
+    'texte_tenter_reparation' => 'Klask ratreañ an diaz roadennoù',
841
+    'texte_test_proxy' => 'Evit amprouiñ ar proksi-mañ, skrivit amañ dindan chomlec’h al lec’hienn a fell deoc’h arnodiñ.',
842
+    'texte_titre_02' => 'Titl :',
843
+    'texte_titre_obligatoire' => '<b>Titl</b> [Rekis]',
844
+    'texte_travail_article' => '@nom_auteur_modif@ en deus labouret war ar pennad-mañ @date_diff@ munutenn zo',
845
+    'texte_travail_collaboratif' => 'Ma c’hoarvez alies e labourfe meur a zen war an hevelep pennad 
846 846
   e c’hell ar reizhiad diskouez ar pennadoù bet « digoret » nevez zo
847 847
   a-benn herzel ma vo graet meur a gemm war un dro.
848 848
   Diweredekaet eo an dibarzh-mañ dre ziouer kuit da gaout kemennoù diwall a-hed an amzer.',
849
-	'texte_vide' => 'goullo',
850
-	'texte_vider_cache' => 'Goullonderiñ ar grubuilh',
851
-	'titre_admin_tech' => 'Trezalc’h teknikel',
852
-	'titre_admin_vider' => 'Trezalc’h teknikel',
853
-	'titre_ajouter_un_auteur' => 'Ouzhpennañ un aozer',
854
-	'titre_ajouter_un_mot' => 'Ouzhpennañ ur ger-alc’hwez',
855
-	'titre_cadre_afficher_article' => 'Diskouez ar pennadoù',
856
-	'titre_cadre_afficher_traductions' => 'Diskouez stad an troidigezhioù evit ar yezhoù-mañ :',
857
-	'titre_cadre_ajouter_auteur' => 'OUZHPENNAÑ UR SKRIDAOZER :',
858
-	'titre_cadre_interieur_rubrique' => 'Er rubrikenn',
859
-	'titre_cadre_numero_auteur' => 'SKRIDAOZER NIVERENN',
860
-	'titre_cadre_numero_objet' => '@objet@ NIVERENN :',
861
-	'titre_cadre_signature_obligatoire' => '<b>Sinadur</b> [Rekis]<br />',
862
-	'titre_config_contenu_notifications' => 'Kemennoù nevezinti',
863
-	'titre_config_contenu_prive' => 'El lodenn brevez',
864
-	'titre_config_contenu_public' => 'War al lec’hienn foran',
865
-	'titre_config_fonctions' => 'Kefluniadur al lec’hienn',
866
-	'titre_config_langage' => 'Kefluniañ ar yezh',
867
-	'titre_configuration' => 'Kefluniañ al lec’hienn',
868
-	'titre_configurer_preferences' => 'Kefluniañ ho tibaboù',
869
-	'titre_configurer_preferences_menus' => 'Kefluniañ an dibarzhoù er pennroll',
870
-	'titre_conflit_edition' => 'Bec’h e-ser embann',
871
-	'titre_connexion_ldap' => 'Dibarzhioù : <b>Ho kevreadenn LDAP</b>',
872
-	'titre_groupe_mots' => 'STROLLAD GERIOÙ :',
873
-	'titre_identite_site' => 'Merk hennadiñ al load internet',
874
-	'titre_langue_article' => 'Yezh ar pennad-skrid',
875
-	'titre_langue_rubrique' => 'YEZH AR RUBRIKENN',
876
-	'titre_langue_trad_article' => 'YEZH HA TROIDIGEZHIOÙ AR PENNAD',
877
-	'titre_les_articles' => 'AR PENNADOÙ',
878
-	'titre_messagerie_agenda' => 'Postelerezh ha deiziataer',
879
-	'titre_naviguer_dans_le_site' => 'Merdeiñ el lec’hienn...',
880
-	'titre_nouvelle_rubrique' => 'Rubrikenn nevez',
881
-	'titre_numero_rubrique' => 'RUBRIKENN NIVERENN :',
882
-	'titre_page_articles_edit' => 'Kemmañ : @titre@',
883
-	'titre_page_articles_page' => 'Ar pennadoù',
884
-	'titre_page_articles_tous' => 'Al lec’hienn a-bezh',
885
-	'titre_page_calendrier' => 'Deiziataer @nom_mois@ @annee@',
886
-	'titre_page_config_contenu' => 'Kefluniañ al lec’hienn',
887
-	'titre_page_delete_all' => 'diverket e vo pep tra, ne vo ket tu da zont war-gil',
888
-	'titre_page_recherche' => 'Disoc’hoù an enklask @recherche@',
889
-	'titre_page_statistiques_referers' => 'Stadegoù (liammoù davet al lec’hienn-mañ)',
890
-	'titre_page_upgrade' => 'Hizivaat SPIP',
891
-	'titre_preference_menus_favoris' => 'Pennrolloù',
892
-	'titre_publication_articles_post_dates' => 'Embann ar pennadoù deiziataet a-c’houde',
893
-	'titre_reparation' => 'Kempenn',
894
-	'titre_suivi_petition' => 'Heuliañ ar sinadegoù',
895
-	'tls_ldap' => 'Surentez Treuzdougen a-Wiskadoù :',
896
-	'trad_article_traduction' => 'Holl stummoù ar pennad-mañ :',
897
-	'trad_delier' => 'Paouez da liammañ ar pennad-mañ ouzh an troidigezhioù anezhañ',
898
-	'trad_lier' => 'Un droidigezh eo ar pennad-mañ. Setu niverenn ar pennad orin :',
899
-	'trad_new' => 'Skrivañ un droidigezh nevez evit ar pennad-mañ',
849
+    'texte_vide' => 'goullo',
850
+    'texte_vider_cache' => 'Goullonderiñ ar grubuilh',
851
+    'titre_admin_tech' => 'Trezalc’h teknikel',
852
+    'titre_admin_vider' => 'Trezalc’h teknikel',
853
+    'titre_ajouter_un_auteur' => 'Ouzhpennañ un aozer',
854
+    'titre_ajouter_un_mot' => 'Ouzhpennañ ur ger-alc’hwez',
855
+    'titre_cadre_afficher_article' => 'Diskouez ar pennadoù',
856
+    'titre_cadre_afficher_traductions' => 'Diskouez stad an troidigezhioù evit ar yezhoù-mañ :',
857
+    'titre_cadre_ajouter_auteur' => 'OUZHPENNAÑ UR SKRIDAOZER :',
858
+    'titre_cadre_interieur_rubrique' => 'Er rubrikenn',
859
+    'titre_cadre_numero_auteur' => 'SKRIDAOZER NIVERENN',
860
+    'titre_cadre_numero_objet' => '@objet@ NIVERENN :',
861
+    'titre_cadre_signature_obligatoire' => '<b>Sinadur</b> [Rekis]<br />',
862
+    'titre_config_contenu_notifications' => 'Kemennoù nevezinti',
863
+    'titre_config_contenu_prive' => 'El lodenn brevez',
864
+    'titre_config_contenu_public' => 'War al lec’hienn foran',
865
+    'titre_config_fonctions' => 'Kefluniadur al lec’hienn',
866
+    'titre_config_langage' => 'Kefluniañ ar yezh',
867
+    'titre_configuration' => 'Kefluniañ al lec’hienn',
868
+    'titre_configurer_preferences' => 'Kefluniañ ho tibaboù',
869
+    'titre_configurer_preferences_menus' => 'Kefluniañ an dibarzhoù er pennroll',
870
+    'titre_conflit_edition' => 'Bec’h e-ser embann',
871
+    'titre_connexion_ldap' => 'Dibarzhioù : <b>Ho kevreadenn LDAP</b>',
872
+    'titre_groupe_mots' => 'STROLLAD GERIOÙ :',
873
+    'titre_identite_site' => 'Merk hennadiñ al load internet',
874
+    'titre_langue_article' => 'Yezh ar pennad-skrid',
875
+    'titre_langue_rubrique' => 'YEZH AR RUBRIKENN',
876
+    'titre_langue_trad_article' => 'YEZH HA TROIDIGEZHIOÙ AR PENNAD',
877
+    'titre_les_articles' => 'AR PENNADOÙ',
878
+    'titre_messagerie_agenda' => 'Postelerezh ha deiziataer',
879
+    'titre_naviguer_dans_le_site' => 'Merdeiñ el lec’hienn...',
880
+    'titre_nouvelle_rubrique' => 'Rubrikenn nevez',
881
+    'titre_numero_rubrique' => 'RUBRIKENN NIVERENN :',
882
+    'titre_page_articles_edit' => 'Kemmañ : @titre@',
883
+    'titre_page_articles_page' => 'Ar pennadoù',
884
+    'titre_page_articles_tous' => 'Al lec’hienn a-bezh',
885
+    'titre_page_calendrier' => 'Deiziataer @nom_mois@ @annee@',
886
+    'titre_page_config_contenu' => 'Kefluniañ al lec’hienn',
887
+    'titre_page_delete_all' => 'diverket e vo pep tra, ne vo ket tu da zont war-gil',
888
+    'titre_page_recherche' => 'Disoc’hoù an enklask @recherche@',
889
+    'titre_page_statistiques_referers' => 'Stadegoù (liammoù davet al lec’hienn-mañ)',
890
+    'titre_page_upgrade' => 'Hizivaat SPIP',
891
+    'titre_preference_menus_favoris' => 'Pennrolloù',
892
+    'titre_publication_articles_post_dates' => 'Embann ar pennadoù deiziataet a-c’houde',
893
+    'titre_reparation' => 'Kempenn',
894
+    'titre_suivi_petition' => 'Heuliañ ar sinadegoù',
895
+    'tls_ldap' => 'Surentez Treuzdougen a-Wiskadoù :',
896
+    'trad_article_traduction' => 'Holl stummoù ar pennad-mañ :',
897
+    'trad_delier' => 'Paouez da liammañ ar pennad-mañ ouzh an troidigezhioù anezhañ',
898
+    'trad_lier' => 'Un droidigezh eo ar pennad-mañ. Setu niverenn ar pennad orin :',
899
+    'trad_new' => 'Skrivañ un droidigezh nevez evit ar pennad-mañ',
900 900
 
901
-	// U
902
-	'utf8_convert_erreur_orig' => 'Fazi : n’eo ket skoret ar strobad arouezennoù @charset@',
901
+    // U
902
+    'utf8_convert_erreur_orig' => 'Fazi : n’eo ket skoret ar strobad arouezennoù @charset@',
903 903
 
904
-	// V
905
-	'version' => 'Stumm :'
904
+    // V
905
+    'version' => 'Stumm :'
906 906
 );
Please login to merge, or discard this patch.
ecrire/public/tracer.php 3 patches
Braces   +3 added lines, -6 removed lines patch added patch discarded remove patch
@@ -20,15 +20,13 @@  discard block
 block discarded – undo
20 20
 	if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
21 21
 		if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
22 22
 			$trace = true;
23
-		}
24
-		else {
23
+		} else {
25 24
 			if (empty($GLOBALS['visiteur_session'])) {
26 25
 				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
27 26
 				// car ici on ne sait pas si c'est un hit anonyme
28 27
 				// ou une requete SQL faite avant chargement de la session
29 28
 				$trace = (!empty($_GET['var_profile']) ? '?' : false);
30
-			}
31
-			else {
29
+			} else {
32 30
 				include_spip('inc/autoriser');
33 31
 				// gare au bouclage sur calcul de droits au premier appel
34 32
 				// A fortiori quand on demande une trace
@@ -50,8 +48,7 @@  discard block
 block discarded – undo
50 48
 			// car ici on ne sait pas si c'est un hit anonyme
51 49
 			// ou une requete SQL faite avant chargement de la session
52 50
 			$trace = (!empty($_GET['var_profile']) ? '?' : false);
53
-		}
54
-		else {
51
+		} else {
55 52
 			include_spip('inc/autoriser');
56 53
 			// gare au bouclage sur calcul de droits au premier appel
57 54
 			// A fortiori quand on demande une trace
Please login to merge, or discard this patch.
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -11,190 +11,190 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // https://code.spip.net/@trace_query_start
18 18
 function trace_query_start() {
19
-	static $trace = '?';
20
-	if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
21
-		if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
22
-			$trace = true;
23
-		}
24
-		else {
25
-			if (empty($GLOBALS['visiteur_session'])) {
26
-				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
27
-				// car ici on ne sait pas si c'est un hit anonyme
28
-				// ou une requete SQL faite avant chargement de la session
29
-				$trace = (!empty($_GET['var_profile']) ? '?' : false);
30
-			}
31
-			else {
32
-				include_spip('inc/autoriser');
33
-				// gare au bouclage sur calcul de droits au premier appel
34
-				// A fortiori quand on demande une trace
35
-				$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
36
-				$trace = (!empty($_GET['var_profile']) and autoriser('debug'));
37
-			}
38
-		}
39
-	}
40
-
41
-	return $trace ? microtime() : 0;
19
+    static $trace = '?';
20
+    if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
21
+        if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
22
+            $trace = true;
23
+        }
24
+        else {
25
+            if (empty($GLOBALS['visiteur_session'])) {
26
+                // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
27
+                // car ici on ne sait pas si c'est un hit anonyme
28
+                // ou une requete SQL faite avant chargement de la session
29
+                $trace = (!empty($_GET['var_profile']) ? '?' : false);
30
+            }
31
+            else {
32
+                include_spip('inc/autoriser');
33
+                // gare au bouclage sur calcul de droits au premier appel
34
+                // A fortiori quand on demande une trace
35
+                $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
36
+                $trace = (!empty($_GET['var_profile']) and autoriser('debug'));
37
+            }
38
+        }
39
+    }
40
+
41
+    return $trace ? microtime() : 0;
42 42
 }
43 43
 
44 44
 // https://code.spip.net/@trace_query_end
45 45
 function trace_query_end($query, $start, $result, $erreur, $serveur = '') {
46
-	static $trace = '?';
47
-	if ($trace === '?') {
48
-		if (empty($GLOBALS['visiteur_session'])) {
49
-			// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
50
-			// car ici on ne sait pas si c'est un hit anonyme
51
-			// ou une requete SQL faite avant chargement de la session
52
-			$trace = (!empty($_GET['var_profile']) ? '?' : false);
53
-		}
54
-		else {
55
-			include_spip('inc/autoriser');
56
-			// gare au bouclage sur calcul de droits au premier appel
57
-			// A fortiori quand on demande une trace
58
-			$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
59
-			$trace = (!empty($_GET['var_profile']) and autoriser('debug'));
60
-		}
61
-	}
62
-	if ($start) {
63
-		$end = microtime();
64
-		list($usec, $sec) = explode(' ', $start);
65
-		list($usec2, $sec2) = explode(' ', $end);
66
-		$dt = $sec2 + $usec2 - $sec - $usec;
67
-		pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
68
-		if ($trace) {
69
-			trace_query_chrono($dt, $query, $result, $serveur);
70
-		}
71
-	}
72
-	// tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
73
-	if ($trace and $erreur and !preg_match('/^select\b/i', $query)) {
74
-		erreur_squelette([sql_errno($serveur), $erreur, $query]);
75
-	}
76
-
77
-	return $result;
46
+    static $trace = '?';
47
+    if ($trace === '?') {
48
+        if (empty($GLOBALS['visiteur_session'])) {
49
+            // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
50
+            // car ici on ne sait pas si c'est un hit anonyme
51
+            // ou une requete SQL faite avant chargement de la session
52
+            $trace = (!empty($_GET['var_profile']) ? '?' : false);
53
+        }
54
+        else {
55
+            include_spip('inc/autoriser');
56
+            // gare au bouclage sur calcul de droits au premier appel
57
+            // A fortiori quand on demande une trace
58
+            $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
59
+            $trace = (!empty($_GET['var_profile']) and autoriser('debug'));
60
+        }
61
+    }
62
+    if ($start) {
63
+        $end = microtime();
64
+        list($usec, $sec) = explode(' ', $start);
65
+        list($usec2, $sec2) = explode(' ', $end);
66
+        $dt = $sec2 + $usec2 - $sec - $usec;
67
+        pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
68
+        if ($trace) {
69
+            trace_query_chrono($dt, $query, $result, $serveur);
70
+        }
71
+    }
72
+    // tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
73
+    if ($trace and $erreur and !preg_match('/^select\b/i', $query)) {
74
+        erreur_squelette([sql_errno($serveur), $erreur, $query]);
75
+    }
76
+
77
+    return $result;
78 78
 }
79 79
 
80 80
 // https://code.spip.net/@trace_query_chrono
81 81
 function trace_query_chrono($dt, $query, $result, $serveur = '') {
82
-	include_spip('inc/filtres_mini');
83
-	static $tt = 0, $nb = 0;
84
-
85
-	$x = _request('var_mode_objet');
86
-	if (isset($GLOBALS['debug']['aucasou'])) {
87
-		list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou'];
88
-		if ($x and !preg_match("/$boucle\$/", $x)) {
89
-			return;
90
-		}
91
-		if ($serveur) {
92
-			$boucle .= " ($serveur)";
93
-		}
94
-		$boucle = "<b>$boucle</b>";
95
-	} else {
96
-		if ($x) {
97
-			return;
98
-		}
99
-		$boucle = $contexte = '';
100
-	}
101
-
102
-	$tt += $dt;
103
-	$nb++;
104
-
105
-	$q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
106
-	$e = sql_explain($query, $serveur);
107
-	$r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result));
108
-	$GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
82
+    include_spip('inc/filtres_mini');
83
+    static $tt = 0, $nb = 0;
84
+
85
+    $x = _request('var_mode_objet');
86
+    if (isset($GLOBALS['debug']['aucasou'])) {
87
+        list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou'];
88
+        if ($x and !preg_match("/$boucle\$/", $x)) {
89
+            return;
90
+        }
91
+        if ($serveur) {
92
+            $boucle .= " ($serveur)";
93
+        }
94
+        $boucle = "<b>$boucle</b>";
95
+    } else {
96
+        if ($x) {
97
+            return;
98
+        }
99
+        $boucle = $contexte = '';
100
+    }
101
+
102
+    $tt += $dt;
103
+    $nb++;
104
+
105
+    $q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
106
+    $e = sql_explain($query, $serveur);
107
+    $r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result));
108
+    $GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
109 109
 }
110 110
 
111 111
 
112 112
 function chrono_requete($temps) {
113
-	$total = 0;
114
-	$hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
115
-	$t = $q = $n = $d = [];
116
-	// Totaliser les temps et completer le Explain
117
-	foreach ($temps as $key => $v) {
118
-		list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v;
119
-		if (is_array($contexte)) {
120
-			$k = ($contexte[0] . " $boucle");
121
-			include_spip('public/compiler');
122
-			$env = reconstruire_contexte_compil($contexte);
123
-		} else {
124
-			$k = $env = $boucle;
125
-		}
126
-
127
-		$total += $dt;
128
-		$t[$key] = $dt;
129
-		$q[$key] = $nb;
130
-		if (!isset($d[$k])) {
131
-			$d[$k] = 0;
132
-			$n[$k] = 0;
133
-		}
134
-		$d[$k] += $dt;
135
-		++$n[$k];
136
-
137
-		if (!is_array($explain)) {
138
-			$explain = [];
139
-		}
140
-		foreach ($explain as $j => $v) {
141
-			$explain[$j] = "<tr><th>$j</th><td>"
142
-				. str_replace(';', '<br />', $v)
143
-				. '</td></tr>';
144
-		}
145
-		$e = "<table class='explain'>"
146
-			. '<caption>'
147
-			. $query
148
-			. '</caption>'
149
-			. "<tr><th>Time</th><td>$dt</td></tr>"
150
-			. "<tr><th>Order</th><td>$nb</td></tr>"
151
-			. "<tr><th>Res</th><td>$res</td></tr>"
152
-			. join('', $explain)
153
-			. '</table>';
154
-
155
-		$temps[$key] = [$e, $env, $k];
156
-	}
157
-	// Trier par temps d'execution decroissant
158
-	array_multisort($t, SORT_DESC, $q, $temps);
159
-	arsort($d);
160
-	$i = 1;
161
-	$t = [];
162
-	// Fabriquer les liens de navigations dans le tableau des temps
163
-	foreach ($temps as $k => $v) {
164
-		$titre = strip_tags($v[2]);
165
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
166
-		$href = str_replace("\\'", '&#39;', $href);
167
-
168
-		if (!isset($t[$v[2]])) {
169
-			$t[$v[2]] = [];
170
-		}
171
-		$t[$v[2]][] = "<span class='spip-debug-arg'> "
172
-			. "<a title='$titre' href='$href'>$i</a>"
173
-			. '</span>'
174
-			. ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
175
-		$i++;
176
-	}
177
-
178
-	if ($d['']) {
179
-		$d[$hors] = $d[''];
180
-		$n[$hors] = $n[''];
181
-		$t[$hors] = $t[''];
182
-	}
183
-	unset($d['']);
184
-	// Fabriquer le tableau des liens de navigation dans le grand tableau
185
-	foreach ($d as $k => $v) {
186
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
187
-			. join('', $t[$k]);
188
-	}
189
-
190
-	$navigation = [
191
-		_T('zbug_statistiques'),
192
-		'<tr><td>'
193
-		. join("</td></tr>\n<tr><td>", $d)
194
-		. "</td></tr>\n"
195
-		. (# _request('var_mode_objet') ? '' :
196
-		('<tr><td>' . count($temps) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
197
-	];
198
-
199
-	return [$temps, $navigation];
113
+    $total = 0;
114
+    $hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
115
+    $t = $q = $n = $d = [];
116
+    // Totaliser les temps et completer le Explain
117
+    foreach ($temps as $key => $v) {
118
+        list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v;
119
+        if (is_array($contexte)) {
120
+            $k = ($contexte[0] . " $boucle");
121
+            include_spip('public/compiler');
122
+            $env = reconstruire_contexte_compil($contexte);
123
+        } else {
124
+            $k = $env = $boucle;
125
+        }
126
+
127
+        $total += $dt;
128
+        $t[$key] = $dt;
129
+        $q[$key] = $nb;
130
+        if (!isset($d[$k])) {
131
+            $d[$k] = 0;
132
+            $n[$k] = 0;
133
+        }
134
+        $d[$k] += $dt;
135
+        ++$n[$k];
136
+
137
+        if (!is_array($explain)) {
138
+            $explain = [];
139
+        }
140
+        foreach ($explain as $j => $v) {
141
+            $explain[$j] = "<tr><th>$j</th><td>"
142
+                . str_replace(';', '<br />', $v)
143
+                . '</td></tr>';
144
+        }
145
+        $e = "<table class='explain'>"
146
+            . '<caption>'
147
+            . $query
148
+            . '</caption>'
149
+            . "<tr><th>Time</th><td>$dt</td></tr>"
150
+            . "<tr><th>Order</th><td>$nb</td></tr>"
151
+            . "<tr><th>Res</th><td>$res</td></tr>"
152
+            . join('', $explain)
153
+            . '</table>';
154
+
155
+        $temps[$key] = [$e, $env, $k];
156
+    }
157
+    // Trier par temps d'execution decroissant
158
+    array_multisort($t, SORT_DESC, $q, $temps);
159
+    arsort($d);
160
+    $i = 1;
161
+    $t = [];
162
+    // Fabriquer les liens de navigations dans le tableau des temps
163
+    foreach ($temps as $k => $v) {
164
+        $titre = strip_tags($v[2]);
165
+        $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
166
+        $href = str_replace("\\'", '&#39;', $href);
167
+
168
+        if (!isset($t[$v[2]])) {
169
+            $t[$v[2]] = [];
170
+        }
171
+        $t[$v[2]][] = "<span class='spip-debug-arg'> "
172
+            . "<a title='$titre' href='$href'>$i</a>"
173
+            . '</span>'
174
+            . ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
175
+        $i++;
176
+    }
177
+
178
+    if ($d['']) {
179
+        $d[$hors] = $d[''];
180
+        $n[$hors] = $n[''];
181
+        $t[$hors] = $t[''];
182
+    }
183
+    unset($d['']);
184
+    // Fabriquer le tableau des liens de navigation dans le grand tableau
185
+    foreach ($d as $k => $v) {
186
+        $d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
187
+            . join('', $t[$k]);
188
+    }
189
+
190
+    $navigation = [
191
+        _T('zbug_statistiques'),
192
+        '<tr><td>'
193
+        . join("</td></tr>\n<tr><td>", $d)
194
+        . "</td></tr>\n"
195
+        . (# _request('var_mode_objet') ? '' :
196
+        ('<tr><td>' . count($temps) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
197
+    ];
198
+
199
+    return [$temps, $navigation];
200 200
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -111,13 +111,13 @@  discard block
 block discarded – undo
111 111
 
112 112
 function chrono_requete($temps) {
113 113
 	$total = 0;
114
-	$hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
114
+	$hors = '<i>'._T('zbug_hors_compilation').'</i>';
115 115
 	$t = $q = $n = $d = [];
116 116
 	// Totaliser les temps et completer le Explain
117 117
 	foreach ($temps as $key => $v) {
118 118
 		list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v;
119 119
 		if (is_array($contexte)) {
120
-			$k = ($contexte[0] . " $boucle");
120
+			$k = ($contexte[0]." $boucle");
121 121
 			include_spip('public/compiler');
122 122
 			$env = reconstruire_contexte_compil($contexte);
123 123
 		} else {
@@ -162,7 +162,7 @@  discard block
 block discarded – undo
162 162
 	// Fabriquer les liens de navigations dans le tableau des temps
163 163
 	foreach ($temps as $k => $v) {
164 164
 		$titre = strip_tags($v[2]);
165
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
165
+		$href = quote_amp($GLOBALS['REQUEST_URI'])."#req$i";
166 166
 		$href = str_replace("\\'", '&#39;', $href);
167 167
 
168 168
 		if (!isset($t[$v[2]])) {
@@ -183,7 +183,7 @@  discard block
 block discarded – undo
183 183
 	unset($d['']);
184 184
 	// Fabriquer le tableau des liens de navigation dans le grand tableau
185 185
 	foreach ($d as $k => $v) {
186
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
186
+		$d[$k] = $n[$k]."</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
187 187
 			. join('', $t[$k]);
188 188
 	}
189 189
 
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
 		. join("</td></tr>\n<tr><td>", $d)
194 194
 		. "</td></tr>\n"
195 195
 		. (# _request('var_mode_objet') ? '' :
196
-		('<tr><td>' . count($temps) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
196
+		('<tr><td>'.count($temps).'</td><td>'._T('info_total').'</td><td class="time">'.$total.'</td><td></td></tr>'))
197 197
 	];
198 198
 
199 199
 	return [$temps, $navigation];
Please login to merge, or discard this patch.
ecrire/req/sqlite_fonctions.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -250,7 +250,7 @@  discard block
 block discarded – undo
250 250
 
251 251
 // https://code.spip.net/@_sqlite_func_preg_replace
252 252
 function _sqlite_func_preg_replace($quoi, $cherche, $remplace) {
253
-	$return = preg_replace('%' . $cherche . '%', $remplace, $quoi);
253
+	$return = preg_replace('%'.$cherche.'%', $remplace, $quoi);
254 254
 
255 255
 	#spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
256 256
 	return $return;
@@ -308,7 +308,7 @@  discard block
 block discarded – undo
308 308
 	// il faut enlever un niveau d'echappement pour être homogène à mysql
309 309
 	$cherche = str_replace('\\\\', '\\', $cherche);
310 310
 	$u = isset($GLOBALS['meta']['pcre_u']) ? $GLOBALS['meta']['pcre_u'] : 'u';
311
-	$return = preg_match('%' . $cherche . '%imsS' . $u, $quoi);
311
+	$return = preg_match('%'.$cherche.'%imsS'.$u, $quoi);
312 312
 
313 313
 	#spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
314 314
 	return $return;
@@ -357,7 +357,7 @@  discard block
 block discarded – undo
357 357
 		$count = 0;
358 358
 		str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
359 359
 		if ($count > 0) {
360
-			spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
360
+			spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.'._LOG_ERREUR);
361 361
 		}
362 362
 		$to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
363 363
 	}
@@ -374,7 +374,7 @@  discard block
 block discarded – undo
374 374
  */
375 375
 function _sqlite_func_to_days($d) {
376 376
 	static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
377
-	$result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
377
+	$result = $offset + (int) ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
378 378
 
379 379
 	#spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
380 380
 	return $result;
Please login to merge, or discard this patch.
Indentation   +229 added lines, -229 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -38,93 +38,93 @@  discard block
 block discarded – undo
38 38
  */
39 39
 function _sqlite_init_functions(&$sqlite) {
40 40
 
41
-	if (!$sqlite) {
42
-		return false;
43
-	}
41
+    if (!$sqlite) {
42
+        return false;
43
+    }
44 44
 
45 45
 
46
-	$fonctions = [
47
-		// A
48
-		'ACOS'  => ['acos', 1],
49
-		'ASIN'  => ['asin', 1],
50
-		'ATAN'  => ['atan', 1], // mysql accepte 2 params comme atan2… hum ?
51
-		'ATAN2' => ['atan2', 2],
46
+    $fonctions = [
47
+        // A
48
+        'ACOS'  => ['acos', 1],
49
+        'ASIN'  => ['asin', 1],
50
+        'ATAN'  => ['atan', 1], // mysql accepte 2 params comme atan2… hum ?
51
+        'ATAN2' => ['atan2', 2],
52 52
 
53
-		// C
54
-		'CEIL'   => ['_sqlite_func_ceil', 1],
55
-		'CONCAT' => ['_sqlite_func_concat', -1],
56
-		'COS'    => ['cos', 1],
53
+        // C
54
+        'CEIL'   => ['_sqlite_func_ceil', 1],
55
+        'CONCAT' => ['_sqlite_func_concat', -1],
56
+        'COS'    => ['cos', 1],
57 57
 
58
-		// D
59
-		'DATE_FORMAT' => ['_sqlite_func_strftime', 2],
60
-		'DAYOFMONTH'  => ['_sqlite_func_dayofmonth', 1],
61
-		'DEGREES'     => ['rad2deg', 1],
58
+        // D
59
+        'DATE_FORMAT' => ['_sqlite_func_strftime', 2],
60
+        'DAYOFMONTH'  => ['_sqlite_func_dayofmonth', 1],
61
+        'DEGREES'     => ['rad2deg', 1],
62 62
 
63
-		// E
64
-		'EXTRAIRE_MULTI' => ['_sqlite_func_extraire_multi', 2], // specifique a SPIP/sql_multi()
65
-		'EXP'            => ['exp', 1],
63
+        // E
64
+        'EXTRAIRE_MULTI' => ['_sqlite_func_extraire_multi', 2], // specifique a SPIP/sql_multi()
65
+        'EXP'            => ['exp', 1],
66 66
 
67
-		// F
68
-		'FIND_IN_SET' => ['_sqlite_func_find_in_set', 2],
69
-		'FLOOR'       => ['_sqlite_func_floor', 1],
67
+        // F
68
+        'FIND_IN_SET' => ['_sqlite_func_find_in_set', 2],
69
+        'FLOOR'       => ['_sqlite_func_floor', 1],
70 70
 
71
-		// I
72
-		'IF'     => ['_sqlite_func_if', 3],
73
-		'INSERT' => ['_sqlite_func_insert', 4],
74
-		'INSTR'  => ['_sqlite_func_instr', 2],
71
+        // I
72
+        'IF'     => ['_sqlite_func_if', 3],
73
+        'INSERT' => ['_sqlite_func_insert', 4],
74
+        'INSTR'  => ['_sqlite_func_instr', 2],
75 75
 
76
-		// L
77
-		'LEAST'  => ['_sqlite_func_least', 3],
78
-		'_LEFT'  => ['_sqlite_func_left', 2],
76
+        // L
77
+        'LEAST'  => ['_sqlite_func_least', 3],
78
+        '_LEFT'  => ['_sqlite_func_left', 2],
79 79
 #		'LENGTH' => array('strlen', 1), // present v1.0.4
80 80
 #		'LOWER'  => array('strtolower', 1), // present v2.4
81 81
 #		'LTRIM'  => array('ltrim', 1), // present
82 82
 
83
-		// N
84
-		'NOW' => ['_sqlite_func_now', 0],
83
+        // N
84
+        'NOW' => ['_sqlite_func_now', 0],
85 85
 
86
-		// M
87
-		'MD5'   => ['md5', 1],
88
-		'MONTH' => ['_sqlite_func_month', 1],
86
+        // M
87
+        'MD5'   => ['md5', 1],
88
+        'MONTH' => ['_sqlite_func_month', 1],
89 89
 
90
-		// P
91
-		'PREG_REPLACE' => ['_sqlite_func_preg_replace', 3],
90
+        // P
91
+        'PREG_REPLACE' => ['_sqlite_func_preg_replace', 3],
92 92
 
93
-		// R
94
-		'RADIANS' => ['deg2rad', 1],
95
-		'RAND'    => ['_sqlite_func_rand', 0], // sinon random() v2.4
96
-		'REGEXP'  => ['_sqlite_func_regexp_match', 2], // critere REGEXP supporte a partir de v3.3.2
97
-		'RIGHT'   => ['_sqlite_func_right', 2],
93
+        // R
94
+        'RADIANS' => ['deg2rad', 1],
95
+        'RAND'    => ['_sqlite_func_rand', 0], // sinon random() v2.4
96
+        'REGEXP'  => ['_sqlite_func_regexp_match', 2], // critere REGEXP supporte a partir de v3.3.2
97
+        'RIGHT'   => ['_sqlite_func_right', 2],
98 98
 #		'RTRIM'   => array('rtrim', 1), // present
99 99
 
100
-		// S
101
-		'SETTYPE'   => ['settype', 2], // CAST present en v3.2.3
102
-		'SIN'       => ['sin', 1],
103
-		'SQRT'      => ['sqrt', 1],
104
-		'SUBSTRING' => ['_sqlite_func_substring' /*, 3*/], // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
100
+        // S
101
+        'SETTYPE'   => ['settype', 2], // CAST present en v3.2.3
102
+        'SIN'       => ['sin', 1],
103
+        'SQRT'      => ['sqrt', 1],
104
+        'SUBSTRING' => ['_sqlite_func_substring' /*, 3*/], // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
105 105
 
106
-		// T
107
-		'TAN'           => ['tan', 1],
108
-		'TIMESTAMPDIFF' => ['_sqlite_timestampdiff'    /*, 3*/],
109
-		'TO_DAYS'       => ['_sqlite_func_to_days', 1],
106
+        // T
107
+        'TAN'           => ['tan', 1],
108
+        'TIMESTAMPDIFF' => ['_sqlite_timestampdiff'    /*, 3*/],
109
+        'TO_DAYS'       => ['_sqlite_func_to_days', 1],
110 110
 #		'TRIM'          => array('trim', 1), // present
111 111
 
112
-		// U
113
-		'UNIX_TIMESTAMP' => ['_sqlite_func_unix_timestamp', 1],
112
+        // U
113
+        'UNIX_TIMESTAMP' => ['_sqlite_func_unix_timestamp', 1],
114 114
 #		'UPPER'          => array('strtoupper', 1), // present v2.4
115 115
 
116
-		// V
117
-		'VIDE' => ['_sqlite_func_vide', 0], // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
116
+        // V
117
+        'VIDE' => ['_sqlite_func_vide', 0], // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
118 118
 
119
-		// Y
120
-		'YEAR' => ['_sqlite_func_year', 1]
121
-	];
119
+        // Y
120
+        'YEAR' => ['_sqlite_func_year', 1]
121
+    ];
122 122
 
123
-	foreach ($fonctions as $f => $r) {
124
-		_sqlite_add_function($sqlite, $f, $r);
125
-	}
123
+    foreach ($fonctions as $f => $r) {
124
+        _sqlite_add_function($sqlite, $f, $r);
125
+    }
126 126
 
127
-	#spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
127
+    #spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
128 128
 }
129 129
 
130 130
 
@@ -145,9 +145,9 @@  discard block
 block discarded – undo
145 145
  *
146 146
 **/
147 147
 function _sqlite_add_function(&$sqlite, &$f, &$r) {
148
-	isset($r[1])
149
-		? $sqlite->sqliteCreateFunction($f, $r[0], $r[1])
150
-		: $sqlite->sqliteCreateFunction($f, $r[0]);
148
+    isset($r[1])
149
+        ? $sqlite->sqliteCreateFunction($f, $r[0], $r[1])
150
+        : $sqlite->sqliteCreateFunction($f, $r[0]);
151 151
 }
152 152
 
153 153
 //
@@ -156,41 +156,41 @@  discard block
 block discarded – undo
156 156
 //
157 157
 
158 158
 function _sqlite_func_ceil($a) {
159
-	return ceil($a);
159
+    return ceil($a);
160 160
 }
161 161
 
162 162
 // https://code.spip.net/@_sqlite_func_concat
163 163
 function _sqlite_func_concat(...$args) {
164
-	return join('', $args);
164
+    return join('', $args);
165 165
 }
166 166
 
167 167
 
168 168
 // https://code.spip.net/@_sqlite_func_dayofmonth
169 169
 function _sqlite_func_dayofmonth($d) {
170
-	return _sqlite_func_date('d', $d);
170
+    return _sqlite_func_date('d', $d);
171 171
 }
172 172
 
173 173
 
174 174
 // https://code.spip.net/@_sqlite_func_find_in_set
175 175
 function _sqlite_func_find_in_set($num, $set) {
176
-	$rank = 0;
177
-	foreach (explode(',', $set) as $v) {
178
-		if ($v == $num) {
179
-			return (++$rank);
180
-		}
181
-		$rank++;
182
-	}
183
-
184
-	return 0;
176
+    $rank = 0;
177
+    foreach (explode(',', $set) as $v) {
178
+        if ($v == $num) {
179
+            return (++$rank);
180
+        }
181
+        $rank++;
182
+    }
183
+
184
+    return 0;
185 185
 }
186 186
 
187 187
 function _sqlite_func_floor($a) {
188
-	return floor($a);
188
+    return floor($a);
189 189
 }
190 190
 
191 191
 // https://code.spip.net/@_sqlite_func_if
192 192
 function _sqlite_func_if($bool, $oui, $non) {
193
-	return ($bool) ? $oui : $non;
193
+    return ($bool) ? $oui : $non;
194 194
 }
195 195
 
196 196
 
@@ -201,59 +201,59 @@  discard block
 block discarded – undo
201 201
  */
202 202
 // https://code.spip.net/@_sqlite_func_insert
203 203
 function _sqlite_func_insert($s, $index, $longueur, $chaine) {
204
-	return
205
-		substr($s, 0, $index)
206
-		. $chaine
207
-		. substr(substr($s, $index), $longueur);
204
+    return
205
+        substr($s, 0, $index)
206
+        . $chaine
207
+        . substr(substr($s, $index), $longueur);
208 208
 }
209 209
 
210 210
 
211 211
 // https://code.spip.net/@_sqlite_func_instr
212 212
 function _sqlite_func_instr($s, $search) {
213
-	return strpos($s, $search);
213
+    return strpos($s, $search);
214 214
 }
215 215
 
216 216
 
217 217
 // https://code.spip.net/@_sqlite_func_least
218 218
 function _sqlite_func_least() {
219
-	$arg_list = func_get_args();
220
-	$least = min($arg_list);
219
+    $arg_list = func_get_args();
220
+    $least = min($arg_list);
221 221
 
222
-	#spip_log("Passage avec LEAST : $least",'sqlite.'._LOG_DEBUG);
223
-	return $least;
222
+    #spip_log("Passage avec LEAST : $least",'sqlite.'._LOG_DEBUG);
223
+    return $least;
224 224
 }
225 225
 
226 226
 
227 227
 // https://code.spip.net/@_sqlite_func_left
228 228
 function _sqlite_func_left($s, $lenght) {
229
-	return substr($s, $lenght);
229
+    return substr($s, $lenght);
230 230
 }
231 231
 
232 232
 
233 233
 // https://code.spip.net/@_sqlite_func_now
234 234
 function _sqlite_func_now($force_refresh = false) {
235
-	static $now = null;
236
-	if (is_null($now) or $force_refresh) {
237
-		$now = date('Y-m-d H:i:s');
238
-	}
235
+    static $now = null;
236
+    if (is_null($now) or $force_refresh) {
237
+        $now = date('Y-m-d H:i:s');
238
+    }
239 239
 
240
-	#spip_log("Passage avec NOW : $now | ".time(),'sqlite.'._LOG_DEBUG);
241
-	return $now;
240
+    #spip_log("Passage avec NOW : $now | ".time(),'sqlite.'._LOG_DEBUG);
241
+    return $now;
242 242
 }
243 243
 
244 244
 
245 245
 // https://code.spip.net/@_sqlite_func_month
246 246
 function _sqlite_func_month($d) {
247
-	return _sqlite_func_date('m', $d);
247
+    return _sqlite_func_date('m', $d);
248 248
 }
249 249
 
250 250
 
251 251
 // https://code.spip.net/@_sqlite_func_preg_replace
252 252
 function _sqlite_func_preg_replace($quoi, $cherche, $remplace) {
253
-	$return = preg_replace('%' . $cherche . '%', $remplace, $quoi);
253
+    $return = preg_replace('%' . $cherche . '%', $remplace, $quoi);
254 254
 
255
-	#spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
256
-	return $return;
255
+    #spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
256
+    return $return;
257 257
 }
258 258
 
259 259
 /**
@@ -264,54 +264,54 @@  discard block
 block discarded – undo
264 264
  * @return string, l'extrait trouve.
265 265
  **/
266 266
 function _sqlite_func_extraire_multi($quoi, $lang) {
267
-	if (!defined('_EXTRAIRE_MULTI')) {
268
-		include_spip('inc/filtres');
269
-	}
270
-	if (!function_exists('approcher_langue')) {
271
-		include_spip('inc/lang');
272
-	}
273
-	if (preg_match_all(_EXTRAIRE_MULTI, $quoi, $regs, PREG_SET_ORDER)) {
274
-		foreach ($regs as $reg) {
275
-			// chercher la version de la langue courante
276
-			$trads = extraire_trads($reg[1]);
277
-			if ($l = approcher_langue($trads, $lang)) {
278
-				$trad = $trads[$l];
279
-			} else {
280
-				$trad = reset($trads);
281
-			}
282
-			$quoi = str_replace($reg[0], $trad, $quoi);
283
-		}
284
-	}
285
-
286
-	return $quoi;
267
+    if (!defined('_EXTRAIRE_MULTI')) {
268
+        include_spip('inc/filtres');
269
+    }
270
+    if (!function_exists('approcher_langue')) {
271
+        include_spip('inc/lang');
272
+    }
273
+    if (preg_match_all(_EXTRAIRE_MULTI, $quoi, $regs, PREG_SET_ORDER)) {
274
+        foreach ($regs as $reg) {
275
+            // chercher la version de la langue courante
276
+            $trads = extraire_trads($reg[1]);
277
+            if ($l = approcher_langue($trads, $lang)) {
278
+                $trad = $trads[$l];
279
+            } else {
280
+                $trad = reset($trads);
281
+            }
282
+            $quoi = str_replace($reg[0], $trad, $quoi);
283
+        }
284
+    }
285
+
286
+    return $quoi;
287 287
 }
288 288
 
289 289
 
290 290
 // https://code.spip.net/@_sqlite_func_rand
291 291
 function _sqlite_func_rand() {
292
-	return rand();
292
+    return rand();
293 293
 }
294 294
 
295 295
 
296 296
 // https://code.spip.net/@_sqlite_func_right
297 297
 function _sqlite_func_right($s, $length) {
298
-	return substr($s, 0 - $length);
298
+    return substr($s, 0 - $length);
299 299
 }
300 300
 
301 301
 
302 302
 // https://code.spip.net/@_sqlite_func_regexp_match
303 303
 function _sqlite_func_regexp_match($cherche, $quoi) {
304
-	// optimiser un cas tres courant avec les requetes en base
305
-	if (!$quoi and !strlen($quoi)) {
306
-		return false;
307
-	}
308
-	// il faut enlever un niveau d'echappement pour être homogène à mysql
309
-	$cherche = str_replace('\\\\', '\\', $cherche);
310
-	$u = isset($GLOBALS['meta']['pcre_u']) ? $GLOBALS['meta']['pcre_u'] : 'u';
311
-	$return = preg_match('%' . $cherche . '%imsS' . $u, $quoi);
312
-
313
-	#spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
314
-	return $return;
304
+    // optimiser un cas tres courant avec les requetes en base
305
+    if (!$quoi and !strlen($quoi)) {
306
+        return false;
307
+    }
308
+    // il faut enlever un niveau d'echappement pour être homogène à mysql
309
+    $cherche = str_replace('\\\\', '\\', $cherche);
310
+    $u = isset($GLOBALS['meta']['pcre_u']) ? $GLOBALS['meta']['pcre_u'] : 'u';
311
+    $return = preg_match('%' . $cherche . '%imsS' . $u, $quoi);
312
+
313
+    #spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
314
+    return $return;
315 315
 }
316 316
 
317 317
 
@@ -323,8 +323,8 @@  discard block
 block discarded – undo
323 323
  * @return string
324 324
  */
325 325
 function _sqlite_func_strftime($date, $conv) {
326
-	$conv = _sqlite_func_strftime_format_converter($conv);
327
-	return strftime($conv, is_int($date) ? $date : strtotime($date));
326
+    $conv = _sqlite_func_strftime_format_converter($conv);
327
+    return strftime($conv, is_int($date) ? $date : strtotime($date));
328 328
 }
329 329
 
330 330
 /**
@@ -340,28 +340,28 @@  discard block
 block discarded – undo
340 340
  * @return void
341 341
  */
342 342
 function _sqlite_func_strftime_format_converter(string $conv): string {
343
-	// ok : %a %b %d %e %H %I %l %j %k %m %p %r %S %T %w %y %Y
344
-	// on ne sait pas en gérer certains...
345
-	static $mysql_to_strftime_not_ok = ['%c', '%D', '%f', '%U', '%V', '%W', '%X'];
346
-	static $mysql_to_strftime = [
347
-		'%h' => '%I',
348
-		'%i' => '%M',
349
-		'%M' => '%B',
350
-		'%s' => '%S',
351
-		'%u' => '%U',
352
-		'%v' => '%V',
353
-		'%x' => '%G',
354
-	];
355
-	static $to_strftime = [];
356
-	if (!isset($to_strftime[$conv])) {
357
-		$count = 0;
358
-		str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
359
-		if ($count > 0) {
360
-			spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
361
-		}
362
-		$to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
363
-	}
364
-	return $to_strftime[$conv];
343
+    // ok : %a %b %d %e %H %I %l %j %k %m %p %r %S %T %w %y %Y
344
+    // on ne sait pas en gérer certains...
345
+    static $mysql_to_strftime_not_ok = ['%c', '%D', '%f', '%U', '%V', '%W', '%X'];
346
+    static $mysql_to_strftime = [
347
+        '%h' => '%I',
348
+        '%i' => '%M',
349
+        '%M' => '%B',
350
+        '%s' => '%S',
351
+        '%u' => '%U',
352
+        '%v' => '%V',
353
+        '%x' => '%G',
354
+    ];
355
+    static $to_strftime = [];
356
+    if (!isset($to_strftime[$conv])) {
357
+        $count = 0;
358
+        str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
359
+        if ($count > 0) {
360
+            spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
361
+        }
362
+        $to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
363
+    }
364
+    return $to_strftime[$conv];
365 365
 }
366 366
 
367 367
 /**
@@ -373,21 +373,21 @@  discard block
 block discarded – undo
373 373
  * @return int
374 374
  */
375 375
 function _sqlite_func_to_days($d) {
376
-	static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
377
-	$result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
376
+    static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
377
+    $result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
378 378
 
379
-	#spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
380
-	return $result;
379
+    #spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
380
+    return $result;
381 381
 }
382 382
 
383 383
 function _sqlite_func_substring($string, $start, $len = null) {
384
-	// SQL compte a partir de 1, php a partir de 0
385
-	$start = ($start > 0) ? $start - 1 : $start;
386
-	if (is_null($len)) {
387
-		return substr($string, $start);
388
-	} else {
389
-		return substr($string, $start, $len);
390
-	}
384
+    // SQL compte a partir de 1, php a partir de 0
385
+    $start = ($start > 0) ? $start - 1 : $start;
386
+    if (is_null($len)) {
387
+        return substr($string, $start);
388
+    } else {
389
+        return substr($string, $start, $len);
390
+    }
391 391
 }
392 392
 
393 393
 /**
@@ -401,61 +401,61 @@  discard block
 block discarded – undo
401 401
  * @return int
402 402
  */
403 403
 function _sqlite_timestampdiff($unit, $date1, $date2) {
404
-	$d1 = date_create($date1);
405
-	$d2 = date_create($date2);
406
-	$diff = date_diff($d1, $d2);
407
-	$inv = $diff->invert ? -1 : 1;
408
-	switch ($unit) {
409
-		case 'YEAR':
410
-			return $inv * $diff->y;
411
-		case 'QUARTER':
412
-			return $inv * (4 * $diff->y + intval(floor($diff->m / 3)));
413
-		case 'MONTH':
414
-			return $inv * (12 * $diff->y + $diff->m);
415
-		case 'WEEK':
416
-			return $inv * intval(floor($diff->days / 7));
417
-		case 'DAY':
418
-			#var_dump($inv*$diff->days);
419
-			return $inv * $diff->days;
420
-		case 'HOUR':
421
-			return $inv * (24 * $diff->days + $diff->h);
422
-		case 'MINUTE':
423
-			return $inv * ((24 * $diff->days + $diff->h) * 60 + $diff->i);
424
-		case 'SECOND':
425
-			return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s);
426
-		case 'MICROSECOND':
427
-			return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s) * 1000000;
428
-	}
429
-
430
-	return 0;
404
+    $d1 = date_create($date1);
405
+    $d2 = date_create($date2);
406
+    $diff = date_diff($d1, $d2);
407
+    $inv = $diff->invert ? -1 : 1;
408
+    switch ($unit) {
409
+        case 'YEAR':
410
+            return $inv * $diff->y;
411
+        case 'QUARTER':
412
+            return $inv * (4 * $diff->y + intval(floor($diff->m / 3)));
413
+        case 'MONTH':
414
+            return $inv * (12 * $diff->y + $diff->m);
415
+        case 'WEEK':
416
+            return $inv * intval(floor($diff->days / 7));
417
+        case 'DAY':
418
+            #var_dump($inv*$diff->days);
419
+            return $inv * $diff->days;
420
+        case 'HOUR':
421
+            return $inv * (24 * $diff->days + $diff->h);
422
+        case 'MINUTE':
423
+            return $inv * ((24 * $diff->days + $diff->h) * 60 + $diff->i);
424
+        case 'SECOND':
425
+            return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s);
426
+        case 'MICROSECOND':
427
+            return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s) * 1000000;
428
+    }
429
+
430
+    return 0;
431 431
 }
432 432
 
433 433
 // https://code.spip.net/@_sqlite_func_unix_timestamp
434 434
 function _sqlite_func_unix_timestamp($d) {
435
-	static $mem = [];
436
-	static $n = 0;
437
-	if (isset($mem[$d])) {
438
-		return $mem[$d];
439
-	}
440
-	if ($n++ > 100) {
441
-		$mem = [];
442
-		$n = 0;
443
-	}
444
-
445
-	//2005-12-02 20:53:53
446
-	#spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
447
-	if (!$d) {
448
-		return $mem[$d] = mktime();
449
-	}
450
-
451
-	// une pile plus grosse n'accelere pas le calcul
452
-	return $mem[$d] = strtotime($d);
435
+    static $mem = [];
436
+    static $n = 0;
437
+    if (isset($mem[$d])) {
438
+        return $mem[$d];
439
+    }
440
+    if ($n++ > 100) {
441
+        $mem = [];
442
+        $n = 0;
443
+    }
444
+
445
+    //2005-12-02 20:53:53
446
+    #spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
447
+    if (!$d) {
448
+        return $mem[$d] = mktime();
449
+    }
450
+
451
+    // une pile plus grosse n'accelere pas le calcul
452
+    return $mem[$d] = strtotime($d);
453 453
 }
454 454
 
455 455
 
456 456
 // https://code.spip.net/@_sqlite_func_year
457 457
 function _sqlite_func_year($d) {
458
-	return _sqlite_func_date('Y', $d);
458
+    return _sqlite_func_date('Y', $d);
459 459
 }
460 460
 
461 461
 /**
@@ -469,23 +469,23 @@  discard block
 block discarded – undo
469 469
  * @return int
470 470
  */
471 471
 function _sqlite_func_date($quoi, $d) {
472
-	static $mem = [];
473
-	static $n = 0;
474
-	if (isset($mem[$d])) {
475
-		return $mem[$d][$quoi];
476
-	}
477
-	if ($n++ > 100) {
478
-		$mem = [];
479
-		$n = 0;
480
-	}
481
-
482
-	$dec = date('Y-m-d', _sqlite_func_unix_timestamp($d));
483
-	$mem[$d] = ['Y' => substr($dec, 0, 4), 'm' => substr($dec, 5, 2), 'd' => substr($dec, 8, 2)];
484
-
485
-	return $mem[$d][$quoi];
472
+    static $mem = [];
473
+    static $n = 0;
474
+    if (isset($mem[$d])) {
475
+        return $mem[$d][$quoi];
476
+    }
477
+    if ($n++ > 100) {
478
+        $mem = [];
479
+        $n = 0;
480
+    }
481
+
482
+    $dec = date('Y-m-d', _sqlite_func_unix_timestamp($d));
483
+    $mem[$d] = ['Y' => substr($dec, 0, 4), 'm' => substr($dec, 5, 2), 'd' => substr($dec, 8, 2)];
484
+
485
+    return $mem[$d][$quoi];
486 486
 }
487 487
 
488 488
 // https://code.spip.net/@_sqlite_func_vide
489 489
 function _sqlite_func_vide() {
490
-	return;
490
+    return;
491 491
 }
Please login to merge, or discard this patch.
ecrire/req/sqlite_generique.php 3 patches
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -2006,8 +2006,7 @@  discard block
 block discarded – undo
2006 2006
 		// si on ne connait pas le type on le deduit de $v autant que possible
2007 2007
 		if (is_bool($v)) {
2008 2008
 			return strval(intval($v));
2009
-		}
2010
-		elseif (is_numeric($v)) {
2009
+		} elseif (is_numeric($v)) {
2011 2010
 			return strval($v);
2012 2011
 		}
2013 2012
 	}
@@ -2633,8 +2632,7 @@  discard block
 block discarded – undo
2633 2632
 				$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2634 2633
 			}
2635 2634
 		}
2636
-	}
2637
-	else {
2635
+	} else {
2638 2636
 		$now = _sqlite_func_now(true);
2639 2637
 		foreach (array_keys($tables[$table]['desc']) as $k) {
2640 2638
 			$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
Please login to merge, or discard this patch.
Indentation   +1985 added lines, -1985 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  */
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 // TODO: get/set_caracteres ?
@@ -42,91 +42,91 @@  discard block
 block discarded – undo
42 42
  * @return array|bool
43 43
  */
44 44
 function req_sqlite_dist($addr, $port, $login, $pass, $db = '', $prefixe = '', $sqlite_version = '') {
45
-	static $last_connect = [];
46
-
47
-	// si provient de selectdb
48
-	// un code pour etre sur que l'on vient de select_db()
49
-	if (strpos($db, $code = '@selectdb@') !== false) {
50
-		foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) {
51
-			$$a = $last_connect[$a];
52
-		}
53
-		$db = str_replace($code, '', $db);
54
-	}
55
-
56
-	/*
45
+    static $last_connect = [];
46
+
47
+    // si provient de selectdb
48
+    // un code pour etre sur que l'on vient de select_db()
49
+    if (strpos($db, $code = '@selectdb@') !== false) {
50
+        foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) {
51
+            $$a = $last_connect[$a];
52
+        }
53
+        $db = str_replace($code, '', $db);
54
+    }
55
+
56
+    /*
57 57
 	 * En sqlite, seule l'adresse du fichier est importante.
58 58
 	 * Ce sera $db le nom,
59 59
 	 * le path est $addr
60 60
 	 * (_DIR_DB si $addr est vide)
61 61
 	 */
62
-	_sqlite_init();
63
-
64
-	// determiner le dossier de la base : $addr ou _DIR_DB
65
-	$f = _DIR_DB;
66
-	if ($addr and strpos($addr, '/') !== false) {
67
-		$f = rtrim($addr, '/') . '/';
68
-	}
69
-
70
-	// un nom de base demande et impossible d'obtenir la base, on s'en va :
71
-	// il faut que la base existe ou que le repertoire parent soit writable
72
-	if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) {
73
-		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS);
74
-
75
-		return false;
76
-	}
77
-
78
-	// charger les modules sqlite au besoin
79
-	if (!_sqlite_charger_version($sqlite_version)) {
80
-		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS);
81
-
82
-		return false;
83
-	}
84
-
85
-	// chargement des constantes
86
-	// il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
87
-	$define = 'spip_sqlite' . $sqlite_version . '_constantes';
88
-	$define();
89
-
90
-	$ok = false;
91
-	if (!$db) {
92
-		// si pas de db ->
93
-		// base temporaire tant qu'on ne connait pas son vrai nom
94
-		// pour tester la connexion
95
-		$db = '_sqlite' . $sqlite_version . '_install';
96
-		$tmp = _DIR_DB . $db . '.sqlite';
97
-		$ok = $link = new \PDO("sqlite:$tmp");
98
-	} else {
99
-		// Ouvrir (eventuellement creer la base)
100
-		$ok = $link = new \PDO("sqlite:$f");
101
-	}
102
-
103
-	if (!$ok) {
104
-		$e = _sqlite_last_error_from_link($link);
105
-		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS);
106
-
107
-		return false;
108
-	}
109
-
110
-	if ($link) {
111
-		$last_connect = [
112
-			'addr' => $addr,
113
-			'port' => $port,
114
-			'login' => $login,
115
-			'pass' => $pass,
116
-			'db' => $db,
117
-			'prefixe' => $prefixe,
118
-		];
119
-		// etre sur qu'on definit bien les fonctions a chaque nouvelle connexion
120
-		include_spip('req/sqlite_fonctions');
121
-		_sqlite_init_functions($link);
122
-	}
123
-
124
-	return [
125
-		'db' => $db,
126
-		'prefixe' => $prefixe ? $prefixe : $db,
127
-		'link' => $link,
128
-		'total_requetes' => 0,
129
-	];
62
+    _sqlite_init();
63
+
64
+    // determiner le dossier de la base : $addr ou _DIR_DB
65
+    $f = _DIR_DB;
66
+    if ($addr and strpos($addr, '/') !== false) {
67
+        $f = rtrim($addr, '/') . '/';
68
+    }
69
+
70
+    // un nom de base demande et impossible d'obtenir la base, on s'en va :
71
+    // il faut que la base existe ou que le repertoire parent soit writable
72
+    if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) {
73
+        spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS);
74
+
75
+        return false;
76
+    }
77
+
78
+    // charger les modules sqlite au besoin
79
+    if (!_sqlite_charger_version($sqlite_version)) {
80
+        spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS);
81
+
82
+        return false;
83
+    }
84
+
85
+    // chargement des constantes
86
+    // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
87
+    $define = 'spip_sqlite' . $sqlite_version . '_constantes';
88
+    $define();
89
+
90
+    $ok = false;
91
+    if (!$db) {
92
+        // si pas de db ->
93
+        // base temporaire tant qu'on ne connait pas son vrai nom
94
+        // pour tester la connexion
95
+        $db = '_sqlite' . $sqlite_version . '_install';
96
+        $tmp = _DIR_DB . $db . '.sqlite';
97
+        $ok = $link = new \PDO("sqlite:$tmp");
98
+    } else {
99
+        // Ouvrir (eventuellement creer la base)
100
+        $ok = $link = new \PDO("sqlite:$f");
101
+    }
102
+
103
+    if (!$ok) {
104
+        $e = _sqlite_last_error_from_link($link);
105
+        spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS);
106
+
107
+        return false;
108
+    }
109
+
110
+    if ($link) {
111
+        $last_connect = [
112
+            'addr' => $addr,
113
+            'port' => $port,
114
+            'login' => $login,
115
+            'pass' => $pass,
116
+            'db' => $db,
117
+            'prefixe' => $prefixe,
118
+        ];
119
+        // etre sur qu'on definit bien les fonctions a chaque nouvelle connexion
120
+        include_spip('req/sqlite_fonctions');
121
+        _sqlite_init_functions($link);
122
+    }
123
+
124
+    return [
125
+        'db' => $db,
126
+        'prefixe' => $prefixe ? $prefixe : $db,
127
+        'link' => $link,
128
+        'total_requetes' => 0,
129
+    ];
130 130
 }
131 131
 
132 132
 
@@ -145,14 +145,14 @@  discard block
 block discarded – undo
145 145
  *    Resultat de la requete
146 146
  */
147 147
 function spip_sqlite_query($query, $serveur = '', $requeter = true) {
148
-	#spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG);
149
-	#_sqlite_init(); // fait la premiere fois dans spip_sqlite
150
-	$query = spip_sqlite::traduire_requete($query, $serveur);
151
-	if (!$requeter) {
152
-		return $query;
153
-	}
148
+    #spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG);
149
+    #_sqlite_init(); // fait la premiere fois dans spip_sqlite
150
+    $query = spip_sqlite::traduire_requete($query, $serveur);
151
+    if (!$requeter) {
152
+        return $query;
153
+    }
154 154
 
155
-	return spip_sqlite::executer_requete($query, $serveur);
155
+    return spip_sqlite::executer_requete($query, $serveur);
156 156
 }
157 157
 
158 158
 
@@ -169,11 +169,11 @@  discard block
 block discarded – undo
169 169
  */
170 170
 function spip_sqlite_alter($query, $serveur = '', $requeter = true) {
171 171
 
172
-	$query = spip_sqlite_query("ALTER $query", $serveur, false);
173
-	// traduire la requete pour recuperer les bons noms de table
174
-	$query = spip_sqlite::traduire_requete($query, $serveur);
172
+    $query = spip_sqlite_query("ALTER $query", $serveur, false);
173
+    // traduire la requete pour recuperer les bons noms de table
174
+    $query = spip_sqlite::traduire_requete($query, $serveur);
175 175
 
176
-	/*
176
+    /*
177 177
 		 * la il faut faire les transformations
178 178
 		 * si ALTER TABLE x (DROP|CHANGE) y
179 179
 		 *
@@ -182,251 +182,251 @@  discard block
 block discarded – undo
182 182
 		 * 3) faire chaque requete independemment
183 183
 		 */
184 184
 
185
-	// 1
186
-	if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) {
187
-		$debut = $regs[1];
188
-		$table = $regs[3];
189
-		$suite = $regs[4];
190
-	} else {
191
-		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR);
192
-
193
-		return false;
194
-	}
195
-
196
-	// 2
197
-	// il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
198
-	// tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux
199
-	// ou revoir l'api de sql_alter en creant un
200
-	// sql_alter_table($table,array($actions));
201
-	$todo = explode(',', $suite);
202
-
203
-	// on remet les morceaux dechires ensembles... que c'est laid !
204
-	$todo2 = [];
205
-	$i = 0;
206
-	$ouverte = false;
207
-	while ($do = array_shift($todo)) {
208
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
209
-		$o = (false !== strpos($do, '('));
210
-		$f = (false !== strpos($do, ')'));
211
-		if ($o and !$f) {
212
-			$ouverte = true;
213
-		} elseif ($f) {
214
-			$ouverte = false;
215
-		}
216
-		if (!$ouverte) {
217
-			$i++;
218
-		}
219
-	}
220
-
221
-	// 3
222
-	$resultats = [];
223
-	foreach ($todo2 as $do) {
224
-		$do = trim($do);
225
-		if (
226
-			!preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP'
227
-			. '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME'
228
-			. '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE'
229
-			. '|ADD COLUMN|ADD'
230
-			. ')\s*([^\s]*)\s*(.*)?/i', $do, $matches)
231
-		) {
232
-			spip_log(
233
-				"SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)",
234
-				'sqlite.' . _LOG_ERREUR
235
-			);
236
-
237
-			return false;
238
-		}
239
-
240
-		$cle = strtoupper($matches[1]);
241
-		$colonne_origine = $matches[2];
242
-		$colonne_destination = '';
243
-
244
-		$def = $matches[3];
245
-
246
-		// eluder une eventuelle clause before|after|first inutilisable
247
-		$defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def));
248
-		$defo = $defr; // garder la def d'origine pour certains cas
249
-		// remplacer les definitions venant de mysql
250
-		$defr = _sqlite_remplacements_definitions_table($defr);
251
-
252
-		// reinjecter dans le do
253
-		$do = str_replace($def, $defr, $do);
254
-		$def = $defr;
255
-
256
-		switch ($cle) {
257
-			// suppression d'un index
258
-			case 'DROP KEY':
259
-			case 'DROP INDEX':
260
-				$nom_index = $colonne_origine;
261
-				spip_sqlite_drop_index($nom_index, $table, $serveur);
262
-				break;
263
-
264
-			// suppression d'une pk
265
-			case 'DROP PRIMARY KEY':
266
-				if (
267
-					!_sqlite_modifier_table(
268
-						$table,
269
-						$colonne_origine,
270
-						['key' => ['PRIMARY KEY' => '']],
271
-						$serveur
272
-					)
273
-				) {
274
-					return false;
275
-				}
276
-				break;
277
-			// suppression d'une colonne
278
-			case 'DROP COLUMN':
279
-			case 'DROP':
280
-				if (
281
-					!_sqlite_modifier_table(
282
-						$table,
283
-						[$colonne_origine => ''],
284
-						[],
285
-						$serveur
286
-					)
287
-				) {
288
-					return false;
289
-				}
290
-				break;
291
-
292
-			case 'CHANGE COLUMN':
293
-			case 'CHANGE':
294
-				// recuperer le nom de la future colonne
295
-				// on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
296
-				// en tenant compte de la cle primaire (ce qui est mieux)
297
-				$def = trim($defo);
298
-				$colonne_destination = substr($def, 0, strpos($def, ' '));
299
-				$def = substr($def, strlen($colonne_destination) + 1);
300
-
301
-				if (
302
-					!_sqlite_modifier_table(
303
-						$table,
304
-						[$colonne_origine => $colonne_destination],
305
-						['field' => [$colonne_destination => $def]],
306
-						$serveur
307
-					)
308
-				) {
309
-					return false;
310
-				}
311
-				break;
312
-
313
-			case 'MODIFY':
314
-				// on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
315
-				// en tenant compte de la cle primaire (ce qui est mieux)
316
-				if (
317
-					!_sqlite_modifier_table(
318
-						$table,
319
-						$colonne_origine,
320
-						['field' => [$colonne_origine => $defo]],
321
-						$serveur
322
-					)
323
-				) {
324
-					return false;
325
-				}
326
-				break;
327
-
328
-			// pas geres en sqlite2
329
-			case 'RENAME':
330
-				$do = 'RENAME TO' . substr($do, 6);
331
-			case 'RENAME TO':
332
-				if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
333
-					spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
334
-
335
-					return false;
336
-				}
337
-				break;
338
-
339
-			// ajout d'une pk
340
-			case 'ADD PRIMARY KEY':
341
-				$pk = trim(substr($do, 16));
342
-				$pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk;
343
-				if (
344
-					!_sqlite_modifier_table(
345
-						$table,
346
-						$colonne_origine,
347
-						['key' => ['PRIMARY KEY' => $pk]],
348
-						$serveur
349
-					)
350
-				) {
351
-					return false;
352
-				}
353
-				break;
354
-			// ajout d'un index
355
-			case 'ADD UNIQUE KEY':
356
-			case 'ADD UNIQUE':
357
-				$unique = true;
358
-			case 'ADD INDEX':
359
-			case 'ADD KEY':
360
-				if (!isset($unique)) {
361
-					$unique = false;
362
-				}
363
-				// peut etre "(colonne)" ou "nom_index (colonnes)"
364
-				// bug potentiel si qqn met "(colonne, colonne)"
365
-				//
366
-				// nom_index (colonnes)
367
-				if ($def) {
368
-					$colonnes = substr($def, 1, -1);
369
-					$nom_index = $colonne_origine;
370
-				} else {
371
-					// (colonne)
372
-					if ($colonne_origine[0] == '(') {
373
-						$colonnes = substr($colonne_origine, 1, -1);
374
-						if (false !== strpos(',', $colonnes)) {
375
-							spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes'
376
-								. " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR);
377
-							break;
378
-						} else {
379
-							$nom_index = $colonnes;
380
-						}
381
-					} // nom_index
382
-					else {
383
-						$nom_index = $colonnes = $colonne_origine;
384
-					}
385
-				}
386
-				spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur);
387
-				break;
388
-
389
-			// pas geres en sqlite2
390
-			case 'ADD COLUMN':
391
-				$do = 'ADD' . substr($do, 10);
392
-			case 'ADD':
393
-			default:
394
-				if (!preg_match(',primary\s+key,i', $do)) {
395
-					if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
396
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
397
-
398
-						return false;
399
-					}
400
-					break;
401
-				}
402
-				// ou si la colonne est aussi primary key
403
-				// cas du add id_truc int primary key
404
-				// ajout d'une colonne qui passe en primary key directe
405
-				else {
406
-					$def = trim(substr($do, 3));
407
-					$colonne_ajoutee = substr($def, 0, strpos($def, ' '));
408
-					$def = substr($def, strlen($colonne_ajoutee) + 1);
409
-					$opts = [];
410
-					if (preg_match(',primary\s+key,i', $def)) {
411
-						$opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee];
412
-						$def = preg_replace(',primary\s+key,i', '', $def);
413
-					}
414
-					$opts['field'] = [$colonne_ajoutee => $def];
415
-					if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) {
416
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
417
-
418
-						return false;
419
-					}
420
-				}
421
-				break;
422
-		}
423
-		// tout est bon, ouf !
424
-		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO);
425
-	}
426
-
427
-	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO);
428
-
429
-	return true;
185
+    // 1
186
+    if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) {
187
+        $debut = $regs[1];
188
+        $table = $regs[3];
189
+        $suite = $regs[4];
190
+    } else {
191
+        spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR);
192
+
193
+        return false;
194
+    }
195
+
196
+    // 2
197
+    // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
198
+    // tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux
199
+    // ou revoir l'api de sql_alter en creant un
200
+    // sql_alter_table($table,array($actions));
201
+    $todo = explode(',', $suite);
202
+
203
+    // on remet les morceaux dechires ensembles... que c'est laid !
204
+    $todo2 = [];
205
+    $i = 0;
206
+    $ouverte = false;
207
+    while ($do = array_shift($todo)) {
208
+        $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
209
+        $o = (false !== strpos($do, '('));
210
+        $f = (false !== strpos($do, ')'));
211
+        if ($o and !$f) {
212
+            $ouverte = true;
213
+        } elseif ($f) {
214
+            $ouverte = false;
215
+        }
216
+        if (!$ouverte) {
217
+            $i++;
218
+        }
219
+    }
220
+
221
+    // 3
222
+    $resultats = [];
223
+    foreach ($todo2 as $do) {
224
+        $do = trim($do);
225
+        if (
226
+            !preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP'
227
+            . '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME'
228
+            . '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE'
229
+            . '|ADD COLUMN|ADD'
230
+            . ')\s*([^\s]*)\s*(.*)?/i', $do, $matches)
231
+        ) {
232
+            spip_log(
233
+                "SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)",
234
+                'sqlite.' . _LOG_ERREUR
235
+            );
236
+
237
+            return false;
238
+        }
239
+
240
+        $cle = strtoupper($matches[1]);
241
+        $colonne_origine = $matches[2];
242
+        $colonne_destination = '';
243
+
244
+        $def = $matches[3];
245
+
246
+        // eluder une eventuelle clause before|after|first inutilisable
247
+        $defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def));
248
+        $defo = $defr; // garder la def d'origine pour certains cas
249
+        // remplacer les definitions venant de mysql
250
+        $defr = _sqlite_remplacements_definitions_table($defr);
251
+
252
+        // reinjecter dans le do
253
+        $do = str_replace($def, $defr, $do);
254
+        $def = $defr;
255
+
256
+        switch ($cle) {
257
+            // suppression d'un index
258
+            case 'DROP KEY':
259
+            case 'DROP INDEX':
260
+                $nom_index = $colonne_origine;
261
+                spip_sqlite_drop_index($nom_index, $table, $serveur);
262
+                break;
263
+
264
+            // suppression d'une pk
265
+            case 'DROP PRIMARY KEY':
266
+                if (
267
+                    !_sqlite_modifier_table(
268
+                        $table,
269
+                        $colonne_origine,
270
+                        ['key' => ['PRIMARY KEY' => '']],
271
+                        $serveur
272
+                    )
273
+                ) {
274
+                    return false;
275
+                }
276
+                break;
277
+            // suppression d'une colonne
278
+            case 'DROP COLUMN':
279
+            case 'DROP':
280
+                if (
281
+                    !_sqlite_modifier_table(
282
+                        $table,
283
+                        [$colonne_origine => ''],
284
+                        [],
285
+                        $serveur
286
+                    )
287
+                ) {
288
+                    return false;
289
+                }
290
+                break;
291
+
292
+            case 'CHANGE COLUMN':
293
+            case 'CHANGE':
294
+                // recuperer le nom de la future colonne
295
+                // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
296
+                // en tenant compte de la cle primaire (ce qui est mieux)
297
+                $def = trim($defo);
298
+                $colonne_destination = substr($def, 0, strpos($def, ' '));
299
+                $def = substr($def, strlen($colonne_destination) + 1);
300
+
301
+                if (
302
+                    !_sqlite_modifier_table(
303
+                        $table,
304
+                        [$colonne_origine => $colonne_destination],
305
+                        ['field' => [$colonne_destination => $def]],
306
+                        $serveur
307
+                    )
308
+                ) {
309
+                    return false;
310
+                }
311
+                break;
312
+
313
+            case 'MODIFY':
314
+                // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
315
+                // en tenant compte de la cle primaire (ce qui est mieux)
316
+                if (
317
+                    !_sqlite_modifier_table(
318
+                        $table,
319
+                        $colonne_origine,
320
+                        ['field' => [$colonne_origine => $defo]],
321
+                        $serveur
322
+                    )
323
+                ) {
324
+                    return false;
325
+                }
326
+                break;
327
+
328
+            // pas geres en sqlite2
329
+            case 'RENAME':
330
+                $do = 'RENAME TO' . substr($do, 6);
331
+            case 'RENAME TO':
332
+                if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
333
+                    spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
334
+
335
+                    return false;
336
+                }
337
+                break;
338
+
339
+            // ajout d'une pk
340
+            case 'ADD PRIMARY KEY':
341
+                $pk = trim(substr($do, 16));
342
+                $pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk;
343
+                if (
344
+                    !_sqlite_modifier_table(
345
+                        $table,
346
+                        $colonne_origine,
347
+                        ['key' => ['PRIMARY KEY' => $pk]],
348
+                        $serveur
349
+                    )
350
+                ) {
351
+                    return false;
352
+                }
353
+                break;
354
+            // ajout d'un index
355
+            case 'ADD UNIQUE KEY':
356
+            case 'ADD UNIQUE':
357
+                $unique = true;
358
+            case 'ADD INDEX':
359
+            case 'ADD KEY':
360
+                if (!isset($unique)) {
361
+                    $unique = false;
362
+                }
363
+                // peut etre "(colonne)" ou "nom_index (colonnes)"
364
+                // bug potentiel si qqn met "(colonne, colonne)"
365
+                //
366
+                // nom_index (colonnes)
367
+                if ($def) {
368
+                    $colonnes = substr($def, 1, -1);
369
+                    $nom_index = $colonne_origine;
370
+                } else {
371
+                    // (colonne)
372
+                    if ($colonne_origine[0] == '(') {
373
+                        $colonnes = substr($colonne_origine, 1, -1);
374
+                        if (false !== strpos(',', $colonnes)) {
375
+                            spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes'
376
+                                . " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR);
377
+                            break;
378
+                        } else {
379
+                            $nom_index = $colonnes;
380
+                        }
381
+                    } // nom_index
382
+                    else {
383
+                        $nom_index = $colonnes = $colonne_origine;
384
+                    }
385
+                }
386
+                spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur);
387
+                break;
388
+
389
+            // pas geres en sqlite2
390
+            case 'ADD COLUMN':
391
+                $do = 'ADD' . substr($do, 10);
392
+            case 'ADD':
393
+            default:
394
+                if (!preg_match(',primary\s+key,i', $do)) {
395
+                    if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
396
+                        spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
397
+
398
+                        return false;
399
+                    }
400
+                    break;
401
+                }
402
+                // ou si la colonne est aussi primary key
403
+                // cas du add id_truc int primary key
404
+                // ajout d'une colonne qui passe en primary key directe
405
+                else {
406
+                    $def = trim(substr($do, 3));
407
+                    $colonne_ajoutee = substr($def, 0, strpos($def, ' '));
408
+                    $def = substr($def, strlen($colonne_ajoutee) + 1);
409
+                    $opts = [];
410
+                    if (preg_match(',primary\s+key,i', $def)) {
411
+                        $opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee];
412
+                        $def = preg_replace(',primary\s+key,i', '', $def);
413
+                    }
414
+                    $opts['field'] = [$colonne_ajoutee => $def];
415
+                    if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) {
416
+                        spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
417
+
418
+                        return false;
419
+                    }
420
+                }
421
+                break;
422
+        }
423
+        // tout est bon, ouf !
424
+        spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO);
425
+    }
426
+
427
+    spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO);
428
+
429
+    return true;
430 430
 }
431 431
 
432 432
 
@@ -449,38 +449,38 @@  discard block
 block discarded – undo
449 449
  *     - true si la requête réussie, false sinon.
450 450
  */
451 451
 function spip_sqlite_create(
452
-	$nom,
453
-	$champs,
454
-	$cles,
455
-	$autoinc = false,
456
-	$temporary = false,
457
-	$serveur = '',
458
-	$requeter = true
452
+    $nom,
453
+    $champs,
454
+    $cles,
455
+    $autoinc = false,
456
+    $temporary = false,
457
+    $serveur = '',
458
+    $requeter = true
459 459
 ) {
460
-	$query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter);
461
-	if (!$query) {
462
-		return false;
463
-	}
464
-	$res = spip_sqlite_query($query, $serveur, $requeter);
465
-
466
-	// SQLite ne cree pas les KEY sur les requetes CREATE TABLE
467
-	// il faut donc les faire creer ensuite
468
-	if (!$requeter) {
469
-		return $res;
470
-	}
471
-
472
-	$ok = $res ? true : false;
473
-	if ($ok) {
474
-		foreach ($cles as $k => $v) {
475
-			if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) {
476
-				$index = trim(substr($k, strlen($m[1])));
477
-				$unique = (strlen($m[1]) > 3);
478
-				$ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur);
479
-			}
480
-		}
481
-	}
482
-
483
-	return $ok ? true : false;
460
+    $query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter);
461
+    if (!$query) {
462
+        return false;
463
+    }
464
+    $res = spip_sqlite_query($query, $serveur, $requeter);
465
+
466
+    // SQLite ne cree pas les KEY sur les requetes CREATE TABLE
467
+    // il faut donc les faire creer ensuite
468
+    if (!$requeter) {
469
+        return $res;
470
+    }
471
+
472
+    $ok = $res ? true : false;
473
+    if ($ok) {
474
+        foreach ($cles as $k => $v) {
475
+            if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) {
476
+                $index = trim(substr($k, strlen($m[1])));
477
+                $unique = (strlen($m[1]) > 3);
478
+                $ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur);
479
+            }
480
+        }
481
+    }
482
+
483
+    return $ok ? true : false;
484 484
 }
485 485
 
486 486
 /**
@@ -493,21 +493,21 @@  discard block
 block discarded – undo
493 493
  * @return bool true si la base est créee.
494 494
  **/
495 495
 function spip_sqlite_create_base($nom, $serveur = '', $option = true) {
496
-	$f = $nom . '.sqlite';
497
-	if (strpos($nom, '/') === false) {
498
-		$f = _DIR_DB . $f;
499
-	}
496
+    $f = $nom . '.sqlite';
497
+    if (strpos($nom, '/') === false) {
498
+        $f = _DIR_DB . $f;
499
+    }
500 500
 
501
-	$ok = new \PDO("sqlite:$f");
501
+    $ok = new \PDO("sqlite:$f");
502 502
 
503
-	if ($ok) {
504
-		unset($ok);
503
+    if ($ok) {
504
+        unset($ok);
505 505
 
506
-		return true;
507
-	}
508
-	unset($ok);
506
+        return true;
507
+    }
508
+    unset($ok);
509 509
 
510
-	return false;
510
+    return false;
511 511
 }
512 512
 
513 513
 
@@ -528,22 +528,22 @@  discard block
 block discarded – undo
528 528
  *     - string texte de la requête si $requeter vaut false
529 529
  */
530 530
 function spip_sqlite_create_view($nom, $query_select, $serveur = '', $requeter = true) {
531
-	if (!$query_select) {
532
-		return false;
533
-	}
534
-	// vue deja presente
535
-	if (sql_showtable($nom, false, $serveur)) {
536
-		spip_log(
537
-			"Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",
538
-			'sqlite.' . _LOG_ERREUR
539
-		);
531
+    if (!$query_select) {
532
+        return false;
533
+    }
534
+    // vue deja presente
535
+    if (sql_showtable($nom, false, $serveur)) {
536
+        spip_log(
537
+            "Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",
538
+            'sqlite.' . _LOG_ERREUR
539
+        );
540 540
 
541
-		return false;
542
-	}
541
+        return false;
542
+    }
543 543
 
544
-	$query = "CREATE VIEW $nom AS " . $query_select;
544
+    $query = "CREATE VIEW $nom AS " . $query_select;
545 545
 
546
-	return spip_sqlite_query($query, $serveur, $requeter);
546
+    return spip_sqlite_query($query, $serveur, $requeter);
547 547
 }
548 548
 
549 549
 /**
@@ -565,54 +565,54 @@  discard block
 block discarded – undo
565 565
  *    string : requête, false si erreur, true sinon.
566 566
  */
567 567
 function spip_sqlite_create_index($nom, $table, $champs, $unique = '', $serveur = '', $requeter = true) {
568
-	if (!($nom or $table or $champs)) {
569
-		spip_log(
570
-			"Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))',
571
-			'sqlite.' . _LOG_ERREUR
572
-		);
573
-
574
-		return false;
575
-	}
576
-
577
-	// SQLite ne differentie pas noms des index en fonction des tables
578
-	// il faut donc creer des noms uniques d'index pour une base sqlite
579
-	$nom = $table . '_' . $nom;
580
-	// enlever d'eventuelles parentheses deja presentes sur champs
581
-	if (!is_array($champs)) {
582
-		if ($champs[0] == '(') {
583
-			$champs = substr($champs, 1, -1);
584
-		}
585
-		$champs = [$champs];
586
-		// supprimer l'info de longueur d'index mysql en fin de champ
587
-		$champs = preg_replace(',\(\d+\)$,', '', $champs);
588
-	}
589
-
590
-	$ifnotexists = '';
591
-	$version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur);
592
-	if (!function_exists('spip_version_compare')) {
593
-		include_spip('plugins/installer');
594
-	}
595
-
596
-	if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
597
-		$ifnotexists = ' IF NOT EXISTS';
598
-	} else {
599
-		/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
600
-		$a = spip_sqlite_showtable($table, $serveur);
601
-		if (isset($a['key']['KEY ' . $nom])) {
602
-			return true;
603
-		}
604
-	}
605
-
606
-	$query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')';
607
-	$res = spip_sqlite_query($query, $serveur, $requeter);
608
-	if (!$requeter) {
609
-		return $res;
610
-	}
611
-	if ($res) {
612
-		return true;
613
-	} else {
614
-		return false;
615
-	}
568
+    if (!($nom or $table or $champs)) {
569
+        spip_log(
570
+            "Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))',
571
+            'sqlite.' . _LOG_ERREUR
572
+        );
573
+
574
+        return false;
575
+    }
576
+
577
+    // SQLite ne differentie pas noms des index en fonction des tables
578
+    // il faut donc creer des noms uniques d'index pour une base sqlite
579
+    $nom = $table . '_' . $nom;
580
+    // enlever d'eventuelles parentheses deja presentes sur champs
581
+    if (!is_array($champs)) {
582
+        if ($champs[0] == '(') {
583
+            $champs = substr($champs, 1, -1);
584
+        }
585
+        $champs = [$champs];
586
+        // supprimer l'info de longueur d'index mysql en fin de champ
587
+        $champs = preg_replace(',\(\d+\)$,', '', $champs);
588
+    }
589
+
590
+    $ifnotexists = '';
591
+    $version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur);
592
+    if (!function_exists('spip_version_compare')) {
593
+        include_spip('plugins/installer');
594
+    }
595
+
596
+    if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
597
+        $ifnotexists = ' IF NOT EXISTS';
598
+    } else {
599
+        /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
600
+        $a = spip_sqlite_showtable($table, $serveur);
601
+        if (isset($a['key']['KEY ' . $nom])) {
602
+            return true;
603
+        }
604
+    }
605
+
606
+    $query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')';
607
+    $res = spip_sqlite_query($query, $serveur, $requeter);
608
+    if (!$requeter) {
609
+        return $res;
610
+    }
611
+    if ($res) {
612
+        return true;
613
+    } else {
614
+        return false;
615
+    }
616 616
 }
617 617
 
618 618
 /**
@@ -629,31 +629,31 @@  discard block
 block discarded – undo
629 629
  * @return int                 Nombre de lignes
630 630
  */
631 631
 function spip_sqlite_count($r, $serveur = '', $requeter = true) {
632
-	if (!$r) {
633
-		return 0;
634
-	}
635
-
636
-	// select ou autre (insert, update,...) ?
637
-	// (link,requete) a compter
638
-	if (is_array($r->spipSqliteRowCount)) {
639
-		list($link, $query) = $r->spipSqliteRowCount;
640
-		// amelioration possible a tester intensivement : pas de order by pour compter !
641
-		// $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query);
642
-		$query = "SELECT count(*) as zzzzsqlitecount FROM ($query)";
643
-		$l = $link->query($query);
644
-		$i = 0;
645
-		if ($l and $z = $l->fetch()) {
646
-			$i = $z['zzzzsqlitecount'];
647
-		}
648
-		$r->spipSqliteRowCount = $i;
649
-	}
650
-	if (isset($r->spipSqliteRowCount)) {
651
-		// Ce compte est faux s'il y a des limit dans la requete :(
652
-		// il retourne le nombre d'enregistrements sans le limit
653
-		return $r->spipSqliteRowCount;
654
-	} else {
655
-		return $r->rowCount();
656
-	}
632
+    if (!$r) {
633
+        return 0;
634
+    }
635
+
636
+    // select ou autre (insert, update,...) ?
637
+    // (link,requete) a compter
638
+    if (is_array($r->spipSqliteRowCount)) {
639
+        list($link, $query) = $r->spipSqliteRowCount;
640
+        // amelioration possible a tester intensivement : pas de order by pour compter !
641
+        // $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query);
642
+        $query = "SELECT count(*) as zzzzsqlitecount FROM ($query)";
643
+        $l = $link->query($query);
644
+        $i = 0;
645
+        if ($l and $z = $l->fetch()) {
646
+            $i = $z['zzzzsqlitecount'];
647
+        }
648
+        $r->spipSqliteRowCount = $i;
649
+    }
650
+    if (isset($r->spipSqliteRowCount)) {
651
+        // Ce compte est faux s'il y a des limit dans la requete :(
652
+        // il retourne le nombre d'enregistrements sans le limit
653
+        return $r->spipSqliteRowCount;
654
+    } else {
655
+        return $r->rowCount();
656
+    }
657 657
 }
658 658
 
659 659
 
@@ -672,30 +672,30 @@  discard block
 block discarded – undo
672 672
  *     - false si la requête a échouée
673 673
  **/
674 674
 function spip_sqlite_countsel(
675
-	$from = [],
676
-	$where = [],
677
-	$groupby = '',
678
-	$having = [],
679
-	$serveur = '',
680
-	$requeter = true
675
+    $from = [],
676
+    $where = [],
677
+    $groupby = '',
678
+    $having = [],
679
+    $serveur = '',
680
+    $requeter = true
681 681
 ) {
682
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
683
-	$r = spip_sqlite_select(
684
-		"COUNT($c)",
685
-		$from,
686
-		$where,
687
-		'',
688
-		'',
689
-		'',
690
-		$having,
691
-		$serveur,
692
-		$requeter
693
-	);
694
-	if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3
695
-		list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur);
696
-	}
697
-
698
-	return $r;
682
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
683
+    $r = spip_sqlite_select(
684
+        "COUNT($c)",
685
+        $from,
686
+        $where,
687
+        '',
688
+        '',
689
+        '',
690
+        $having,
691
+        $serveur,
692
+        $requeter
693
+    );
694
+    if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3
695
+        list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur);
696
+    }
697
+
698
+    return $r;
699 699
 }
700 700
 
701 701
 
@@ -712,24 +712,24 @@  discard block
 block discarded – undo
712 712
  *     - False en cas d'erreur.
713 713
  **/
714 714
 function spip_sqlite_delete($table, $where = '', $serveur = '', $requeter = true) {
715
-	$res = spip_sqlite_query(
716
-		_sqlite_calculer_expression('DELETE FROM', $table, ',')
717
-		. _sqlite_calculer_expression('WHERE', $where),
718
-		$serveur,
719
-		$requeter
720
-	);
715
+    $res = spip_sqlite_query(
716
+        _sqlite_calculer_expression('DELETE FROM', $table, ',')
717
+        . _sqlite_calculer_expression('WHERE', $where),
718
+        $serveur,
719
+        $requeter
720
+    );
721 721
 
722
-	// renvoyer la requete inerte si demandee
723
-	if (!$requeter) {
724
-		return $res;
725
-	}
722
+    // renvoyer la requete inerte si demandee
723
+    if (!$requeter) {
724
+        return $res;
725
+    }
726 726
 
727
-	if ($res) {
728
-		$link = _sqlite_link($serveur);
729
-		return $res->rowCount();
730
-	} else {
731
-		return false;
732
-	}
727
+    if ($res) {
728
+        $link = _sqlite_link($serveur);
729
+        return $res->rowCount();
730
+    } else {
731
+        return false;
732
+    }
733 733
 }
734 734
 
735 735
 
@@ -745,15 +745,15 @@  discard block
 block discarded – undo
745 745
  *     - true si la requête a réussie, false sinon
746 746
  */
747 747
 function spip_sqlite_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
748
-	if ($exist) {
749
-		$exist = ' IF EXISTS';
750
-	}
748
+    if ($exist) {
749
+        $exist = ' IF EXISTS';
750
+    }
751 751
 
752
-	if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) {
753
-		return true;
754
-	} else {
755
-		return false;
756
-	}
752
+    if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) {
753
+        return true;
754
+    } else {
755
+        return false;
756
+    }
757 757
 }
758 758
 
759 759
 
@@ -769,11 +769,11 @@  discard block
 block discarded – undo
769 769
  *     - true si la requête a réussie, false sinon
770 770
  */
771 771
 function spip_sqlite_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
772
-	if ($exist) {
773
-		$exist = ' IF EXISTS';
774
-	}
772
+    if ($exist) {
773
+        $exist = ' IF EXISTS';
774
+    }
775 775
 
776
-	return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter);
776
+    return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter);
777 777
 }
778 778
 
779 779
 /**
@@ -787,20 +787,20 @@  discard block
 block discarded – undo
787 787
  * @return bool ou requete
788 788
  */
789 789
 function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true) {
790
-	if (!($nom or $table)) {
791
-		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR);
790
+    if (!($nom or $table)) {
791
+        spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR);
792 792
 
793
-		return false;
794
-	}
793
+        return false;
794
+    }
795 795
 
796
-	// SQLite ne differentie pas noms des index en fonction des tables
797
-	// il faut donc creer des noms uniques d'index pour une base sqlite
798
-	$index = $table . '_' . $nom;
799
-	$exist = ' IF EXISTS';
796
+    // SQLite ne differentie pas noms des index en fonction des tables
797
+    // il faut donc creer des noms uniques d'index pour une base sqlite
798
+    $index = $table . '_' . $nom;
799
+    $exist = ' IF EXISTS';
800 800
 
801
-	$query = "DROP INDEX$exist $index";
801
+    $query = "DROP INDEX$exist $index";
802 802
 
803
-	return spip_sqlite_query($query, $serveur, $requeter);
803
+    return spip_sqlite_query($query, $serveur, $requeter);
804 804
 }
805 805
 
806 806
 /**
@@ -816,28 +816,28 @@  discard block
 block discarded – undo
816 816
  *     Erreur eventuelle
817 817
  **/
818 818
 function spip_sqlite_error($query = '', $serveur = '') {
819
-	$link = _sqlite_link($serveur);
819
+    $link = _sqlite_link($serveur);
820 820
 
821
-	if ($link) {
822
-		$errs = $link->errorInfo();
823
-		$s = _sqlite_last_error_from_link($link);
824
-	} else {
825
-		$s = ': aucune ressource sqlite (link)';
826
-	}
827
-	if ($s) {
828
-		$trace = debug_backtrace();
829
-		if ($trace[0]['function'] != 'spip_sqlite_error') {
830
-			spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR);
831
-		}
832
-	}
821
+    if ($link) {
822
+        $errs = $link->errorInfo();
823
+        $s = _sqlite_last_error_from_link($link);
824
+    } else {
825
+        $s = ': aucune ressource sqlite (link)';
826
+    }
827
+    if ($s) {
828
+        $trace = debug_backtrace();
829
+        if ($trace[0]['function'] != 'spip_sqlite_error') {
830
+            spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR);
831
+        }
832
+    }
833 833
 
834
-	return $s;
834
+    return $s;
835 835
 }
836 836
 
837 837
 function _sqlite_last_error_from_link($link) {
838
-	if ($link) {
839
-		$errs = $link->errorInfo();
840
-		/*
838
+    if ($link) {
839
+        $errs = $link->errorInfo();
840
+        /*
841 841
 			$errs[0]
842 842
 				numero SQLState ('HY000' souvent lors d'une erreur)
843 843
 				http://www.easysoft.com/developer/interfaces/odbc/sqlstate_status_return_codes.html
@@ -847,11 +847,11 @@  discard block
 block discarded – undo
847 847
 			$errs[2]
848 848
 				Le texte du message d'erreur
849 849
 		*/
850
-		if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur
851
-			return "$errs[2]";
852
-		}
853
-	}
854
-	return '';
850
+        if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur
851
+            return "$errs[2]";
852
+        }
853
+    }
854
+    return '';
855 855
 }
856 856
 
857 857
 /**
@@ -868,23 +868,23 @@  discard block
 block discarded – undo
868 868
  *    'HY000/1' : numéro de l'erreur SQLState / numéro d'erreur interne SQLite (en sqlite 3)
869 869
  **/
870 870
 function spip_sqlite_errno($serveur = '') {
871
-	$link = _sqlite_link($serveur);
871
+    $link = _sqlite_link($serveur);
872 872
 
873
-	if ($link) {
874
-		$t = $link->errorInfo();
875
-		$s = ltrim($t[0], '0'); // 00000 si pas d'erreur
876
-		if ($s) {
877
-			$s .= ' / ' . $t[1];
878
-		} // ajoute l'erreur du moteur SQLite
879
-	} else {
880
-		$s = ': aucune ressource sqlite (link)';
881
-	}
873
+    if ($link) {
874
+        $t = $link->errorInfo();
875
+        $s = ltrim($t[0], '0'); // 00000 si pas d'erreur
876
+        if ($s) {
877
+            $s .= ' / ' . $t[1];
878
+        } // ajoute l'erreur du moteur SQLite
879
+    } else {
880
+        $s = ': aucune ressource sqlite (link)';
881
+    }
882 882
 
883
-	if ($s) {
884
-		spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR);
885
-	}
883
+    if ($s) {
884
+        spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR);
885
+    }
886 886
 
887
-	return $s ? $s : 0;
887
+    return $s ? $s : 0;
888 888
 }
889 889
 
890 890
 
@@ -900,19 +900,19 @@  discard block
 block discarded – undo
900 900
  *     - false si on a pas pu avoir d'explication
901 901
  */
902 902
 function spip_sqlite_explain($query, $serveur = '', $requeter = true) {
903
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
904
-		return [];
905
-	}
903
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
904
+        return [];
905
+    }
906 906
 
907
-	$query = spip_sqlite::traduire_requete($query, $serveur);
908
-	$query = 'EXPLAIN ' . $query;
909
-	if (!$requeter) {
910
-		return $query;
911
-	}
912
-	// on ne trace pas ces requetes, sinon on obtient un tracage sans fin...
913
-	$r = spip_sqlite::executer_requete($query, $serveur, false);
907
+    $query = spip_sqlite::traduire_requete($query, $serveur);
908
+    $query = 'EXPLAIN ' . $query;
909
+    if (!$requeter) {
910
+        return $query;
911
+    }
912
+    // on ne trace pas ces requetes, sinon on obtient un tracage sans fin...
913
+    $r = spip_sqlite::executer_requete($query, $serveur, false);
914 914
 
915
-	return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier
915
+    return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier
916 916
 }
917 917
 
918 918
 
@@ -929,30 +929,30 @@  discard block
 block discarded – undo
929 929
  */
930 930
 function spip_sqlite_fetch($r, $t = '', $serveur = '', $requeter = true) {
931 931
 
932
-	$link = _sqlite_link($serveur);
933
-	$t = $t ? $t : SPIP_SQLITE3_ASSOC;
932
+    $link = _sqlite_link($serveur);
933
+    $t = $t ? $t : SPIP_SQLITE3_ASSOC;
934 934
 
935
-	$retour = false;
936
-	if ($r) {
937
-		$retour = $r->fetch($t);
938
-	}
935
+    $retour = false;
936
+    if ($r) {
937
+        $retour = $r->fetch($t);
938
+    }
939 939
 
940
-	// Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff !
941
-	// suppression de 'table.' pour toutes les cles (c'est un peu violent !)
942
-	// c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non
943
-	if (
944
-		$retour
945
-		and strpos(implode('', array_keys($retour)), '.') !== false
946
-	) {
947
-		foreach ($retour as $cle => $val) {
948
-			if (($pos = strpos($cle, '.')) !== false) {
949
-				$retour[substr($cle, $pos + 1)] = &$retour[$cle];
950
-				unset($retour[$cle]);
951
-			}
952
-		}
953
-	}
940
+    // Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff !
941
+    // suppression de 'table.' pour toutes les cles (c'est un peu violent !)
942
+    // c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non
943
+    if (
944
+        $retour
945
+        and strpos(implode('', array_keys($retour)), '.') !== false
946
+    ) {
947
+        foreach ($retour as $cle => $val) {
948
+            if (($pos = strpos($cle, '.')) !== false) {
949
+                $retour[substr($cle, $pos + 1)] = &$retour[$cle];
950
+                unset($retour[$cle]);
951
+            }
952
+        }
953
+    }
954 954
 
955
-	return $retour;
955
+    return $retour;
956 956
 }
957 957
 
958 958
 /**
@@ -965,8 +965,8 @@  discard block
 block discarded – undo
965 965
  * @return bool True si déplacement réussi, false sinon.
966 966
  **/
967 967
 function spip_sqlite_seek($r, $row_number, $serveur = '', $requeter = true) {
968
-	// encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind...
969
-	return false;
968
+    // encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind...
969
+    return false;
970 970
 }
971 971
 
972 972
 
@@ -982,10 +982,10 @@  discard block
 block discarded – undo
982 982
  * @return bool                True si réussi
983 983
  */
984 984
 function spip_sqlite_free(&$r, $serveur = '', $requeter = true) {
985
-	unset($r);
985
+    unset($r);
986 986
 
987
-	return true;
988
-	//return sqlite_free_result($r);
987
+    return true;
988
+    //return sqlite_free_result($r);
989 989
 }
990 990
 
991 991
 
@@ -1000,8 +1000,8 @@  discard block
 block discarded – undo
1000 1000
  * @return void
1001 1001
  */
1002 1002
 function spip_sqlite_get_charset($charset = [], $serveur = '', $requeter = true) {
1003
-	//$c = !$charset ? '' : (" LIKE "._q($charset['charset']));
1004
-	//return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur);
1003
+    //$c = !$charset ? '' : (" LIKE "._q($charset['charset']));
1004
+    //return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur);
1005 1005
 }
1006 1006
 
1007 1007
 
@@ -1016,7 +1016,7 @@  discard block
 block discarded – undo
1016 1016
  *     Valeur hexadécimale pour SQLite
1017 1017
  **/
1018 1018
 function spip_sqlite_hex($v) {
1019
-	return hexdec($v);
1019
+    return hexdec($v);
1020 1020
 }
1021 1021
 
1022 1022
 
@@ -1038,7 +1038,7 @@  discard block
 block discarded – undo
1038 1038
  *     Expression de requête SQL
1039 1039
  **/
1040 1040
 function spip_sqlite_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1041
-	return "($val $not IN ($valeurs))";
1041
+    return "($val $not IN ($valeurs))";
1042 1042
 }
1043 1043
 
1044 1044
 
@@ -1066,20 +1066,20 @@  discard block
 block discarded – undo
1066 1066
  **/
1067 1067
 function spip_sqlite_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1068 1068
 
1069
-	$query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1070
-	if ($r = spip_sqlite_query($query, $serveur, $requeter)) {
1071
-		if (!$requeter) {
1072
-			return $r;
1073
-		}
1074
-		$nb = spip_sqlite::last_insert_id($serveur);
1075
-	} else {
1076
-		$nb = false;
1077
-	}
1069
+    $query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1070
+    if ($r = spip_sqlite_query($query, $serveur, $requeter)) {
1071
+        if (!$requeter) {
1072
+            return $r;
1073
+        }
1074
+        $nb = spip_sqlite::last_insert_id($serveur);
1075
+    } else {
1076
+        $nb = false;
1077
+    }
1078 1078
 
1079
-	$err = spip_sqlite_error($query, $serveur);
1079
+    $err = spip_sqlite_error($query, $serveur);
1080 1080
 
1081
-	// cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1082
-	return isset($_GET['var_profile']) ? $r : $nb;
1081
+    // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1082
+    return isset($_GET['var_profile']) ? $r : $nb;
1083 1083
 }
1084 1084
 
1085 1085
 
@@ -1104,28 +1104,28 @@  discard block
 block discarded – undo
1104 1104
  *     - Tableau de description de la requête et du temps d'exécution, si var_profile activé
1105 1105
  **/
1106 1106
 function spip_sqlite_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
1107
-	if (!$desc) {
1108
-		$desc = description_table($table, $serveur);
1109
-	}
1110
-	if (!$desc) {
1111
-		die("$table insertion sans description");
1112
-	}
1113
-	$fields = isset($desc['field']) ? $desc['field'] : [];
1107
+    if (!$desc) {
1108
+        $desc = description_table($table, $serveur);
1109
+    }
1110
+    if (!$desc) {
1111
+        die("$table insertion sans description");
1112
+    }
1113
+    $fields = isset($desc['field']) ? $desc['field'] : [];
1114 1114
 
1115
-	foreach ($couples as $champ => $val) {
1116
-		$couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1117
-	}
1115
+    foreach ($couples as $champ => $val) {
1116
+        $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1117
+    }
1118 1118
 
1119
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1120
-	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1119
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1120
+    $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1121 1121
 
1122
-	$cles = $valeurs = '';
1123
-	if (count($couples)) {
1124
-		$cles = '(' . join(',', array_keys($couples)) . ')';
1125
-		$valeurs = '(' . join(',', $couples) . ')';
1126
-	}
1122
+    $cles = $valeurs = '';
1123
+    if (count($couples)) {
1124
+        $cles = '(' . join(',', array_keys($couples)) . ')';
1125
+        $valeurs = '(' . join(',', $couples) . ')';
1126
+    }
1127 1127
 
1128
-	return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
1128
+    return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
1129 1129
 }
1130 1130
 
1131 1131
 
@@ -1149,70 +1149,70 @@  discard block
 block discarded – undo
1149 1149
  *     - False en cas d'erreur.
1150 1150
  **/
1151 1151
 function spip_sqlite_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
1152
-	if (!$desc) {
1153
-		$desc = description_table($table, $serveur);
1154
-	}
1155
-	if (!$desc) {
1156
-		die("$table insertion sans description");
1157
-	}
1158
-	if (!isset($desc['field'])) {
1159
-		$desc['field'] = [];
1160
-	}
1161
-
1162
-	// recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci
1163
-	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1164
-
1165
-	// seul le nom de la table est a traduire ici :
1166
-	// le faire une seule fois au debut
1167
-	$query_start = "INSERT INTO $table ";
1168
-	$query_start = spip_sqlite::traduire_requete($query_start, $serveur);
1169
-
1170
-	// ouvrir une transaction
1171
-	if ($requeter) {
1172
-		spip_sqlite::demarrer_transaction($serveur);
1173
-	}
1174
-
1175
-	while ($couples = array_shift($tab_couples)) {
1176
-		foreach ($couples as $champ => $val) {
1177
-			$couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]);
1178
-		}
1179
-
1180
-		// inserer les champs timestamp par defaut
1181
-		$couples = array_merge($maj, $couples);
1182
-
1183
-		$champs = $valeurs = '';
1184
-		if (count($couples)) {
1185
-			$champs = '(' . join(',', array_keys($couples)) . ')';
1186
-			$valeurs = '(' . join(',', $couples) . ')';
1187
-			$query = $query_start . "$champs VALUES $valeurs";
1188
-		} else {
1189
-			$query = $query_start . 'DEFAULT VALUES';
1190
-		}
1191
-
1192
-		if ($requeter) {
1193
-			$retour = spip_sqlite::executer_requete($query, $serveur);
1194
-		}
1195
-
1196
-		// sur le dernier couple uniquement
1197
-		if (!count($tab_couples)) {
1198
-			$nb = 0;
1199
-			if ($requeter) {
1200
-				$nb = spip_sqlite::last_insert_id($serveur);
1201
-			} else {
1202
-				return $query;
1203
-			}
1204
-		}
1205
-
1206
-		$err = spip_sqlite_error($query, $serveur);
1207
-	}
1208
-
1209
-	if ($requeter) {
1210
-		spip_sqlite::finir_transaction($serveur);
1211
-	}
1212
-
1213
-	// renvoie le dernier id d'autoincrement ajoute
1214
-	// cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1215
-	return isset($_GET['var_profile']) ? $retour : $nb;
1152
+    if (!$desc) {
1153
+        $desc = description_table($table, $serveur);
1154
+    }
1155
+    if (!$desc) {
1156
+        die("$table insertion sans description");
1157
+    }
1158
+    if (!isset($desc['field'])) {
1159
+        $desc['field'] = [];
1160
+    }
1161
+
1162
+    // recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci
1163
+    $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1164
+
1165
+    // seul le nom de la table est a traduire ici :
1166
+    // le faire une seule fois au debut
1167
+    $query_start = "INSERT INTO $table ";
1168
+    $query_start = spip_sqlite::traduire_requete($query_start, $serveur);
1169
+
1170
+    // ouvrir une transaction
1171
+    if ($requeter) {
1172
+        spip_sqlite::demarrer_transaction($serveur);
1173
+    }
1174
+
1175
+    while ($couples = array_shift($tab_couples)) {
1176
+        foreach ($couples as $champ => $val) {
1177
+            $couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]);
1178
+        }
1179
+
1180
+        // inserer les champs timestamp par defaut
1181
+        $couples = array_merge($maj, $couples);
1182
+
1183
+        $champs = $valeurs = '';
1184
+        if (count($couples)) {
1185
+            $champs = '(' . join(',', array_keys($couples)) . ')';
1186
+            $valeurs = '(' . join(',', $couples) . ')';
1187
+            $query = $query_start . "$champs VALUES $valeurs";
1188
+        } else {
1189
+            $query = $query_start . 'DEFAULT VALUES';
1190
+        }
1191
+
1192
+        if ($requeter) {
1193
+            $retour = spip_sqlite::executer_requete($query, $serveur);
1194
+        }
1195
+
1196
+        // sur le dernier couple uniquement
1197
+        if (!count($tab_couples)) {
1198
+            $nb = 0;
1199
+            if ($requeter) {
1200
+                $nb = spip_sqlite::last_insert_id($serveur);
1201
+            } else {
1202
+                return $query;
1203
+            }
1204
+        }
1205
+
1206
+        $err = spip_sqlite_error($query, $serveur);
1207
+    }
1208
+
1209
+    if ($requeter) {
1210
+        spip_sqlite::finir_transaction($serveur);
1211
+    }
1212
+
1213
+    // renvoie le dernier id d'autoincrement ajoute
1214
+    // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1215
+    return isset($_GET['var_profile']) ? $retour : $nb;
1216 1216
 }
1217 1217
 
1218 1218
 
@@ -1227,7 +1227,7 @@  discard block
 block discarded – undo
1227 1227
  *     Toujours true.
1228 1228
  **/
1229 1229
 function spip_sqlite_preferer_transaction($serveur = '', $requeter = true) {
1230
-	return true;
1230
+    return true;
1231 1231
 }
1232 1232
 
1233 1233
 /**
@@ -1244,12 +1244,12 @@  discard block
 block discarded – undo
1244 1244
  *     string si texte de la requête demandé, true sinon
1245 1245
  **/
1246 1246
 function spip_sqlite_demarrer_transaction($serveur = '', $requeter = true) {
1247
-	if (!$requeter) {
1248
-		return 'BEGIN TRANSACTION';
1249
-	}
1250
-	spip_sqlite::demarrer_transaction($serveur);
1247
+    if (!$requeter) {
1248
+        return 'BEGIN TRANSACTION';
1249
+    }
1250
+    spip_sqlite::demarrer_transaction($serveur);
1251 1251
 
1252
-	return true;
1252
+    return true;
1253 1253
 }
1254 1254
 
1255 1255
 /**
@@ -1263,12 +1263,12 @@  discard block
 block discarded – undo
1263 1263
  *     string si texte de la requête demandé, true sinon
1264 1264
  **/
1265 1265
 function spip_sqlite_terminer_transaction($serveur = '', $requeter = true) {
1266
-	if (!$requeter) {
1267
-		return 'COMMIT';
1268
-	}
1269
-	spip_sqlite::finir_transaction($serveur);
1266
+    if (!$requeter) {
1267
+        return 'COMMIT';
1268
+    }
1269
+    spip_sqlite::finir_transaction($serveur);
1270 1270
 
1271
-	return true;
1271
+    return true;
1272 1272
 }
1273 1273
 
1274 1274
 
@@ -1283,27 +1283,27 @@  discard block
 block discarded – undo
1283 1283
  *     Liste des noms de bases
1284 1284
  **/
1285 1285
 function spip_sqlite_listdbs($serveur = '', $requeter = true) {
1286
-	_sqlite_init();
1286
+    _sqlite_init();
1287 1287
 
1288
-	if (!is_dir($d = substr(_DIR_DB, 0, -1))) {
1289
-		return [];
1290
-	}
1288
+    if (!is_dir($d = substr(_DIR_DB, 0, -1))) {
1289
+        return [];
1290
+    }
1291 1291
 
1292
-	include_spip('inc/flock');
1293
-	$bases = preg_files($d, $pattern = '(.*)\.sqlite$');
1294
-	$bds = [];
1292
+    include_spip('inc/flock');
1293
+    $bases = preg_files($d, $pattern = '(.*)\.sqlite$');
1294
+    $bds = [];
1295 1295
 
1296
-	foreach ($bases as $b) {
1297
-		// pas de bases commencant pas sqlite
1298
-		// (on s'en sert pour l'installation pour simuler la presence d'un serveur)
1299
-		// les bases sont de la forme _sqliteX_tmp_spip_install.sqlite
1300
-		if (strpos($b, '_sqlite')) {
1301
-			continue;
1302
-		}
1303
-		$bds[] = preg_replace(";.*/$pattern;iS", '$1', $b);
1304
-	}
1296
+    foreach ($bases as $b) {
1297
+        // pas de bases commencant pas sqlite
1298
+        // (on s'en sert pour l'installation pour simuler la presence d'un serveur)
1299
+        // les bases sont de la forme _sqliteX_tmp_spip_install.sqlite
1300
+        if (strpos($b, '_sqlite')) {
1301
+            continue;
1302
+        }
1303
+        $bds[] = preg_replace(";.*/$pattern;iS", '$1', $b);
1304
+    }
1305 1305
 
1306
-	return $bds;
1306
+    return $bds;
1307 1307
 }
1308 1308
 
1309 1309
 
@@ -1318,9 +1318,9 @@  discard block
 block discarded – undo
1318 1318
  * @return string       Texte de sélection pour la requête
1319 1319
  */
1320 1320
 function spip_sqlite_multi($objet, $lang) {
1321
-	$r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi";
1321
+    $r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi";
1322 1322
 
1323
-	return $r;
1323
+    return $r;
1324 1324
 }
1325 1325
 
1326 1326
 
@@ -1337,15 +1337,15 @@  discard block
 block discarded – undo
1337 1337
  * @return bool|string true / false / requete
1338 1338
  **/
1339 1339
 function spip_sqlite_optimize($table, $serveur = '', $requeter = true) {
1340
-	static $do = false;
1341
-	if ($requeter and $do) {
1342
-		return true;
1343
-	}
1344
-	if ($requeter) {
1345
-		$do = true;
1346
-	}
1340
+    static $do = false;
1341
+    if ($requeter and $do) {
1342
+        return true;
1343
+    }
1344
+    if ($requeter) {
1345
+        $do = true;
1346
+    }
1347 1347
 
1348
-	return spip_sqlite_query('VACUUM', $serveur, $requeter);
1348
+    return spip_sqlite_query('VACUUM', $serveur, $requeter);
1349 1349
 }
1350 1350
 
1351 1351
 
@@ -1362,15 +1362,15 @@  discard block
 block discarded – undo
1362 1362
  *    Donnée prête à être utilisée par le gestionnaire SQL
1363 1363
  */
1364 1364
 function spip_sqlite_quote($v, $type = '') {
1365
-	if (!is_array($v)) {
1366
-		return _sqlite_calculer_cite($v, $type);
1367
-	}
1368
-	// si c'est un tableau, le parcourir en propageant le type
1369
-	foreach ($v as $k => $r) {
1370
-		$v[$k] = spip_sqlite_quote($r, $type);
1371
-	}
1365
+    if (!is_array($v)) {
1366
+        return _sqlite_calculer_cite($v, $type);
1367
+    }
1368
+    // si c'est un tableau, le parcourir en propageant le type
1369
+    foreach ($v as $k => $r) {
1370
+        $v[$k] = spip_sqlite_quote($r, $type);
1371
+    }
1372 1372
 
1373
-	return join(',', $v);
1373
+    return join(',', $v);
1374 1374
 }
1375 1375
 
1376 1376
 
@@ -1387,9 +1387,9 @@  discard block
 block discarded – undo
1387 1387
  *     Expression SQL
1388 1388
  **/
1389 1389
 function spip_sqlite_date_proche($champ, $interval, $unite) {
1390
-	$op = (($interval <= 0) ? '>' : '<');
1390
+    $op = (($interval <= 0) ? '>' : '<');
1391 1391
 
1392
-	return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))";
1392
+    return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))";
1393 1393
 }
1394 1394
 
1395 1395
 
@@ -1407,48 +1407,48 @@  discard block
 block discarded – undo
1407 1407
  *     l'état de la table après la réparation
1408 1408
  */
1409 1409
 function spip_sqlite_repair($table, $serveur = '', $requeter = true) {
1410
-	if (
1411
-		$desc = spip_sqlite_showtable($table, $serveur)
1412
-		and isset($desc['field'])
1413
-		and is_array($desc['field'])
1414
-	) {
1415
-		foreach ($desc['field'] as $c => $d) {
1416
-			if (
1417
-				preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d)
1418
-				and stripos($d, 'NOT NULL') !== false
1419
-				and stripos($d, 'DEFAULT') === false
1420
-				/* pas touche aux cles primaires */
1421
-				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1422
-			) {
1423
-				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur);
1424
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1425
-			}
1426
-			if (
1427
-				preg_match(',^(INTEGER),i', $d)
1428
-				and stripos($d, 'NOT NULL') !== false
1429
-				and stripos($d, 'DEFAULT') === false
1430
-				/* pas touche aux cles primaires */
1431
-				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1432
-			) {
1433
-				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur);
1434
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1435
-			}
1436
-			if (
1437
-				preg_match(',^(datetime),i', $d)
1438
-				and stripos($d, 'NOT NULL') !== false
1439
-				and stripos($d, 'DEFAULT') === false
1440
-				/* pas touche aux cles primaires */
1441
-				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1442
-			) {
1443
-				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur);
1444
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1445
-			}
1446
-		}
1447
-
1448
-		return [' OK '];
1449
-	}
1450
-
1451
-	return [' ERROR '];
1410
+    if (
1411
+        $desc = spip_sqlite_showtable($table, $serveur)
1412
+        and isset($desc['field'])
1413
+        and is_array($desc['field'])
1414
+    ) {
1415
+        foreach ($desc['field'] as $c => $d) {
1416
+            if (
1417
+                preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d)
1418
+                and stripos($d, 'NOT NULL') !== false
1419
+                and stripos($d, 'DEFAULT') === false
1420
+                /* pas touche aux cles primaires */
1421
+                and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1422
+            ) {
1423
+                spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur);
1424
+                spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1425
+            }
1426
+            if (
1427
+                preg_match(',^(INTEGER),i', $d)
1428
+                and stripos($d, 'NOT NULL') !== false
1429
+                and stripos($d, 'DEFAULT') === false
1430
+                /* pas touche aux cles primaires */
1431
+                and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1432
+            ) {
1433
+                spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur);
1434
+                spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1435
+            }
1436
+            if (
1437
+                preg_match(',^(datetime),i', $d)
1438
+                and stripos($d, 'NOT NULL') !== false
1439
+                and stripos($d, 'DEFAULT') === false
1440
+                /* pas touche aux cles primaires */
1441
+                and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1442
+            ) {
1443
+                spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur);
1444
+                spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1445
+            }
1446
+        }
1447
+
1448
+        return [' OK '];
1449
+    }
1450
+
1451
+    return [' ERROR '];
1452 1452
 }
1453 1453
 
1454 1454
 
@@ -1477,25 +1477,25 @@  discard block
 block discarded – undo
1477 1477
  *     - False en cas d'erreur.
1478 1478
  **/
1479 1479
 function spip_sqlite_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1480
-	if (!$desc) {
1481
-		$desc = description_table($table, $serveur);
1482
-	}
1483
-	if (!$desc) {
1484
-		die("$table insertion sans description");
1485
-	}
1486
-	$fields = isset($desc['field']) ? $desc['field'] : [];
1480
+    if (!$desc) {
1481
+        $desc = description_table($table, $serveur);
1482
+    }
1483
+    if (!$desc) {
1484
+        die("$table insertion sans description");
1485
+    }
1486
+    $fields = isset($desc['field']) ? $desc['field'] : [];
1487 1487
 
1488
-	foreach ($couples as $champ => $val) {
1489
-		$couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1490
-	}
1488
+    foreach ($couples as $champ => $val) {
1489
+        $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1490
+    }
1491 1491
 
1492
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1493
-	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1492
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1493
+    $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1494 1494
 
1495
-	return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1496
-		',',
1497
-		$couples
1498
-	) . ')', $serveur);
1495
+    return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1496
+        ',',
1497
+        $couples
1498
+    ) . ')', $serveur);
1499 1499
 }
1500 1500
 
1501 1501
 
@@ -1525,13 +1525,13 @@  discard block
 block discarded – undo
1525 1525
  **/
1526 1526
 function spip_sqlite_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1527 1527
 
1528
-	// boucler pour trainter chaque requete independemment
1529
-	foreach ($tab_couples as $couples) {
1530
-		$retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter);
1531
-	}
1528
+    // boucler pour trainter chaque requete independemment
1529
+    foreach ($tab_couples as $couples) {
1530
+        $retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter);
1531
+    }
1532 1532
 
1533
-	// renvoie le dernier id
1534
-	return $retour;
1533
+    // renvoie le dernier id
1534
+    return $retour;
1535 1535
 }
1536 1536
 
1537 1537
 
@@ -1558,44 +1558,44 @@  discard block
 block discarded – undo
1558 1558
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
1559 1559
  */
1560 1560
 function spip_sqlite_select(
1561
-	$select,
1562
-	$from,
1563
-	$where = '',
1564
-	$groupby = '',
1565
-	$orderby = '',
1566
-	$limit = '',
1567
-	$having = '',
1568
-	$serveur = '',
1569
-	$requeter = true
1561
+    $select,
1562
+    $from,
1563
+    $where = '',
1564
+    $groupby = '',
1565
+    $orderby = '',
1566
+    $limit = '',
1567
+    $having = '',
1568
+    $serveur = '',
1569
+    $requeter = true
1570 1570
 ) {
1571 1571
 
1572
-	// version() n'est pas connu de sqlite
1573
-	$select = str_replace('version()', 'sqlite_version()', $select);
1572
+    // version() n'est pas connu de sqlite
1573
+    $select = str_replace('version()', 'sqlite_version()', $select);
1574 1574
 
1575
-	// recomposer from
1576
-	$from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from));
1575
+    // recomposer from
1576
+    $from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from));
1577 1577
 
1578
-	$query =
1579
-		_sqlite_calculer_expression('SELECT', $select, ', ')
1580
-		. _sqlite_calculer_expression('FROM', $from, ', ')
1581
-		. _sqlite_calculer_expression('WHERE', $where)
1582
-		. _sqlite_calculer_expression('GROUP BY', $groupby, ',')
1583
-		. _sqlite_calculer_expression('HAVING', $having)
1584
-		. ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '')
1585
-		. ($limit ? "\nLIMIT $limit" : '');
1578
+    $query =
1579
+        _sqlite_calculer_expression('SELECT', $select, ', ')
1580
+        . _sqlite_calculer_expression('FROM', $from, ', ')
1581
+        . _sqlite_calculer_expression('WHERE', $where)
1582
+        . _sqlite_calculer_expression('GROUP BY', $groupby, ',')
1583
+        . _sqlite_calculer_expression('HAVING', $having)
1584
+        . ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '')
1585
+        . ($limit ? "\nLIMIT $limit" : '');
1586 1586
 
1587
-	// dans un select, on doit renvoyer la requête en cas d'erreur
1588
-	$res = spip_sqlite_query($query, $serveur, $requeter);
1589
-	// texte de la requete demande ?
1590
-	if (!$requeter) {
1591
-		return $res;
1592
-	}
1593
-	// erreur survenue ?
1594
-	if ($res === false) {
1595
-		return spip_sqlite::traduire_requete($query, $serveur);
1596
-	}
1587
+    // dans un select, on doit renvoyer la requête en cas d'erreur
1588
+    $res = spip_sqlite_query($query, $serveur, $requeter);
1589
+    // texte de la requete demande ?
1590
+    if (!$requeter) {
1591
+        return $res;
1592
+    }
1593
+    // erreur survenue ?
1594
+    if ($res === false) {
1595
+        return spip_sqlite::traduire_requete($query, $serveur);
1596
+    }
1597 1597
 
1598
-	return $res;
1598
+    return $res;
1599 1599
 }
1600 1600
 
1601 1601
 
@@ -1614,32 +1614,32 @@  discard block
 block discarded – undo
1614 1614
  *     - False en cas d'erreur.
1615 1615
  **/
1616 1616
 function spip_sqlite_selectdb($db, $serveur = '', $requeter = true) {
1617
-	_sqlite_init();
1617
+    _sqlite_init();
1618 1618
 
1619
-	// interdire la creation d'une nouvelle base,
1620
-	// sauf si on est dans l'installation
1621
-	if (
1622
-		!is_file($f = _DIR_DB . $db . '.sqlite')
1623
-		&& (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)
1624
-	) {
1625
-		spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS);
1619
+    // interdire la creation d'une nouvelle base,
1620
+    // sauf si on est dans l'installation
1621
+    if (
1622
+        !is_file($f = _DIR_DB . $db . '.sqlite')
1623
+        && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)
1624
+    ) {
1625
+        spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS);
1626 1626
 
1627
-		return false;
1628
-	}
1627
+        return false;
1628
+    }
1629 1629
 
1630
-	// se connecter a la base indiquee
1631
-	// avec les identifiants connus
1632
-	$index = $serveur ? $serveur : 0;
1630
+    // se connecter a la base indiquee
1631
+    // avec les identifiants connus
1632
+    $index = $serveur ? $serveur : 0;
1633 1633
 
1634
-	if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) {
1635
-		if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
1636
-			return $db;
1637
-		}
1638
-	} else {
1639
-		spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS);
1634
+    if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) {
1635
+        if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
1636
+            return $db;
1637
+        }
1638
+    } else {
1639
+        spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS);
1640 1640
 
1641
-		return false;
1642
-	}
1641
+        return false;
1642
+    }
1643 1643
 }
1644 1644
 
1645 1645
 
@@ -1654,8 +1654,8 @@  discard block
 block discarded – undo
1654 1654
  * @return void
1655 1655
  */
1656 1656
 function spip_sqlite_set_charset($charset, $serveur = '', $requeter = true) {
1657
-	# spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR);
1658
-	# return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas !
1657
+    # spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR);
1658
+    # return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas !
1659 1659
 }
1660 1660
 
1661 1661
 
@@ -1673,24 +1673,24 @@  discard block
 block discarded – undo
1673 1673
  *     Ressource à utiliser avec sql_fetch()
1674 1674
  **/
1675 1675
 function spip_sqlite_showbase($match, $serveur = '', $requeter = true) {
1676
-	// type est le type d'entrée : table / index / view
1677
-	// on ne retourne que les tables (?) et non les vues...
1678
-	# ESCAPE non supporte par les versions sqlite <3
1679
-	#	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter);
1680
-	$match = preg_quote($match);
1681
-	$match = str_replace('\\\_', '[[TIRETBAS]]', $match);
1682
-	$match = str_replace('\\\%', '[[POURCENT]]', $match);
1683
-	$match = str_replace('_', '.', $match);
1684
-	$match = str_replace('%', '.*', $match);
1685
-	$match = str_replace('[[TIRETBAS]]', '_', $match);
1686
-	$match = str_replace('[[POURCENT]]', '%', $match);
1687
-	$match = "^$match$";
1688
-
1689
-	return spip_sqlite_query(
1690
-		"SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match),
1691
-		$serveur,
1692
-		$requeter
1693
-	);
1676
+    // type est le type d'entrée : table / index / view
1677
+    // on ne retourne que les tables (?) et non les vues...
1678
+    # ESCAPE non supporte par les versions sqlite <3
1679
+    #	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter);
1680
+    $match = preg_quote($match);
1681
+    $match = str_replace('\\\_', '[[TIRETBAS]]', $match);
1682
+    $match = str_replace('\\\%', '[[POURCENT]]', $match);
1683
+    $match = str_replace('_', '.', $match);
1684
+    $match = str_replace('%', '.*', $match);
1685
+    $match = str_replace('[[TIRETBAS]]', '_', $match);
1686
+    $match = str_replace('[[POURCENT]]', '%', $match);
1687
+    $match = "^$match$";
1688
+
1689
+    return spip_sqlite_query(
1690
+        "SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match),
1691
+        $serveur,
1692
+        $requeter
1693
+    );
1694 1694
 }
1695 1695
 
1696 1696
 define('_SQLITE_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -1713,129 +1713,129 @@  discard block
 block discarded – undo
1713 1713
  *     - array description de la table sinon
1714 1714
  */
1715 1715
 function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true) {
1716
-	$query =
1717
-		'SELECT sql, type FROM'
1718
-		. ' (SELECT * FROM sqlite_master UNION ALL'
1719
-		. ' SELECT * FROM sqlite_temp_master)'
1720
-		. " WHERE tbl_name LIKE '$nom_table'"
1721
-		. " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1722
-		. ' ORDER BY substr(type,2,1), name';
1723
-
1724
-	$a = spip_sqlite_query($query, $serveur, $requeter);
1725
-	if (!$a) {
1726
-		return '';
1727
-	}
1728
-	if (!$requeter) {
1729
-		return $a;
1730
-	}
1731
-	if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1732
-		return '';
1733
-	}
1734
-	$vue = ($a['type'] == 'view'); // table | vue
1735
-
1736
-	// c'est une table
1737
-	// il faut parser le create
1738
-	if (!$vue) {
1739
-		if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1740
-			return '';
1741
-		} else {
1742
-			$desc = $r[1];
1743
-			// extraction d'une KEY éventuelle en prenant garde de ne pas
1744
-			// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1745
-			if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1746
-				$namedkeys = $r[2];
1747
-				$desc = $r[1];
1748
-			} else {
1749
-				$namedkeys = '';
1750
-			}
1751
-
1752
-			$fields = [];
1753
-			$keys = [];
1754
-
1755
-			// enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1756
-			// par exemple s'il contiennent une virgule.
1757
-			// /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1758
-			list($desc, $echaps) = query_echappe_textes($desc);
1759
-
1760
-			// separer toutes les descriptions de champs, separes par des virgules
1761
-			# /!\ explode peut exploser aussi DECIMAL(10,2) !
1762
-			$k_precedent = null;
1763
-			foreach (explode(',', $desc) as $v) {
1764
-				preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1765
-				// Les cles de champs peuvent etre entourees
1766
-				// de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1767
-				// http://www.sqlite.org/lang_keywords.html
1768
-				$k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1769
-				if ($char = strpbrk($k[0], '\'"[`')) {
1770
-					$k = trim($k, $char);
1771
-					if ($char == '[') {
1772
-						$k = rtrim($k, ']');
1773
-					}
1774
-				}
1775
-				$def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1776
-
1777
-				// rustine pour DECIMAL(10,2)
1778
-				// s'il y a une parenthèse fermante dans la clé
1779
-				// ou dans la définition sans qu'il n'y ait une ouverture avant
1780
-				if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1781
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1782
-					continue;
1783
-				}
1784
-
1785
-				// la primary key peut etre dans une des descriptions de champs
1786
-				// et non en fin de table, cas encore decouvert avec Sqlite Manager
1787
-				if (stripos($r[2], 'PRIMARY KEY') !== false) {
1788
-					$keys['PRIMARY KEY'] = $k;
1789
-				}
1790
-
1791
-				$fields[$k] = $def;
1792
-				$k_precedent = $k;
1793
-			}
1794
-			// key inclues dans la requete
1795
-			foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1796
-				if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1797
-					$k = str_replace('`', '', trim($r[1]));
1798
-					$t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1799
-					if ($k && !isset($keys[$k])) {
1800
-						$keys[$k] = $t;
1801
-					} else {
1802
-						$keys[] = $t;
1803
-					}
1804
-				}
1805
-			}
1806
-			// sinon ajouter les key index
1807
-			$query =
1808
-				'SELECT name,sql FROM'
1809
-				. ' (SELECT * FROM sqlite_master UNION ALL'
1810
-				. ' SELECT * FROM sqlite_temp_master)'
1811
-				. " WHERE tbl_name LIKE '$nom_table'"
1812
-				. " AND type='index' AND name NOT LIKE 'sqlite_%'"
1813
-				. 'ORDER BY substr(type,2,1), name';
1814
-			$a = spip_sqlite_query($query, $serveur, $requeter);
1815
-			while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1816
-				$key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1817
-				$keytype = 'KEY';
1818
-				if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1819
-					$keytype = 'UNIQUE KEY';
1820
-				}
1821
-				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1822
-				$keys[$keytype . ' ' . $key] = $colonnes;
1823
-			}
1824
-		}
1825
-	} // c'est une vue, on liste les champs disponibles simplement
1826
-	else {
1827
-		if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1828
-			$fields = [];
1829
-			foreach ($res as $c => $v) {
1830
-				$fields[$c] = '';
1831
-			}
1832
-			$keys = [];
1833
-		} else {
1834
-			return '';
1835
-		}
1836
-	}
1837
-
1838
-	return ['field' => $fields, 'key' => $keys];
1716
+    $query =
1717
+        'SELECT sql, type FROM'
1718
+        . ' (SELECT * FROM sqlite_master UNION ALL'
1719
+        . ' SELECT * FROM sqlite_temp_master)'
1720
+        . " WHERE tbl_name LIKE '$nom_table'"
1721
+        . " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1722
+        . ' ORDER BY substr(type,2,1), name';
1723
+
1724
+    $a = spip_sqlite_query($query, $serveur, $requeter);
1725
+    if (!$a) {
1726
+        return '';
1727
+    }
1728
+    if (!$requeter) {
1729
+        return $a;
1730
+    }
1731
+    if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1732
+        return '';
1733
+    }
1734
+    $vue = ($a['type'] == 'view'); // table | vue
1735
+
1736
+    // c'est une table
1737
+    // il faut parser le create
1738
+    if (!$vue) {
1739
+        if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1740
+            return '';
1741
+        } else {
1742
+            $desc = $r[1];
1743
+            // extraction d'une KEY éventuelle en prenant garde de ne pas
1744
+            // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1745
+            if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1746
+                $namedkeys = $r[2];
1747
+                $desc = $r[1];
1748
+            } else {
1749
+                $namedkeys = '';
1750
+            }
1751
+
1752
+            $fields = [];
1753
+            $keys = [];
1754
+
1755
+            // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1756
+            // par exemple s'il contiennent une virgule.
1757
+            // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1758
+            list($desc, $echaps) = query_echappe_textes($desc);
1759
+
1760
+            // separer toutes les descriptions de champs, separes par des virgules
1761
+            # /!\ explode peut exploser aussi DECIMAL(10,2) !
1762
+            $k_precedent = null;
1763
+            foreach (explode(',', $desc) as $v) {
1764
+                preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1765
+                // Les cles de champs peuvent etre entourees
1766
+                // de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1767
+                // http://www.sqlite.org/lang_keywords.html
1768
+                $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1769
+                if ($char = strpbrk($k[0], '\'"[`')) {
1770
+                    $k = trim($k, $char);
1771
+                    if ($char == '[') {
1772
+                        $k = rtrim($k, ']');
1773
+                    }
1774
+                }
1775
+                $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1776
+
1777
+                // rustine pour DECIMAL(10,2)
1778
+                // s'il y a une parenthèse fermante dans la clé
1779
+                // ou dans la définition sans qu'il n'y ait une ouverture avant
1780
+                if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1781
+                    $fields[$k_precedent] .= ',' . $k . ' ' . $def;
1782
+                    continue;
1783
+                }
1784
+
1785
+                // la primary key peut etre dans une des descriptions de champs
1786
+                // et non en fin de table, cas encore decouvert avec Sqlite Manager
1787
+                if (stripos($r[2], 'PRIMARY KEY') !== false) {
1788
+                    $keys['PRIMARY KEY'] = $k;
1789
+                }
1790
+
1791
+                $fields[$k] = $def;
1792
+                $k_precedent = $k;
1793
+            }
1794
+            // key inclues dans la requete
1795
+            foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1796
+                if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1797
+                    $k = str_replace('`', '', trim($r[1]));
1798
+                    $t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1799
+                    if ($k && !isset($keys[$k])) {
1800
+                        $keys[$k] = $t;
1801
+                    } else {
1802
+                        $keys[] = $t;
1803
+                    }
1804
+                }
1805
+            }
1806
+            // sinon ajouter les key index
1807
+            $query =
1808
+                'SELECT name,sql FROM'
1809
+                . ' (SELECT * FROM sqlite_master UNION ALL'
1810
+                . ' SELECT * FROM sqlite_temp_master)'
1811
+                . " WHERE tbl_name LIKE '$nom_table'"
1812
+                . " AND type='index' AND name NOT LIKE 'sqlite_%'"
1813
+                . 'ORDER BY substr(type,2,1), name';
1814
+            $a = spip_sqlite_query($query, $serveur, $requeter);
1815
+            while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1816
+                $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1817
+                $keytype = 'KEY';
1818
+                if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1819
+                    $keytype = 'UNIQUE KEY';
1820
+                }
1821
+                $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1822
+                $keys[$keytype . ' ' . $key] = $colonnes;
1823
+            }
1824
+        }
1825
+    } // c'est une vue, on liste les champs disponibles simplement
1826
+    else {
1827
+        if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1828
+            $fields = [];
1829
+            foreach ($res as $c => $v) {
1830
+                $fields[$c] = '';
1831
+            }
1832
+            $keys = [];
1833
+        } else {
1834
+            return '';
1835
+        }
1836
+    }
1837
+
1838
+    return ['field' => $fields, 'key' => $keys];
1839 1839
 }
1840 1840
 
1841 1841
 
@@ -1861,22 +1861,22 @@  discard block
 block discarded – undo
1861 1861
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1862 1862
  */
1863 1863
 function spip_sqlite_update($table, $champs, $where = '', $desc = '', $serveur = '', $requeter = true) {
1864
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1865
-	$champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1864
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1865
+    $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1866 1866
 
1867
-	$set = [];
1868
-	foreach ($champs as $champ => $val) {
1869
-		$set[] = $champ . "=$val";
1870
-	}
1871
-	if (!empty($set)) {
1872
-		return spip_sqlite_query(
1873
-			_sqlite_calculer_expression('UPDATE', $table, ',')
1874
-			. _sqlite_calculer_expression('SET', $set, ',')
1875
-			. _sqlite_calculer_expression('WHERE', $where),
1876
-			$serveur,
1877
-			$requeter
1878
-		);
1879
-	}
1867
+    $set = [];
1868
+    foreach ($champs as $champ => $val) {
1869
+        $set[] = $champ . "=$val";
1870
+    }
1871
+    if (!empty($set)) {
1872
+        return spip_sqlite_query(
1873
+            _sqlite_calculer_expression('UPDATE', $table, ',')
1874
+            . _sqlite_calculer_expression('SET', $set, ',')
1875
+            . _sqlite_calculer_expression('WHERE', $where),
1876
+            $serveur,
1877
+            $requeter
1878
+        );
1879
+    }
1880 1880
 }
1881 1881
 
1882 1882
 
@@ -1906,38 +1906,38 @@  discard block
 block discarded – undo
1906 1906
  */
1907 1907
 function spip_sqlite_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1908 1908
 
1909
-	if (!$champs) {
1910
-		return;
1911
-	}
1912
-	if (!$desc) {
1913
-		$desc = description_table($table, $serveur);
1914
-	}
1915
-	if (!$desc) {
1916
-		die("$table insertion sans description");
1917
-	}
1918
-	$fields = $desc['field'];
1919
-
1920
-	$set = [];
1921
-	foreach ($champs as $champ => $val) {
1922
-		$set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1923
-	}
1924
-
1925
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1926
-	// attention ils sont deja quotes
1927
-	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1928
-	foreach ($maj as $champ => $val) {
1929
-		if (!isset($set[$champ])) {
1930
-			$set[$champ] = $champ . '=' . $val;
1931
-		}
1932
-	}
1933
-
1934
-	return spip_sqlite_query(
1935
-		_sqlite_calculer_expression('UPDATE', $table, ',')
1936
-		. _sqlite_calculer_expression('SET', $set, ',')
1937
-		. _sqlite_calculer_expression('WHERE', $where),
1938
-		$serveur,
1939
-		$requeter
1940
-	);
1909
+    if (!$champs) {
1910
+        return;
1911
+    }
1912
+    if (!$desc) {
1913
+        $desc = description_table($table, $serveur);
1914
+    }
1915
+    if (!$desc) {
1916
+        die("$table insertion sans description");
1917
+    }
1918
+    $fields = $desc['field'];
1919
+
1920
+    $set = [];
1921
+    foreach ($champs as $champ => $val) {
1922
+        $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1923
+    }
1924
+
1925
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1926
+    // attention ils sont deja quotes
1927
+    $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1928
+    foreach ($maj as $champ => $val) {
1929
+        if (!isset($set[$champ])) {
1930
+            $set[$champ] = $champ . '=' . $val;
1931
+        }
1932
+    }
1933
+
1934
+    return spip_sqlite_query(
1935
+        _sqlite_calculer_expression('UPDATE', $table, ',')
1936
+        . _sqlite_calculer_expression('SET', $set, ',')
1937
+        . _sqlite_calculer_expression('WHERE', $where),
1938
+        $serveur,
1939
+        $requeter
1940
+    );
1941 1941
 }
1942 1942
 
1943 1943
 
@@ -1955,17 +1955,17 @@  discard block
 block discarded – undo
1955 1955
  * @return void
1956 1956
  */
1957 1957
 function _sqlite_init() {
1958
-	if (!defined('_DIR_DB')) {
1959
-		define('_DIR_DB', _DIR_ETC . 'bases/');
1960
-	}
1961
-	if (!defined('_SQLITE_CHMOD')) {
1962
-		define('_SQLITE_CHMOD', _SPIP_CHMOD);
1963
-	}
1958
+    if (!defined('_DIR_DB')) {
1959
+        define('_DIR_DB', _DIR_ETC . 'bases/');
1960
+    }
1961
+    if (!defined('_SQLITE_CHMOD')) {
1962
+        define('_SQLITE_CHMOD', _SPIP_CHMOD);
1963
+    }
1964 1964
 
1965
-	if (!is_dir($d = _DIR_DB)) {
1966
-		include_spip('inc/flock');
1967
-		sous_repertoire($d);
1968
-	}
1965
+    if (!is_dir($d = _DIR_DB)) {
1966
+        include_spip('inc/flock');
1967
+        sous_repertoire($d);
1968
+    }
1969 1969
 }
1970 1970
 
1971 1971
 
@@ -1979,20 +1979,20 @@  discard block
 block discarded – undo
1979 1979
  * @return bool|int
1980 1980
  */
1981 1981
 function _sqlite_is_version($version = '', $link = '', $serveur = '', $requeter = true) {
1982
-	if ($link === '') {
1983
-		$link = _sqlite_link($serveur);
1984
-	}
1985
-	if (!$link) {
1986
-		return false;
1987
-	}
1982
+    if ($link === '') {
1983
+        $link = _sqlite_link($serveur);
1984
+    }
1985
+    if (!$link) {
1986
+        return false;
1987
+    }
1988 1988
 
1989
-	$v = 3;
1989
+    $v = 3;
1990 1990
 
1991
-	if (!$version) {
1992
-		return $v;
1993
-	}
1991
+    if (!$version) {
1992
+        return $v;
1993
+    }
1994 1994
 
1995
-	return ($version == $v);
1995
+    return ($version == $v);
1996 1996
 }
1997 1997
 
1998 1998
 
@@ -2003,9 +2003,9 @@  discard block
 block discarded – undo
2003 2003
  * @return Object Information de connexion pour SQLite
2004 2004
  */
2005 2005
 function _sqlite_link($serveur = '') {
2006
-	$link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2006
+    $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2007 2007
 
2008
-	return $link;
2008
+    return $link;
2009 2009
 }
2010 2010
 
2011 2011
 
@@ -2020,52 +2020,52 @@  discard block
 block discarded – undo
2020 2020
  * @return string|number     Texte ou nombre échappé
2021 2021
  */
2022 2022
 function _sqlite_calculer_cite($v, $type) {
2023
-	if ($type) {
2024
-		if (
2025
-			is_null($v)
2026
-			and stripos($type, 'NOT NULL') === false
2027
-		) {
2028
-			return 'NULL';
2029
-		} // null php se traduit en NULL SQL
2030
-
2031
-		if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2032
-			return $v;
2033
-		}
2034
-		if (sql_test_int($type)) {
2035
-			if (is_numeric($v)) {
2036
-				return $v;
2037
-			} elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2038
-				return hexdec(substr($v, 2));
2039
-			} else {
2040
-				return intval($v);
2041
-			}
2042
-		}
2043
-	} else {
2044
-		// si on ne connait pas le type on le deduit de $v autant que possible
2045
-		if (is_bool($v)) {
2046
-			return strval(intval($v));
2047
-		}
2048
-		elseif (is_numeric($v)) {
2049
-			return strval($v);
2050
-		}
2051
-	}
2052
-
2053
-	// trouver un link sqlite pour faire l'echappement
2054
-	foreach ($GLOBALS['connexions'] as $s) {
2055
-		if (
2056
-			$l = $s['link']
2057
-			and is_object($l)
2058
-			and $l instanceof \PDO
2059
-			and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2060
-		) {
2061
-			return $l->quote($v);
2062
-		}
2063
-	}
2064
-
2065
-	// echapper les ' en ''
2066
-	spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2067
-
2068
-	return ("'" . str_replace("'", "''", $v) . "'");
2023
+    if ($type) {
2024
+        if (
2025
+            is_null($v)
2026
+            and stripos($type, 'NOT NULL') === false
2027
+        ) {
2028
+            return 'NULL';
2029
+        } // null php se traduit en NULL SQL
2030
+
2031
+        if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2032
+            return $v;
2033
+        }
2034
+        if (sql_test_int($type)) {
2035
+            if (is_numeric($v)) {
2036
+                return $v;
2037
+            } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2038
+                return hexdec(substr($v, 2));
2039
+            } else {
2040
+                return intval($v);
2041
+            }
2042
+        }
2043
+    } else {
2044
+        // si on ne connait pas le type on le deduit de $v autant que possible
2045
+        if (is_bool($v)) {
2046
+            return strval(intval($v));
2047
+        }
2048
+        elseif (is_numeric($v)) {
2049
+            return strval($v);
2050
+        }
2051
+    }
2052
+
2053
+    // trouver un link sqlite pour faire l'echappement
2054
+    foreach ($GLOBALS['connexions'] as $s) {
2055
+        if (
2056
+            $l = $s['link']
2057
+            and is_object($l)
2058
+            and $l instanceof \PDO
2059
+            and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2060
+        ) {
2061
+            return $l->quote($v);
2062
+        }
2063
+    }
2064
+
2065
+    // echapper les ' en ''
2066
+    spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2067
+
2068
+    return ("'" . str_replace("'", "''", $v) . "'");
2069 2069
 }
2070 2070
 
2071 2071
 
@@ -2081,21 +2081,21 @@  discard block
 block discarded – undo
2081 2081
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
2082 2082
  */
2083 2083
 function _sqlite_calculer_expression($expression, $v, $join = 'AND') {
2084
-	if (empty($v)) {
2085
-		return '';
2086
-	}
2084
+    if (empty($v)) {
2085
+        return '';
2086
+    }
2087 2087
 
2088
-	$exp = "\n$expression ";
2088
+    $exp = "\n$expression ";
2089 2089
 
2090
-	if (!is_array($v)) {
2091
-		return $exp . $v;
2092
-	} else {
2093
-		if (strtoupper($join) === 'AND') {
2094
-			return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2095
-		} else {
2096
-			return $exp . join($join, $v);
2097
-		}
2098
-	}
2090
+    if (!is_array($v)) {
2091
+        return $exp . $v;
2092
+    } else {
2093
+        if (strtoupper($join) === 'AND') {
2094
+            return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2095
+        } else {
2096
+            return $exp . join($join, $v);
2097
+        }
2098
+    }
2099 2099
 }
2100 2100
 
2101 2101
 
@@ -2111,7 +2111,7 @@  discard block
 block discarded – undo
2111 2111
  * @return string Texte du orderby préparé
2112 2112
  */
2113 2113
 function _sqlite_calculer_order($orderby) {
2114
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2114
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2115 2115
 }
2116 2116
 
2117 2117
 
@@ -2122,26 +2122,26 @@  discard block
 block discarded – undo
2122 2122
  * @return string Sélection de colonnes pour une clause SELECT
2123 2123
  */
2124 2124
 function _sqlite_calculer_select_as($args) {
2125
-	$res = '';
2126
-	foreach ($args as $k => $v) {
2127
-		if (substr($k, -1) == '@') {
2128
-			// c'est une jointure qui se refere au from precedent
2129
-			// pas de virgule
2130
-			$res .= '  ' . $v;
2131
-		} else {
2132
-			if (!is_numeric($k)) {
2133
-				$p = strpos($v, ' ');
2134
-				if ($p) {
2135
-					$v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2136
-				} else {
2137
-					$v .= " AS '$k'";
2138
-				}
2139
-			}
2140
-			$res .= ', ' . $v;
2141
-		}
2142
-	}
2143
-
2144
-	return substr($res, 2);
2125
+    $res = '';
2126
+    foreach ($args as $k => $v) {
2127
+        if (substr($k, -1) == '@') {
2128
+            // c'est une jointure qui se refere au from precedent
2129
+            // pas de virgule
2130
+            $res .= '  ' . $v;
2131
+        } else {
2132
+            if (!is_numeric($k)) {
2133
+                $p = strpos($v, ' ');
2134
+                if ($p) {
2135
+                    $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2136
+                } else {
2137
+                    $v .= " AS '$k'";
2138
+                }
2139
+            }
2140
+            $res .= ', ' . $v;
2141
+        }
2142
+    }
2143
+
2144
+    return substr($res, 2);
2145 2145
 }
2146 2146
 
2147 2147
 
@@ -2164,26 +2164,26 @@  discard block
 block discarded – undo
2164 2164
  *     Contrainte pour clause WHERE
2165 2165
  */
2166 2166
 function _sqlite_calculer_where($v) {
2167
-	if (!is_array($v)) {
2168
-		return $v;
2169
-	}
2170
-
2171
-	$op = array_shift($v);
2172
-	if (!($n = count($v))) {
2173
-		return $op;
2174
-	} else {
2175
-		$arg = _sqlite_calculer_where(array_shift($v));
2176
-		if ($n == 1) {
2177
-			return "$op($arg)";
2178
-		} else {
2179
-			$arg2 = _sqlite_calculer_where(array_shift($v));
2180
-			if ($n == 2) {
2181
-				return "($arg $op $arg2)";
2182
-			} else {
2183
-				return "($arg $op ($arg2) : $v[0])";
2184
-			}
2185
-		}
2186
-	}
2167
+    if (!is_array($v)) {
2168
+        return $v;
2169
+    }
2170
+
2171
+    $op = array_shift($v);
2172
+    if (!($n = count($v))) {
2173
+        return $op;
2174
+    } else {
2175
+        $arg = _sqlite_calculer_where(array_shift($v));
2176
+        if ($n == 1) {
2177
+            return "$op($arg)";
2178
+        } else {
2179
+            $arg2 = _sqlite_calculer_where(array_shift($v));
2180
+            if ($n == 2) {
2181
+                return "($arg $op $arg2)";
2182
+            } else {
2183
+                return "($arg $op ($arg2) : $v[0])";
2184
+            }
2185
+        }
2186
+    }
2187 2187
 }
2188 2188
 
2189 2189
 
@@ -2198,19 +2198,19 @@  discard block
 block discarded – undo
2198 2198
  * @return array|bool
2199 2199
  */
2200 2200
 function _sqlite_charger_version($version = '') {
2201
-	$versions = [];
2201
+    $versions = [];
2202 2202
 
2203
-	// version 3
2204
-	if (!$version || $version == 3) {
2205
-		if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2206
-			$versions[] = 3;
2207
-		}
2208
-	}
2209
-	if ($version) {
2210
-		return in_array($version, $versions);
2211
-	}
2203
+    // version 3
2204
+    if (!$version || $version == 3) {
2205
+        if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2206
+            $versions[] = 3;
2207
+        }
2208
+    }
2209
+    if ($version) {
2210
+        return in_array($version, $versions);
2211
+    }
2212 2212
 
2213
-	return $versions;
2213
+    return $versions;
2214 2214
 }
2215 2215
 
2216 2216
 
@@ -2248,147 +2248,147 @@  discard block
 block discarded – undo
2248 2248
  */
2249 2249
 function _sqlite_modifier_table($table, $colonne, $opt = [], $serveur = '') {
2250 2250
 
2251
-	if (is_array($table)) {
2252
-		$table_destination = reset($table);
2253
-		$table_origine = key($table);
2254
-	} else {
2255
-		$table_origine = $table_destination = $table;
2256
-	}
2257
-	// ne prend actuellement qu'un changement
2258
-	// mais pourra etre adapte pour changer plus qu'une colonne a la fois
2259
-	if (is_array($colonne)) {
2260
-		$colonne_destination = reset($colonne);
2261
-		$colonne_origine = key($colonne);
2262
-	} else {
2263
-		$colonne_origine = $colonne_destination = $colonne;
2264
-	}
2265
-	if (!isset($opt['field'])) {
2266
-		$opt['field'] = [];
2267
-	}
2268
-	if (!isset($opt['key'])) {
2269
-		$opt['key'] = [];
2270
-	}
2271
-
2272
-	// si les noms de tables sont differents, pas besoin de table temporaire
2273
-	// on prendra directement le nom de la future table
2274
-	$meme_table = ($table_origine == $table_destination);
2275
-
2276
-	$def_origine = sql_showtable($table_origine, false, $serveur);
2277
-	if (!$def_origine or !isset($def_origine['field'])) {
2278
-		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2279
-
2280
-		return false;
2281
-	}
2282
-
2283
-
2284
-	$table_tmp = $table_origine . '_tmp';
2285
-
2286
-	// 1) creer une table temporaire avec les modifications
2287
-	// - DROP : suppression de la colonne
2288
-	// - CHANGE : modification de la colonne
2289
-	// (foreach pour conserver l'ordre des champs)
2290
-
2291
-	// field
2292
-	$fields = [];
2293
-	// pour le INSERT INTO plus loin
2294
-	// stocker la correspondance nouvelles->anciennes colonnes
2295
-	$fields_correspondances = [];
2296
-	foreach ($def_origine['field'] as $c => $d) {
2297
-		if ($colonne_origine && ($c == $colonne_origine)) {
2298
-			// si pas DROP
2299
-			if ($colonne_destination) {
2300
-				$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2301
-				$fields_correspondances[$colonne_destination] = $c;
2302
-			}
2303
-		} else {
2304
-			$fields[$c] = $d;
2305
-			$fields_correspondances[$c] = $c;
2306
-		}
2307
-	}
2308
-	// cas de ADD sqlite2 (ajout du champ en fin de table):
2309
-	if (!$colonne_origine && $colonne_destination) {
2310
-		$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2311
-	}
2312
-
2313
-	// key...
2314
-	$keys = [];
2315
-	foreach ($def_origine['key'] as $c => $d) {
2316
-		$c = str_replace($colonne_origine, $colonne_destination, $c);
2317
-		$d = str_replace($colonne_origine, $colonne_destination, $d);
2318
-		// seulement si on ne supprime pas la colonne !
2319
-		if ($d) {
2320
-			$keys[$c] = $d;
2321
-		}
2322
-	}
2323
-
2324
-	// autres keys, on merge
2325
-	$keys = array_merge($keys, $opt['key']);
2326
-	$queries = [];
2327
-
2328
-	// copier dans destination (si differente de origine), sinon tmp
2329
-	$table_copie = ($meme_table) ? $table_tmp : $table_destination;
2330
-	$autoinc = (isset($keys['PRIMARY KEY'])
2331
-		and $keys['PRIMARY KEY']
2332
-		and stripos($keys['PRIMARY KEY'], ',') === false
2333
-		and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2334
-
2335
-	if (
2336
-		$q = _sqlite_requete_create(
2337
-			$table_copie,
2338
-			$fields,
2339
-			$keys,
2340
-			$autoinc,
2341
-			$temporary = false,
2342
-			$ifnotexists = true,
2343
-			$serveur
2344
-		)
2345
-	) {
2346
-		$queries[] = $q;
2347
-	}
2348
-
2349
-
2350
-	// 2) y copier les champs qui vont bien
2351
-	$champs_dest = join(', ', array_keys($fields_correspondances));
2352
-	$champs_ori = join(', ', $fields_correspondances);
2353
-	$queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2354
-
2355
-	// 3) supprimer la table d'origine
2356
-	$queries[] = "DROP TABLE $table_origine";
2357
-
2358
-	// 4) renommer la table temporaire
2359
-	// avec le nom de la table destination
2360
-	// si necessaire
2361
-	if ($meme_table) {
2362
-		$queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2363
-	}
2364
-
2365
-	// 5) remettre les index !
2366
-	foreach ($keys as $k => $v) {
2367
-		if ($k == 'PRIMARY KEY') {
2368
-		} else {
2369
-			// enlever KEY
2370
-			$k = substr($k, 4);
2371
-			$queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2372
-		}
2373
-	}
2374
-
2375
-
2376
-	if (count($queries)) {
2377
-		spip_sqlite::demarrer_transaction($serveur);
2378
-		// il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2379
-		foreach ($queries as $q) {
2380
-			if (!spip_sqlite::executer_requete($q, $serveur)) {
2381
-				spip_log('SQLite : ALTER TABLE table :'
2382
-					. " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2383
-				spip_sqlite::annuler_transaction($serveur);
2384
-
2385
-				return false;
2386
-			}
2387
-		}
2388
-		spip_sqlite::finir_transaction($serveur);
2389
-	}
2390
-
2391
-	return true;
2251
+    if (is_array($table)) {
2252
+        $table_destination = reset($table);
2253
+        $table_origine = key($table);
2254
+    } else {
2255
+        $table_origine = $table_destination = $table;
2256
+    }
2257
+    // ne prend actuellement qu'un changement
2258
+    // mais pourra etre adapte pour changer plus qu'une colonne a la fois
2259
+    if (is_array($colonne)) {
2260
+        $colonne_destination = reset($colonne);
2261
+        $colonne_origine = key($colonne);
2262
+    } else {
2263
+        $colonne_origine = $colonne_destination = $colonne;
2264
+    }
2265
+    if (!isset($opt['field'])) {
2266
+        $opt['field'] = [];
2267
+    }
2268
+    if (!isset($opt['key'])) {
2269
+        $opt['key'] = [];
2270
+    }
2271
+
2272
+    // si les noms de tables sont differents, pas besoin de table temporaire
2273
+    // on prendra directement le nom de la future table
2274
+    $meme_table = ($table_origine == $table_destination);
2275
+
2276
+    $def_origine = sql_showtable($table_origine, false, $serveur);
2277
+    if (!$def_origine or !isset($def_origine['field'])) {
2278
+        spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2279
+
2280
+        return false;
2281
+    }
2282
+
2283
+
2284
+    $table_tmp = $table_origine . '_tmp';
2285
+
2286
+    // 1) creer une table temporaire avec les modifications
2287
+    // - DROP : suppression de la colonne
2288
+    // - CHANGE : modification de la colonne
2289
+    // (foreach pour conserver l'ordre des champs)
2290
+
2291
+    // field
2292
+    $fields = [];
2293
+    // pour le INSERT INTO plus loin
2294
+    // stocker la correspondance nouvelles->anciennes colonnes
2295
+    $fields_correspondances = [];
2296
+    foreach ($def_origine['field'] as $c => $d) {
2297
+        if ($colonne_origine && ($c == $colonne_origine)) {
2298
+            // si pas DROP
2299
+            if ($colonne_destination) {
2300
+                $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2301
+                $fields_correspondances[$colonne_destination] = $c;
2302
+            }
2303
+        } else {
2304
+            $fields[$c] = $d;
2305
+            $fields_correspondances[$c] = $c;
2306
+        }
2307
+    }
2308
+    // cas de ADD sqlite2 (ajout du champ en fin de table):
2309
+    if (!$colonne_origine && $colonne_destination) {
2310
+        $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2311
+    }
2312
+
2313
+    // key...
2314
+    $keys = [];
2315
+    foreach ($def_origine['key'] as $c => $d) {
2316
+        $c = str_replace($colonne_origine, $colonne_destination, $c);
2317
+        $d = str_replace($colonne_origine, $colonne_destination, $d);
2318
+        // seulement si on ne supprime pas la colonne !
2319
+        if ($d) {
2320
+            $keys[$c] = $d;
2321
+        }
2322
+    }
2323
+
2324
+    // autres keys, on merge
2325
+    $keys = array_merge($keys, $opt['key']);
2326
+    $queries = [];
2327
+
2328
+    // copier dans destination (si differente de origine), sinon tmp
2329
+    $table_copie = ($meme_table) ? $table_tmp : $table_destination;
2330
+    $autoinc = (isset($keys['PRIMARY KEY'])
2331
+        and $keys['PRIMARY KEY']
2332
+        and stripos($keys['PRIMARY KEY'], ',') === false
2333
+        and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2334
+
2335
+    if (
2336
+        $q = _sqlite_requete_create(
2337
+            $table_copie,
2338
+            $fields,
2339
+            $keys,
2340
+            $autoinc,
2341
+            $temporary = false,
2342
+            $ifnotexists = true,
2343
+            $serveur
2344
+        )
2345
+    ) {
2346
+        $queries[] = $q;
2347
+    }
2348
+
2349
+
2350
+    // 2) y copier les champs qui vont bien
2351
+    $champs_dest = join(', ', array_keys($fields_correspondances));
2352
+    $champs_ori = join(', ', $fields_correspondances);
2353
+    $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2354
+
2355
+    // 3) supprimer la table d'origine
2356
+    $queries[] = "DROP TABLE $table_origine";
2357
+
2358
+    // 4) renommer la table temporaire
2359
+    // avec le nom de la table destination
2360
+    // si necessaire
2361
+    if ($meme_table) {
2362
+        $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2363
+    }
2364
+
2365
+    // 5) remettre les index !
2366
+    foreach ($keys as $k => $v) {
2367
+        if ($k == 'PRIMARY KEY') {
2368
+        } else {
2369
+            // enlever KEY
2370
+            $k = substr($k, 4);
2371
+            $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2372
+        }
2373
+    }
2374
+
2375
+
2376
+    if (count($queries)) {
2377
+        spip_sqlite::demarrer_transaction($serveur);
2378
+        // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2379
+        foreach ($queries as $q) {
2380
+            if (!spip_sqlite::executer_requete($q, $serveur)) {
2381
+                spip_log('SQLite : ALTER TABLE table :'
2382
+                    . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2383
+                spip_sqlite::annuler_transaction($serveur);
2384
+
2385
+                return false;
2386
+            }
2387
+        }
2388
+        spip_sqlite::finir_transaction($serveur);
2389
+    }
2390
+
2391
+    return true;
2392 2392
 }
2393 2393
 
2394 2394
 
@@ -2398,60 +2398,60 @@  discard block
 block discarded – undo
2398 2398
  * @return array
2399 2399
  */
2400 2400
 function _sqlite_ref_fonctions() {
2401
-	$fonctions = [
2402
-		'alter' => 'spip_sqlite_alter',
2403
-		'count' => 'spip_sqlite_count',
2404
-		'countsel' => 'spip_sqlite_countsel',
2405
-		'create' => 'spip_sqlite_create',
2406
-		'create_base' => 'spip_sqlite_create_base',
2407
-		'create_view' => 'spip_sqlite_create_view',
2408
-		'date_proche' => 'spip_sqlite_date_proche',
2409
-		'delete' => 'spip_sqlite_delete',
2410
-		'drop_table' => 'spip_sqlite_drop_table',
2411
-		'drop_view' => 'spip_sqlite_drop_view',
2412
-		'errno' => 'spip_sqlite_errno',
2413
-		'error' => 'spip_sqlite_error',
2414
-		'explain' => 'spip_sqlite_explain',
2415
-		'fetch' => 'spip_sqlite_fetch',
2416
-		'seek' => 'spip_sqlite_seek',
2417
-		'free' => 'spip_sqlite_free',
2418
-		'hex' => 'spip_sqlite_hex',
2419
-		'in' => 'spip_sqlite_in',
2420
-		'insert' => 'spip_sqlite_insert',
2421
-		'insertq' => 'spip_sqlite_insertq',
2422
-		'insertq_multi' => 'spip_sqlite_insertq_multi',
2423
-		'listdbs' => 'spip_sqlite_listdbs',
2424
-		'multi' => 'spip_sqlite_multi',
2425
-		'optimize' => 'spip_sqlite_optimize',
2426
-		'query' => 'spip_sqlite_query',
2427
-		'quote' => 'spip_sqlite_quote',
2428
-		'repair' => 'spip_sqlite_repair',
2429
-		'replace' => 'spip_sqlite_replace',
2430
-		'replace_multi' => 'spip_sqlite_replace_multi',
2431
-		'select' => 'spip_sqlite_select',
2432
-		'selectdb' => 'spip_sqlite_selectdb',
2433
-		'set_charset' => 'spip_sqlite_set_charset',
2434
-		'get_charset' => 'spip_sqlite_get_charset',
2435
-		'showbase' => 'spip_sqlite_showbase',
2436
-		'showtable' => 'spip_sqlite_showtable',
2437
-		'update' => 'spip_sqlite_update',
2438
-		'updateq' => 'spip_sqlite_updateq',
2439
-		'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2440
-		'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2441
-		'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2442
-	];
2443
-
2444
-	// association de chaque nom http d'un charset aux couples sqlite
2445
-	// SQLite supporte utf-8 et utf-16 uniquement.
2446
-	$charsets = [
2447
-		'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2448
-		//'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2449
-		//'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2450
-	];
2451
-
2452
-	$fonctions['charsets'] = $charsets;
2453
-
2454
-	return $fonctions;
2401
+    $fonctions = [
2402
+        'alter' => 'spip_sqlite_alter',
2403
+        'count' => 'spip_sqlite_count',
2404
+        'countsel' => 'spip_sqlite_countsel',
2405
+        'create' => 'spip_sqlite_create',
2406
+        'create_base' => 'spip_sqlite_create_base',
2407
+        'create_view' => 'spip_sqlite_create_view',
2408
+        'date_proche' => 'spip_sqlite_date_proche',
2409
+        'delete' => 'spip_sqlite_delete',
2410
+        'drop_table' => 'spip_sqlite_drop_table',
2411
+        'drop_view' => 'spip_sqlite_drop_view',
2412
+        'errno' => 'spip_sqlite_errno',
2413
+        'error' => 'spip_sqlite_error',
2414
+        'explain' => 'spip_sqlite_explain',
2415
+        'fetch' => 'spip_sqlite_fetch',
2416
+        'seek' => 'spip_sqlite_seek',
2417
+        'free' => 'spip_sqlite_free',
2418
+        'hex' => 'spip_sqlite_hex',
2419
+        'in' => 'spip_sqlite_in',
2420
+        'insert' => 'spip_sqlite_insert',
2421
+        'insertq' => 'spip_sqlite_insertq',
2422
+        'insertq_multi' => 'spip_sqlite_insertq_multi',
2423
+        'listdbs' => 'spip_sqlite_listdbs',
2424
+        'multi' => 'spip_sqlite_multi',
2425
+        'optimize' => 'spip_sqlite_optimize',
2426
+        'query' => 'spip_sqlite_query',
2427
+        'quote' => 'spip_sqlite_quote',
2428
+        'repair' => 'spip_sqlite_repair',
2429
+        'replace' => 'spip_sqlite_replace',
2430
+        'replace_multi' => 'spip_sqlite_replace_multi',
2431
+        'select' => 'spip_sqlite_select',
2432
+        'selectdb' => 'spip_sqlite_selectdb',
2433
+        'set_charset' => 'spip_sqlite_set_charset',
2434
+        'get_charset' => 'spip_sqlite_get_charset',
2435
+        'showbase' => 'spip_sqlite_showbase',
2436
+        'showtable' => 'spip_sqlite_showtable',
2437
+        'update' => 'spip_sqlite_update',
2438
+        'updateq' => 'spip_sqlite_updateq',
2439
+        'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2440
+        'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2441
+        'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2442
+    ];
2443
+
2444
+    // association de chaque nom http d'un charset aux couples sqlite
2445
+    // SQLite supporte utf-8 et utf-16 uniquement.
2446
+    $charsets = [
2447
+        'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2448
+        //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2449
+        //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2450
+    ];
2451
+
2452
+    $fonctions['charsets'] = $charsets;
2453
+
2454
+    return $fonctions;
2455 2455
 }
2456 2456
 
2457 2457
 
@@ -2463,56 +2463,56 @@  discard block
 block discarded – undo
2463 2463
  * @return mixed
2464 2464
  */
2465 2465
 function _sqlite_remplacements_definitions_table($query, $autoinc = false) {
2466
-	// quelques remplacements
2467
-	$num = '(\s*\([0-9]*\))?';
2468
-	$enum = '(\s*\([^\)]*\))?';
2469
-
2470
-	$remplace = [
2471
-		'/enum' . $enum . '/is' => 'VARCHAR(255)',
2472
-		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2473
-		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2474
-		'/auto_increment/is' => '',
2475
-		'/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2476
-		'/(timestamp .* )ON .*$/is' => '\\1',
2477
-		'/character set \w+/is' => '',
2478
-		'/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2479
-		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2480
-		'/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2481
-		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2482
-		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2483
-	];
2484
-
2485
-	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2486
-	$remplace_autocinc = [
2487
-		'/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2488
-	];
2489
-	// pour les int non autoincrement, il faut un DEFAULT
2490
-	$remplace_nonautocinc = [
2491
-		'/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2492
-	];
2493
-
2494
-	if (is_string($query)) {
2495
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
2496
-		if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2497
-			$query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2498
-		} else {
2499
-			$query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2500
-			$query = _sqlite_collate_ci($query);
2501
-		}
2502
-	} elseif (is_array($query)) {
2503
-		foreach ($query as $k => $q) {
2504
-			$ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2505
-			$query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2506
-			if ($ai) {
2507
-				$query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2508
-			} else {
2509
-				$query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2510
-				$query[$k] = _sqlite_collate_ci($query[$k]);
2511
-			}
2512
-		}
2513
-	}
2514
-
2515
-	return $query;
2466
+    // quelques remplacements
2467
+    $num = '(\s*\([0-9]*\))?';
2468
+    $enum = '(\s*\([^\)]*\))?';
2469
+
2470
+    $remplace = [
2471
+        '/enum' . $enum . '/is' => 'VARCHAR(255)',
2472
+        '/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2473
+        '/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2474
+        '/auto_increment/is' => '',
2475
+        '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2476
+        '/(timestamp .* )ON .*$/is' => '\\1',
2477
+        '/character set \w+/is' => '',
2478
+        '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2479
+        '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2480
+        '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2481
+        '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2482
+        '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2483
+    ];
2484
+
2485
+    // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2486
+    $remplace_autocinc = [
2487
+        '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2488
+    ];
2489
+    // pour les int non autoincrement, il faut un DEFAULT
2490
+    $remplace_nonautocinc = [
2491
+        '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2492
+    ];
2493
+
2494
+    if (is_string($query)) {
2495
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
2496
+        if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2497
+            $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2498
+        } else {
2499
+            $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2500
+            $query = _sqlite_collate_ci($query);
2501
+        }
2502
+    } elseif (is_array($query)) {
2503
+        foreach ($query as $k => $q) {
2504
+            $ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2505
+            $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2506
+            if ($ai) {
2507
+                $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2508
+            } else {
2509
+                $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2510
+                $query[$k] = _sqlite_collate_ci($query[$k]);
2511
+            }
2512
+        }
2513
+    }
2514
+
2515
+    return $query;
2516 2516
 }
2517 2517
 
2518 2518
 /**
@@ -2523,17 +2523,17 @@  discard block
 block discarded – undo
2523 2523
  * @return string
2524 2524
  */
2525 2525
 function _sqlite_collate_ci($champ) {
2526
-	if (stripos($champ, 'COLLATE') !== false) {
2527
-		return $champ;
2528
-	}
2529
-	if (stripos($champ, 'BINARY') !== false) {
2530
-		return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2531
-	}
2532
-	if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2533
-		return $champ . ' COLLATE NOCASE';
2534
-	}
2526
+    if (stripos($champ, 'COLLATE') !== false) {
2527
+        return $champ;
2528
+    }
2529
+    if (stripos($champ, 'BINARY') !== false) {
2530
+        return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2531
+    }
2532
+    if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2533
+        return $champ . ' COLLATE NOCASE';
2534
+    }
2535 2535
 
2536
-	return $champ;
2536
+    return $champ;
2537 2537
 }
2538 2538
 
2539 2539
 
@@ -2552,84 +2552,84 @@  discard block
 block discarded – undo
2552 2552
  * @return bool|string
2553 2553
  */
2554 2554
 function _sqlite_requete_create(
2555
-	$nom,
2556
-	$champs,
2557
-	$cles,
2558
-	$autoinc = false,
2559
-	$temporary = false,
2560
-	$_ifnotexists = true,
2561
-	$serveur = '',
2562
-	$requeter = true
2555
+    $nom,
2556
+    $champs,
2557
+    $cles,
2558
+    $autoinc = false,
2559
+    $temporary = false,
2560
+    $_ifnotexists = true,
2561
+    $serveur = '',
2562
+    $requeter = true
2563 2563
 ) {
2564
-	$query = $keys = $s = $p = '';
2565
-
2566
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
2567
-	// sans les renseigner (laisse le compilo recuperer la description)
2568
-	if (!is_array($champs) || !is_array($cles)) {
2569
-		return;
2570
-	}
2571
-
2572
-	// sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2573
-	// il faut passer par des create index
2574
-	// Il gere par contre primary key !
2575
-	// Soit la PK est definie dans les cles, soit dans un champs
2576
-	// soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2577
-	$pk = 'PRIMARY KEY';
2578
-	// le champ de cle primaire
2579
-	$champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2580
-
2581
-	foreach ($champs as $k => $v) {
2582
-		if (false !== stripos($v, $pk)) {
2583
-			$champ_pk = $k;
2584
-			// on n'en a plus besoin dans field, vu que defini dans key
2585
-			$champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2586
-			break;
2587
-		}
2588
-	}
2589
-
2590
-	if ($champ_pk) {
2591
-		$keys = "\n\t\t$pk ($champ_pk)";
2592
-	}
2593
-	// Pas de DEFAULT 0 sur les cles primaires en auto-increment
2594
-	if (
2595
-		isset($champs[$champ_pk])
2596
-		and stripos($champs[$champ_pk], 'default 0') !== false
2597
-	) {
2598
-		$champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2599
-	}
2600
-
2601
-	$champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2602
-	foreach ($champs as $k => $v) {
2603
-		$query .= "$s\n\t\t$k $v";
2604
-		$s = ',';
2605
-	}
2606
-
2607
-	$ifnotexists = '';
2608
-	if ($_ifnotexists) {
2609
-		$version = spip_sqlite_fetch(
2610
-			spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2611
-			'',
2612
-			$serveur
2613
-		);
2614
-		if (!function_exists('spip_version_compare')) {
2615
-			include_spip('plugins/installer');
2616
-		}
2617
-
2618
-		if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2619
-			$ifnotexists = ' IF NOT EXISTS';
2620
-		} else {
2621
-			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2622
-			$a = spip_sqlite_showtable($nom, $serveur);
2623
-			if (isset($a['key']['KEY ' . $nom])) {
2624
-				return true;
2625
-			}
2626
-		}
2627
-	}
2628
-
2629
-	$temporary = $temporary ? ' TEMPORARY' : '';
2630
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2631
-
2632
-	return $q;
2564
+    $query = $keys = $s = $p = '';
2565
+
2566
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
2567
+    // sans les renseigner (laisse le compilo recuperer la description)
2568
+    if (!is_array($champs) || !is_array($cles)) {
2569
+        return;
2570
+    }
2571
+
2572
+    // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2573
+    // il faut passer par des create index
2574
+    // Il gere par contre primary key !
2575
+    // Soit la PK est definie dans les cles, soit dans un champs
2576
+    // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2577
+    $pk = 'PRIMARY KEY';
2578
+    // le champ de cle primaire
2579
+    $champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2580
+
2581
+    foreach ($champs as $k => $v) {
2582
+        if (false !== stripos($v, $pk)) {
2583
+            $champ_pk = $k;
2584
+            // on n'en a plus besoin dans field, vu que defini dans key
2585
+            $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2586
+            break;
2587
+        }
2588
+    }
2589
+
2590
+    if ($champ_pk) {
2591
+        $keys = "\n\t\t$pk ($champ_pk)";
2592
+    }
2593
+    // Pas de DEFAULT 0 sur les cles primaires en auto-increment
2594
+    if (
2595
+        isset($champs[$champ_pk])
2596
+        and stripos($champs[$champ_pk], 'default 0') !== false
2597
+    ) {
2598
+        $champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2599
+    }
2600
+
2601
+    $champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2602
+    foreach ($champs as $k => $v) {
2603
+        $query .= "$s\n\t\t$k $v";
2604
+        $s = ',';
2605
+    }
2606
+
2607
+    $ifnotexists = '';
2608
+    if ($_ifnotexists) {
2609
+        $version = spip_sqlite_fetch(
2610
+            spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2611
+            '',
2612
+            $serveur
2613
+        );
2614
+        if (!function_exists('spip_version_compare')) {
2615
+            include_spip('plugins/installer');
2616
+        }
2617
+
2618
+        if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2619
+            $ifnotexists = ' IF NOT EXISTS';
2620
+        } else {
2621
+            /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2622
+            $a = spip_sqlite_showtable($nom, $serveur);
2623
+            if (isset($a['key']['KEY ' . $nom])) {
2624
+                return true;
2625
+            }
2626
+        }
2627
+    }
2628
+
2629
+    $temporary = $temporary ? ' TEMPORARY' : '';
2630
+    $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2631
+
2632
+    return $q;
2633 2633
 }
2634 2634
 
2635 2635
 
@@ -2648,41 +2648,41 @@  discard block
 block discarded – undo
2648 2648
  * @return
2649 2649
  */
2650 2650
 function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur = '') {
2651
-	static $tables = [];
2652
-
2653
-	if (!isset($tables[$table])) {
2654
-		if (!$desc) {
2655
-			$trouver_table = charger_fonction('trouver_table', 'base');
2656
-			$desc = $trouver_table($table, $serveur);
2657
-			// si pas de description, on ne fait rien, ou on die() ?
2658
-			if (!$desc) {
2659
-				return $couples;
2660
-			}
2661
-		}
2662
-
2663
-		// recherche des champs avec simplement 'TIMESTAMP'
2664
-		// cependant, il faudra peut etre etendre
2665
-		// avec la gestion de DEFAULT et ON UPDATE
2666
-		// mais ceux-ci ne sont pas utilises dans le core
2667
-		$tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2668
-
2669
-		$now = _sqlite_func_now(true);
2670
-		foreach ($desc['field'] as $k => $v) {
2671
-			if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2672
-				$tables[$table]['desc'][$k] = $v;
2673
-				$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2674
-			}
2675
-		}
2676
-	}
2677
-	else {
2678
-		$now = _sqlite_func_now(true);
2679
-		foreach (array_keys($tables[$table]['desc']) as $k) {
2680
-			$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2681
-		}
2682
-	}
2683
-
2684
-	// ajout des champs type 'timestamp' absents
2685
-	return array_merge($tables[$table]['valeur'], $couples);
2651
+    static $tables = [];
2652
+
2653
+    if (!isset($tables[$table])) {
2654
+        if (!$desc) {
2655
+            $trouver_table = charger_fonction('trouver_table', 'base');
2656
+            $desc = $trouver_table($table, $serveur);
2657
+            // si pas de description, on ne fait rien, ou on die() ?
2658
+            if (!$desc) {
2659
+                return $couples;
2660
+            }
2661
+        }
2662
+
2663
+        // recherche des champs avec simplement 'TIMESTAMP'
2664
+        // cependant, il faudra peut etre etendre
2665
+        // avec la gestion de DEFAULT et ON UPDATE
2666
+        // mais ceux-ci ne sont pas utilises dans le core
2667
+        $tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2668
+
2669
+        $now = _sqlite_func_now(true);
2670
+        foreach ($desc['field'] as $k => $v) {
2671
+            if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2672
+                $tables[$table]['desc'][$k] = $v;
2673
+                $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2674
+            }
2675
+        }
2676
+    }
2677
+    else {
2678
+        $now = _sqlite_func_now(true);
2679
+        foreach (array_keys($tables[$table]['desc']) as $k) {
2680
+            $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2681
+        }
2682
+    }
2683
+
2684
+    // ajout des champs type 'timestamp' absents
2685
+    return array_merge($tables[$table]['valeur'], $couples);
2686 2686
 }
2687 2687
 
2688 2688
 
@@ -2693,7 +2693,7 @@  discard block
 block discarded – undo
2693 2693
  * @return array|bool
2694 2694
  */
2695 2695
 function spip_versions_sqlite() {
2696
-	return _sqlite_charger_version();
2696
+    return _sqlite_charger_version();
2697 2697
 }
2698 2698
 
2699 2699
 /**
@@ -2701,114 +2701,114 @@  discard block
 block discarded – undo
2701 2701
  * encadrées de transactions.
2702 2702
  **/
2703 2703
 class spip_sqlite {
2704
-	/** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2705
-	public static $requeteurs = [];
2706
-	/** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2707
-	public static $transaction_en_cours = [];
2708
-
2709
-
2710
-	/**
2711
-	 * Retourne une unique instance du requêteur
2712
-	 *
2713
-	 * Retourne une instance unique du requêteur pour une connexion SQLite
2714
-	 * donnée
2715
-	 *
2716
-	 * @param string $serveur
2717
-	 *    Nom du connecteur
2718
-	 * @return sqlite_requeteur
2719
-	 *    Instance unique du requêteur
2720
-	 **/
2721
-	public static function requeteur($serveur) {
2722
-		if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2723
-			spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2724
-		}
2725
-
2726
-		return spip_sqlite::$requeteurs[$serveur];
2727
-	}
2728
-
2729
-	/**
2730
-	 * Prépare le texte d'une requête avant son exécution
2731
-	 *
2732
-	 * Adapte la requête au format plus ou moins MySQL par un format
2733
-	 * compris de SQLite.
2734
-	 *
2735
-	 * Change les préfixes de tables SPIP par ceux véritables
2736
-	 *
2737
-	 * @param string $query Requête à préparer
2738
-	 * @param string $serveur Nom de la connexion
2739
-	 * @return string           Requête préparée
2740
-	 */
2741
-	public static function traduire_requete($query, $serveur) {
2742
-		$requeteur = spip_sqlite::requeteur($serveur);
2743
-		$traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2744
-
2745
-		return $traducteur->traduire_requete();
2746
-	}
2747
-
2748
-	/**
2749
-	 * Démarre une transaction
2750
-	 *
2751
-	 * @param string $serveur Nom de la connexion
2752
-	 **/
2753
-	public static function demarrer_transaction($serveur) {
2754
-		spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2755
-		spip_sqlite::$transaction_en_cours[$serveur] = true;
2756
-	}
2757
-
2758
-	/**
2759
-	 * Exécute la requête donnée
2760
-	 *
2761
-	 * @param string $query Requête
2762
-	 * @param string $serveur Nom de la connexion
2763
-	 * @param null|bool $tracer Demander des statistiques (temps) ?
2764
-	 **/
2765
-	public static function executer_requete($query, $serveur, $tracer = null) {
2766
-		$requeteur = spip_sqlite::requeteur($serveur);
2767
-
2768
-		return $requeteur->executer_requete($query, $tracer);
2769
-	}
2770
-
2771
-	/**
2772
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2773
-	 *
2774
-	 * @param string $serveur Nom de la connexion
2775
-	 * return int                Identifiant
2776
-	 **/
2777
-	public static function last_insert_id($serveur) {
2778
-		$requeteur = spip_sqlite::requeteur($serveur);
2779
-
2780
-		return $requeteur->last_insert_id($serveur);
2781
-	}
2782
-
2783
-	/**
2784
-	 * Annule une transaction
2785
-	 *
2786
-	 * @param string $serveur Nom de la connexion
2787
-	 **/
2788
-	public static function annuler_transaction($serveur) {
2789
-		spip_sqlite::executer_requete('ROLLBACK', $serveur);
2790
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2791
-	}
2792
-
2793
-	/**
2794
-	 * Termine une transaction
2795
-	 *
2796
-	 * @param string $serveur Nom de la connexion
2797
-	 **/
2798
-	public static function finir_transaction($serveur) {
2799
-		// si pas de transaction en cours, ne rien faire et le dire
2800
-		if (
2801
-			!isset(spip_sqlite::$transaction_en_cours[$serveur])
2802
-			or spip_sqlite::$transaction_en_cours[$serveur] == false
2803
-		) {
2804
-			return false;
2805
-		}
2806
-		// sinon fermer la transaction et retourner true
2807
-		spip_sqlite::executer_requete('COMMIT', $serveur);
2808
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2809
-
2810
-		return true;
2811
-	}
2704
+    /** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2705
+    public static $requeteurs = [];
2706
+    /** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2707
+    public static $transaction_en_cours = [];
2708
+
2709
+
2710
+    /**
2711
+     * Retourne une unique instance du requêteur
2712
+     *
2713
+     * Retourne une instance unique du requêteur pour une connexion SQLite
2714
+     * donnée
2715
+     *
2716
+     * @param string $serveur
2717
+     *    Nom du connecteur
2718
+     * @return sqlite_requeteur
2719
+     *    Instance unique du requêteur
2720
+     **/
2721
+    public static function requeteur($serveur) {
2722
+        if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2723
+            spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2724
+        }
2725
+
2726
+        return spip_sqlite::$requeteurs[$serveur];
2727
+    }
2728
+
2729
+    /**
2730
+     * Prépare le texte d'une requête avant son exécution
2731
+     *
2732
+     * Adapte la requête au format plus ou moins MySQL par un format
2733
+     * compris de SQLite.
2734
+     *
2735
+     * Change les préfixes de tables SPIP par ceux véritables
2736
+     *
2737
+     * @param string $query Requête à préparer
2738
+     * @param string $serveur Nom de la connexion
2739
+     * @return string           Requête préparée
2740
+     */
2741
+    public static function traduire_requete($query, $serveur) {
2742
+        $requeteur = spip_sqlite::requeteur($serveur);
2743
+        $traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2744
+
2745
+        return $traducteur->traduire_requete();
2746
+    }
2747
+
2748
+    /**
2749
+     * Démarre une transaction
2750
+     *
2751
+     * @param string $serveur Nom de la connexion
2752
+     **/
2753
+    public static function demarrer_transaction($serveur) {
2754
+        spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2755
+        spip_sqlite::$transaction_en_cours[$serveur] = true;
2756
+    }
2757
+
2758
+    /**
2759
+     * Exécute la requête donnée
2760
+     *
2761
+     * @param string $query Requête
2762
+     * @param string $serveur Nom de la connexion
2763
+     * @param null|bool $tracer Demander des statistiques (temps) ?
2764
+     **/
2765
+    public static function executer_requete($query, $serveur, $tracer = null) {
2766
+        $requeteur = spip_sqlite::requeteur($serveur);
2767
+
2768
+        return $requeteur->executer_requete($query, $tracer);
2769
+    }
2770
+
2771
+    /**
2772
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2773
+     *
2774
+     * @param string $serveur Nom de la connexion
2775
+     * return int                Identifiant
2776
+     **/
2777
+    public static function last_insert_id($serveur) {
2778
+        $requeteur = spip_sqlite::requeteur($serveur);
2779
+
2780
+        return $requeteur->last_insert_id($serveur);
2781
+    }
2782
+
2783
+    /**
2784
+     * Annule une transaction
2785
+     *
2786
+     * @param string $serveur Nom de la connexion
2787
+     **/
2788
+    public static function annuler_transaction($serveur) {
2789
+        spip_sqlite::executer_requete('ROLLBACK', $serveur);
2790
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2791
+    }
2792
+
2793
+    /**
2794
+     * Termine une transaction
2795
+     *
2796
+     * @param string $serveur Nom de la connexion
2797
+     **/
2798
+    public static function finir_transaction($serveur) {
2799
+        // si pas de transaction en cours, ne rien faire et le dire
2800
+        if (
2801
+            !isset(spip_sqlite::$transaction_en_cours[$serveur])
2802
+            or spip_sqlite::$transaction_en_cours[$serveur] == false
2803
+        ) {
2804
+            return false;
2805
+        }
2806
+        // sinon fermer la transaction et retourner true
2807
+        spip_sqlite::executer_requete('COMMIT', $serveur);
2808
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2809
+
2810
+        return true;
2811
+    }
2812 2812
 }
2813 2813
 
2814 2814
 /*
@@ -2821,127 +2821,127 @@  discard block
 block discarded – undo
2821 2821
  */
2822 2822
 
2823 2823
 class sqlite_requeteur {
2824
-	/** @var string Texte de la requête */
2825
-	public $query = ''; // la requete
2826
-	/** @var string Nom de la connexion */
2827
-	public $serveur = '';
2828
-	/** @var Ressource Identifiant de la connexion SQLite */
2829
-	public $link = '';
2830
-	/** @var string Prefixe des tables SPIP */
2831
-	public $prefixe = '';
2832
-	/** @var string Nom de la base de donnée */
2833
-	public $db = '';
2834
-	/** @var bool Doit-on tracer les requetes (var_profile) ? */
2835
-	public $tracer = false; // doit-on tracer les requetes (var_profile)
2836
-
2837
-	/** @var string Version de SQLite (2 ou 3) */
2838
-	public $sqlite_version = '';
2839
-
2840
-	/**
2841
-	 * Constructeur
2842
-	 *
2843
-	 * @param string $serveur
2844
-	 * @return bool
2845
-	 */
2846
-	public function __construct($serveur = '') {
2847
-		_sqlite_init();
2848
-		$this->serveur = strtolower($serveur);
2849
-
2850
-		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2851
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2852
-
2853
-			return false;
2854
-		}
2855
-
2856
-		$this->sqlite_version = _sqlite_is_version('', $this->link);
2857
-
2858
-		$this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2859
-		$this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2860
-
2861
-		// tracage des requetes ?
2862
-		$this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2863
-	}
2864
-
2865
-	/**
2866
-	 * Lancer la requête transmise et faire le tracage si demandé
2867
-	 *
2868
-	 * @param string $query
2869
-	 *     Requête à exécuter
2870
-	 * @param bool|null $tracer
2871
-	 *     true pour tracer la requête
2872
-	 * @return bool|SQLiteResult
2873
-	 */
2874
-	public function executer_requete($query, $tracer = null) {
2875
-		if (is_null($tracer)) {
2876
-			$tracer = $this->tracer;
2877
-		}
2878
-		$err = '';
2879
-		$t = 0;
2880
-		if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2881
-			include_spip('public/tracer');
2882
-			$t = trace_query_start();
2883
-		}
2884
-
2885
-		# spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2886
-		if ($this->link) {
2887
-			// memoriser la derniere erreur PHP vue
2888
-			$last_error = (function_exists('error_get_last') ? error_get_last() : '');
2889
-			$e = null;
2890
-			// sauver la derniere requete
2891
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2892
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2893
-
2894
-			try {
2895
-				$r = $this->link->query($query);
2896
-			} catch (\PDOException $e) {
2897
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2898
-				$r = false;
2899
-			}
2900
-			// sauvegarde de la requete (elle y est deja dans $r->queryString)
2901
-			# $r->spipQueryString = $query;
2902
-
2903
-			// comptage : oblige de compter le nombre d'entrees retournees
2904
-			// par une requete SELECT
2905
-			// aucune autre solution ne donne le nombre attendu :( !
2906
-			// particulierement s'il y a des LIMIT dans la requete.
2907
-			if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2908
-				if ($r) {
2909
-					// noter le link et la query pour faire le comptage *si* on en a besoin
2910
-					$r->spipSqliteRowCount = [$this->link, $query];
2911
-				} elseif ($r instanceof PDOStatement) {
2912
-					$r->spipSqliteRowCount = 0;
2913
-				}
2914
-			}
2915
-
2916
-			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2917
-			if ($e and $e instanceof \PDOException) {
2918
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2919
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2920
-			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2921
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2922
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2923
-			} else {
2924
-				$err = '';
2925
-			}
2926
-		} else {
2927
-			$r = false;
2928
-		}
2929
-
2930
-		if (spip_sqlite_errno($this->serveur)) {
2931
-			$err .= spip_sqlite_error($query, $this->serveur);
2932
-		}
2933
-
2934
-		return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2935
-	}
2936
-
2937
-	/**
2938
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2939
-	 *
2940
-	 * @return int
2941
-	 **/
2942
-	public function last_insert_id() {
2943
-		return $this->link->lastInsertId();
2944
-	}
2824
+    /** @var string Texte de la requête */
2825
+    public $query = ''; // la requete
2826
+    /** @var string Nom de la connexion */
2827
+    public $serveur = '';
2828
+    /** @var Ressource Identifiant de la connexion SQLite */
2829
+    public $link = '';
2830
+    /** @var string Prefixe des tables SPIP */
2831
+    public $prefixe = '';
2832
+    /** @var string Nom de la base de donnée */
2833
+    public $db = '';
2834
+    /** @var bool Doit-on tracer les requetes (var_profile) ? */
2835
+    public $tracer = false; // doit-on tracer les requetes (var_profile)
2836
+
2837
+    /** @var string Version de SQLite (2 ou 3) */
2838
+    public $sqlite_version = '';
2839
+
2840
+    /**
2841
+     * Constructeur
2842
+     *
2843
+     * @param string $serveur
2844
+     * @return bool
2845
+     */
2846
+    public function __construct($serveur = '') {
2847
+        _sqlite_init();
2848
+        $this->serveur = strtolower($serveur);
2849
+
2850
+        if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2851
+            spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2852
+
2853
+            return false;
2854
+        }
2855
+
2856
+        $this->sqlite_version = _sqlite_is_version('', $this->link);
2857
+
2858
+        $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2859
+        $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2860
+
2861
+        // tracage des requetes ?
2862
+        $this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2863
+    }
2864
+
2865
+    /**
2866
+     * Lancer la requête transmise et faire le tracage si demandé
2867
+     *
2868
+     * @param string $query
2869
+     *     Requête à exécuter
2870
+     * @param bool|null $tracer
2871
+     *     true pour tracer la requête
2872
+     * @return bool|SQLiteResult
2873
+     */
2874
+    public function executer_requete($query, $tracer = null) {
2875
+        if (is_null($tracer)) {
2876
+            $tracer = $this->tracer;
2877
+        }
2878
+        $err = '';
2879
+        $t = 0;
2880
+        if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2881
+            include_spip('public/tracer');
2882
+            $t = trace_query_start();
2883
+        }
2884
+
2885
+        # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2886
+        if ($this->link) {
2887
+            // memoriser la derniere erreur PHP vue
2888
+            $last_error = (function_exists('error_get_last') ? error_get_last() : '');
2889
+            $e = null;
2890
+            // sauver la derniere requete
2891
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2892
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2893
+
2894
+            try {
2895
+                $r = $this->link->query($query);
2896
+            } catch (\PDOException $e) {
2897
+                spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2898
+                $r = false;
2899
+            }
2900
+            // sauvegarde de la requete (elle y est deja dans $r->queryString)
2901
+            # $r->spipQueryString = $query;
2902
+
2903
+            // comptage : oblige de compter le nombre d'entrees retournees
2904
+            // par une requete SELECT
2905
+            // aucune autre solution ne donne le nombre attendu :( !
2906
+            // particulierement s'il y a des LIMIT dans la requete.
2907
+            if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2908
+                if ($r) {
2909
+                    // noter le link et la query pour faire le comptage *si* on en a besoin
2910
+                    $r->spipSqliteRowCount = [$this->link, $query];
2911
+                } elseif ($r instanceof PDOStatement) {
2912
+                    $r->spipSqliteRowCount = 0;
2913
+                }
2914
+            }
2915
+
2916
+            // loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2917
+            if ($e and $e instanceof \PDOException) {
2918
+                $err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2919
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2920
+            } elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2921
+                $err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2922
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2923
+            } else {
2924
+                $err = '';
2925
+            }
2926
+        } else {
2927
+            $r = false;
2928
+        }
2929
+
2930
+        if (spip_sqlite_errno($this->serveur)) {
2931
+            $err .= spip_sqlite_error($query, $this->serveur);
2932
+        }
2933
+
2934
+        return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2935
+    }
2936
+
2937
+    /**
2938
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2939
+     *
2940
+     * @return int
2941
+     **/
2942
+    public function last_insert_id() {
2943
+        return $this->link->lastInsertId();
2944
+    }
2945 2945
 }
2946 2946
 
2947 2947
 
@@ -2951,206 +2951,206 @@  discard block
 block discarded – undo
2951 2951
  * (fonction pour proteger les textes)
2952 2952
  */
2953 2953
 class sqlite_traducteur {
2954
-	/** @var string $query Texte de la requête */
2955
-	public $query = '';
2956
-	/** @var string $prefixe Préfixe des tables */
2957
-	public $prefixe = '';
2958
-	/** @var string $sqlite_version Version de sqlite (2 ou 3) */
2959
-	public $sqlite_version = '';
2960
-
2961
-	/** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2962
-	 *
2963
-	 * @var array
2964
-	 */
2965
-	public $textes = [];
2966
-
2967
-	/**
2968
-	 * Constructeur
2969
-	 *
2970
-	 * @param string $query Requête à préparer
2971
-	 * @param string $prefixe Prefixe des tables à utiliser
2972
-	 * @param string $sqlite_version Version SQLite (2 ou 3)
2973
-	 */
2974
-	public function __construct($query, $prefixe, $sqlite_version) {
2975
-		$this->query = $query;
2976
-		$this->prefixe = $prefixe;
2977
-		$this->sqlite_version = $sqlite_version;
2978
-	}
2979
-
2980
-	/**
2981
-	 * Transformer la requete pour SQLite
2982
-	 *
2983
-	 * Enlève les textes, transforme la requête pour quelle soit
2984
-	 * bien interprétée par SQLite, puis remet les textes
2985
-	 * la fonction affecte `$this->query`
2986
-	 */
2987
-	public function traduire_requete() {
2988
-		//
2989
-		// 1) Protection des textes en les remplacant par des codes
2990
-		//
2991
-		// enlever les 'textes' et initialiser avec
2992
-		list($this->query, $textes) = query_echappe_textes($this->query);
2993
-
2994
-		//
2995
-		// 2) Corrections de la requete
2996
-		//
2997
-		// Correction Create Database
2998
-		// Create Database -> requete ignoree
2999
-		if (strpos($this->query, 'CREATE DATABASE') === 0) {
3000
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3001
-			$this->query = 'SELECT 1';
3002
-		}
3003
-
3004
-		// Correction Insert Ignore
3005
-		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3006
-		if (strpos($this->query, 'INSERT IGNORE') === 0) {
3007
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3008
-			$this->query = 'INSERT ' . substr($this->query, '13');
3009
-		}
3010
-
3011
-		// Correction des dates avec INTERVAL
3012
-		// utiliser sql_date_proche() de preference
3013
-		if (strpos($this->query, 'INTERVAL') !== false) {
3014
-			$this->query = preg_replace_callback(
3015
-				'/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3016
-				[&$this, '_remplacerDateParTime'],
3017
-				$this->query
3018
-			);
3019
-		}
3020
-
3021
-		if (strpos($this->query, 'LEFT(') !== false) {
3022
-			$this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3023
-		}
3024
-
3025
-		if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3026
-			$this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3027
-		}
3028
-
3029
-
3030
-		// Correction Using
3031
-		// USING (non reconnu en sqlite2)
3032
-		// problematique car la jointure ne se fait pas du coup.
3033
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3034
-			spip_log(
3035
-				"'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3036
-				'sqlite.' . _LOG_ERREUR
3037
-			);
3038
-			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3039
-		}
3040
-
3041
-		// Correction Field
3042
-		// remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3043
-		if (strpos($this->query, 'FIELD') !== false) {
3044
-			$this->query = preg_replace_callback(
3045
-				'/FIELD\s*\(([^\)]*)\)/',
3046
-				[&$this, '_remplacerFieldParCase'],
3047
-				$this->query
3048
-			);
3049
-		}
3050
-
3051
-		// Correction des noms de tables FROM
3052
-		// mettre les bons noms de table dans from, update, insert, replace...
3053
-		if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3054
-			$suite = strstr($this->query, $regs[0]);
3055
-			$this->query = substr($this->query, 0, -strlen($suite));
3056
-		} else {
3057
-			$suite = '';
3058
-		}
3059
-		$pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3060
-		$this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3061
-
3062
-		// Correction zero AS x
3063
-		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3064
-		// n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3065
-		// il dit que x ne doit pas être un integer dans le order by !
3066
-		// on remplace du coup x par vide() dans ce cas uniquement
3067
-		//
3068
-		// apparait dans public/vertebrer.php et dans le plugin menu aussi qui genere aussi ce genre de requete via un {par num #GET{tri_num}}
3069
-		// mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3070
-		if ((strpos($this->query, '0 AS') !== false)) {
3071
-			// on ne remplace que dans ORDER BY ou GROUP BY
3072
-			if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3073
-				$suite = strstr($this->query, $regs[0]);
3074
-				$this->query = substr($this->query, 0, -strlen($suite));
3075
-
3076
-				// on cherche les noms des x dans 0 AS x
3077
-				// on remplace dans $suite le nom par vide()
3078
-				preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3079
-				foreach ($matches[1] as $m) {
3080
-					if (strpos($suite, $m) !== false) {
3081
-						$suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3082
-					}
3083
-				}
3084
-				$this->query .= $suite;
3085
-			}
3086
-		}
3087
-
3088
-		// Correction possible des divisions entieres
3089
-		// Le standard SQL (lequel? ou?) semble indiquer que
3090
-		// a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3091
-		// C'est ce que retournent effectivement SQL Server et SQLite
3092
-		// Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3093
-		//
3094
-		// On peut forcer la conversion en multipliant par 1.0 avant la division
3095
-		// /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3096
-		// cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3097
-		//     http://www.sqlite.org/cvstrac/tktview?tn=3202
3098
-		// (4*1.0/3) n'est pas rendu dans ce cas !
3099
-		# $this->query = str_replace('/','* 1.00 / ',$this->query);
3100
-
3101
-
3102
-		// Correction critere REGEXP, non reconnu en sqlite2
3103
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3104
-			$this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3105
-		}
3106
-
3107
-		//
3108
-		// 3) Remise en place des textes d'origine
3109
-		//
3110
-		// Correction Antiquotes et echappements
3111
-		// ` => rien
3112
-		if (strpos($this->query, '`') !== false) {
3113
-			$this->query = str_replace('`', '', $this->query);
3114
-		}
3115
-
3116
-		$this->query = query_reinjecte_textes($this->query, $textes);
3117
-
3118
-		return $this->query;
3119
-	}
3120
-
3121
-
3122
-	/**
3123
-	 * Callback pour remplacer `DATE_` / `INTERVAL`
3124
-	 * par `DATE ... strtotime`
3125
-	 *
3126
-	 * @param array $matches Captures
3127
-	 * @return string Texte de date compris par SQLite
3128
-	 */
3129
-	public function _remplacerDateParTime($matches) {
3130
-		$op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3131
-
3132
-		return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3133
-	}
3134
-
3135
-	/**
3136
-	 * Callback pour remplacer `FIELD(table,i,j,k...)`
3137
-	 * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3138
-	 *
3139
-	 * @param array $matches Captures
3140
-	 * @return string Texte de liste ordonnée compris par SQLite
3141
-	 */
3142
-	public function _remplacerFieldParCase($matches) {
3143
-		$fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3144
-		$t = explode(',', $fields);
3145
-		$index = array_shift($t);
3146
-
3147
-		$res = '';
3148
-		$n = 0;
3149
-		foreach ($t as $v) {
3150
-			$n++;
3151
-			$res .= "\nWHEN $index=$v THEN $n";
3152
-		}
3153
-
3154
-		return "CASE $res ELSE 0 END ";
3155
-	}
2954
+    /** @var string $query Texte de la requête */
2955
+    public $query = '';
2956
+    /** @var string $prefixe Préfixe des tables */
2957
+    public $prefixe = '';
2958
+    /** @var string $sqlite_version Version de sqlite (2 ou 3) */
2959
+    public $sqlite_version = '';
2960
+
2961
+    /** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2962
+     *
2963
+     * @var array
2964
+     */
2965
+    public $textes = [];
2966
+
2967
+    /**
2968
+     * Constructeur
2969
+     *
2970
+     * @param string $query Requête à préparer
2971
+     * @param string $prefixe Prefixe des tables à utiliser
2972
+     * @param string $sqlite_version Version SQLite (2 ou 3)
2973
+     */
2974
+    public function __construct($query, $prefixe, $sqlite_version) {
2975
+        $this->query = $query;
2976
+        $this->prefixe = $prefixe;
2977
+        $this->sqlite_version = $sqlite_version;
2978
+    }
2979
+
2980
+    /**
2981
+     * Transformer la requete pour SQLite
2982
+     *
2983
+     * Enlève les textes, transforme la requête pour quelle soit
2984
+     * bien interprétée par SQLite, puis remet les textes
2985
+     * la fonction affecte `$this->query`
2986
+     */
2987
+    public function traduire_requete() {
2988
+        //
2989
+        // 1) Protection des textes en les remplacant par des codes
2990
+        //
2991
+        // enlever les 'textes' et initialiser avec
2992
+        list($this->query, $textes) = query_echappe_textes($this->query);
2993
+
2994
+        //
2995
+        // 2) Corrections de la requete
2996
+        //
2997
+        // Correction Create Database
2998
+        // Create Database -> requete ignoree
2999
+        if (strpos($this->query, 'CREATE DATABASE') === 0) {
3000
+            spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3001
+            $this->query = 'SELECT 1';
3002
+        }
3003
+
3004
+        // Correction Insert Ignore
3005
+        // INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3006
+        if (strpos($this->query, 'INSERT IGNORE') === 0) {
3007
+            spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3008
+            $this->query = 'INSERT ' . substr($this->query, '13');
3009
+        }
3010
+
3011
+        // Correction des dates avec INTERVAL
3012
+        // utiliser sql_date_proche() de preference
3013
+        if (strpos($this->query, 'INTERVAL') !== false) {
3014
+            $this->query = preg_replace_callback(
3015
+                '/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3016
+                [&$this, '_remplacerDateParTime'],
3017
+                $this->query
3018
+            );
3019
+        }
3020
+
3021
+        if (strpos($this->query, 'LEFT(') !== false) {
3022
+            $this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3023
+        }
3024
+
3025
+        if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3026
+            $this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3027
+        }
3028
+
3029
+
3030
+        // Correction Using
3031
+        // USING (non reconnu en sqlite2)
3032
+        // problematique car la jointure ne se fait pas du coup.
3033
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3034
+            spip_log(
3035
+                "'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3036
+                'sqlite.' . _LOG_ERREUR
3037
+            );
3038
+            $this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3039
+        }
3040
+
3041
+        // Correction Field
3042
+        // remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3043
+        if (strpos($this->query, 'FIELD') !== false) {
3044
+            $this->query = preg_replace_callback(
3045
+                '/FIELD\s*\(([^\)]*)\)/',
3046
+                [&$this, '_remplacerFieldParCase'],
3047
+                $this->query
3048
+            );
3049
+        }
3050
+
3051
+        // Correction des noms de tables FROM
3052
+        // mettre les bons noms de table dans from, update, insert, replace...
3053
+        if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3054
+            $suite = strstr($this->query, $regs[0]);
3055
+            $this->query = substr($this->query, 0, -strlen($suite));
3056
+        } else {
3057
+            $suite = '';
3058
+        }
3059
+        $pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3060
+        $this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3061
+
3062
+        // Correction zero AS x
3063
+        // pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3064
+        // n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3065
+        // il dit que x ne doit pas être un integer dans le order by !
3066
+        // on remplace du coup x par vide() dans ce cas uniquement
3067
+        //
3068
+        // apparait dans public/vertebrer.php et dans le plugin menu aussi qui genere aussi ce genre de requete via un {par num #GET{tri_num}}
3069
+        // mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3070
+        if ((strpos($this->query, '0 AS') !== false)) {
3071
+            // on ne remplace que dans ORDER BY ou GROUP BY
3072
+            if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3073
+                $suite = strstr($this->query, $regs[0]);
3074
+                $this->query = substr($this->query, 0, -strlen($suite));
3075
+
3076
+                // on cherche les noms des x dans 0 AS x
3077
+                // on remplace dans $suite le nom par vide()
3078
+                preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3079
+                foreach ($matches[1] as $m) {
3080
+                    if (strpos($suite, $m) !== false) {
3081
+                        $suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3082
+                    }
3083
+                }
3084
+                $this->query .= $suite;
3085
+            }
3086
+        }
3087
+
3088
+        // Correction possible des divisions entieres
3089
+        // Le standard SQL (lequel? ou?) semble indiquer que
3090
+        // a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3091
+        // C'est ce que retournent effectivement SQL Server et SQLite
3092
+        // Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3093
+        //
3094
+        // On peut forcer la conversion en multipliant par 1.0 avant la division
3095
+        // /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3096
+        // cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3097
+        //     http://www.sqlite.org/cvstrac/tktview?tn=3202
3098
+        // (4*1.0/3) n'est pas rendu dans ce cas !
3099
+        # $this->query = str_replace('/','* 1.00 / ',$this->query);
3100
+
3101
+
3102
+        // Correction critere REGEXP, non reconnu en sqlite2
3103
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3104
+            $this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3105
+        }
3106
+
3107
+        //
3108
+        // 3) Remise en place des textes d'origine
3109
+        //
3110
+        // Correction Antiquotes et echappements
3111
+        // ` => rien
3112
+        if (strpos($this->query, '`') !== false) {
3113
+            $this->query = str_replace('`', '', $this->query);
3114
+        }
3115
+
3116
+        $this->query = query_reinjecte_textes($this->query, $textes);
3117
+
3118
+        return $this->query;
3119
+    }
3120
+
3121
+
3122
+    /**
3123
+     * Callback pour remplacer `DATE_` / `INTERVAL`
3124
+     * par `DATE ... strtotime`
3125
+     *
3126
+     * @param array $matches Captures
3127
+     * @return string Texte de date compris par SQLite
3128
+     */
3129
+    public function _remplacerDateParTime($matches) {
3130
+        $op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3131
+
3132
+        return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3133
+    }
3134
+
3135
+    /**
3136
+     * Callback pour remplacer `FIELD(table,i,j,k...)`
3137
+     * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3138
+     *
3139
+     * @param array $matches Captures
3140
+     * @return string Texte de liste ordonnée compris par SQLite
3141
+     */
3142
+    public function _remplacerFieldParCase($matches) {
3143
+        $fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3144
+        $t = explode(',', $fields);
3145
+        $index = array_shift($t);
3146
+
3147
+        $res = '';
3148
+        $n = 0;
3149
+        foreach ($t as $v) {
3150
+            $n++;
3151
+            $res .= "\nWHEN $index=$v THEN $n";
3152
+        }
3153
+
3154
+        return "CASE $res ELSE 0 END ";
3155
+    }
3156 3156
 }
Please login to merge, or discard this patch.
Spacing   +94 added lines, -94 removed lines patch added patch discarded remove patch
@@ -64,27 +64,27 @@  discard block
 block discarded – undo
64 64
 	// determiner le dossier de la base : $addr ou _DIR_DB
65 65
 	$f = _DIR_DB;
66 66
 	if ($addr and strpos($addr, '/') !== false) {
67
-		$f = rtrim($addr, '/') . '/';
67
+		$f = rtrim($addr, '/').'/';
68 68
 	}
69 69
 
70 70
 	// un nom de base demande et impossible d'obtenir la base, on s'en va :
71 71
 	// il faut que la base existe ou que le repertoire parent soit writable
72
-	if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) {
73
-		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS);
72
+	if ($db and !is_file($f .= $db.'.sqlite') and !is_writable(dirname($f))) {
73
+		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.'._LOG_HS);
74 74
 
75 75
 		return false;
76 76
 	}
77 77
 
78 78
 	// charger les modules sqlite au besoin
79 79
 	if (!_sqlite_charger_version($sqlite_version)) {
80
-		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS);
80
+		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.'._LOG_HS);
81 81
 
82 82
 		return false;
83 83
 	}
84 84
 
85 85
 	// chargement des constantes
86 86
 	// il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
87
-	$define = 'spip_sqlite' . $sqlite_version . '_constantes';
87
+	$define = 'spip_sqlite'.$sqlite_version.'_constantes';
88 88
 	$define();
89 89
 
90 90
 	$ok = false;
@@ -92,8 +92,8 @@  discard block
 block discarded – undo
92 92
 		// si pas de db ->
93 93
 		// base temporaire tant qu'on ne connait pas son vrai nom
94 94
 		// pour tester la connexion
95
-		$db = '_sqlite' . $sqlite_version . '_install';
96
-		$tmp = _DIR_DB . $db . '.sqlite';
95
+		$db = '_sqlite'.$sqlite_version.'_install';
96
+		$tmp = _DIR_DB.$db.'.sqlite';
97 97
 		$ok = $link = new \PDO("sqlite:$tmp");
98 98
 	} else {
99 99
 		// Ouvrir (eventuellement creer la base)
@@ -102,7 +102,7 @@  discard block
 block discarded – undo
102 102
 
103 103
 	if (!$ok) {
104 104
 		$e = _sqlite_last_error_from_link($link);
105
-		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS);
105
+		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.'._LOG_HS);
106 106
 
107 107
 		return false;
108 108
 	}
@@ -188,7 +188,7 @@  discard block
 block discarded – undo
188 188
 		$table = $regs[3];
189 189
 		$suite = $regs[4];
190 190
 	} else {
191
-		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR);
191
+		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.'._LOG_ERREUR);
192 192
 
193 193
 		return false;
194 194
 	}
@@ -205,7 +205,7 @@  discard block
 block discarded – undo
205 205
 	$i = 0;
206 206
 	$ouverte = false;
207 207
 	while ($do = array_shift($todo)) {
208
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
208
+		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i].','.$do : $do;
209 209
 		$o = (false !== strpos($do, '('));
210 210
 		$f = (false !== strpos($do, ')'));
211 211
 		if ($o and !$f) {
@@ -231,7 +231,7 @@  discard block
 block discarded – undo
231 231
 		) {
232 232
 			spip_log(
233 233
 				"SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)",
234
-				'sqlite.' . _LOG_ERREUR
234
+				'sqlite.'._LOG_ERREUR
235 235
 			);
236 236
 
237 237
 			return false;
@@ -327,10 +327,10 @@  discard block
 block discarded – undo
327 327
 
328 328
 			// pas geres en sqlite2
329 329
 			case 'RENAME':
330
-				$do = 'RENAME TO' . substr($do, 6);
330
+				$do = 'RENAME TO'.substr($do, 6);
331 331
 			case 'RENAME TO':
332 332
 				if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
333
-					spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
333
+					spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.'._LOG_ERREUR);
334 334
 
335 335
 					return false;
336 336
 				}
@@ -373,7 +373,7 @@  discard block
 block discarded – undo
373 373
 						$colonnes = substr($colonne_origine, 1, -1);
374 374
 						if (false !== strpos(',', $colonnes)) {
375 375
 							spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes'
376
-								. " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR);
376
+								. " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.'._LOG_ERREUR);
377 377
 							break;
378 378
 						} else {
379 379
 							$nom_index = $colonnes;
@@ -388,12 +388,12 @@  discard block
 block discarded – undo
388 388
 
389 389
 			// pas geres en sqlite2
390 390
 			case 'ADD COLUMN':
391
-				$do = 'ADD' . substr($do, 10);
391
+				$do = 'ADD'.substr($do, 10);
392 392
 			case 'ADD':
393 393
 			default:
394 394
 				if (!preg_match(',primary\s+key,i', $do)) {
395 395
 					if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
396
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
396
+						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
397 397
 
398 398
 						return false;
399 399
 					}
@@ -413,7 +413,7 @@  discard block
 block discarded – undo
413 413
 					}
414 414
 					$opts['field'] = [$colonne_ajoutee => $def];
415 415
 					if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) {
416
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
416
+						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
417 417
 
418 418
 						return false;
419 419
 					}
@@ -421,10 +421,10 @@  discard block
 block discarded – undo
421 421
 				break;
422 422
 		}
423 423
 		// tout est bon, ouf !
424
-		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO);
424
+		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.'._LOG_INFO);
425 425
 	}
426 426
 
427
-	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO);
427
+	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.'._LOG_INFO);
428 428
 
429 429
 	return true;
430 430
 }
@@ -493,9 +493,9 @@  discard block
 block discarded – undo
493 493
  * @return bool true si la base est créee.
494 494
  **/
495 495
 function spip_sqlite_create_base($nom, $serveur = '', $option = true) {
496
-	$f = $nom . '.sqlite';
496
+	$f = $nom.'.sqlite';
497 497
 	if (strpos($nom, '/') === false) {
498
-		$f = _DIR_DB . $f;
498
+		$f = _DIR_DB.$f;
499 499
 	}
500 500
 
501 501
 	$ok = new \PDO("sqlite:$f");
@@ -535,13 +535,13 @@  discard block
 block discarded – undo
535 535
 	if (sql_showtable($nom, false, $serveur)) {
536 536
 		spip_log(
537 537
 			"Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",
538
-			'sqlite.' . _LOG_ERREUR
538
+			'sqlite.'._LOG_ERREUR
539 539
 		);
540 540
 
541 541
 		return false;
542 542
 	}
543 543
 
544
-	$query = "CREATE VIEW $nom AS " . $query_select;
544
+	$query = "CREATE VIEW $nom AS ".$query_select;
545 545
 
546 546
 	return spip_sqlite_query($query, $serveur, $requeter);
547 547
 }
@@ -567,8 +567,8 @@  discard block
 block discarded – undo
567 567
 function spip_sqlite_create_index($nom, $table, $champs, $unique = '', $serveur = '', $requeter = true) {
568 568
 	if (!($nom or $table or $champs)) {
569 569
 		spip_log(
570
-			"Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))',
571
-			'sqlite.' . _LOG_ERREUR
570
+			"Champ manquant pour creer un index sqlite ($nom, $table, (".join(',', $champs).'))',
571
+			'sqlite.'._LOG_ERREUR
572 572
 		);
573 573
 
574 574
 		return false;
@@ -576,7 +576,7 @@  discard block
 block discarded – undo
576 576
 
577 577
 	// SQLite ne differentie pas noms des index en fonction des tables
578 578
 	// il faut donc creer des noms uniques d'index pour une base sqlite
579
-	$nom = $table . '_' . $nom;
579
+	$nom = $table.'_'.$nom;
580 580
 	// enlever d'eventuelles parentheses deja presentes sur champs
581 581
 	if (!is_array($champs)) {
582 582
 		if ($champs[0] == '(') {
@@ -598,12 +598,12 @@  discard block
 block discarded – undo
598 598
 	} else {
599 599
 		/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
600 600
 		$a = spip_sqlite_showtable($table, $serveur);
601
-		if (isset($a['key']['KEY ' . $nom])) {
601
+		if (isset($a['key']['KEY '.$nom])) {
602 602
 			return true;
603 603
 		}
604 604
 	}
605 605
 
606
-	$query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')';
606
+	$query = 'CREATE '.($unique ? 'UNIQUE ' : '')."INDEX$ifnotexists $nom ON $table (".join(',', $champs).')';
607 607
 	$res = spip_sqlite_query($query, $serveur, $requeter);
608 608
 	if (!$requeter) {
609 609
 		return $res;
@@ -679,7 +679,7 @@  discard block
 block discarded – undo
679 679
 	$serveur = '',
680 680
 	$requeter = true
681 681
 ) {
682
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
682
+	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
683 683
 	$r = spip_sqlite_select(
684 684
 		"COUNT($c)",
685 685
 		$from,
@@ -788,14 +788,14 @@  discard block
 block discarded – undo
788 788
  */
789 789
 function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true) {
790 790
 	if (!($nom or $table)) {
791
-		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR);
791
+		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.'._LOG_ERREUR);
792 792
 
793 793
 		return false;
794 794
 	}
795 795
 
796 796
 	// SQLite ne differentie pas noms des index en fonction des tables
797 797
 	// il faut donc creer des noms uniques d'index pour une base sqlite
798
-	$index = $table . '_' . $nom;
798
+	$index = $table.'_'.$nom;
799 799
 	$exist = ' IF EXISTS';
800 800
 
801 801
 	$query = "DROP INDEX$exist $index";
@@ -827,7 +827,7 @@  discard block
 block discarded – undo
827 827
 	if ($s) {
828 828
 		$trace = debug_backtrace();
829 829
 		if ($trace[0]['function'] != 'spip_sqlite_error') {
830
-			spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR);
830
+			spip_log("$s - $query - ".sql_error_backtrace(), 'sqlite.'._LOG_ERREUR);
831 831
 		}
832 832
 	}
833 833
 
@@ -874,14 +874,14 @@  discard block
 block discarded – undo
874 874
 		$t = $link->errorInfo();
875 875
 		$s = ltrim($t[0], '0'); // 00000 si pas d'erreur
876 876
 		if ($s) {
877
-			$s .= ' / ' . $t[1];
877
+			$s .= ' / '.$t[1];
878 878
 		} // ajoute l'erreur du moteur SQLite
879 879
 	} else {
880 880
 		$s = ': aucune ressource sqlite (link)';
881 881
 	}
882 882
 
883 883
 	if ($s) {
884
-		spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR);
884
+		spip_log("Erreur sqlite $s", 'sqlite.'._LOG_ERREUR);
885 885
 	}
886 886
 
887 887
 	return $s ? $s : 0;
@@ -905,7 +905,7 @@  discard block
 block discarded – undo
905 905
 	}
906 906
 
907 907
 	$query = spip_sqlite::traduire_requete($query, $serveur);
908
-	$query = 'EXPLAIN ' . $query;
908
+	$query = 'EXPLAIN '.$query;
909 909
 	if (!$requeter) {
910 910
 		return $query;
911 911
 	}
@@ -1066,7 +1066,7 @@  discard block
 block discarded – undo
1066 1066
  **/
1067 1067
 function spip_sqlite_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1068 1068
 
1069
-	$query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1069
+	$query = "INSERT INTO $table ".($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1070 1070
 	if ($r = spip_sqlite_query($query, $serveur, $requeter)) {
1071 1071
 		if (!$requeter) {
1072 1072
 			return $r;
@@ -1121,8 +1121,8 @@  discard block
 block discarded – undo
1121 1121
 
1122 1122
 	$cles = $valeurs = '';
1123 1123
 	if (count($couples)) {
1124
-		$cles = '(' . join(',', array_keys($couples)) . ')';
1125
-		$valeurs = '(' . join(',', $couples) . ')';
1124
+		$cles = '('.join(',', array_keys($couples)).')';
1125
+		$valeurs = '('.join(',', $couples).')';
1126 1126
 	}
1127 1127
 
1128 1128
 	return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
@@ -1182,11 +1182,11 @@  discard block
 block discarded – undo
1182 1182
 
1183 1183
 		$champs = $valeurs = '';
1184 1184
 		if (count($couples)) {
1185
-			$champs = '(' . join(',', array_keys($couples)) . ')';
1186
-			$valeurs = '(' . join(',', $couples) . ')';
1187
-			$query = $query_start . "$champs VALUES $valeurs";
1185
+			$champs = '('.join(',', array_keys($couples)).')';
1186
+			$valeurs = '('.join(',', $couples).')';
1187
+			$query = $query_start."$champs VALUES $valeurs";
1188 1188
 		} else {
1189
-			$query = $query_start . 'DEFAULT VALUES';
1189
+			$query = $query_start.'DEFAULT VALUES';
1190 1190
 		}
1191 1191
 
1192 1192
 		if ($requeter) {
@@ -1318,7 +1318,7 @@  discard block
 block discarded – undo
1318 1318
  * @return string       Texte de sélection pour la requête
1319 1319
  */
1320 1320
 function spip_sqlite_multi($objet, $lang) {
1321
-	$r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi";
1321
+	$r = 'EXTRAIRE_MULTI('.$objet.", '".$lang."') AS multi";
1322 1322
 
1323 1323
 	return $r;
1324 1324
 }
@@ -1389,7 +1389,7 @@  discard block
 block discarded – undo
1389 1389
 function spip_sqlite_date_proche($champ, $interval, $unite) {
1390 1390
 	$op = (($interval <= 0) ? '>' : '<');
1391 1391
 
1392
-	return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))";
1392
+	return "($champ $op datetime('".date('Y-m-d H:i:s')."', '$interval $unite'))";
1393 1393
 }
1394 1394
 
1395 1395
 
@@ -1421,7 +1421,7 @@  discard block
 block discarded – undo
1421 1421
 				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1422 1422
 			) {
1423 1423
 				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur);
1424
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1424
+				spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE);
1425 1425
 			}
1426 1426
 			if (
1427 1427
 				preg_match(',^(INTEGER),i', $d)
@@ -1431,7 +1431,7 @@  discard block
 block discarded – undo
1431 1431
 				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1432 1432
 			) {
1433 1433
 				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur);
1434
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1434
+				spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE);
1435 1435
 			}
1436 1436
 			if (
1437 1437
 				preg_match(',^(datetime),i', $d)
@@ -1441,7 +1441,7 @@  discard block
 block discarded – undo
1441 1441
 				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1442 1442
 			) {
1443 1443
 				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur);
1444
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1444
+				spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE);
1445 1445
 			}
1446 1446
 		}
1447 1447
 
@@ -1492,10 +1492,10 @@  discard block
 block discarded – undo
1492 1492
 	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1493 1493
 	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1494 1494
 
1495
-	return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1495
+	return spip_sqlite_query("REPLACE INTO $table (".join(',', array_keys($couples)).') VALUES ('.join(
1496 1496
 		',',
1497 1497
 		$couples
1498
-	) . ')', $serveur);
1498
+	).')', $serveur);
1499 1499
 }
1500 1500
 
1501 1501
 
@@ -1581,7 +1581,7 @@  discard block
 block discarded – undo
1581 1581
 		. _sqlite_calculer_expression('WHERE', $where)
1582 1582
 		. _sqlite_calculer_expression('GROUP BY', $groupby, ',')
1583 1583
 		. _sqlite_calculer_expression('HAVING', $having)
1584
-		. ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '')
1584
+		. ($orderby ? ("\nORDER BY "._sqlite_calculer_order($orderby)) : '')
1585 1585
 		. ($limit ? "\nLIMIT $limit" : '');
1586 1586
 
1587 1587
 	// dans un select, on doit renvoyer la requête en cas d'erreur
@@ -1619,10 +1619,10 @@  discard block
 block discarded – undo
1619 1619
 	// interdire la creation d'une nouvelle base,
1620 1620
 	// sauf si on est dans l'installation
1621 1621
 	if (
1622
-		!is_file($f = _DIR_DB . $db . '.sqlite')
1622
+		!is_file($f = _DIR_DB.$db.'.sqlite')
1623 1623
 		&& (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)
1624 1624
 	) {
1625
-		spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS);
1625
+		spip_log("Il est interdit de creer la base $db", 'sqlite.'._LOG_HS);
1626 1626
 
1627 1627
 		return false;
1628 1628
 	}
@@ -1631,12 +1631,12 @@  discard block
 block discarded – undo
1631 1631
 	// avec les identifiants connus
1632 1632
 	$index = $serveur ? $serveur : 0;
1633 1633
 
1634
-	if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) {
1634
+	if ($link = spip_connect_db('', '', '', '', '@selectdb@'.$db, $serveur, '', '')) {
1635 1635
 		if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
1636 1636
 			return $db;
1637 1637
 		}
1638 1638
 	} else {
1639
-		spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS);
1639
+		spip_log("Impossible de selectionner la base $db", 'sqlite.'._LOG_HS);
1640 1640
 
1641 1641
 		return false;
1642 1642
 	}
@@ -1687,7 +1687,7 @@  discard block
 block discarded – undo
1687 1687
 	$match = "^$match$";
1688 1688
 
1689 1689
 	return spip_sqlite_query(
1690
-		"SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match),
1690
+		"SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP "._q($match),
1691 1691
 		$serveur,
1692 1692
 		$requeter
1693 1693
 	);
@@ -1778,7 +1778,7 @@  discard block
 block discarded – undo
1778 1778
 				// s'il y a une parenthèse fermante dans la clé
1779 1779
 				// ou dans la définition sans qu'il n'y ait une ouverture avant
1780 1780
 				if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1781
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1781
+					$fields[$k_precedent] .= ','.$k.' '.$def;
1782 1782
 					continue;
1783 1783
 				}
1784 1784
 
@@ -1813,13 +1813,13 @@  discard block
 block discarded – undo
1813 1813
 				. 'ORDER BY substr(type,2,1), name';
1814 1814
 			$a = spip_sqlite_query($query, $serveur, $requeter);
1815 1815
 			while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1816
-				$key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1816
+				$key = str_replace($nom_table.'_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1817 1817
 				$keytype = 'KEY';
1818 1818
 				if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1819 1819
 					$keytype = 'UNIQUE KEY';
1820 1820
 				}
1821 1821
 				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1822
-				$keys[$keytype . ' ' . $key] = $colonnes;
1822
+				$keys[$keytype.' '.$key] = $colonnes;
1823 1823
 			}
1824 1824
 		}
1825 1825
 	} // c'est une vue, on liste les champs disponibles simplement
@@ -1866,7 +1866,7 @@  discard block
 block discarded – undo
1866 1866
 
1867 1867
 	$set = [];
1868 1868
 	foreach ($champs as $champ => $val) {
1869
-		$set[] = $champ . "=$val";
1869
+		$set[] = $champ."=$val";
1870 1870
 	}
1871 1871
 	if (!empty($set)) {
1872 1872
 		return spip_sqlite_query(
@@ -1919,7 +1919,7 @@  discard block
 block discarded – undo
1919 1919
 
1920 1920
 	$set = [];
1921 1921
 	foreach ($champs as $champ => $val) {
1922
-		$set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1922
+		$set[$champ] = $champ.'='._sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1923 1923
 	}
1924 1924
 
1925 1925
 	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
@@ -1927,7 +1927,7 @@  discard block
 block discarded – undo
1927 1927
 	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1928 1928
 	foreach ($maj as $champ => $val) {
1929 1929
 		if (!isset($set[$champ])) {
1930
-			$set[$champ] = $champ . '=' . $val;
1930
+			$set[$champ] = $champ.'='.$val;
1931 1931
 		}
1932 1932
 	}
1933 1933
 
@@ -1956,7 +1956,7 @@  discard block
 block discarded – undo
1956 1956
  */
1957 1957
 function _sqlite_init() {
1958 1958
 	if (!defined('_DIR_DB')) {
1959
-		define('_DIR_DB', _DIR_ETC . 'bases/');
1959
+		define('_DIR_DB', _DIR_ETC.'bases/');
1960 1960
 	}
1961 1961
 	if (!defined('_SQLITE_CHMOD')) {
1962 1962
 		define('_SQLITE_CHMOD', _SPIP_CHMOD);
@@ -2063,9 +2063,9 @@  discard block
 block discarded – undo
2063 2063
 	}
2064 2064
 
2065 2065
 	// echapper les ' en ''
2066
-	spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2066
+	spip_log('Pas de methode ->quote pour echapper', 'sqlite.'._LOG_INFO_IMPORTANTE);
2067 2067
 
2068
-	return ("'" . str_replace("'", "''", $v) . "'");
2068
+	return ("'".str_replace("'", "''", $v)."'");
2069 2069
 }
2070 2070
 
2071 2071
 
@@ -2088,12 +2088,12 @@  discard block
 block discarded – undo
2088 2088
 	$exp = "\n$expression ";
2089 2089
 
2090 2090
 	if (!is_array($v)) {
2091
-		return $exp . $v;
2091
+		return $exp.$v;
2092 2092
 	} else {
2093 2093
 		if (strtoupper($join) === 'AND') {
2094
-			return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2094
+			return $exp.join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2095 2095
 		} else {
2096
-			return $exp . join($join, $v);
2096
+			return $exp.join($join, $v);
2097 2097
 		}
2098 2098
 	}
2099 2099
 }
@@ -2127,17 +2127,17 @@  discard block
 block discarded – undo
2127 2127
 		if (substr($k, -1) == '@') {
2128 2128
 			// c'est une jointure qui se refere au from precedent
2129 2129
 			// pas de virgule
2130
-			$res .= '  ' . $v;
2130
+			$res .= '  '.$v;
2131 2131
 		} else {
2132 2132
 			if (!is_numeric($k)) {
2133 2133
 				$p = strpos($v, ' ');
2134 2134
 				if ($p) {
2135
-					$v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2135
+					$v = substr($v, 0, $p)." AS '$k'".substr($v, $p);
2136 2136
 				} else {
2137 2137
 					$v .= " AS '$k'";
2138 2138
 				}
2139 2139
 			}
2140
-			$res .= ', ' . $v;
2140
+			$res .= ', '.$v;
2141 2141
 		}
2142 2142
 	}
2143 2143
 
@@ -2275,13 +2275,13 @@  discard block
 block discarded – undo
2275 2275
 
2276 2276
 	$def_origine = sql_showtable($table_origine, false, $serveur);
2277 2277
 	if (!$def_origine or !isset($def_origine['field'])) {
2278
-		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2278
+		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite'._LOG_ERREUR);
2279 2279
 
2280 2280
 		return false;
2281 2281
 	}
2282 2282
 
2283 2283
 
2284
-	$table_tmp = $table_origine . '_tmp';
2284
+	$table_tmp = $table_origine.'_tmp';
2285 2285
 
2286 2286
 	// 1) creer une table temporaire avec les modifications
2287 2287
 	// - DROP : suppression de la colonne
@@ -2368,7 +2368,7 @@  discard block
 block discarded – undo
2368 2368
 		} else {
2369 2369
 			// enlever KEY
2370 2370
 			$k = substr($k, 4);
2371
-			$queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2371
+			$queries[] = "CREATE INDEX $table_destination"."_$k ON $table_destination ($v)";
2372 2372
 		}
2373 2373
 	}
2374 2374
 
@@ -2379,7 +2379,7 @@  discard block
 block discarded – undo
2379 2379
 		foreach ($queries as $q) {
2380 2380
 			if (!spip_sqlite::executer_requete($q, $serveur)) {
2381 2381
 				spip_log('SQLite : ALTER TABLE table :'
2382
-					. " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2382
+					. " Erreur a l'execution de la requete : $q", 'sqlite.'._LOG_ERREUR);
2383 2383
 				spip_sqlite::annuler_transaction($serveur);
2384 2384
 
2385 2385
 				return false;
@@ -2468,27 +2468,27 @@  discard block
 block discarded – undo
2468 2468
 	$enum = '(\s*\([^\)]*\))?';
2469 2469
 
2470 2470
 	$remplace = [
2471
-		'/enum' . $enum . '/is' => 'VARCHAR(255)',
2471
+		'/enum'.$enum.'/is' => 'VARCHAR(255)',
2472 2472
 		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2473 2473
 		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2474 2474
 		'/auto_increment/is' => '',
2475 2475
 		'/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2476 2476
 		'/(timestamp .* )ON .*$/is' => '\\1',
2477 2477
 		'/character set \w+/is' => '',
2478
-		'/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2478
+		'/((big|small|medium|tiny)?int(eger)?)'.$num.'\s*unsigned/is' => '\\1 UNSIGNED',
2479 2479
 		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2480
-		'/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2480
+		'/((char|varchar)'.$num.'\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2481 2481
 		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2482 2482
 		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2483 2483
 	];
2484 2484
 
2485 2485
 	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2486 2486
 	$remplace_autocinc = [
2487
-		'/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2487
+		'/(big|small|medium|tiny)?int(eger)?'.$num.'/is' => 'INTEGER'
2488 2488
 	];
2489 2489
 	// pour les int non autoincrement, il faut un DEFAULT
2490 2490
 	$remplace_nonautocinc = [
2491
-		'/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2491
+		'/((big|small|medium|tiny)?int(eger)?'.$num.'\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2492 2492
 	];
2493 2493
 
2494 2494
 	if (is_string($query)) {
@@ -2530,7 +2530,7 @@  discard block
 block discarded – undo
2530 2530
 		return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2531 2531
 	}
2532 2532
 	if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2533
-		return $champ . ' COLLATE NOCASE';
2533
+		return $champ.' COLLATE NOCASE';
2534 2534
 	}
2535 2535
 
2536 2536
 	return $champ;
@@ -2620,14 +2620,14 @@  discard block
 block discarded – undo
2620 2620
 		} else {
2621 2621
 			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2622 2622
 			$a = spip_sqlite_showtable($nom, $serveur);
2623
-			if (isset($a['key']['KEY ' . $nom])) {
2623
+			if (isset($a['key']['KEY '.$nom])) {
2624 2624
 				return true;
2625 2625
 			}
2626 2626
 		}
2627 2627
 	}
2628 2628
 
2629 2629
 	$temporary = $temporary ? ' TEMPORARY' : '';
2630
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2630
+	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query".($keys ? ",$keys" : '').")\n";
2631 2631
 
2632 2632
 	return $q;
2633 2633
 }
@@ -2848,7 +2848,7 @@  discard block
 block discarded – undo
2848 2848
 		$this->serveur = strtolower($serveur);
2849 2849
 
2850 2850
 		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2851
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2851
+			spip_log('Aucune connexion sqlite (link)', 'sqlite.'._LOG_ERREUR);
2852 2852
 
2853 2853
 			return false;
2854 2854
 		}
@@ -2894,7 +2894,7 @@  discard block
 block discarded – undo
2894 2894
 			try {
2895 2895
 				$r = $this->link->query($query);
2896 2896
 			} catch (\PDOException $e) {
2897
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2897
+				spip_log('PDOException: '.$e->getMessage(), 'sqlite.'._LOG_DEBUG);
2898 2898
 				$r = false;
2899 2899
 			}
2900 2900
 			// sauvegarde de la requete (elle y est deja dans $r->queryString)
@@ -2915,11 +2915,11 @@  discard block
 block discarded – undo
2915 2915
 
2916 2916
 			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2917 2917
 			if ($e and $e instanceof \PDOException) {
2918
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2919
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2918
+				$err = strip_tags($e->getMessage()).' in '.$e->getFile().' line '.$e->getLine();
2919
+				spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2920 2920
 			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2921
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2922
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2921
+				$err = strip_tags($err['message']).' in '.$err['file'].' line '.$err['line'];
2922
+				spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2923 2923
 			} else {
2924 2924
 				$err = '';
2925 2925
 			}
@@ -2997,15 +2997,15 @@  discard block
 block discarded – undo
2997 2997
 		// Correction Create Database
2998 2998
 		// Create Database -> requete ignoree
2999 2999
 		if (strpos($this->query, 'CREATE DATABASE') === 0) {
3000
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3000
+			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.'._LOG_AVERTISSEMENT);
3001 3001
 			$this->query = 'SELECT 1';
3002 3002
 		}
3003 3003
 
3004 3004
 		// Correction Insert Ignore
3005 3005
 		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3006 3006
 		if (strpos($this->query, 'INSERT IGNORE') === 0) {
3007
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3008
-			$this->query = 'INSERT ' . substr($this->query, '13');
3007
+			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.'._LOG_DEBUG);
3008
+			$this->query = 'INSERT '.substr($this->query, '13');
3009 3009
 		}
3010 3010
 
3011 3011
 		// Correction des dates avec INTERVAL
@@ -3033,7 +3033,7 @@  discard block
 block discarded – undo
3033 3033
 		if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3034 3034
 			spip_log(
3035 3035
 				"'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3036
-				'sqlite.' . _LOG_ERREUR
3036
+				'sqlite.'._LOG_ERREUR
3037 3037
 			);
3038 3038
 			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3039 3039
 		}
@@ -3056,8 +3056,8 @@  discard block
 block discarded – undo
3056 3056
 		} else {
3057 3057
 			$suite = '';
3058 3058
 		}
3059
-		$pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3060
-		$this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3059
+		$pref = ($this->prefixe) ? $this->prefixe.'_' : '';
3060
+		$this->query = preg_replace('/([,\s])spip_/S', '\1'.$pref, $this->query).$suite;
3061 3061
 
3062 3062
 		// Correction zero AS x
3063 3063
 		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
Please login to merge, or discard this patch.